package com.ruoyi.excel.wecom.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.excel.wecom.domain.CustomerStatisticsData;
import com.ruoyi.excel.wecom.vo.CustomerStatisticsDataVO;
import com.ruoyi.excel.wecom.vo.CustomerStatisticsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 用户mapper
 */
@Mapper
public interface CustomerStatisticsDataMapper extends BaseMapper<CustomerStatisticsData> {

    List<CustomerStatisticsVO> selectByDate(@Param("corpId") String corpId,@Param("date")Date date);

    /**
     * 查询客户统计数据列表
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param indicatorName 指标名称
     * @return 客户统计数据列表
     */
    List<CustomerStatisticsData> selectCustomerStatisticsDataList(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("indicatorName") String indicatorName
    );

    /**
     * 查询客户统计数据VO列表(用于导出)
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param indicatorName 指标名称
     * @return 客户统计数据VO列表
     */
    List<CustomerStatisticsDataVO> selectCustomerStatisticsDataVOList(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("indicatorName") String indicatorName
    );

    List<CustomerStatisticsData> selectDailyDataByWeek(
            @Param("corpId") String corpId,
            @Param("year") Integer year,
            @Param("week") Integer week,
            @Param("indicatorName") String indicatorName
    );

    /**
     * 按日期范围查询周数据（修复跨年周问题）
     * @param corpId 企业ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param indicatorName 指标名称
     * @return 客户统计数据列表
     */
    List<CustomerStatisticsData> selectDailyDataByWeekRange(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("indicatorName") String indicatorName
    );

    List<CustomerStatisticsData> selectDailyDataByMonth(
            @Param("corpId") String corpId,
            @Param("yearMonth") String yearMonth,
            @Param("indicatorName") String indicatorName
    );

    List<CustomerStatisticsData> selectAllDailyData(
            @Param("corpId") String corpId,
            @Param("indicatorName") String indicatorName
    );

}

