package com.ruoyi.excel.wecom.mapper;

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

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

/**
 * 部门统计数据Mapper
 */
@Mapper
public interface DepartmentStatisticsDataMapper extends BaseMapper<DepartmentStatisticsData> {

    /**
     * 根据日期查询统计数据
     * @param date 统计日期
     * @return 统计数据列表
     */
    List<DepartmentStatisticsData> selectByDate(@Param("corpId") String corpId,@Param("date") Date date);

    /**
     * 根据部门路径和日期范围查询统计数据
     * @param departmentPath 部门路径
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据列表
     */
    List<DepartmentStatisticsData> selectByDepartmentAndDateRange(
            @Param("corpId") String corpId,
            @Param("departmentPath") String departmentPath,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate
    );

    /**
     * 查询指定部门的历史累计承接数
     * @param departmentPath 部门路径
     * @return 累计值
     */
    Map<String, Object> selectHistoricalAcceptSum(@Param("corpId") String corpId,@Param("departmentPath") String departmentPath);

    /**
     * 查询指定部门的历史累计成单数
     * @param departmentPath 部门路径
     * @return 累计值
     */
    Map<String, Object> selectHistoricalOrderSum(@Param("corpId") String corpId,@Param("departmentPath") String departmentPath);

    /**
     * 查询部门统计数据列表
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param departmentPath 部门路径(可选)
     * @return 部门统计数据列表
     */
    List<DepartmentStatisticsData> selectDepartmentStatisticsDataList(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("departmentPath") String departmentPath
    );

    /**
     * 查询部门统计数据VO列表(用于导出)
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param departmentPath 部门路径(可选)
     * @return 部门统计数据VO列表
     */
    List<DepartmentStatisticsDataVO> selectDepartmentStatisticsDataVOList(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("departmentPath") String departmentPath
    );

    Map<String, BigDecimal> getSummary(@Param("corpId") String corpId,@Param("startDate") Date startDate,
                                       @Param("endDate") Date endDate,
                                       @Param("departmentPath") String departmentPath);

    /**
     * 查询部门统计数据聚合列表(按部门路径聚合)
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param departmentPath 部门路径(可选)
     * @return 部门统计数据聚合列表
     */
    List<DepartmentStatisticsData> selectDepartmentStatisticsDataAggregatedList(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("departmentPath") String departmentPath
    );

    /**
     * 查询部门统计数据VO聚合列表(用于导出)
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param departmentPath 部门路径(可选)
     * @return 部门统计数据VO聚合列表
     */
    List<DepartmentStatisticsDataVO> selectDepartmentStatisticsDataVOAggregatedList(
            @Param("corpId") String corpId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("departmentPath") String departmentPath
    );
}
