package com.huiju.estateagents.redpack.mapper;

import java.time.LocalDate;
import java.util.List;

import com.huiju.estateagents.excel.redPacket.AccountConsumeRecordExport;
import com.huiju.estateagents.excel.redPacket.AccountPayRecordExport;
import com.huiju.estateagents.excel.redPacket.AccountRefundRecordExport;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.huiju.estateagents.redpack.entity.TaOrgOrder;

/**
 * <p>
 * 组织订单表  Mapper 接口
 * </p>
 *
 * @author fxf
 * @since 2020-06-03
 */
@Mapper
public interface TaOrgOrderMapper extends BaseMapper<TaOrgOrder> {

    /**
     * 充值退款订单
     *
     * @param pg
     * @param orderType
     * @return
     */
    IPage<TaOrgOrder> orderListByRechargeOrRefund(IPage<TaOrgOrder> pg,
                                                  @Param("orderType") String orderType,
                                                  @Param("orgId") Integer orgId,
                                                  @Param("tradeNo") String tradeNo,
                                                  @Param("isOffline") Integer isOffline,
                                                  @Param("tradingStatus") String tradingStatus,
                                                  @Param("startDate") LocalDate startDate,
                                                  @Param("endDate") LocalDate endDate);

    /**
     * 消费订单
     *
     * @param pg
     * @param orderType
     * @param orgId
     * @return
     */
    IPage<TaOrgOrder> orderListByConsume(IPage<TaOrgOrder> pg,
                                         @Param("orderType") String orderType,
                                         @Param("orgId") Integer orgId,
                                         @Param("tradeNo") String tradeNo,
                                         @Param("tradingStatus") String tradingStatus,
                                         @Param("receivePhone") String receivePhone,
                                         @Param("itemType") String itemType,
                                         @Param("startDate") LocalDate startDate,
                                         @Param("endDate") LocalDate endDate);

    /**
     * 获取充值订单列表
     *
     * @param page
     * @param payStartTime
     * @param payEndTime
     * @param orderId
     * @param tradeNo
     * @param wxOrderId
     * @param isOffline
     * @param tradingStatus
     * @param orgId
     * @return
     */
    IPage<TaOrgOrder> listCzOrderByCondition(IPage<TaOrgOrder> page,
                                             @Param("payStartTime") LocalDate payStartTime,
                                             @Param("payEndTime") LocalDate payEndTime,
                                             @Param("orderId") String orderId,
                                             @Param("tradeNo") String tradeNo,
                                             @Param("wxOrderId") String wxOrderId,
                                             @Param("isOffline") Boolean isOffline,
                                             @Param("tradingStatus") String tradingStatus,
                                             @Param("orgId") Integer orgId);

    /**
     * 导出充值订单列表
     *
     * @param payStartTime
     * @param payEndTime
     * @param orderId
     * @param tradeNo
     * @param wxOrderId
     * @param isOffline
     * @param tradingStatus
     * @param orgId
     * @return
     */
    List<AccountPayRecordExport> exportCzOrderByCondition(@Param("payStartTime") LocalDate payStartTime,
                                                          @Param("payEndTime") LocalDate payEndTime,
                                                          @Param("orderId") String orderId,
                                                          @Param("tradeNo") String tradeNo,
                                                          @Param("wxOrderId") String wxOrderId,
                                                          @Param("isOffline") Boolean isOffline,
                                                          @Param("tradingStatus") String tradingStatus,
                                                          @Param("orgId") Integer orgId);

    /**
     * 获取退款订单列表
     *
     * @param page
     * @param refundStartTime
     * @param refundEndTime
     * @param orderId
     * @param auditStatus
     * @param orgId
     * @return
     */
    IPage<TaOrgOrder> listRefundOrderByCondition(IPage<TaOrgOrder> page,
                                                 @Param("refundStartTime") LocalDate refundStartTime,
                                                 @Param("refundEndTime") LocalDate refundEndTime,
                                                 @Param("orderId") String orderId,
                                                 @Param("auditStatus") String auditStatus,
                                                 @Param("orgId") Integer orgId);

    /**
     * 导出退款订单列表
     *
     * @param refundStartTime
     * @param refundEndTime
     * @param orderId
     * @param auditStatus
     * @param orgId
     * @return
     */
    List<AccountRefundRecordExport> exportRefundOrderByCondition(@Param("refundStartTime") LocalDate refundStartTime,
                                                                 @Param("refundEndTime") LocalDate refundEndTime,
                                                                 @Param("orderId") String orderId,
                                                                 @Param("auditStatus") String auditStatus,
                                                                 @Param("orgId") Integer orgId);


    /**
     * 总充值金额
     *
     * @param orgId
     * @return
     */
    Integer countTotalRechargeAmount(@Param("orgId") Integer orgId);

    /**
     * 条件查询红包发送记录
     *
     * @param page
     * @param orderId
     * @param wxOrderId
     * @param tradeNo
     * @param status
     * @param orgId
     * @return
     */
    IPage<TaOrgOrder> listRedPacketRecords(IPage<TaOrgOrder> page,
                                           @Param("phone") String phone,
                                           @Param("activityId") String activityId,
                                           @Param("orderId") String orderId,
                                           @Param("wxOrderId") String wxOrderId,
                                           @Param("tradeNo") String tradeNo,
                                           @Param("status") Integer status,
                                           @Param("orgId") Integer orgId);

    /**
     * 查询消费订单列表
     *
     * @param page
     * @param startTime
     * @param endTime
     * @param orderId
     * @param status
     * @param consumeType
     * @param phone
     * @param orgId
     * @return
     */
    IPage<TaOrgOrder> listConsumeOrderByCondition(IPage<TaOrgOrder> page,
                                                  @Param("startTime") LocalDate startTime,
                                                  @Param("endTime") LocalDate endTime,
                                                  @Param("orderId") String orderId,
                                                  @Param("status") Integer status,
                                                  @Param("consumeType") String consumeType,
                                                  @Param("phone") String phone,
                                                  @Param("orgId") Integer orgId);

    /**
     * 导出消费订单列表
     *
     * @param startTime
     * @param endTime
     * @param orderId
     * @param status
     * @param consumeType
     * @param phone
     * @param orgId
     * @return
     */
    List<AccountConsumeRecordExport> exportConsumeOrderByCondition(@Param("startTime") LocalDate startTime,
                                                                   @Param("endTime") LocalDate endTime,
                                                                   @Param("orderId") String orderId,
                                                                   @Param("status") Integer status,
                                                                   @Param("consumeType") String consumeType,
                                                                   @Param("phone") String phone,
                                                                   @Param("orgId") Integer orgId);
}
