package com.hzs.report.member.service;

import com.hzs.report.member.vo.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 会员信息-奖衔升级记录 服务类
 *
 * @author hzs
 * @since 2022-08-31
 */
public interface ICuMemberAwardsStatService {

    /**
     * @description: 真实业绩新增奖衔查询
     * @author: zhang jing
     * @date: 2023/8/24 17:56
     * @param: [cuMemberAwardsVO]
     * @return: java.util.List<com.hzs.member.detail.vo.CuMemberAwardsVO>
     **/
    List<CuMemberAwardsStatVO> selectCuMemberAwardsList(CuMemberAwardsStatVO cuMemberAwardsStatVO);

    /**
     * @description: 奖衔晋升列表
     * @author: zhang jing
     * @date: 2024/1/2 10:37
     * @param: [awardPromotionVO]
     * @return: java.util.List<com.hzs.report.member.vo.AwardPromotionVO>
     **/
    List<AwardPromotionVO> awardPromotionList(AwardPromotionVO awardPromotionVO);

    /**
     * @description: 会员业绩数据查询
     * @author: zhang jing
     * @date: 2024/1/4 14:32
     * @param: [memberAchieveVO]
     * @return: java.util.List<com.hzs.report.member.vo.MemberAchieveVO>
     **/
    List<MemberAchieveVO> memberAchieveList(MemberAchieveVO memberAchieveVO);

    /**
     * @description: 个人统计
     * @author: zhang jing
     * @date: 2023/9/1 10:37
     * @param: [personStatVO]
     * @return: java.util.List<com.hzs.report.member.vo.PersonStatVO>
     **/
    List<PersonStatVO> selectPersonStatList(PersonStatVO personStatVO);

    /**
     * @description: 真实奖衔分析
     * @author: zhang jing
     * @date: 2023/8/26 16:01
     * @param: [cuMemberAwardsAnalysisVO]
     * @return: java.util.List<com.hzs.report.member.vo.CuMemberAwardsAnalysisVO>
     **/
    List<CuMemberAwardsAnalysisVO> selectCuMemberAwardsAnalysisList(CuMemberAwardsAnalysisVO cuMemberAwardsAnalysisVO);

    /**
     * @description: 查询会员结算等级升级记录
     * @author: zhang jing
     * @date: 2025/3/3 16:02
     * @param: [cuMemberGradeRecordVO]
     * @return: java.util.List<com.hzs.report.member.vo.CuMemberGradeRecordVO>
     **/
    List<CuMemberGradeRecordVO> querMemberGradeRecordList(CuMemberGradeRecordVO cuMemberGradeRecordVO);

    /**
     * @description: 查询会员左右区累计真实业绩
     * @author: zhang jing
     * @date: 2024/8/20 9:59
     * @param: [cuMemberAwardsAnalysisVO]
     * @return: java.util.List<com.hzs.report.member.vo.CuMemberAwardsAnalysisVO>
     **/
    List<CuMemberAwardsAnalysisVO> selectAwardsAnalysisList(List<CuMemberAwardsAnalysisVO> list);

    /**
     * @description: 查询全部伞下血缘业绩
     * @author: zhang jing
     * @date: 2023/10/14 16:05
     * @param: [bloodList]
     * @return: java.util.List<com.hzs.report.member.vo.BloodRemoveSameVO>
     **/
    List<BloodRemoveSameVO> bloodRemoveSameAllList(BloodRemoveSameVO bloodList,
                                                   String startDate, String endDate,
                                                   List<Integer> orderTypeList,
                                                   List<Integer> pkAwardsList);

    /**
     * @description: 查询会员推荐伞下业绩(历史)
     * @author: zhang jing
     * @date: 2024/5/15 14:03
     * @param: [bloodList, periodEnd, periodSta, achieveTableNameEnd, achieveTableNameSta, settleTableNameSta, settleTableNameEnd, orderType]
     * @return: java.util.List<com.hzs.report.member.vo.BloodRemoveSameVO>
     **/
    List<BloodRemoveSameVO> bloodSameAllListHistory(List<BloodRemoveSameVO> bloodList,
                                                    Integer periodEnd,
                                                    Integer periodSta,
                                                    String achieveTableNameEnd,
                                                    String achieveTableNameSta,
                                                    String settleTableNameSta,
                                                    String settleTableNameEnd,
                                                    Integer orderType

    );

    List<BloodRemoveSameVO> bloodRemoveSameMemberAchieveNew(List<BloodRemoveSameVO> bloodList,
                                                            Integer periodEnd,
                                                            Integer periodSta,
                                                            String achieveTableNameEnd,
                                                            String achieveTableNameSta,
                                                            String settleTableNameSta,
                                                            String settleTableNameEnd,
                                                            Integer orderType,
                                                            Integer pkCountry, List<Integer> pkAwardsList

    );

    /**
     * @description: 查询奖衔业绩
     * @author: zhang jing
     * @date: 2023/10/11 14:05
     * @param: [bloodRemoveSameVO]
     * @return: java.util.List<com.hzs.report.member.vo.BloodRemoveSameVO>
     **/
    List<BloodRemoveSameVO> queryAwardAchieList(BloodRemoveSameVO bloodRemoveSameVO);

    /**
     * @description: 根据奖衔查询会员（历史）
     * @author: zhang jing
     * @date: 2024/5/17 14:15
     * @param: [bloodRemoveSameVO]
     * @return: java.util.List<com.hzs.report.member.vo.BloodRemoveSameVO>
     **/
    List<BloodRemoveSameVO> queryAwardAchieListHistory(BloodRemoveSameVO bloodRemoveSameVO);


    /**
     * @description: 真实奖衔分析详情（穿透页面接口）
     * @author: zhang jing
     * @date: 2023/9/26 14:28
     * @param: [cuMemberAwardsAnalysisVO]
     * @return: java.util.List<com.hzs.report.member.vo.CuMemberAwardsAnalysisVO>
     **/
    List<CuMemberAwardsAnalysisVO> selectCuMemberAwardsAnalysisDetailsList(CuMemberAwardsAnalysisVO cuMemberAwardsAnalysisVO);

    /**
     * @description: 收入明细
     * @author: zhang jing
     * @date: 2023/9/26 15:07
     * @param: [revenueDetailsVO]
     * @return: java.util.List<com.hzs.report.member.vo.RevenueDetailsVO>
     **/
    List<RevenueDetailsVO> selectRevenueDetailsList(RevenueDetailsVO revenueDetailsVO);

    /**
     * @description: 复购bv统计
     * @author: zhang jing
     * @date: 2023/8/29 15:30
     * @param: [repurchasePVStatVO]
     * @return: java.util.List<com.hzs.report.member.vo.RepurchasePVStatVO>
     **/
    List<RepurchasePVStatVO> selectRepurchasePVStatList(RepurchasePVStatVO repurchasePVStatVO);

    /**
     * @description: 商城BV统计
     * @author: zhang jing
     * @date: 2023/8/30 10:53
     * @param: [mallPVStatVO]
     * @return: java.util.List<com.hzs.report.member.vo.RepurchasePVStatVO>
     **/
    List<MallPVStatVO> selectMallPVStatList(MallPVStatVO mallPVStatVO);

    /**
     * @description: 个人统计业绩查询
     * @author: zhang jing
     * @date: 2023/9/4 9:35
     * @param: [perList]
     * @return: java.util.List<com.hzs.report.member.vo.PersonStatVO>
     **/
    List<PersonStatVO> selectPersonPvList(List<PersonStatVO> perList);

    /**
     * @description: 直推统计
     * @author: zhang jing
     * @date: 2023/9/4 11:47
     * @param: [directPushVO]
     * @return: java.util.List<com.hzs.report.member.vo.DirectPushVO>
     **/
    List<DirectPushVO> selectDirectPushStatList(DirectPushVO directPushVO);

    /**
     * @description: 三方直推统计
     * @author: zhang jing
     * @date: 2023/10/25 16:17
     * @param: [directPushVO]
     * @return: java.util.List<com.hzs.report.member.vo.DirectPushVO>
     **/
    List<DirectPushVO> selectThreeDirectPushStatList(DirectPushVO directPushVO);

    /**
     * @description: 直推数据列表
     * @author: zhang jing
     * @date: 2023/12/18 17:15
     * @param: [dpdVO]
     * @return: java.util.List<com.hzs.report.member.vo.DirectPushDataVO>
     **/
    List<DirectPushDataVO> selectDirectPushDataList(DirectPushDataVO dpdVO);

    /**
     * @description: 直推数据列表详情
     * @author: zhang jing
     * @date: 2023/12/20 14:11
     * @param: [dpdVO]
     * @return: java.util.List<com.hzs.report.member.vo.DirectPushDataVO>
     **/
    List<DirectPushDataVO> selectDirectPushDataDetails(DirectPushDataVO dpdVO);


    /**
     * @description: 会员订单分布统计
     * @author: zhang jing
     * @date: 2023/9/20 14:46
     * @param: [orderScatterVO]
     * @return: java.util.List<com.hzs.report.member.vo.OrderScatterVO>
     **/
    List<OrderScatterVO> memberOrderScatter(OrderScatterVO orderScatterVO);

    /**
     * @description: 三方会员订单分布统计
     * @author: zhang jing
     * @date: 2023/10/25 16:31
     * @param: [orderScatterVO]
     * @return: java.util.List<com.hzs.report.member.vo.OrderScatterVO>
     **/
    List<OrderScatterVO> memberThreeOrderScatter(OrderScatterVO orderScatterVO);


    /**
     * @description: 根据奖衔级别查询奖衔
     * @author: zhang jing
     * @date: 2023/10/17 11:15
     * @param: []
     * @return: java.util.List<java.lang.Integer>
     **/
    List<Integer> awardsLevellist(List<Integer> pkAwardsList, Integer pkCountry);

    /**
     * @description: 处理伞下去重查询方法
     * @author: zhang jing
     * @date: 2023/12/6 15:45
     * @param: [bloodRemoveSameVO]
     * @return: java.util.List<com.hzs.report.member.vo.BloodRemoveSameVO>
     **/
    List<BloodRemoveSameVO> bloodRemoveSameList(BloodRemoveSameVO bloodRemoveSameVO);

    /**
     * @description: 伞下去重业绩查询（新）
     * @author: zhang jing
     * @date: 2024/5/23 14:50
     * @param: [bloodRemoveSameVO]
     * @return: java.util.List<com.hzs.report.member.vo.BloodRemoveSameVO>
     **/
    List<BloodRemoveSameVO> bloodRemoveSameListHistoryNew(BloodRemoveSameVO bloodRemoveSameVO);

    /**
     * @description: 安置血缘查询
     * @author: zhang jing
     * @date: 2023/12/6 16:01
     * @param: [resettleBloodVOVO]
     * @return: java.util.List<com.hzs.report.member.vo.ResettleBloodVOVO>
     **/
    List<ResettleBloodVO> resettleBloodList(ResettleBloodVO resettleBloodVO);


    /**
     * @description: 安置血缘查询-左右区人数详情列表
     * @author: zhang jing
     * @date: 2023/12/7 11:38
     * @param: [resettleBloodVO]
     * @return: java.util.List<com.hzs.report.member.vo.ResettleBloodVO>
     **/
    List<ResettleBloodVO> lrMemberDetailsList(ResettleBloodVO resettleBloodVO);

    /**
     * @description: 安置血缘查询-左右区血缘人数详情列表
     * @author: zhang jing
     * @date: 2023/12/7 11:38
     * @param: [resettleBloodVO]
     * @return: java.util.List<com.hzs.report.member.vo.ResettleBloodVO>
     **/
    List<ResettleBloodVO> lrbMemberDetailsList(ResettleBloodVO resettleBloodVO);

    /**
     * @description: 个人复购统计
     * @author: zhang jing
     * @date: 2024/1/25 15:07
     * @param: [prVO]
     * @return: java.util.List<com.hzs.report.member.vo.PersonRepurchaseVO>
     **/
    List<PersonRepurchaseVO> personRepurchaseList(PersonRepurchaseVO prVO);

    /**
     * @description: 安置业绩统计-查询会员
     * @author: zhang jing
     * @date: 2024/1/25 15:36
     * @param: [psVO]
     * @return: java.util.List<com.hzs.report.member.vo.PositStatVO>
     **/
    List<PositStatVO> positStatList(PositStatVO psVO);


    /**
     * @description:安置业绩统计 查询左右区业绩
     * @author: zhang jing
     * @date: 2024/1/26 14:50
     * @param: [psVO]
     * @return: java.util.List<com.hzs.report.member.vo.PositStatVO>
     **/
    List<PositStatVO> positStatAchieve(PositStatVO psVO);

    /**
     * @description: 查询伞下直推产品列表
     * @author: zhang jing
     * @date: 2024/2/23 16:02
     * @param: [ubpVO]
     * @return: java.util.List<com.hzs.report.member.vo.UmbrellaBelowProductVO>
     **/
    List<UmbrellaBelowProductVO> umbrellaBelowProductList(UmbrellaBelowProductVO ubpVO);

    /**
     * @description: 伞下直推产品去重
     * @author: zhang jing
     * @date: 2024/2/24 14:46
     * @param: [ubrVO]
     * @return: java.util.List<com.hzs.report.member.vo.UmbrellaBelowRepeatVO>
     **/
    List<UmbrellaBelowRepeatVO> umbrellaBelowRepeatList(UmbrellaBelowRepeatVO ubrVO);

    /**
     * @description: 伞下直推产品统计
     * @author: zhang jing
     * @date: 2024/2/24 14:46
     * @param: [ubrVO]
     * @return: java.util.List<com.hzs.report.member.vo.UmbrellaBelowRepeatVO>
     **/
    List<StatProductVO> statProductList(StatProductVO sptVO);

    /**
     * @description: 会员户籍数据查询
     * @author: zhang jing
     * @date: 2024/3/11 11:40
     * @param: [ddVO]
     * @return: java.util.List<com.hzs.report.member.vo.DomicileDataVO>
     **/
    List<DomicileDataVO> domicileDataList(DomicileDataVO ddVO);

    /**
     * @description: 地区业绩统计
     * @author: zhang jing
     * @date: 2024/5/6 16:12
     * @param: [areaAchieveStatVO]
     * @return: java.util.List<com.hzs.report.member.vo.OrderScatterVO>
     **/
    List<AreaAchieveStatVO> areaAchieveStat(AreaAchieveStatVO areaAchieveStatVO);

    /**
     * @description: 系统业绩统计
     * @author: zhang jing
     * @date: 2024/5/6 16:12
     * @param: [areaAchieveStatVO]
     * @return: java.util.List<com.hzs.report.member.vo.OrderScatterVO>
     **/
    List<VertexAchieveStatVO> vertexAchieveStat(VertexAchieveStatVO vertexAchieveStatVO);

    /**
     * @description: 导出地区业绩
     * @author: zhang jing
     * @date: 2024/5/20 14:58
     * @param: [response, fileName, dataList]
     * @return: void
     **/
    void exportExcelWithMergedCells(HttpServletResponse response, String fileName,
                                    List<AreaAchieveStatVO> dataList) throws IOException;

    /**
     * @description: 导出系统业绩统计
     * @author: zhang jing
     * @date: 2024/5/20 14:58
     * @param: [response, fileName, dataList]
     * @return: void
     **/
    void exportExcelVertexWithMergedCells(HttpServletResponse response, String fileName,
                                          List<VertexAchieveStatVO> dataList) throws IOException;

    /**
     * @description: 月度职级名单查询
     * @author: zhang jing
     * @date: 2024/6/24 15:22
     * @param: [mjlvo]
     * @return: java.util.List<com.hzs.report.member.vo.MonthlyJobLevelVo>
     **/
    List<MonthlyJobLevelVo> monthlyJobLevelList(MonthlyJobLevelVo mjlvo);

    /**
     * @description: 查询收益区域数据
     * @author: zhang jing
     * @date: 2025/1/10 16:29
     * @param: [revenueAreaVO]
     * @return: java.util.List<com.hzs.report.member.vo.RevenueAreaVO>
     **/
    List<RevenueAreaVO> revenueAreaList(RevenueAreaVO revenueAreaVO);

}
