package com.hzs.member.account.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.account.CuMemberTrade;
import com.hzs.common.domain.member.account.CuMemberTradeExt;
import com.hzs.member.account.vo.CuMemberTradeVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 会员交易明细 Mapper 接口
 */
public interface CuMemberTradeMapper extends BaseMapper<CuMemberTrade> {

    /**
     * 查询订单的消费记录，含退款的
     *
     * @param pkMember   会员主键
     * @param sourceCode 订单编号
     * @return: List<CuMemberTrade>
     * @Author: sui q
     * @Date: 2022/10/22 21:26
     */
    List<CuMemberTrade> queryCuMemberTrade(@Param("pkMember") Long pkMember, @Param("sourceCode") String sourceCode);


    /**
     * 查询列表信息
     *
     * @param cuMemberTradeVO 交易明细信息
     * @return List<CuMemberTradeExt>
     */
    List<CuMemberTradeExt> selectMemberTradeList(CuMemberTradeVO cuMemberTradeVO);

    /**
     * 根据条件查询提现总金额、余额
     *
     * @param cuMemberTradeVO 交易明细信息
     * @return CuMemberTradeExt
     */
    CuMemberTradeExt selectMemberTradeListCount(CuMemberTradeVO cuMemberTradeVO);

    /**
     * 批量插入流水信息
     *
     * @param cuMemberTrades
     * @return Integer
     */
    Integer batchSaveTradeByMemberCode(@Param("cuMemberTrades") List<CuMemberTrade> cuMemberTrades);

    /**
     * 查询钱包明细（前端）
     *
     * @param cuMemberTradeVO 交易明细
     * @return List<CuMemberTradeExt>
     */
    List<CuMemberTradeExt> selectWattleDetail(CuMemberTradeVO cuMemberTradeVO);

    /**
     * 根据交易编号和交易类型查询交易信息
     *
     * @param tradeCode 交易编号
     * @param tradeType 交易类型
     * @return List<CuMemberTrade>
     */
    List<CuMemberTrade> selectMemberTradeByTradeCodeAndTradeType(@Param("tradeCode") String tradeCode, @Param("tradeType") Integer tradeType);

    /**
     * 根据 来源编号更新交易编号
     *
     * @param cuMemberTradeVO 交易入参
     * @return Integer
     */
    Integer updateSourceCodeByTradeCode(CuMemberTradeVO cuMemberTradeVO);

    /**
     * 查询会员订单产生的最新交易明细
     *
     * @param pkMember      会员
     * @param sourceCode    来源单号
     * @param tradeClassify 交易分类 -- 非必传
     * @return
     */
    List<CuMemberTrade> querySourceCodeLastTrade(@Param("pkMember") Long pkMember,
                                                 @Param("sourceCode") String sourceCode,
                                                 @Param("tradeClassify") Integer tradeClassify);

    /**
     * 根据来源单号查询会员奖金币种的流水信息
     *
     * @param sourceCode 来源单号
     * @return List<CuMemberTrade>
     */
    List<CuMemberTrade> selectMemberTradeBySourceCode(@Param("sourceCode") String sourceCode);

    /**
     * 查询用户交易类型
     *
     * @param pkMember  用户ID
     * @param pkCountry 国家ID
     * @return Integer
     */
    List<Integer> selectTradeType(@Param("pkMember") Long pkMember, @Param("pkCountry") Integer pkCountry);
}
