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 com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
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 mergeMemberRetailRangeDetailByYesterday(@Param("detailTableName") String detailTableName,
                                                 @Param("yesterdayDetailTableName") String yesterdayDetailTableName);

    /**
     * 当前网体更新极差秒结表
     */
    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);

    /**
     * 根据会员ID查询会员数据
     */
    List<CuMemberRetailRangeExt> listCuMemberRetailRange(@Param("tableName") String tableName, @Param("pkMemberList") List<Long> pkMemberList);

    /**
     * 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
     */
    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);

    /**
     * 批量会员日结明细数据
     */
    void mergeCuMemberRetailDetail(@Param("rangeDetailTableName") String rangeDetailTableName, @Param("cuMemberDetailList") List<?> cuMemberDetailList);


    /**
     * 向上查找所有parentID
     *
     * @param pkMember
     * @return
     */
    List<CuMemberExt> findParentMemberList(@Param("pkMember") Long pkMember);


    /**
     * 更新自己秒结
     *
     * @param tableName
     * @param orderExt
     * @param cuMember
     */
    void updateMemberRetailSecondRangeSelf(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("cuMember") CuMember cuMember, @Param("updateType") Integer updateType, @Param("symbol") String symbol);

    /**
     * 更新上级秒结
     *
     * @param tableName
     * @param orderExt
     * @param memberList
     */
    void updateMemberRetailSecondRangeParent(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("memberList") List<CuMemberExt> memberList, @Param("updateType") Integer updateType, @Param("symbol") String symbol);


    void initMemberRetailSecondRange(@Param("tableName") String tableName, @Param("member") CuMemberExt memberList);
}
