package com.sundot.airport.blocked.mapper;

import com.sundot.airport.blocked.dto.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 查堵大屏Mapper接口
 * 
 * @author wangxx
 * @date 2026-04-15
 */
@Mapper
public interface BlockedDashboardMapper {

    /**
     * 查询查堵总数
     * 
     * @param queryDTO 查询参数
     * @return 查堵总数
     */
    Integer selectTotalBlockedCountWithoutBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵总数
     * 
     * @param queryDTO 查询参数
     * @return 查堵总数
     */
    Integer selectTotalBlockedCountWithBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询各大队查堵总数(用于柱状图)
     * 
     * @param queryDTO 查询参数
     * @return 各大队查堵统计列表
     */
    List<BlockedBrigadeStatsDTO> selectBlockedCountByBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询总查堵万分率(所有大队平均值)
     * 
     * @param queryDTO 查询参数
     * @return 总查堵万分率
     */
    java.math.BigDecimal selectTotalBlockedRate(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询各大队平均查堵万分率(用于条形图)
     * 
     * @param queryDTO 查询参数
     * @return 各大队查堵万分率统计列表
     */
    List<BlockedBrigadeRateStatsDTO> selectBlockedRateByBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日查堵合计件数(用于趋势图)
     * 
     * @param queryDTO 查询参数
     * @return 每日查堵统计列表
     */
    List<BlockedDailyStatsDTO> selectBlockedCountByDate(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日各大队查堵合计件数(用于大队对比表)
     * 
     * @param queryDTO 查询参数
     * @return 每日各大队查堵统计列表
     */
    List<BlockedDailyBrigadeStatsDTO> selectBlockedCountByDateAndBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日平均查堵万分率(用于趋势图)
     * 
     * @param queryDTO 查询参数
     * @return 每日查堵万分率统计列表
     */
    List<BlockedDailyRateStatsDTO> selectBlockedRateByDate(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日各大队平均查堵万分率(用于大队对比表)
     * 
     * @param queryDTO 查询参数
     * @return 每日各大队查堵万分率统计列表
     */
    List<BlockedDailyBrigadeRateStatsDTO> selectBlockedRateByDateAndBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日过检行李合计(用于趋势图)
     * 
     * @param queryDTO 查询参数
     * @return 每日过检行李统计列表
     */
    List<BlockedDailyLuggageStatsDTO> selectTotalLuggageCountByDate(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日各大队过检行李合计(用于大队对比表)
     * 
     * @param queryDTO 查询参数
     * @return 每日各大队过检行李统计列表
     */
    List<BlockedDailyBrigadeLuggageStatsDTO> selectTotalLuggageCountByDateAndBrigade(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵物品分布(用于扇形图)
     * 
     * @param queryDTO 查询参数
     * @return 查堵物品分布统计列表
     */
    List<BlockedItemDistributionDTO> selectItemDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询区域查堵数据分布-过检行李数(柱状图)
     * 
     * @param queryDTO 查询参数
     * @return 过检行李数统计列表
     */
    List<BlockedAreaLuggageDTO> selectAreaLuggageDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询区域查堵数据分布-查堵件数(折线图)
     * 
     * @param queryDTO 查询参数
     * @return 查堵件数统计列表
     */
    List<BlockedAreaBlockedDTO> selectAreaBlockedDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵类型分布(用于分组柱状图)
     * 
     * @param queryDTO 查询参数
     * @return 查堵类型分布统计列表
     */
    List<BlockedDiscriminationDistributionDTO> selectDiscriminationDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵时间段过检行李数及万分率(用于双轴图表)
     * 
     * @param queryDTO 查询参数
     * @return 时间段统计列表
     */
    List<BlockedTimePeriodStatsDTO> selectTimePeriodStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询每日过检行李数及万分率(用于双轴图表)
     * 
     * @param queryDTO 查询参数
     * @return 每日统计列表
     */
    List<BlockedTimePeriodStatsDTO> selectDailyLuggageAndRate(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-AI复查图像总数(用于双系列图表)
     * 
     * @param queryDTO 查询参数
     * @return AI图像统计列表
     */
    List<BlockedDailyStatsDTO> selectAiImageStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-AI漏判图像总数(用于单系列图表)
     * 
     * @param queryDTO 查询参数
     * @return AI漏判图像统计列表
     */
    List<BlockedDailyStatsDTO> selectAiMissImageStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-AI误判图像总数(用于单系列图表)
     * 
     * @param queryDTO 查询参数
     * @return AI误判图像统计列表
     */
    List<BlockedDailyStatsDTO> selectAiErrorImageStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-主管排行榜
     * 
     * @param queryDTO 查询参数
     * @return 主管排行榜列表
     */
    List<BlockedRankingDTO> selectSupervisorRanking(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-班组排行榜
     * 
     * @param queryDTO 查询参数
     * @return 班组排行榜列表
     */
    List<BlockedRankingDTO> selectTeamLeaderRanking(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-人员排行榜
     * 
     * @param queryDTO 查询参数
     * @return 人员排行榜列表
     */
    List<BlockedRankingDTO> selectReviewedUserRanking(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-物品位置分布(用于扇形图)
     * 
     * @param queryDTO 查询参数
     * @return 物品位置分布统计列表
     */
    List<BlockedItemLocationDistributionDTO> selectItemLocationDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-原因分类分布(用于扇形图)
     * 
     * @param queryDTO 查询参数
     * @return 原因分类分布统计列表
     */
    List<BlockedMissCheckReasonDistributionDTO> selectMissCheckReasonDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-图像难易程度分布(用于扇形图)
     * 
     * @param queryDTO 查询参数
     * @return 难易程度分布统计列表
     */
    List<BlockedDifficultyDistributionDTO> selectDifficultyDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-开机人员持证比例(用于扇形图)
     * 
     * @param queryDTO 查询参数
     * @return 证书级别分布统计列表
     */
    List<BlockedCertificateDistributionDTO> selectCertificateDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询大队开机人员证书分布(用于柱状图)
     * 返回原始数据，由Service层按大队分组统计
     * 
     * @param queryDTO 查询参数
     * @return 用户和部门信息列表
     */
    List<Map<String, Object>> selectBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询两楼每日查堵走势(按大队)
     * 
     * @param queryDTO 查询参数
     * @return 两楼每日查堵走势统计列表
     */
    List<BlockedDailyBrigadeTerminalStatsDTO> selectDailyBrigadeTerminalStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询两楼每日过检图像数(按大队)
     * 
     * @param queryDTO 查询参数
     * @return 两楼每日过检图像数统计列表
     */
    List<BlockedDailyBrigadeTerminalLuggageStatsDTO> selectDailyBrigadeTerminalLuggageStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询两楼查堵数（包含行检，按大队）
     * 数据来源：漏检统计表
     * 先查大队数量，再查T1、T2数量
     * 
     * @param queryDTO 查询参数
     * @return 两楼查堵数统计
     */
    BlockedTerminalStatsDTO selectTerminalBlockedStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵时间段过检行李数(按大队)
     * 数据源：每日各时间段过检行李数
     * 维度(横轴)：时间段
     * 统计值(左坐标轴)：过检行李数平均值
     * 统计值(右坐标轴)：时段查堵件数平均值
     * 
     * @param queryDTO 查询参数
     * @return 时间段过检行李数统计列表
     */
    List<BlockedTimePeriodLuggageStatsDTO> selectTimePeriodLuggageStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询两楼每日查堵万分率(按大队)
     * 数据源：各大队每日过检行李查堵数据收集表
     * 按时间统计T2旅检万分率、T1旅检万分率、T1行检万分率、T2行检万分率
     * 
     * @param queryDTO 查询参数
     * @return 两楼每日查堵万分率统计列表
     */
    List<BlockedDailyBrigadeTerminalRateStatsDTO> selectDailyBrigadeTerminalRateStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-主管分管次数分布(用于饼图)
     * 
     * @param queryDTO 查询参数
     * @return 主管分管次数分布统计列表
     */
    List<BlockedRankingDTO> selectSupervisorDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-主管排行榜(大队维度,前10名)
     * 数据源：漏检统计表
     * 数据筛选：分管主管不为空
     * 排行字段：分管主管
     * 排行依据：统计记录总数
     * 显示行数：显示前10行
     * 
     * @param queryDTO 查询参数
     * @return 主管排行榜列表（前10名）
     */
    List<BlockedRankingDTO> selectBrigadeSupervisorRanking(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-班组排行榜(大队维度,前10名)
     * 数据源：漏检统计表
     * 数据筛选：分管班组长不为空
     * 排行字段：分管班组长
     * 排行依据：统计记录总数
     * 显示行数：显示前10行
     * 
     * @param queryDTO 查询参数
     * @return 班组排行榜列表（前10名）
     */
    List<BlockedRankingDTO> selectBrigadeTeamLeaderRanking(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵-人员排行榜(大队维度,前10名)
     * 数据源：漏检统计表
     * 数据筛选：被回查人不为空
     * 排行字段：被回查人
     * 排行依据：统计记录总数
     * 显示行数：显示前10行
     * 
     * @param queryDTO 查询参数
     * @return 人员排行榜列表（前10名）
     */
    List<BlockedRankingDTO> selectBrigadeReviewedUserRanking(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵男女比例(按大队)
     * 数据源：漏检统计表
     * 统计性别分布
     * 
     * @param queryDTO 查询参数
     * @return 男女比例统计列表
     */
    List<BlockedGenderDistributionDTO> selectGenderDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵人员证书级别分布(按大队)
     * 数据源：漏检统计表
     * 统计证书级别分布
     * 
     * @param queryDTO 查询参数
     * @return 证书级别分布统计列表
     */
    List<BlockedCertificateLevelDistributionDTO> selectCertificateLevelDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询证书级别人员基数(分大队统计)
     * 数据源：用户表(sys_user) + 部门表(sys_dept)
     * 返回原始数据，由Service层处理
     * 
     * @param queryDTO 查询参数（大队ID必填）
     * @return 用户和部门信息列表
     */
    List<Map<String, Object>> selectBrigadePersonnelCertificateBase(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询查堵人员开机年限分布(用于饼图)
     * 数据源：漏检统计表
     * 统计字段：开机年限
     * 
     * @param queryDTO 查询参数
     * @return 开机年限分布统计列表
     */
    List<BlockedOperatingYearsDistributionDTO> selectOperatingYearsDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询旅检万分查堵率平均值
     * 
     * @param queryDTO 查询参数
     * @return 旅检万分查堵率平均值
     */
    java.math.BigDecimal selectTravelInspectionBlockRate(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询行检万分查堵率平均值
     * 
     * @param queryDTO 查询参数
     * @return 行检万分查堵率平均值
     */
    java.math.BigDecimal selectWalkInspectionBlockRate(BlockedDashboardQueryDTO queryDTO);
}
