package com.sundot.airport.item.mapper;

import com.sundot.airport.common.core.domain.BaseLargeScreenQueryParamDto;
import com.sundot.airport.common.core.domain.SysUsageReportSeizureDto;
import com.sundot.airport.item.domain.*;
import com.sundot.airport.item.domain.dto.ConcealmentPositionTop1DTO;
import com.sundot.airport.item.domain.dto.ProhibitedItemsTop3DTO;
import com.sundot.airport.item.domain.push.SeizureMessagePushDTO;
import org.apache.ibatis.annotations.Param;

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

/**
 * 查获大屏Mapper接口
 *
 * @author ruoyi
 * @date 2025-07-08
 */
public interface ItemLargeScreenMapper {

    /**
     * 查获总数
     *
     * @param dto 大屏查询参数
     * @return 查获总数
     */
    public BigDecimal getTotalSum(BaseLargeScreenQueryParamDto dto);

    /**
     * 移交公安情况
     *
     * @param dto 大屏查询参数
     * @return 移交公安情况
     */
    public List<ItemLargeScreenInfoDto> police(BaseLargeScreenQueryParamDto dto);

    /**
     * 故意隐匿情况
     *
     * @param dto 大屏查询参数
     * @return 故意隐匿情况
     */
    public List<ItemLargeScreenInfoDto> conceal(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获类别分布
     *
     * @param dto 大屏查询参数
     * @return 查获类别分布
     */
    public List<ItemLargeScreenCommonDto> category(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获岗位分布
     *
     * @param dto 大屏查询参数
     * @return 查获岗位分布
     */
    public List<ItemLargeScreenCommonDto> post(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获总数量+移交公安数量+故意隐匿数量
     *
     * @param dto 大屏查询参数
     * @return 查获总数量+移交公安数量+故意隐匿数量
     */
    public ItemLargeScreenTotalSomeDto getTotalSome(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获总数量+移交公安数量+故意隐匿数量
     *
     * @param dto 大屏查询参数
     * @return 查获总数量+移交公安数量+故意隐匿数量
     */
    public ItemLargeScreenTotalSomeDto getPcTotalSome(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获排名-按大队
     *
     * @param dto 大屏查询参数
     * @return 查获排名-按大队
     */
    public List<ItemLargeScreenCommonDto> rankByBrigade(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获排名-按科室
     *
     * @param dto 大屏查询参数
     * @return 查获排名-按科室
     */
    public List<ItemLargeScreenCommonDto> rankByDepartment(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获排名-按班组
     *
     * @param dto 大屏查询参数
     * @return 查获排名-按科室
     */
    public List<ItemLargeScreenCommonDto> rankByTeam(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获排名-按个人
     *
     * @param dto 大屏查询参数
     * @return 查获排名-按科室
     */
    public List<ItemLargeScreenCommonDto> rankByIndividual(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获时段分布
     *
     * @param dto 大屏查询参数
     * @return 查获时段分布
     */
    public List<ItemLargeScreenTimeSpanDto> timeSpan(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获位置分布
     *
     * @param dto 大屏查询参数
     * @return 查获位置分布
     */
    public List<ItemLargeScreenPositionDto> position(BaseLargeScreenQueryParamDto dto);

    /**
     * 查获通道分布
     *
     * @param dto 大屏查询参数
     * @return 查获通道分布
     */
    public List<ItemLargeScreenChannelDto> channel(BaseLargeScreenQueryParamDto dto);

    /**
     * app端 查获位置分布
     *
     * @param dto
     * @return
     */
    List<ItemLargeScreenPositionAppDto> appPosition(BaseLargeScreenQueryParamDto dto);

    /**
     * 按天统计查获趋势数据
     *
     * @param dto 查询参数
     * @return 按天统计的查获数据
     */
    List<ItemLargeScreenDailyTrendDto> dailyTrend(BaseLargeScreenQueryParamDto dto);

    /**
     * 获取在岗时长
     *
     * @param dto 查询参数
     * @return 在岗时长（分钟）
     */
    BigDecimal getWorkDuration(BaseLargeScreenQueryParamDto dto);

    /**
     * 获取大队在岗时长
     *
     * @param dto 查询参数
     * @return 大队在岗时长（分钟）
     */
    BigDecimal getBrigadeWorkDuration(BaseLargeScreenQueryParamDto dto);

    /**
     * 获取科室在岗时长
     *
     * @param dto 查询参数
     * @return 科室在岗时长（分钟）
     */
    BigDecimal getDepartmentWorkDuration(BaseLargeScreenQueryParamDto dto);

    /**
     * 批量获取个人在岗时长
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param userIds   用户ID列表
     * @return 用户ID到工作时长的映射
     */
    List<ItemLargeScreenWorkDurationDto> getBatchIndividualWorkDuration(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("userIds") List<Long> userIds);

    /**
     * 批量获取班组在岗时长
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param teamIds   班组ID列表
     * @return 班组ID到工作时长的映射
     */
    List<ItemLargeScreenWorkDurationDto> getBatchTeamWorkDuration(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("teamIds") List<Long> teamIds);

    /**
     * 查询全站查获违禁品 TOP3
     *
     * @param dto 查询参数
     */
    List<ProhibitedItemsTop3DTO> selectProhibitedItemsTop3(BaseLargeScreenQueryParamDto dto);

    /**
     * 查询隐匿重点部位 Top1
     * 统计隐匿夹带（is_active_concealment=1）的违禁品被查获最多的部位（一级和二级）
     *
     * @param dto 查询参数
     * @return 隐匿重点部位 Top1，包含一级部位、二级部位、查获数量
     */
    List<ConcealmentPositionTop1DTO> selectConcealmentPositionTop1(BaseLargeScreenQueryParamDto dto);

    /**
     * 使用报表-运行情况-查获模块
     *
     * @param dto 查询参数
     * @return 使用报表-运行情况-查获模块数据
     */
    List<SysUsageReportSeizureDto> getSeizureModule(BaseLargeScreenQueryParamDto dto);

    /**
     * X 光机漏检数据
     *
     * @param dto 查询参数
     * @return X 光机漏检数据
     */
    List<ItemXRayMissCheckDto> xRayMissCheck(BaseLargeScreenQueryParamDto dto);

    /**
     * X 光机漏检人员统计 TOP3
     *
     * @param dto 查询参数
     * @return 漏检数量排名前 3 的开机员
     */
    List<ItemXRayMissCheckUserStatsDto> xRayMissCheckUserStatsTop3(BaseLargeScreenQueryParamDto dto);


    /**
     * 查询移交公安违禁品 TOP3
     *
     * @param dto 查询参数
     * @return 移交公安违禁品 TOP3 列表
     */
    List<SeizureMessagePushDTO.ProhibitedItemTop3> selectProhibitedItemsTop3ForPush(BaseLargeScreenQueryParamDto dto);

    /**
     * 查询故意隐匿物品藏匿部位 TOP3
     *
     * @param dto 查询参数
     * @return 故意隐匿物品藏匿部位 TOP3 列表
     */
    List<SeizureMessagePushDTO.ConcealmentPositionTop3> selectConcealmentPositionsTop3ForPush(BaseLargeScreenQueryParamDto dto);

    /**
     * 查询移交公安违禁品高发通道 TOP3
     *
     * @param dto 查询参数
     * @return 移交公安违禁品高发通道 TOP3 列表
     */
    List<SeizureMessagePushDTO.HighRiskChannelTop3> selectHighRiskChannelsTop3ForPush(BaseLargeScreenQueryParamDto dto);

}