package com.jsowell.pile.service;

import com.jsowell.common.core.page.PageResponse;
import com.jsowell.pile.domain.SettleOrderReport;
import com.jsowell.pile.dto.GetClearingBillDTO;
import com.jsowell.pile.dto.MerchantOrderReportDTO;
import com.jsowell.pile.dto.SettleOrderReportDTO;
import com.jsowell.pile.vo.web.MerchantOrderReportVO;
import com.jsowell.pile.vo.web.PileStationVO;

import java.util.List;
import java.util.Map;

/**
 * 结算订单报Service接口
 *
 * @author jsowell
 * @date 2023-06-05
 */
public interface SettleOrderReportService {
    /**
     * 查询结算订单报
     *
     * @param id 结算订单报主键
     * @return 结算订单报
     */
    public SettleOrderReport selectSettleOrderReportById(Long id);

    SettleOrderReport selectByStationIdAndDate(String stationId, String date);

    PageResponse selectSettleOrderReportDetail(SettleOrderReportDTO dto);

    List<SettleOrderReport> selectByMerchantIdAndDate(String merchantId, String date);

    /**
     * 查询结算订单报列表
     *
     * @param settleOrderReport 结算订单报
     * @return 结算订单报集合
     */
    public List<SettleOrderReport> selectSettleOrderReportList(SettleOrderReport settleOrderReport);

    /**
     * 新增结算订单报
     *
     * @param settleOrderReport 结算订单报
     * @return 结果
     */
    public int insertSettleOrderReport(SettleOrderReport settleOrderReport);

    /**
     * 修改结算订单报
     *
     * @param settleOrderReport 结算订单报
     * @return 结果
     */
    public int updateSettleOrderReport(SettleOrderReport settleOrderReport);

    /**
     * 批量删除结算订单报
     *
     * @param ids 需要删除的结算订单报主键集合
     * @return 结果
     */
    public int deleteSettleOrderReportByIds(Long[] ids);

    /**
     * 删除结算订单报信息
     *
     * @param id 结算订单报主键
     * @return 结果
     */
    public int deleteSettleOrderReportById(Long id);

    /**
     * 根据运营商id查询订单报表
     * @param dto
     * @return
     */
    MerchantOrderReportVO getMerchantOrderReport(MerchantOrderReportDTO dto);

    MerchantOrderReportVO getMerchantOrderReportV2(MerchantOrderReportDTO dto);

    int deleteByPrimaryKey(Integer id);

    // int insert(SettleOrderReport record);

    int insertOrUpdate(SettleOrderReport record);

    int insertOrUpdateSelective(SettleOrderReport record);

    int insertSelective(SettleOrderReport record);

    SettleOrderReport selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(SettleOrderReport record);

    int updateByPrimaryKey(SettleOrderReport record);

    int updateBatch(List<SettleOrderReport> list);

    int updateBatchSelective(List<SettleOrderReport> list);

    int batchInsert(List<SettleOrderReport> list);

    List<SettleOrderReport> queryOrderReport(List<String> stationIdList, String startTime, String endTime);

    /**
     * 计算站点订单报表
     *
     * @param stationId 站点id
     * @param tradeDate 交易日期
     */
    void generateDailyOrderReports(String stationId, String tradeDate);

    /**
     * 计算站点订单报表
     *
     * @param stationInfo 站点信息
     * @param tradeDate 交易日期
     */
    void generateDailyOrderReports(PileStationVO stationInfo, String tradeDate);

    Map<String, Object> queryUndividedOrder(SettleOrderReportDTO dto);

    /**
     * 获取运营商清分账单列表
     * @param dto
     * @return
     */
    public PageResponse getMerchantClearingBillList(GetClearingBillDTO dto);

}
