package com.huiju.estateagents.redpack.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.huiju.estateagents.excel.redPacket.AccountConsumeRecordExport;
import com.huiju.estateagents.excel.redPacket.AccountPayRecordExport;
import com.huiju.estateagents.excel.redPacket.AccountRefundRecordExport;
import com.huiju.estateagents.redpack.entity.ConsumeOrder;
import com.huiju.estateagents.redpack.entity.RechargeOrder;
import com.huiju.estateagents.redpack.entity.RefundOrder;
import com.huiju.estateagents.redpack.entity.TaOrgOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <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") String startDate,
                                                  @Param("endDate") String endDate,
                                                  @Param("miniAppName") String miniAppName,
                                                  @Param("auditStatus") String auditStatus,
                                                  @Param("payStartDate") String payStartDate,
                                                  @Param("payEndDate") String payEndDate);

    /**
     * 消费订单
     *
     * @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") String startDate,
                                         @Param("endDate") String endDate,
                                         @Param("miniAppName") String miniAppName);

    /**
     * 充值订单导出
     *
     * @return
     */
    List<RechargeOrder> rechargeListByConditionExport(@Param("itemType") String itemType,
                                                          @Param("tradeNo") String tradeNo,
                                                          @Param("isOffline") Boolean isOffline,
                                                          @Param("tradingStatus") String tradingStatus,
                                                          @Param("startDate") String startDate,
                                                          @Param("endDate") String endDate,
                                                          @Param("miniAppName") String miniAppName,
                                                          @Param("orgId") Integer orgId);

    /**
     * 消费订单导出
     *
     * @return
     */
    List<ConsumeOrder> orderListByConsumeExport(@Param("itemType") String itemType,
                                                @Param("tradeNo") String tradeNo,
                                                @Param("receivePhone") String receivePhone,
                                                @Param("tradingStatus") String tradingStatus,
                                                @Param("startDate") String startDate,
                                                @Param("endDate") String endDate,
                                                @Param("miniAppName") String miniAppName,
                                                @Param("orgId") Integer orgId);

    /**
     * 退款订单导出
     *
     * @return
     */
    List<RefundOrder> orderListByRefundExport(@Param("itemType") String itemType,
                                              @Param("tradeNo") String tradeNo,
                                              @Param("startDate") String startDate,
                                              @Param("endDate") String endDate,
                                              @Param("miniAppName") String miniAppName,
                                              @Param("orgId") Integer orgId,
                                              @Param("auditStatus") String auditStatus);

    /**
     * 获取充值订单列表
     *
     * @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") LocalDateTime payStartTime,
                                             @Param("payEndTime") LocalDateTime 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") LocalDateTime payStartTime,
                                                          @Param("payEndTime") LocalDateTime 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") LocalDateTime refundStartTime,
                                                 @Param("refundEndTime") LocalDateTime refundEndTime,
                                                 @Param("orderId") String orderId,
                                                 @Param("wxOrderId") String wxOrderId,
                                                 @Param("tradeNo") String tradeNo,
                                                 @Param("auditStatus") String auditStatus,
                                                 @Param("orgId") Integer orgId);

    /**
     * 导出退款订单列表
     *
     * @param refundStartTime
     * @param refundEndTime
     * @param orderId
     * @param auditStatus
     * @param orgId
     * @return
     */
    List<AccountRefundRecordExport> exportRefundOrderByCondition(@Param("refundStartTime") LocalDateTime refundStartTime,
                                                                 @Param("refundEndTime") LocalDateTime refundEndTime,
                                                                 @Param("orderId") String orderId,
                                                                 @Param("wxOrderId") String wxOrderId,
                                                                 @Param("tradeNo") String tradeNo,
                                                                 @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("tradingStatus") String tradingStatus,
                                           @Param("orgId") Integer orgId);

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

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


    /**
     * 获取红包发送数据
     *
     * @param targetType
     * @param targetId
     * @param orgId
     * @return
     */
    Map<String, Object> getRedPacketSendInfo(@Param("targetType") String targetType,
                                             @Param("targetId") String targetId,
                                             @Param("orgId") Integer orgId);
}
