package com.hzs.bonus.base.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.vertex.BdVertexBonus;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 会员 Mapper 接口
 */
public interface CuMemberMapper extends BaseMapper<CuMember> {

    /**
     * 查询登录会员以及状态
     *
     * @param memberCode 会员编号
     * @param pkMember   会员主键
     * @return
     */
    CuMemberExt queryLoginMember(@Param("memberCode") String memberCode, @Param("pkMember") Long pkMember);

    /**
     * 更新会员奖衔根据临时表
     */
    int updateCuMemberRetailAwardsByPeriod(@Param("period") Integer period, @Param("awardType") Integer awardType);

    /**
     * 更新会员最高奖衔
     *
     * @param period
     * @param awardType
     * @return
     */
    int updateCuMemberMaxAwardsByPeriod(@Param("period") Integer period, @Param("awardType") Integer awardType);

    /**
     * 更新会员奖衔根据临时表
     *
     * @param cuMemberAwardsList 修改奖衔的会员
     */
    int updateCuMemberRetailRangeByList(@Param("cuMemberAwardsList") List<CuMemberAwards> cuMemberAwardsList,
                                        @Param("period") Integer period,
                                        @Param("awardType") Integer awardType);

    /**
     * 更新会员奖衔根据临时表
     *
     * @param cuMemberGradeList 修改奖衔的会员
     */
    int updateCuMemberMinGradeByList(@Param("cuMemberGradeList") List<CuMemberGrade> cuMemberGradeList, @Param("period") Integer period);

    /**
     * 更新会员的等级
     */
    Integer updateCuMemberGrade(@Param("period") Integer period);

    /**
     * 查询会员等级
     */
    void updateCuMemberLevel(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 更新会员的等级（会员表）
     */
    Integer updateCuMemberGradeByList(@Param("cuMemberGradeList") List<CuMemberGrade> cuMemberGradeList, @Param("period") Integer period);

    /**
     * 更新会员奖衔根据临时表
     */
    void updateBackCuMemberRetailRangeAward(@Param("period") Integer period, @Param("awardType") Integer awardType);

    /**
     * 更新会员奖衔根据临时表
     */
    void updateCuMemberRetailRangeAwardByDate(@Param("settleDate") Date settleDate, @Param("awardType") Integer awardType);

    /**
     * 初始化会员奖衔
     */
    void updateCuMemberRetailRangeInitAward();

    /**
     * 初始化会员V5奖衔
     */
    void updateCuMemberRetailRangeInitV5Award();

    /**
     * 查询可以分享的会员人数
     */
    List<CuMember> queryCuMemberShareTotal(Integer pkCountry);

    /**
     * 查询体系奖项列表
     *
     * @param pkMember
     * @return
     */
    List<BdVertexBonus> listVertexBonus(@Param("pkMember") Long pkMember);

}
