package com.sundot.airport.item.service;

import com.sundot.airport.item.domain.portrait.SeizureStats;

import java.util.Date;

/**
 * 查获物统计服务接口
 */
public interface IItemSeizureStatsService {

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

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

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

    /**
     * 查询组织有效查获总量
     *
     * @param deptId    部门ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 有效查获总量统计
     */
    SeizureStats getOrgEffectiveSeizureCount(Long deptId, Date startTime, Date endTime);

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

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

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

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

    /**
     * 查询组织故意隐匿查获总量
     *
     * @param deptId    部门ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 故意隐匿查获总量统计
     */
    SeizureStats getOrgWillfulConcealmentCount(Long deptId, Date startTime, Date endTime);

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

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

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

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

    /**
     * 查询组织移交公安查获总量
     *
     * @param deptId    部门ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 移交公安查获总量统计
     */
    SeizureStats getOrgReferToPoliceCount(Long deptId, Date startTime, Date endTime);

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

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

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

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