package com.sundot.airport.web.controller.blocked;

import com.sundot.airport.blocked.dto.*;
import com.sundot.airport.blocked.service.IBlockedDashboardService;
import com.sundot.airport.common.core.controller.BaseController;
import com.sundot.airport.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

/**
 * 查堵大屏Controller
 * 
 * @author wangxx
 * @date 2026-04-15
 */
@Api(tags = "查堵大屏")
@RestController
@RequestMapping("/blocked/dashboard")
public class BlockedDashboardController extends BaseController {

    @Autowired
    private IBlockedDashboardService blockedDashboardService;

    /**
     * 查询查堵总数
     * 查堵总数（所有大队）=各大队每日过检行李查堵数据收集表-查堵合计件数-合计
     * @param queryDTO 查询参数（开始时间、结束时间、航站楼、大队ID）
     * @return 查堵统计结果
     */
    @ApiOperation("查询查堵总数")
    @GetMapping("/totalCount")
    public AjaxResult getTotalCount(BlockedDashboardQueryDTO queryDTO) {
        BlockedDashboardResultDTO result = blockedDashboardService.getBlockedTotalCount(queryDTO);
        return success(result);
    }

    /**
     * 查询查堵总数柱状图数据
     * 查堵总数柱状图：各大队每日过检行李查堵数据收集表-查堵合计件数-合计
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、航站楼）
     * @return 各大队查堵统计列表
     */
    @ApiOperation("查询查堵总数柱状图")
    @GetMapping("/brigadeChart")
    public AjaxResult getBrigadeChart(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedBrigadeStatsDTO> resultList = blockedDashboardService.getBlockedCountByBrigade(queryDTO);
        return success(resultList);
    }

    /**
     * 查询总查堵万分率(所有大队)
     * 总查堵万分率（所有大队）=各大队每日过检行李查堵数据收集表-当日查堵万分率-平均值
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 总查堵万分率统计结果
     */
    @ApiOperation("查询总查堵万分率")
    @GetMapping("/totalRate")
    public AjaxResult getTotalRate(BlockedDashboardQueryDTO queryDTO) {
        BlockedRateResultDTO result = blockedDashboardService.getTotalBlockedRate(queryDTO);
        return success(result);
    }

    /**
     * 查询各大队查堵万分率条形图数据
     * 总查堵万分率条形图：各大队每日过检行李查堵数据收集表-当日查堵万分率-平均值；
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 各大队查堵万分率统计列表
     */
    @ApiOperation("查询查堵万分率条形图")
    @GetMapping("/brigadeRateChart")
    public AjaxResult getBrigadeRateChart(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedBrigadeRateStatsDTO> resultList = blockedDashboardService.getBlockedRateByBrigade(queryDTO);
        return success(resultList);
    }

    /**
     * 每日查堵数量(总表)
     * 各大队每日过检行李查堵数据收集表-查堵合计件数-合计；
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 每日查堵统计列表
     */
    @ApiOperation("每日查堵数量(总表)")
    @GetMapping("/dailyTrend")
    public AjaxResult getDailyTrend(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyStatsDTO> resultList = blockedDashboardService.getBlockedCountByDate(queryDTO);
        return success(resultList);
    }

    /**
     * 查询每日查堵数量大队对比表数据
     * 各大队每日过检行李查堵数据收集表-查堵合计件数-合计；
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 每日各大队查堵统计列表
     */
    @ApiOperation("每日查堵数量(大队对比)")
    @GetMapping("/dailyBrigadeComparison")
    public AjaxResult getDailyBrigadeComparison(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyBrigadeStatsDTO> resultList = blockedDashboardService.getBlockedCountByDateAndBrigade(queryDTO);
        return success(resultList);
    }

    /**
     * 每日查堵万分率(总表)
     * 各大队每日过检行李查堵数据收集表-当日查堵万分率-平均值；
     * 
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 每日查堵万分率统计列表
     */
    @ApiOperation("每日查堵万分率(总表)")
    @GetMapping("/dailyRateTrend")
    public AjaxResult getDailyRateTrend(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyRateStatsDTO> resultList = blockedDashboardService.getBlockedRateByDate(queryDTO);
        return success(resultList);
    }

    /**
     * 每日查堵万分率(大队对比)
     * 
     * 各大队每日过检行李查堵数据收集表-当日查堵万分率-平均值；
     * 
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 每日各大队查堵万分率统计列表
     */
    @ApiOperation("每日查堵万分率(大队对比)")
    @GetMapping("/dailyBrigadeRateComparison")
    public AjaxResult getDailyBrigadeRateComparison(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyBrigadeRateStatsDTO> resultList = blockedDashboardService.getBlockedRateByDateAndBrigade(queryDTO);
        return success(resultList);
    }

    /**
     * 每日过检图像数(行检+旅检总表)
     * 各大队每日过检行李查堵数据收集表-过检行李合计-按日期加总；
     * 
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 每日过检行李统计列表
     */
    @ApiOperation("每日过检图像数(行检+旅检总表)")
    @GetMapping("/dailyLuggageTrend")
    public AjaxResult getDailyLuggageTrend(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyLuggageStatsDTO> resultList = blockedDashboardService.getTotalLuggageCountByDate(queryDTO);
        return success(resultList);
    }

    /**
     * 查询每日过检图像数大队对比表数据
     * 
     * 各大队每日过检行李查堵数据收集表-过检行李合计-按日期合计；
     * 
     * @param queryDTO 查询参数（开始时间、结束时间）
     * @return 每日各大队过检行李统计列表
     */
    @ApiOperation("每日过检图像数(行检+旅检 大队对比)")
    @GetMapping("/dailyBrigadeLuggageComparison")
    public AjaxResult getDailyBrigadeLuggageComparison(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyBrigadeLuggageStatsDTO> resultList = blockedDashboardService.getTotalLuggageCountByDateAndBrigade(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵物品分布数据
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 查堵物品分布统计列表
     */
    @ApiOperation("查堵物品分布")
    @GetMapping("/itemDistribution")
    public AjaxResult getItemDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedItemDistributionDTO> resultList = blockedDashboardService.getItemDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询区域查堵数据分布
     * 数据源：各大队每日过检行李查堵数据收集表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 区域查堵数据分布统计
     */
    @ApiOperation("区域查堵数量分布")
    @GetMapping("/areaDistribution")
    public AjaxResult getAreaDistribution(BlockedDashboardQueryDTO queryDTO) {
        BlockedAreaDistributionResultDTO result = blockedDashboardService.getAreaDistribution(queryDTO);
        return success(result);
    }

    /**
     * 查询查堵类型分布数据
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 查堵类型分布统计列表
     */
    @ApiOperation("查堵类型分布")
    @GetMapping("/discriminationDistribution")
    public AjaxResult getDiscriminationDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDiscriminationDistributionDTO> resultList = blockedDashboardService.getDiscriminationDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵时间段过检行李数及万分率
     * 数据源：每日各时间段过检行李数
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 时间段统计列表
     */
    @ApiOperation("查堵时间段过检行李数及万分率")
    @GetMapping("/timePeriodStats")
    public AjaxResult getTimePeriodStats(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedTimePeriodStatsDTO> resultList = blockedDashboardService.getTimePeriodStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询每日过检行李数及万分率
     * 数据源：每日各时间段过检行李数
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 每日统计列表
     */
    @ApiOperation("每日过检行李数及万分率")
    @GetMapping("/dailyLuggageAndRate")
    public AjaxResult getDailyLuggageAndRate(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedTimePeriodStatsDTO> resultList = blockedDashboardService.getDailyLuggageAndRate(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-AI复查图像总数
     * 数据源：各大队每日过检行李查堵数据收集表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return AI图像统计列表
     */
    @ApiOperation("查堵-AI复查图像总数")
    @GetMapping("/aiImageStats")
    public AjaxResult getAiImageStats(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyStatsDTO> resultList = blockedDashboardService.getAiImageStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-AI漏判图像总数
     * 数据源：各大队每日过检行李查堵数据收集表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return AI漏判图像统计列表
     */
    @ApiOperation("查堵-AI漏判图像总数")
    @GetMapping("/aiMissImageStats")
    public AjaxResult getAiMissImageStats(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyStatsDTO> resultList = blockedDashboardService.getAiMissImageStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-AI误判图像总数
     * 数据源：各大队每日过检行李查堵数据收集表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return AI误判图像统计列表
     */
    @ApiOperation("查堵-AI误判图像总数")
    @GetMapping("/aiErrorImageStats")
    public AjaxResult getAiErrorImageStats(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyStatsDTO> resultList = blockedDashboardService.getAiErrorImageStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-主管排行榜
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 主管排行榜列表（前30名）
     */
    @ApiOperation("查堵-主管排行榜")
    @GetMapping("/supervisorRanking")
    public AjaxResult getSupervisorRanking(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getSupervisorRanking(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-班组排行榜
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 班组排行榜列表（前30名）
     */
    @ApiOperation("查堵-班组排行榜")
    @GetMapping("/teamLeaderRanking")
    public AjaxResult getTeamLeaderRanking(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getTeamLeaderRanking(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-人员排行榜
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 人员排行榜列表（前30名）
     */
    @ApiOperation("查堵-人员排行榜")
    @GetMapping("/reviewedUserRanking")
    public AjaxResult getReviewedUserRanking(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getReviewedUserRanking(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-物品位置分布
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 物品位置分布统计列表
     */
    @ApiOperation("查堵-物品位置分布")
    @GetMapping("/itemLocationDistribution")
    public AjaxResult getItemLocationDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedItemLocationDistributionDTO> resultList = blockedDashboardService.getItemLocationDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-原因分类分布
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数
     * @return 原因分类分布统计列表
     */
    @ApiOperation("查堵-原因分类分布")
    @GetMapping("/missCheckReasonDistribution")
    public AjaxResult getMissCheckReasonDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedMissCheckReasonDistributionDTO> resultList = blockedDashboardService.getMissCheckReasonDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-图像难易程度分布
     * 数据源：漏检统计表
     * 
     * @param queryDTO 查询参数
     * @return 难易程度分布统计列表
     */
    @ApiOperation("查堵-图像难易程度分布")
    @GetMapping("/difficultyDistribution")
    public AjaxResult getDifficultyDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDifficultyDistributionDTO> resultList = blockedDashboardService.getDifficultyDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-开机人员持证比例
     * 数据源：用户信息配置（用户表）
     * 
     * @param queryDTO 查询参数
     * @return 证书级别分布统计列表
     */
    @ApiOperation("查堵-开机人员持证比例")
    @GetMapping("/certificateDistribution")
    public AjaxResult getCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedCertificateDistributionDTO> resultList = blockedDashboardService.getCertificateDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询大队开机人员证书分布
     * 数据源：用户信息配置（用户表）
     *
     * @param queryDTO 查询参数
     * @return 大队证书分布统计列表
     */
    @ApiOperation("大队开机人员证书分布")
    @GetMapping("/brigadeCertificateDistribution")
    public AjaxResult getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedCertificateLevelDTO> resultList = blockedDashboardService.getBrigadeCertificateDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询旅检万分查堵率平均值
     * 数据源：每日过检行李查堵数据收集表-旅检万分查堵率-平均值
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 旅检万分查堵率平均值
     */
    @ApiOperation("旅检万分查堵率平均值")
    @GetMapping("/travelInspectionBlockRate")
    public AjaxResult getTravelInspectionBlockRate(BlockedDashboardQueryDTO queryDTO) {
        BigDecimal result = blockedDashboardService.getTravelInspectionBlockRate(queryDTO);
        return success(result);
    }

    /**
     * 查询行检万分查堵率平均值
     * 数据源：每日过检行李查堵数据收集表-行检万分查堵率-平均值
     * 
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 行检万分查堵率平均值
     */
    @ApiOperation("行检万分查堵率平均值")
    @GetMapping("/walkInspectionBlockRate")
    public AjaxResult getWalkInspectionBlockRate(BlockedDashboardQueryDTO queryDTO) {
        BigDecimal result = blockedDashboardService.getWalkInspectionBlockRate(queryDTO);
        return success(result);
    }


  
}
