package com.sqx.modules.reconciliation.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sqx.modules.reconciliation.model.CashOutRecordBO;
import com.sqx.modules.reconciliation.model.IndentOrderDataBO;
import com.sqx.modules.reconciliation.model.OrderDataBO;
import com.sqx.modules.reconciliation.model.PlatformBill;
import com.sqx.modules.reconciliation.model.PlatformBillDto;
import com.sqx.modules.reconciliation.model.RiderBillVo;
import com.sqx.modules.reconciliation.model.ShopBillVo;
import com.sqx.modules.reconciliation.model.ShopMoneyRecordBO;
import com.sqx.modules.reconciliation.model.SysGiftRecordBO;
import com.sqx.modules.reconciliation.model.UserMoneyBalanceBO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 对账管理表 Mapper 接口
 * </p>
 *
 * @author ceshi
 * @since 2025-02-27
 */
@Mapper
public interface PlatformBillMapper extends BaseMapper<PlatformBill> {

    Integer insertPlatformBill(@Param("dayId") String dayId,@Param("startTime") String startTime, @Param("endTime")String endTime, @Param("now") String now);

    Integer updatePlatFormStartMoney(@Param("dayId") String dayId);

    Integer insertTotalPlatformBill(@Param("dayId") String dayId);

    IPage<PlatformBill> platformBill(@Param("page")Page<PlatformBill> pages, @Param("params")PlatformBillDto platformBillDto);

    IPage<ShopBillVo> shopBill(@Param("page")Page<ShopBillVo> pages, @Param("params")PlatformBillDto platformBillDto);

    IPage<RiderBillVo> riderBill(@Param("page")Page<RiderBillVo> pages, @Param("params")PlatformBillDto platformBillDto);

    List<RiderBillVo> excelRiderBillList(@Param("params") PlatformBillDto query);

    List<ShopBillVo> excelShopBillList(@Param("params") PlatformBillDto query);

    List<PlatformBill> excelPlatformBillList(@Param("params") PlatformBillDto query);

    Integer updateRiderStartMoney(@Param("dayId") String dayId);

    /**
     * 获取指定日期的订单统计数据
     * @param startTime 开始时间
     * @param endTime 截止时间
     * @return 订单数据
     */
    List<OrderDataBO> getOrderData(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 获取指定日期的店铺收入记录
     * @param startTime 开始时间
     * @param endTime 截止时间
     * @return 收入记录
     */
    List<ShopMoneyRecordBO> getShopMoneyRecord(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 获取用户指定日期的提现记录
     *
     * @param startTime 开始时间
     * @param endTime   截止时间
     * @return 提现记录
     */
    List<CashOutRecordBO> getShopCashOutRecord(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 获取用户指定日期的提现记录
     *
     * @param startTime 开始时间
     * @param endTime   截止时间
     * @return 提现记录
     */
    List<CashOutRecordBO> getRiderCashOutRecord(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 获取指定日期的店铺余额记录
     * @param userIds 店铺用户id
     * @return 余额记录
     */
    List<UserMoneyBalanceBO> getUserMoneyBalance(@Param("userIds") List<Long> userIds);

    /**
     * 获取指定日期的跑腿订单数据
     * @param startTime 开始时间
     * @param endTime 截止时间
     * @return 跑腿订单统计数据
     */
    List<IndentOrderDataBO> getIndentOrderData(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 获取用户指定日期的系统赠送、扣减金额
     * @param startTime 开始时间
     * @param endTime 截止时间
     * @param userIds 用户id集合
     * @return 系统赠送、扣减金额记录
     */
    List<SysGiftRecordBO> getSysGiftRecord(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("userIds") List<Long> userIds);
}
