package com.trade.service.trade.exportrebate.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.trade.common.core.page.GridPage;
import com.trade.service.trade.exportrebate.domain.TaxRebateExportDetails;
import com.trade.service.trade.exportrebate.dto.*;
import com.trade.service.trade.exportrebate.dto.search.ExportTaxRebateDetailsForCSearchDto;
import com.trade.service.trade.exportrebate.dto.search.TaxRebateExportAbstractInfoSearchDto;
import com.trade.service.trade.exportrebate.dto.search.TaxRebateSearchDto;
import com.trade.service.trade.exportrebate.dto.search.TaxRebateSummarySearchDto;

import java.util.Date;
import java.util.List;

/**
 * 出口退税-出口明细表基础服务接口
 *
 * @author hlb
 * @since 2024-10-22 15:14:59
 */
public interface TaxRebateExportDetailsBaseService extends IService<TaxRebateExportDetails> {

    /**
     * 批量更新出口退税明细的支付状态和支付日期
     * 
     * @param ids
     * @param paymentStatus
     * @param paymentDate
     */
    void batchUpdatePaymentStatusAndPaymentDate(List<Long> ids, String paymentStatus, Date paymentDate);

    /**
     * 根据条件分页查询退税明细汇总(自营模式下)
     * 
     * @param search
     * @return
     */
    GridPage<ExportTaxRebateStatisticDto> getPagesBySearch(TaxRebateSearchDto search);

    /**
     * 根据条件分页查询退税明细(自营模式下)
     * @param search
     * @return
     */
    List<TaxRebateExportDetails> getDetailsByCSearch(ExportTaxRebateDetailsForCSearchDto search);

    /**
     * 出口退税明细合计数据查询（代理模式下）
     * 
     * @param search
     * @return
     */
    TaxRebateTotalDataDto getTaxRebateTotalDataBySearch(TaxRebateSummarySearchDto search);

    /**
     * 出口退税明细汇总数据查询（代理模式下）
     * 
     * @param search
     * @return
     */
    GridPage<TaxRebateSummaryDataDto> getTaxRebateSummaryDataPagesBySearch(TaxRebateSummarySearchDto search);

    /**
     * 出口退税出口明细摘要信息分页查询（代理模式下）
     * 
     * @param search
     * @return
     */
    GridPage<TaxRebateExportAbstractInfo> getTaxRebateExportAbstractInfoPagesBySearch(
            TaxRebateExportAbstractInfoSearchDto search);

    List<TaxRebateExportDetails> getByCorrelationNos(List<String> correlationNos);

    List<TaxRebateExportDetails> getByDeclarationSerialNos(List<String> declarationSerialNos);

    /**
     * 获取可支付的出口退税明细(自营模式下)
     * 
     * @return
     */
    GridPage<TaxRebateExportDetails> getPayableTaxRebateExportDetailsForSelfExportUser(int pageNum, int pageSize);
}
