package com.hzs.bonus.achieve.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.common.domain.member.achieve.CuMemberAchieve;
import com.hzs.common.domain.member.ext.CuMemberSettleCountryExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.bonus.achieve.param.MemberAchieveParam;

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

/**
 * <p>
 * 会员业绩记录 服务类
 * </p>
 *
 * @author hzs
 * @since 2022-10-26
 */
public interface ICuMemberAchieveService extends IService<CuMemberAchieve> {

    /**
     * 创建每月的会员业绩记录表
     *
     * @param date 日期
     * @return: void
     * @Author: sui q
     * @Date: 2022/10/31 15:17
     */
    String createCuMemberAchieve(String date);

    /**
     * 创建每年的业绩统计年表，用于放月表
     *
     * @param tableName 表名
     * @return: void
     * @Author: sui q
     * @Date: 2022/11/7 14:10
     */
    void createCuMemberMonthTable(String tableName);

    /*
     * @description:更新会员业绩表 每月月统计报表
     * @author: sui q
     * @date: 2023/8/29 10:57
     * @param: null null
     **/
    void mergeCuMemberMonth(Integer day, String date);

    /**
     * 将结算日表的值插入到结算月表中
     *
     * @param targetTableName 目标表 网体月表
     * @param sourceTableName 来源表 结算日表
     * @param period          期间
     * @return: void
     * @Author: sui q
     * @Date: 2023/2/16 11:35
     */
    void insertCuMemberAchieveBySettleDate(String targetTableName, String sourceTableName, Integer period);

    /**
     * 将结算日表的值插入到结算月表中
     *
     * @param targetTableName 目标表 网体月表
     * @param sourceTableName 来源表 结算日表
     * @param period          期间
     * @return: void
     * @Author: sui q
     * @Date: 2023/2/16 11:35
     */
    void mergeCuMemberAchieveBySettleDate(String targetTableName, String sourceTableName, Integer period);

    /**
     * 根据每日日业绩开始更新会员业绩 新增业绩、累计业绩
     *
     * @param memberAchieveParamMap 修改的结算
     * @param tablaName             修改的结算期间表
     * @return: Boolean
     * @Author: sui q
     * @Date: 2022/11/2 11:30
     */
    Boolean updateCuMemberAchieveEveryDay(Map<Long, MemberAchieveParam> memberAchieveParamMap, String tablaName, String settleTableNameDetail);


    /**
     * 根据每日日业绩开始回退更新会员业绩 新增业绩、累计业绩
     *
     * @param memberAchieveParamMap 修改的结算
     * @param tablaName             修改的结算期间表
     * @return: Boolean
     * @Author: sui q
     * @Date: 2022/11/2 11:30
     */
    void updateCuMemberBackOldAchieveEveryDay(Map<Long, MemberAchieveParam> memberAchieveParamMap, String tablaName, String settleTableNameDetail);

    /**
     * 将昨天日表数据插入今天日表中, 昨日日表更新今天日表网体表
     * 根据昨天结算表数据更新今天结算表的业绩数据
     *
     * @param targetTable 目标表 记录10天跟月表一摸一样的滚动表数据
     * @return: void
     * @Author: sui q
     * @Date: 2022/10/31 16:26
     */
    void updateCuMemberSettleInitAchieve(String targetTable, String currentTableNameDetail, String currentTableNameCountry);

    /**
     * 将昨天日表数据插入今天日表中, 昨日日表更新今天日表网体表
     * 根据昨天结算表数据更新今天结算表的业绩数据
     *
     * @param sourceTable 来源表，记录10天跟月表一摸一样的滚动表数据
     * @param targetTable 目标表 记录10天跟月表一摸一样的滚动表数据
     * @return: void
     * @Author: sui q
     * @Date: 2022/10/31 16:26
     */
    void updateCuMemberSettleAchieveByBeforeDay(String sourceTable, String targetTable, String yesterdayTableNameDetail, String currentTableNameDetail, Integer endPeriod,
                                                String sourceCountryTable, String targetCountryTable);

    /*
     * @description: 根据期间更新会员表复消剩余收益次数  复消剩余收益奖金
     * @author: sui q
     * @date: 2023/11/2 16:15
     * @param: null null
     **/
    void mergeBackCuMemberReSaleDate(String targetTable, Integer period);

    /**
     * 根据特殊业务更新业绩
     *
     * @param targetTable 结算表
     * @param period      期间
     * @param pkId        主键
     * @return: void
     * @Author: sui q
     * @Date: 2023/3/11 13:42
     */
    void updateCuMemberSettleAchieveBySpecialBus(String targetTable, Integer period, Long pkId);

    /*
     * @description: 退单回退业绩
     * @author: sui q
     * @date: 2023/9/22 9:27
     * @param: null null
     **/
    Boolean chargeBackSaOrder(SaOrder saOrder);

    /*
     * @description: 查询会员公司来源业绩
     * @author: sui q
     * @date: 2024/1/18 20:52
     * @param: null null
     **/
    List<CuMemberSettleCountryExt> queryCuMemberSettleCountry(BonusParam bonusParam);
}
