package com.rj.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.rj.entity.CpaBrandScoreStatistics;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 经销商品牌得分统计表 Mapper 接口
 * 
 * @author 李中华
 * @date 2025/1/15
 */
@Mapper
public interface CpaBrandScoreStatisticsMapper extends BaseMapper<CpaBrandScoreStatistics> {

    /**
     * 根据经销商编码和统计类型查询统计数据
     * 
     * @param dealerCode 经销商编码
     * @param statisticsType 统计类型
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> selectByDealerCodeAndType(@Param("dealerCode") String dealerCode, 
                                                           @Param("statisticsType") String statisticsType);

    /**
     * 根据大区和统计类型查询统计数据
     * 
     * @param bigArea 大区
     * @param statisticsType 统计类型
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> selectByBigAreaAndType(@Param("bigArea") String bigArea, 
                                                        @Param("statisticsType") String statisticsType);

    /**
     * 根据日期范围查询统计数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param statisticsType 统计类型
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> selectByDateRange(@Param("startDate") LocalDate startDate, 
                                                   @Param("endDate") LocalDate endDate, 
                                                   @Param("statisticsType") String statisticsType);

    /**
     * 获取经销商排名统计
     * 
     * @param statisticsType 统计类型
     * @param limit 限制数量
     * @return 排名统计列表
     */
    List<Map<String, Object>> selectDealerRanking(@Param("statisticsType") String statisticsType, 
                                                 @Param("limit") Integer limit);

    /**
     * 获取大区排名统计
     * 
     * @param statisticsType 统计类型
     * @return 大区排名统计列表
     */
    List<Map<String, Object>> selectBigAreaRanking(@Param("statisticsType") String statisticsType);

    /**
     * 批量插入统计数据
     * 
     * @param statisticsList 统计数据列表
     * @return 插入记录数
     */
    int batchInsert(@Param("statisticsList") List<CpaBrandScoreStatistics> statisticsList);

    /**
     * 根据条件删除统计数据
     * 
     * @param dealerCode 经销商编码
     * @param statisticsType 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 删除记录数
     */
    int deleteByCondition(@Param("dealerCode") String dealerCode, 
                         @Param("statisticsType") String statisticsType, 
                         @Param("startDate") LocalDate startDate, 
                         @Param("endDate") LocalDate endDate);

    /**
     * 执行日统计SQL（方案1：按经销商和日期双重分组统计）
     * 
     * @param startDateTime 开始时间
     * @param endDateTime 结束时间
     * @return 统计结果列表
     */
    List<Map<String, Object>> executeDailyStatistics(@Param("startDateTime") String startDateTime, 
                                                     @Param("endDateTime") String endDateTime);

    /**
     * 执行日期范围统计SQL
     * 
     * @param startDateTime 开始时间
     * @param endDateTime 结束时间
     * @return 统计结果列表
     */
    List<Map<String, Object>> executeDateRangeStatistics(@Param("startDateTime") String startDateTime, 
                                                         @Param("endDateTime") String endDateTime);

    /**
     * 执行总计统计SQL
     * 
     * @return 统计结果列表
     */
    List<Map<String, Object>> executeTotalStatistics();
}
