package com.hotwj.platform.workbench.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hotwj.platform.workbench.domain.entity.HotHiddenDangerDailyStats;
import com.hotwj.platform.workbench.domain.vo.GovCompanyRiskStatsVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;

import java.util.List;

/**
 * 隐患日统计Mapper接口
 *
 * @author shihongwei
 * @date 2026-02-25
 */
@Mapper
public interface HotHiddenDangerDailyStatsMapper extends BaseMapperPlus<HotHiddenDangerDailyStats, HotHiddenDangerDailyStats> {

    /**
     * 查询指定日期区间的每日隐患总数（按日期分组）
     *
     * @param regionCode 行政区划代码（前缀匹配）
     * @param startDate  开始日期
     * @param endDate    结束日期
     * @return 每日统计结果
     */
    List<HotHiddenDangerDailyStats> selectStatsByDateRange(@Param("regionCode") String regionCode,
                                                           @Param("startDate") String startDate,
                                                           @Param("endDate") String endDate);

    /**
     * 查询指定企业在日期区间的每日隐患数
     *
     * @param companyId 企业ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 每日统计结果
     */
    List<HotHiddenDangerDailyStats> selectStatsByCompanyAndDateRange(@Param("companyId") Long companyId,
                                                                     @Param("startDate") String startDate,
                                                                     @Param("endDate") String endDate);

    /**
     * 查询隐患总数最高的企业TOP N
     *
     * @param districtCode 辖区编码
     * @param statsDate    统计日期
     * @param limit        数量限制
     * @return 统计列表
     */
    List<GovCompanyRiskStatsVo> selectTopRiskCompanies(@Param("districtCode") String districtCode,
                                                       @Param("statsDate") String statsDate,
                                                       @Param("limit") int limit);

    /**
     * 分页查询企业隐患统计列表
     *
     * @param page         分页对象
     * @param districtCode 辖区编码
     * @param statsDate    统计日期
     * @param companyName  企业名称模糊搜索
     * @return 分页列表
     */
    Page<GovCompanyRiskStatsVo> selectCompanyRiskPage(Page<GovCompanyRiskStatsVo> page,
                                                      @Param("districtCode") String districtCode,
                                                      @Param("statsDate") String statsDate,
                                                      @Param("companyName") String companyName);
}
