package com.czg.service.market.mapper;

import com.czg.account.vo.HandoverCategoryListVo;
import com.czg.account.vo.HandoverProductListVo;
import com.czg.order.entity.OrderInfo;
import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单表 映射层。
 *
 * @author ww
 * @since 2025-02-13
 */
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
    /**
     * 交班现金支付统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 现金支付总额
     */
    BigDecimal getHandoverCashAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班微信支付统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 现金支付总额
     */
    BigDecimal getHandoverWechatAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班支付宝支付统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 支付宝支付总额
     */
    BigDecimal getHandoverAlipayAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班VIP支付统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return VIP支付总额
     */
    BigDecimal getHandoverVipPayAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班VIP充值统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return VIP充值总额
     */
    BigDecimal getHandoverVipChargeAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班快捷支付统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 快捷支付总额
     */
    BigDecimal getHandoverQuickPayAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班退款统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 退款总额
     */
    BigDecimal getHandoverRefundAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班挂账统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 挂账总额
     */
    BigDecimal getHandoverCreditAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班营业额统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 营业额
     */
    BigDecimal getHandoverTotalAmount(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班订单数统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 交班订单数
     */
    int getHandoverOrderNum(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班售出商品明细
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 交班售出商品明细
     */
    List<HandoverProductListVo> getHandoverDetailList(Long shopId, String loginTime, String handoverTime);

    /**
     * 交班售出商品分类统计
     *
     * @param shopId       店铺id
     * @param loginTime    上岗时间
     * @param handoverTime 交班时间
     * @return 售出商品分类统计
     */
    List<HandoverCategoryListVo> getHandoverCategoryList(Long shopId, String loginTime, String handoverTime);

    int decrMoney(@Param("id") Long id, @Param("amount") BigDecimal amount);

    int updatePayOrderId(@Param("orderId") Long orderId, @Param("paymentId") Long paymentId, @Param("payType") String payType, @Param("remark") String remark);

  }
