package com.sundot.airport.blocked.service;

import com.sundot.airport.blocked.dto.*;

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

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

    /**
     * 查询查堵总数
     *
     * @param queryDTO 查询参数
     * @return 查堵统计结果
     */
    BlockedDashboardResultDTO getBlockedTotalCount(BlockedDashboardQueryDTO queryDTO);

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

    /**
     * 查询总查堵万分率(所有大队平均值)
     *
     * @param queryDTO 查询参数
     * @return 查堵万分率统计结果
     */
    BlockedRateResultDTO getTotalBlockedRate(BlockedDashboardQueryDTO queryDTO);

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

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

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

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

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

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

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

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

    /**
     * 查询区域查堵数据分布(双轴图表)
     *
     * @param queryDTO 查询参数
     * @return 区域查堵数据分布统计结果
     */
    BlockedAreaDistributionResultDTO getAreaDistribution(BlockedDashboardQueryDTO queryDTO);

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 查询大队开机人员证书分布(用于柱状图)
     *
     * @param queryDTO 查询参数
     * @return 大队证书分布统计列表
     */
    List<BlockedCertificateLevelDTO> getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询两楼每日查堵走势(按大队)
     * 数据来源：各大队每日过检行李查堵数据收集表
     * 先查出来是哪个安检大队的，然后按日期统计以下四个字段：
     * T1旅检查堵件数、T2旅检查堵件数、T1行检查堵件数、T2行检查堵件数
     * 
     * @param queryDTO 查询参数
     * @return 两楼每日查堵走势统计列表
     */
    List<BlockedDailyBrigadeTerminalStatsDTO> getDailyBrigadeTerminalStats(BlockedDashboardQueryDTO queryDTO);

    /**
     * 查询两楼每日过检图像数(按大队)
     * 数据来源：各大队每日过检行李查堵数据收集表
     * 先查出来是哪个安检大队的，然后按日期统计以下四个字段：
     * T2旅检过检行李数、T1旅检过检行李数、T1行检过检行李数、T2行检过检行李数
     * 
     * @param queryDTO 查询参数
     * @return 两楼每日过检图像数统计列表
     */
    List<BlockedDailyBrigadeTerminalLuggageStatsDTO> getDailyBrigadeTerminalLuggageStats(BlockedDashboardQueryDTO queryDTO);

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

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

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

    /**
     * 查询查堵-主管分管次数分布(用于饼图)
     * 数据源：漏检统计表
     * 统计字段：分管主管
     * 
     * @param queryDTO 查询参数
     * @return 主管分管次数分布统计列表
     */
    List<BlockedRankingDTO> getSupervisorDistribution(BlockedDashboardQueryDTO queryDTO);

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

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

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

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

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

    /**
     * 查询证书级别人员基数(分大队统计)
     * 数据源：用户表(sys_user) + 部门表(sys_dept)
     * 统计大队人员里面的人员证书级别构成
     * 
     * @param queryDTO 查询参数（大队ID必填）
     * @return 证书级别人员基数统计列表
     */
    List<BlockedCertificateLevelDistributionDTO> getBrigadePersonnelCertificateBase(BlockedDashboardQueryDTO queryDTO);

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

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

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

