package com.hzs.bonus.account.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.account.CuMemberAccount;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import org.apache.ibatis.annotations.Param;

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

/**
 * 会员账户信息 Mapper 接口
 *
 * @author hzs
 * @since 2022-08-11
 */
public interface CuMemberAccountMapper extends BaseMapper<CuMemberAccount> {

    /**
     * 查询会员账户状态，账户信息
     *
     * @param cuMemberAccount 会员账户条件信息
     * @return: List<CuMemberAccountExt>
     * @Author: sui q
     * @Date: 2022/9/5 11:57
     */
    List<CuMemberAccountExt> queryMemberAccountByCondition(CuMemberAccount cuMemberAccount);


    /**
     * 根据会员编码获取余额
     *
     * @param pkMember    会员编号
     * @param accountType 账户类型
     * @return BigDecimal
     */
    BigDecimal selectBalanceByMemberCode(@Param("pkMember") Long pkMember, @Param("accountType") Integer accountType);

    /**
     * 更新账户余额
     *
     * @param cuMemberAccount 会员账户表
     * @return: Integer
     * @Author: sui q
     * @Date: 2022/9/21 21:42
     */
    Integer updateMemberAccount(CuMemberAccount cuMemberAccount);


    /**
     * 根据国家查询余额与银行卡信息
     *
     * @param pkCountry 国家ID
     * @return List<CuMemberAccountExt>
     */
    List<CuMemberAccountExt> queryMemberAccountByPkCountry(@Param("pkCountry") Integer pkCountry);

    /**
     * 获得更新账户余额 奖金账户、可提现账户、可消费账户
     * 奖金账户 = 可提现账户+可消费账户
     * 奖金账户操作时 ：入的金额 进可消费账户  出的金额 进可提现账户
     * <p>
     * 根据用户batch 批量更新余额
     *
     * @param batch 批次号
     * @param type  操作类型（1：转入、2：转出）
     * @return Boolean
     */
    Boolean updateBatchMemberAccountByPkmember(@Param("batch") String batch, @Param("pkModified") Long pkModified, @Param("type") int type);


    /**
     * 根据用户编号集查询用户账户的全部字段信息
     *
     * @param memberCodes 用户编号
     * @return List<CuMemberAccountExt>
     */
    List<CuMemberAccountExt> queryMemberAccountAllByMemberCodes(@Param(value = "memberCodes") List<String> memberCodes);

    /**
     * 根据用户编号查询用户ID
     *
     * @param memberCodes 用户编号
     * @param pkCountry   国家
     * @return List<Long>
     */
    List<Long> selectPkMembersByMemberCode(@Param("memberCodes") List<String> memberCodes, @Param("pkCountry") Integer pkCountry);

    /**
     * 更新冻结账户信息
     *
     * @param cuMemberAccount
     * @return Integer
     */
    Integer updateFrozenAmountInfo(CuMemberAccountExt cuMemberAccount);

    /**
     * 奖金发放，根据期间发放奖金，更新奖金余额
     *
     * @param startPeriod 期间
     * @return: void
     * @Author: sui q
     * @Date: 2023/3/21 14:12
     */
    void updateMemberAccountGrantByPeriod(@Param("pkCountry") Integer pkCountry, @Param("startPeriod") Integer startPeriod,
                                          @Param("endPeriod") Integer endPeriod);

    /**
     * 奖金可提现，根据期间更新可提现金额，减少可消费金额
     *
     * @param startPeriod 期间
     * @return: void
     * @Author: sui q
     * @Date: 2023/3/21 14:12
     */
    void updateMemberAccountWithdrawalByPeriod(@Param("startPeriod") Integer startPeriod, @Param("endPeriod") Integer endPeriod, @Param("pkCountry") Integer pkCountry);

    /**
     * 根据来源单号查询奖金账号信息
     *
     * @param sourceCode 来源单号
     * @return List<CuMemberAccount>
     */
    List<CuMemberAccount> selectMemberBonusAccountBySourceCode(String sourceCode);

}
