package com.kxs.stat.biz.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kxs.stat.api.dto.statUser.StatUserGetMyTradeDTO;
import com.kxs.stat.api.model.KxsUserTrade;
import com.kxs.stat.api.vo.ShdTradeAmtVO;
import com.kxs.stat.api.vo.TotalTradeAmtVO;
import com.kxs.stat.api.vo.myUser.PercentVO;
import com.kxs.stat.api.vo.statUser.StatUserBrandTradeVO;
import com.kxs.stat.api.vo.statUser.TrendTimesVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.cursor.Cursor;

import java.math.BigDecimal;
import java.util.List;

/**
 * 个人交易统计总表(KxsUserTrade)表数据库访问层
 *
 * @author 系统
 * @since 2024-05-07 17:25:06
 */
@Mapper
public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {

    /**
     * 流式查询pos交易的月交易额
     *
     * @param tableName  表名
     * @return {@link Cursor}<{@link ShdTradeAmtVO}>
     */
    Cursor<ShdTradeAmtVO> getUserTradeList(@Param("tableName") String tableName);

    /**
     * 自动表创建任务
     *
     * @param tableName 表名
     */
    void automaticTableCreationTasks(String tableName);

    /**
     * 创建临时表 下面增删改查
     */
    void createTemporaryShdTable(String tableName);

    /**
     * 删除临时表
     *
     * @param tempTableName 临时表名称
     */
    void removeTempTable(String tempTableName);


    ShdTradeAmtVO getTempShdTableData(@Param("tableName") String tableName, @Param("userId") Integer userId);

    void updateTempShdTableData(@Param("tableName") String tableName, @Param("data") ShdTradeAmtVO shdTradeAmtVO);

    Cursor<ShdTradeAmtVO> getTempShdTableList(@Param("tableName") String tableName);

    void insertTempShdTableData(@Param("tableName") String tableName, @Param("data") ShdTradeAmtVO shdTradeAmtVO);

    BigDecimal getStatAmount(String tableName);



    /**
     * 创客详情-获取用户交易趋势图 按照品牌分组
     *
     * @param tableName 表名
     * @param userId    用户 ID
     * @param totalType 总类型
     * @return {@link List}<{@link TrendTimesVO}>
     */
    List<TrendTimesVO> getUserTradeMonthTrend(@Param("tableName") String tableName, @Param("userId") Long userId, @Param("totalType") Integer totalType);

    /**
     * 创客详情-获取用户交易趋势图 按照品牌和天分组
     *
     * @param tableName 表名
     * @param userId    用户 ID
     * @param tradeDate 交易日期
     * @param totalType 总类型
     * @return {@link List}<{@link TrendTimesVO}>
     */
    List<TrendTimesVO> getUserTradeDayTrend(@Param("tableName") String tableName,
                                            @Param("userId") Long userId,
                                            @Param("tradeDate") Integer tradeDate,
                                            @Param("totalType") Integer totalType);

    /**
     * 创客详情-用户交易分品牌占比 按月查询
     * @param userId 用户ID
     * @param totalType  0个人 1团体
     */
    List<PercentVO> getUserTradeMonthTotal(@Param("tableName")String tableName, @Param("userId") Long userId, @Param("totalType") Integer totalType);

    /**
     * 创客详情-用户交易分品牌占比 按日查询
     * @param userId 用户ID
     * @param totalType  0个人 1团队
     */
    List<PercentVO> getUserTradeDayTotal(@Param("tableName")String tableName,
                                         @Param("userId") Long userId,
                                         @Param("tradeDate") Integer tradeDate,
                                         @Param("totalType") Integer totalType);


    /**
     * 获取月或日pos交易额
     * @param userId 用户ID
     * @param date 时间
     * @param totalType 0个人 1团队
     */
    TotalTradeAmtVO getPosTrade(@Param("userId")Long userId, @Param("tableName")String tableName, @Param("date") Integer date, @Param("totalType") Integer totalType);

    /**
     * 获取我的业绩
     * @param param type 1:个人 2:计奖   month  无用  不传
     * @param tradeType  0pos  1云闪付
     * @param date 该参数为是否根据日查询   不根据传""
     * @return
     */
    KxsUserTrade getMyPosOrCloudTrade(@Param("param")StatUserGetMyTradeDTO param,
                                      @Param("tableName")String tableName,
                                      @Param("tradeType")Integer tradeType,
                                      @Param("userId")Long userId,
                                      @Param("date") String date);

    /**
     * 查询用户所有交易额汇总
     * @param userId 用户id
     * @param date 时间参数
     * @param getType  1获取日详情 2获取月详情
     * @param tradeType 0pos  1云闪付
     * @param brandId 品牌id
     * @param totalType 0:个人 1:计奖
     * @return
     */
    KxsUserTrade getAllUserTradeSum(@Param("userId")Long userId,
                                    @Param("date") Integer date,
                                    @Param("getType") Integer getType,
                                    @Param("tradeType")Integer tradeType,
                                    @Param("brandId") Integer brandId,
                                    @Param("totalType") Integer totalType,
                                    @Param("tableName") String tableName);

    List<StatUserBrandTradeVO> getStatUserBrandTradeVOS(@Param("userId") Long userId, @Param("getType")Integer getType,@Param("tableName") String tableName, @Param("totalType")Integer totalType, @Param("date")String date);

}

