package com.hotwj.platform.workbench.mapper;

import com.hotwj.platform.workbench.domain.vo.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 总部端工作台Mapper接口
 *
 * @author shihongwei
 */
@Mapper
public interface HeadquartersWorkbenchMapper {

    /**
     * 统计培训计划各类型数量
     *
     * @return 统计结果
     */
    List<TrainingTypeStatRow> selectTrainingTypeStats();

    /**
     * 统计某月每日完成数量
     */
    List<DailyCountRow> selectMonthlyCompleted(@Param("startDate") Date startDate,
                                               @Param("endDate") Date endDate);

    /**
     * 统计某月每日未完成数量
     */
    List<DailyCountRow> selectMonthlyUncompleted(@Param("startDate") Date startDate,
                                                 @Param("endDate") Date endDate);

    List<MonthlyTrendRow> selectMonthlyStudyTrendFromDailyStats(@Param("startDate") Date startDate,
                                                                @Param("endDate") Date endDate);

    /**
     * 统计指定年份按月的违规数量（occur_time），返回 1-12 月及数量
     */
    List<ViolationMonthlyRow> selectViolationMonthlyCounts(@Param("startDate") Date startDate,
                                                           @Param("endDate") Date endDate);

    /**
     * 汇总最近一天的隐患统计（来自 hot_hidden_danger_daily_stats）
     */
    HeadquartersHiddenDangerSummaryVo selectLatestHiddenDangerSummary(@Param("regionCode") String regionCode);

    /**
     * 统计指定区域内企业各行业的数量
     *
     * @param regionCode 区域代码
     * @return 行业统计列表
     */
    @MapKey("industry")
    List<java.util.Map<String, Object>> selectCompanyIndustryCounts(@Param("regionCode") String regionCode);

    /**
     * 查询所有企业的创建年份和行业信息
     */
    @MapKey("year")
    List<java.util.Map<String, Object>> selectAllCompanyCreateYears();

    /**
     * 查询所有从业人员的入职年份和人员类型
     */
    @MapKey("year")
    List<java.util.Map<String, Object>> selectAllPersonnelCreateYears();

    /**
     * 查询所有车辆的创建年份及所属企业行业
     */
    @MapKey("year")
    List<java.util.Map<String, Object>> selectAllVehicleCreateYears();

    /**
     * 统计指定年份范围内的月度事故数量
     *
     * @param startYear 开始年份
     * @param endYear   结束年份
     */
    @MapKey("month")
    List<java.util.Map<String, Object>> selectMonthlyAccidentCounts(@Param("startYear") int startYear, @Param("endYear") int endYear);

    /**
     * 统计指定年份范围内的月度隐患数量
     *
     * @param startYear 开始年份
     * @param endYear   结束年份
     */
    @MapKey("month")
    List<java.util.Map<String, Object>> selectMonthlyHiddenDangerCounts(@Param("startYear") int startYear, @Param("endYear") int endYear);

    /**
     * 查询企业列表及其管理人员数量
     */
    List<HeadquartersCompanyListVo.CompanyRow> selectCompanyListWithManagerCount();
}
