package com.hzs.bonus.achieve.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import org.apache.ibatis.annotations.Param;

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

/**
 * Mapper 接口
 */
public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRange> {

    /**
     * 当天的数据更新为0
     */
    void mergeMemberRetailRangeInit(@Param("rangeTableName") String rangeTableName);

    /**
     * 将昨天的业绩信息迁移到今天
     */
    void mergeMemberRetailRangeByYesterday(@Param("rangeTableName") String rangeTableName,
                                           @Param("yesterdayRangeTableName") String yesterdayRangeTableName,
                                           @Param("isSameMonth") Integer isSameMonth);

    /**
     * 更新区域
     */
    void mergeMemberRetailRegion(@Param("rangeTableName") String rangeTableName, @Param("settleDate") Date settleDate);

    /**
     * 根据订单，查询出网体中记录的会员数据，推荐人、安置人
     *
     * @param rangeTableName 结算表
     * @param memberPkList   需要查询的会员列表
     */
    List<CuMemberRetailRangeExt> batchQueryMemberRetailRangeByMemberPk(@Param("rangeTableName") String rangeTableName,
                                                                       @Param("memberPkList") List<?> memberPkList);

    /**
     * 查询出有奖衔的会员
     *
     * @param rangeTableName 结算表
     */
    List<CuMemberRetailRangeExt> batchQueryMemberRetailRangeByAwards(@Param("rangeTableName") String rangeTableName);

    /**
     * 查询伞下会员，用于计算小区
     */
    List<CuMemberRetailRangeExt> batchQueryMemberRetailRangeByParent(@Param("rangeTableName") String rangeTableName,
                                                                     @Param("memberRetailRangeExtList") List<CuMemberRetailRangeExt> memberRetailRangeExtList);

    /**
     * 查询有区域的会员
     */
    List<CuMemberRetailRangeExt> batchQueryMemberRetailRangeByCounty(@Param("rangeTableName") String rangeTableName);

    /**
     * 查询有区域的会员
     */
    List<CuMemberRetailRangeExt> batchQueryMemberRetailSecondRangeByCounty(@Param("rangeTableName") String rangeTableName, @Param("secondRangeTableName") String secondRangeTableName, @Param("county") Integer county);

    /**
     * 当前网体更新极差秒结表
     */
    void mergeMemberSecondRetailRangeByRange(@Param("secondRangeTableName") String secondRangeTableName,
                                             @Param("pkMember") Long pkMember);

    /**
     * 昨天的结算表更新极差秒结状态
     */
    void mergeMemberSecondRetailRangeByRangeEnable(@Param("rangeTableName") String rangeTableName,
                                                   @Param("secondRangeTableName") String secondRangeTableName,
                                                   @Param("pkMember") Long pkMember);

    /**
     * 更新购买订单的等级
     */
    void mergeMemberRetailGradeByMember(@Param("rangeTableName") String rangeTableName, @Param("pkMember") Long pkMember, @Param("isToday") Integer isToday);

    /**
     * 根据会员查询会员上的所有网体
     */
    List<CuMemberRetailRangeExt> queryCuMemberRetailRangeParent(@Param("tableName") String tableName, @Param("saOrderExtList") List<?> saOrderExtList);

    /**
     * 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
     */
    List<CuMemberRetailRangeExt> queryCuMemberRetailRangeExtByParent(@Param("tableName") String tableName, @Param("pkParent") Long pkParent);

    /**
     * 查询推荐人伞下满足
     */
    List<CuMemberRetailRangeExt> queryCuMemberRetailRangeEnoughAchieve(@Param("tableName") String tableName, @Param("pkParent") Long pkParent, @Param("achievePv") BigDecimal achievePv);

    /**
     * 根据会员查询会员上的所有网体, 按照pkParent作为key,查询极差秒接表
     */
    List<CuMemberRetailRangeExt> queryCuMemberSecondRangeParent(@Param("rangeTableName") String rangeTableName,
                                                                @Param("secondTableName") String secondTableName,
                                                                @Param("pkMember") Long pkMember);

    /**
     * 秒结：推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
     */
    List<CuMemberRetailRangeExt> queryCuMemberSecondRangeExtByParent(@Param("rangeTableName") String rangeTableName, @Param("secondTableName") String secondTableName, @Param("pkMember") Long pkMember);

    /**
     * 更新新零售极差秒接表
     */
    void mergeCuMemberSecondRange(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);

    /**
     * 批量更新网体
     */
    void mergeCuMemberRetailRangeExt(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);

    /**
     * 更新会员树的累计业绩
     *
     * @param settleTableName 结算日期
     * @param period          树
     */
    void mergeCuMemberRetailRangeBySpecial(@Param("rangeTableName") String settleTableName, @Param("period") Integer period);

    /**
     * 之前有过注水，回退
     */
    void mergeCuMemberRetailBackBoxBySpecial(@Param("rangeTableName") String rangeTableName,
                                             @Param("beforeTableName") String beforeTableName,
                                             @Param("period") Integer period);

    /**
     * 更新会员激活状态
     *
     * @param rangeTableName
     * @param pkMemberList
     * @return
     */
    int updateMemberEnable(@Param("rangeTableName") String rangeTableName, @Param("pkMemberList") List<Long> pkMemberList);

}
