package com.hzs.bonus.detail.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.detail.CuMemberAssess;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.bonus.detail.vo.CuMemberAssessVO;

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

/**
 * <p>
 * 会员信息-会员考核记录 服务类
 * </p>
 *
 * @author hzs
 * @since 2022-08-31
 */
public interface ICuMemberAssessService extends IService<CuMemberAssess> {

    /**
     * 每月初，初始化考核数据，根据月底网体数据，先进行奖金计算在进行考核，考核在计算奖金之后
     *
     * @param settleDate 结算日期
     * @param period     结算期间
     * @return: void
     * @Author: sui q
     * @Date: 2022/11/7 13:45
     */
    void initCuMemberAssessData(String settleDate, int period);


    /**
     * 复购考核每月第一考核调用此方法
     *
     * @return: void
     * @Author: sui q
     * @Date: 2022/11/8 11:43
     */
    void calculationCuMemberAssess(Date currentDate);

    /**
     * 重算考核 奖金用、每天的重算复购考核用（复购考核、分红考核）,只重算免考的
     *
     * @param currentDate 哪一天进行重新复购考核，拿昨天的值跟现在的值对比
     * @return: void
     * @Author: sui q
     * @Date: 2022/11/7 11:19
     */
    void retryCalculationAssess(Date currentDate, Boolean flag);

    /**
     * 根据会员主键查询考核结果
     *
     * @param assessTableName       考核表
     * @param period                期间
     * @param assessType            考核类型
     * @param cuMemberSettleExtList 会员列表
     * @return: Map<Long, CuMemberAssess> 会员作为键
     * @Author: sui q
     * @Date: 2022/11/16 19:13
     */
    Map<Long, CuMemberAssess> queryCuMemberAssessByMember(String assessTableName, Integer period, Integer assessType, List<CuMemberSettleExt> cuMemberSettleExtList);

    /**
     * 查询会员分红考核结果，只查询出免考或者考核通过的，用于分红
     * @param tableName 表名
     * @param period 期间
     * @return: List<CuMemberAssess>
     * @Author: sui q
     * @Date: 2022/11/16 19:13
     */
    List<CuMemberAssess> queryCuMemberShareAssess(String tableName, Integer period);

    /**
     * @description: 会员-考核明细列表
     * @author: zhang jing
     * @date: 2023/1/23 10:17
     * @param: [cuMemberAssessVO]
     * @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
     **/
    List<CuMemberAssessVO> selectAssessList(CuMemberAssessVO cuMemberAssessVO,List<Integer> orderTypeList);

    /**
     * @description: 查询会员月度考核（查询列表用）
     * @author: zhang jing
     * @date: 2023/3/14 14:46
     * @param: [cuMemberAssessVO]
     * @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
     **/
    List<CuMemberAssessVO> getMemberAssessMonthList(CuMemberAssessVO cuMemberAssessVO);
    /**
     * @description: 查询会员月度考核（查询积分用）
     * @author: zhang jing
     * @date: 2023/3/14 14:46
     * @param: [cuMemberAssessVO]
     * @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
     **/
    List<CuMemberAssessVO> getMemberAssessMonth(CuMemberAssessVO cuMemberAssessVO);

    /**
     * @description: 查询会员订单考核积分
     * @author: zhang jing
     * @date: 2023/3/14 17:52
     * @param: [cuMemberAssessVO]
     * @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
     **/
    CuMemberAssessVO getOrderAssessList(CuMemberAssessVO cuMemberAssessVO);

    /**
     * @description:
     * @author: zhang jing
     * @date: 2023/4/23 19:44
     * @param: [cuMemberAssessVO]
     * @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
     **/
    List<CuMemberAssessVO> getOrderByAssessList(CuMemberAssessVO cuMemberAssessVO);

    /*
     * @description: 查询满足分红考核的人数，达标人数
     * @author: sui q
     * @date: 2023/7/3 16:51
     * @param: null null
     **/
    List<CuMemberAssess> queryCuMemberAssTotal(String startDate, Integer pkCountry);
}
