package com.sundot.airport.item.mapper;

import com.sundot.airport.item.domain.portrait.SeizureStats;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;

/**
 * 查获物统计Mapper接口
 */
@Mapper
public interface ItemSeizureStatsMapper {

    /**
     * 查询个人有效查获数量
     *
     * @param userId    用户ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 有效查获数量
     */
    Long selectPersonalEffectiveSeizureCount(@Param("userId") Long userId,
                                             @Param("startTime") Date startTime,
                                             @Param("endTime") Date endTime);

    /**
     * 查询个人故意隐匿查获数量
     *
     * @param userId    用户ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 故意隐匿查获数量
     */
    Long selectPersonalWillfulConcealmentCount(@Param("userId") Long userId,
                                               @Param("startTime") Date startTime,
                                               @Param("endTime") Date endTime);

    /**
     * 查询个人移交公安查获数量
     *
     * @param userId    用户ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 移交公安查获数量
     */
    Long selectPersonalReferToPoliceCount(@Param("userId") Long userId,
                                          @Param("startTime") Date startTime,
                                          @Param("endTime") Date endTime);

    /**
     * 查询班组有效查获总量
     *
     * @param teamId    班组ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 有效查获总量统计
     */
    SeizureStats selectTeamEffectiveSeizureCount(@Param("teamId") Long teamId,
                                                 @Param("startTime") Date startTime,
                                                 @Param("endTime") Date endTime);

    /**
     * 查询班组故意隐匿查获总量
     *
     * @param teamId    班组ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 故意隐匿查获总量统计
     */
    SeizureStats selectTeamWillfulConcealmentCount(@Param("teamId") Long teamId,
                                                   @Param("startTime") Date startTime,
                                                   @Param("endTime") Date endTime);

    /**
     * 查询班组移交公安查获总量
     *
     * @param teamId    班组ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 移交公安查获总量统计
     */
    SeizureStats selectTeamReferToPoliceCount(@Param("teamId") Long teamId,
                                              @Param("startTime") Date startTime,
                                              @Param("endTime") Date endTime);

    /**
     * 查询科室有效查获总量
     *
     * @param departmentId 科室ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @return 有效查获总量统计
     */
    SeizureStats selectDepartmentEffectiveSeizureCount(@Param("departmentId") Long departmentId,
                                                       @Param("startTime") Date startTime,
                                                       @Param("endTime") Date endTime);

    /**
     * 查询大队有效查获总量
     *
     * @param brigadeId 大队ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 有效查获总量统计
     */
    SeizureStats selectBrigadeEffectiveSeizureCount(@Param("brigadeId") Long brigadeId,
                                                    @Param("startTime") Date startTime,
                                                    @Param("endTime") Date endTime);

    /**
     * 查询科室故意隐匿查获总量
     *
     * @param departmentId 科室ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @return 故意隐匿查获总量统计
     */
    SeizureStats selectDepartmentWillfulConcealmentCount(@Param("departmentId") Long departmentId,
                                                         @Param("startTime") Date startTime,
                                                         @Param("endTime") Date endTime);

    /**
     * 查询大队故意隐匿查获总量
     *
     * @param brigadeId 大队ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 故意隐匿查获总量统计
     */
    SeizureStats selectBrigadeWillfulConcealmentCount(@Param("brigadeId") Long brigadeId,
                                                      @Param("startTime") Date startTime,
                                                      @Param("endTime") Date endTime);

    /**
     * 查询科室移交公安查获总量
     *
     * @param departmentId 科室ID
     * @param startTime    开始时间
     * @param endTime      结束时间
     * @return 移交公安查获总量统计
     */
    SeizureStats selectDepartmentReferToPoliceCount(@Param("departmentId") Long departmentId,
                                                    @Param("startTime") Date startTime,
                                                    @Param("endTime") Date endTime);

    /**
     * 查询大队移交公安查获总量
     *
     * @param brigadeId 大队ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 移交公安查获总量统计
     */
    SeizureStats selectBrigadeReferToPoliceCount(@Param("brigadeId") Long brigadeId,
                                                 @Param("startTime") Date startTime,
                                                 @Param("endTime") Date endTime);

    /**
     * 查询机构站有效查获总量
     *
     * @param stationId 机构站ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 有效查获总量统计
     */
    SeizureStats selectStationEffectiveSeizureCount(@Param("stationId") Long stationId,
                                                    @Param("startTime") Date startTime,
                                                    @Param("endTime") Date endTime);

    /**
     * 查询机构站故意隐匿查获总量
     *
     * @param stationId 机构站ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 故意隐匿查获总量统计
     */
    SeizureStats selectStationWillfulConcealmentCount(@Param("stationId") Long stationId,
                                                      @Param("startTime") Date startTime,
                                                      @Param("endTime") Date endTime);

    /**
     * 查询机构站移交公安查获总量
     *
     * @param stationId 机构站ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 移交公安查获总量统计
     */
    SeizureStats selectStationReferToPoliceCount(@Param("stationId") Long stationId,
                                                 @Param("startTime") Date startTime,
                                                 @Param("endTime") Date endTime);
}