package com.hzs.report.member.mapper;/**
 * @Description:
 * @Author: yuhui
 * @Time: 2023/8/26 9:53
 * @Classname: MemberReportMapper
 * @PackageName: com.hzs.report.member.mapper
 */

import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
import com.hzs.report.member.vo.*;
import org.apache.ibatis.annotations.Param;

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

/**
 *@BelongsProject: hzs_cloud
 *@BelongsPackage: com.hzs.report.member.mapper
 *@Author: yh
 *@CreateTime: 2023-08-26  09:53
 *@Description: TODO
 *@Version: 1.0
 */
public interface MemberReportMapper {
    /**
     * 查询伞下直推新增业绩-会员
     * @return
     */
    List<DirectPushNewVo> directPushNewList(@Param("pkMember") Long pkMember,@Param("memberName") String memberName,@Param("pkAwards") Integer pkAwards,@Param("pkTeamCode") Integer pkTeamCode,@Param("pkCountry") Integer pkCountry,@Param("startPayTime") Date startPayTime,@Param("endPayTime") Date endPayTime,@Param("pkVertex") Integer pkVertex);

    /**
     * @description: 查询伞下直推新增业绩-业绩
     * @author: zhang jing
     * @date: 2023/9/6 14:10
     * @param: [pkMember, memberName, pkAwards, pkTeamCode, pkCountry, startPayTime, endPayTime, pkVertex]
     * @return: java.util.List<com.hzs.report.member.vo.DirectPushNewVo>
     **/
    List<DirectPushNewVo> directPushNewAchieList(@Param("pkMember") Long pkMember,
                                                 @Param("startPayTime") Date startPayTime,
                                                 @Param("endPayTime") Date endPayTime,
                                                 @Param("orderTypeList") List<Integer> orderType,
                                                 @Param("pkCountry") Integer pkCountry);

    /**
     * @description: 查询个人直推新增业绩
     * @author: zhang jing
     * @date: 2024/4/7 10:55
     * @param: [pkMember, startPayTime, endPayTime, orderType, pkCountry]
     * @return: java.util.List<com.hzs.report.member.vo.DirectPushNewVo>
     **/
    List<DirectPushNewVo> personDirectPushAchieList(@Param("pkMember") Long pkMember,
                                                 @Param("startPayTime") Date startPayTime,
                                                 @Param("endPayTime") Date endPayTime,
                                                 @Param("orderTypeList") List<Integer> orderType,
                                                 @Param("pkCountry") Integer pkCountry);




    /**
     * 用户消费统计
     * @param memberCode 用户编号
     * @param memberName 用户姓名
     * @param startPayTime 开始支付时间
     * @param endPayTime   结束支付时间
     * @param pkWares 商品主键
     * @return
     */
    List<MemberConsumptionVo> memberConsumptionList(@Param("memberCode") String memberCode,@Param("memberName") String memberName,@Param("startPayTime") Date startPayTime,@Param("endPayTime") Date endPayTime,@Param("pkWares") Integer pkWares);
    /**
     * 伞下新增安置业绩
     * @return
     */
    List<MemberResettleAchieveVo> memberResettleAchieve(@Param("pkMember") Long pkMember,@Param("memberName") String memberName,@Param("startPayTime") Date startPayTime,@Param("endPayTime") Date endPayTime,@Param("pkVertex") Integer pkVertex,@Param("pkTeamCode") Integer pkTeamCode,@Param("pkCountry") Integer pkCountry,@Param("pkAwards") Integer pkAwards,@Param("orderTypeList") List<Integer> orderTypeList);
    /**
     * 订单币种查询
     * @param memberCode  会员编号
     * @param memberName  会员名称
     * @param orderCode  订单编号
     * @param orderType 订单类型
     * @return
     */
    List<OrderCurrencyVo> getOrderCurrencyList(@Param("memberCode") String memberCode,@Param("memberName") String memberName,@Param("orderCode") String orderCode,@Param("orderType") Integer orderType);

    /**
     * 查询订单币种
     * @param orderCodeList
     * @return
     */
    List<MemberTradeVo> getBySourceCodeMemberTradeList(@Param("orderCodeList") List<String> orderCodeList);
    /**
     * 查询省订单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param pkCountry 所属国家
     * @return
     */
    List<OrderDistribution> getByProvinceOrderDistribution(@Param("startTime") Date startTime,@Param("endTime") Date endTime,@Param("pkCountry") Integer pkCountry);
    /**
     * 查询市订单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param pkCountry 所属国家
     * @return
     */
    List<OrderDistribution> getByCityOrderDistribution(@Param("startTime") Date startTime,@Param("endTime") Date endTime,@Param("pkCountry") Integer pkCountry);

    /**
     * 区县订单查询
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param pkCountry 所属国家
     * @return
     */
    List<OrderDistribution> getByDistrictOrderDistribution(@Param("startTime") Date startTime,@Param("endTime") Date endTime,@Param("pkCountry") Integer pkCountry);

    /**
     * 出货明细汇总
     * @param productName
     * @param pkClassify
     * @param startTime
     * @param endTime
     * @return
     */
    List<ProductOrderInfoVo> getProductOrderInfo(@Param("productName") String productName,
                                                 @Param("pkClassify") Integer pkClassify,
                                                 @Param("startTime") Date startTime,
                                                 @Param("endTime") Date endTime,
                                                 @Param("pkCountry") Integer pkCountry,
                                                 @Param("orderTypeList") List<Integer> orderTypeList);

    /**
     * 报单汇总
     * @return
     */
    List<ReportSummaryVo> reportSummaryList(ReportSummaryVo reportSummaryVo);
    /**
     * 查询会员伞下订单左右区业绩
     * @param pkMember
     * @return
     */
    List<MemberPerformanceVo> brollyBelowResettle(@Param("pkMember") Long pkMember,@Param("startPayTime") Date startPayTime,@Param("endPayTime") Date endPayTime,@Param("orderTypeList") List<Integer> orderTypeList);
    /**
     * 出货明细汇总统计详情
     * @param pkProduct
     * @param productName
     * @return
     */
    List<ProductShippingDetailsInfoVo> productShippingDetailsList(@Param("pkProduct") Integer pkProduct,@Param("productName") String productName,@Param("pkClassify") Integer pkClassify,@Param("pkAwards") Integer pkAwards,@Param("pkCountry") Integer pkCountry,@Param("orderType") Integer orderType);
    /**
     * 伞下新增安置业绩
     * @param pkMember  会员主键
     * @param memberName  会员名称
     * @param startPayTime 开始支付时间
     * @param endPayTime 结束支付时间
     * @param pkVertex 体系
     * @param pkTeamCode 团队
     * @param pkCountry 所属国家
     * @param pkAwards 奖衔
     * @param orderTypeList 订单类型列表
     * @return
     */
    MemberResettleAchieveVo memberResettleAchieveInfo(@Param("pkMember") Long pkMember,@Param("memberName") String memberName,@Param("startPayTime") Date startPayTime,@Param("endPayTime") Date endPayTime,@Param("pkVertex") Integer pkVertex,@Param("pkTeamCode") Integer pkTeamCode,@Param("pkCountry") Integer pkCountry,@Param("pkAwards") Integer pkAwards,@Param("orderTypeList") List<Integer> orderTypeList);
    /**
     * 查询会员所有的相关部门
     * @param pkMember
     * @return
     */
    List<Integer> queryMemberPlaceDeptList(@Param("pkMember") Long pkMember);

    /**
     * 会员所属部门业绩
     * @param pkMember
     * @param placeDept
     * @return
     */
    MemberAchieveVO queryMemberPlaceDeptAchieve(@Param("pkMember") Long pkMember, @Param("placeDept") Integer placeDept,@Param("pkCountry") Integer pkCountry,@Param("memberName") String memberName,@Param("startPayTime") Date startPayTime,@Param("endPayTime") Date endPayTime,@Param("pkVertex") Integer pkVertex,@Param("pkTeamCode") Integer pkTeamCode,@Param("pkAwards") Integer pkAwards,@Param("orderTypeList") List<Integer> orderTypeList);

    /**
     * 会员活跃度统计
     * @return
     */
    List<ActivationVO> memberActiveList(@Param("startTime") Date startTime ,@Param("endTime") Date endTime,@Param("pkCountry") Integer pkCountry);
}
