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


import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalLuggageStatsDTO;
import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalRateStatsDTO;
import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalStatsDTO;
import com.sundot.airport.blocked.dto.BlockedDashboardQueryDTO;
import com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedGenderDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedItemDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO;
import com.sundot.airport.blocked.dto.BlockedRankingDTO;
import com.sundot.airport.blocked.dto.BlockedTerminalStatsDTO;
import com.sundot.airport.blocked.dto.BlockedTimePeriodLuggageStatsDTO;
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.util.List;

/**
 * 查堵大屏（大队）Controller
 *
 * @author wangxx
 * @date 2026-04-16
 */
@Api(tags = "查堵大屏（大队）")
@RestController
@RequestMapping("/blocked/dashboard/brigade")
public class BlockedDashboardBrigadeController extends BaseController {

    @Autowired
    private IBlockedDashboardService blockedDashboardService;

    /**
     * 查询两楼每日查堵走势
     * 数据来源：各大队每日过检行李查堵数据收集表
     * 先查出来是哪个安检大队的，然后按日期统计以下四个字段：
     * T1旅检查堵件数、T2旅检查堵件数、T1行检查堵件数、T2行检查堵件数
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 两楼每日查堵走势统计列表
     */
    @ApiOperation("查询两楼每日查堵走势")
    @GetMapping("/dailyTerminalTrend")
    public AjaxResult getDailyTerminalTrend(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyBrigadeTerminalStatsDTO> resultList = blockedDashboardService.getDailyBrigadeTerminalStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询两楼每日过检图像数
     * 数据来源：各大队每日过检行李查堵数据收集表
     * 先查出来是哪个安检大队的，然后按日期统计以下四个字段：
     * T2旅检过检行李数、T1旅检过检行李数、T1行检过检行李数、T2行检过检行李数
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 两楼每日过检图像数统计列表
     */
    @ApiOperation("查询两楼每日过检图像数")
    @GetMapping("/dailyTerminalLuggageTrend")
    public AjaxResult getDailyTerminalLuggageTrend(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyBrigadeTerminalLuggageStatsDTO> resultList = blockedDashboardService.getDailyBrigadeTerminalLuggageStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询两楼查堵数（包含行检）
     * 数据来源：漏检统计表
     * 先查大队数量，再查T1、T2数量
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 两楼查堵数统计
     */
    @ApiOperation("查询两楼查堵数（包含行检）")
    @GetMapping("/terminalBlockedStats")
    public AjaxResult getTerminalBlockedStats(BlockedDashboardQueryDTO queryDTO) {
        BlockedTerminalStatsDTO result = blockedDashboardService.getTerminalBlockedStats(queryDTO);
        return success(result);
    }

    /**
     * 查询查堵时间段过检行李数
     * 数据源：每日各时间段过检行李数
     * 维度(横轴)：时间段
     * 统计值(左坐标轴)：过检行李数平均值
     * 统计值(右坐标轴)：时段查堵件数平均值
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 时间段过检行李数统计列表
     */
    @ApiOperation("查询查堵时间段过检行李数")
    @GetMapping("/timePeriodLuggageStats")
    public AjaxResult getTimePeriodLuggageStats(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedTimePeriodLuggageStatsDTO> resultList = blockedDashboardService.getTimePeriodLuggageStats(queryDTO);
        return success(resultList);
    }

    /**
     * 查询两楼每日查堵万分率
     * 数据源：各大队每日过检行李查堵数据收集表
     * 按时间统计T2旅检万分率、T1旅检万分率、T1行检万分率、T2行检万分率
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 两楼每日查堵万分率统计列表
     */
    @ApiOperation("查询两楼每日查堵万分率")
    @GetMapping("/dailyTerminalRateTrend")
    public AjaxResult getDailyTerminalRateTrend(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDailyBrigadeTerminalRateStatsDTO> resultList = blockedDashboardService.getDailyBrigadeTerminalRateStats(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);
    }


    /**
     * 查询查堵-主管排行榜
     * 数据源：漏检统计表
     * 数据筛选：分管主管不为空
     * 排行字段：分管主管
     * 排行依据：统计记录总数
     * 显示行数：显示前10行
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 主管排行榜列表（前10名）
     */
    @ApiOperation("查堵-主管排行榜")
    @GetMapping("/supervisorRanking")
    public AjaxResult getSupervisorRanking(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getBrigadeSupervisorRanking(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-班组排行榜
     * 数据源：漏检统计表
     * 数据筛选：分管班组长不为空
     * 排行字段：分管班组长
     * 排行依据：统计记录总数
     * 显示行数：显示前10行
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 班组排行榜列表（前10名）
     */
    @ApiOperation("查堵-班组排行榜")
    @GetMapping("/teamLeaderRanking")
    public AjaxResult getTeamLeaderRanking(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getBrigadeTeamLeaderRanking(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-人员排行榜
     * 数据源：漏检统计表
     * 数据筛选：被回查人不为空
     * 排行字段：被回查人
     * 排行依据：统计记录总数
     * 显示行数：显示前10行
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 人员排行榜列表（前10名）
     */
    @ApiOperation("查堵-人员排行榜")
    @GetMapping("/reviewedUserRanking")
    public AjaxResult getReviewedUserRanking(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getBrigadeReviewedUserRanking(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵男女比例
     * 数据来源：漏检统计表
     * 统计性别分布
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 男女比例统计列表
     */
    @ApiOperation("查询查堵男女比例")
    @GetMapping("/genderDistribution")
    public AjaxResult getGenderDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedGenderDistributionDTO> resultList = blockedDashboardService.getGenderDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵人员证书级别分布
     * 数据来源：漏检统计表
     * 统计证书级别分布
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 证书级别分布统计列表
     */
    @ApiOperation("查询查堵人员证书级别分布")
    @GetMapping("/certificateLevelDistribution")
    public AjaxResult getCertificateLevelDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardService.getCertificateLevelDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询证书级别人员基数
     * 分大队统计，大队人员里面的人员证书级别构成
     * 数据源：用户表(sys_user) + 部门表(sys_dept)
     *
     * @param queryDTO 查询参数（大队ID必填）
     * @return 证书级别人员基数统计列表
     */
    @ApiOperation("查询证书级别人员基数")
    @GetMapping("/personnelCertificateBase")
    public AjaxResult getPersonnelCertificateBase(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardService.getBrigadePersonnelCertificateBase(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 查询参数（开始时间、结束时间、大队ID）
     * @return 简单/困难图像数统计列表
     */
    @ApiOperation("查询查堵-简单/困难图像数")
    @GetMapping("/difficultyDistribution")
    public AjaxResult getDifficultyDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedDifficultyDistributionDTO> resultList = blockedDashboardService.getDifficultyDistribution(queryDTO);
        return success(resultList);
    }

    /**
     * 查询查堵-主管分管次数分布
     * 数据来源：漏检统计表
     * 统计字段：分管主管
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 主管分管次数分布统计列表
     */
    @ApiOperation("查询查堵-主管分管次数分布")
    @GetMapping("/supervisorDistribution")
    public AjaxResult getSupervisorDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedRankingDTO> resultList = blockedDashboardService.getSupervisorDistribution(queryDTO);
        return success(resultList);
    }

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

    /**
     * 查询查堵人员开机年限分布
     * 数据来源：漏检统计表
     * 统计字段：开机年限
     *
     * @param queryDTO 查询参数（开始时间、结束时间、大队ID）
     * @return 开机年限分布统计列表
     */
    @ApiOperation("查询查堵人员开机年限分布")
    @GetMapping("/operatingYearsDistribution")
    public AjaxResult getOperatingYearsDistribution(BlockedDashboardQueryDTO queryDTO) {
        List<BlockedOperatingYearsDistributionDTO> resultList = blockedDashboardService.getOperatingYearsDistribution(queryDTO);
        return success(resultList);
    }
}
