package com.diagbot.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.diagbot.dto.AverageStatisticsDTO;
import com.diagbot.dto.DeptEntryNumDTO;
import com.diagbot.dto.DeptNumDTO;
import com.diagbot.dto.EntryNumDTO;
import com.diagbot.dto.EntryNumGroupDTO;
import com.diagbot.dto.NumDTO;
import com.diagbot.dto.QcResultPercentDTO;
import com.diagbot.entity.QcresultInfo;
import com.diagbot.vo.FilterPageByDeptVO;
import com.diagbot.vo.FilterPageVO;
import com.diagbot.vo.FilterVO;
import com.diagbot.vo.QcresultFilterVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 质控评分结果信息
每次评分增加一条信息，前面所有评分is_deleted全部设置为Y 服务类
 * </p>
 *
 * @author zhoutg
 * @time: 2024-04-13
 */
public interface QcresultInfoService extends IService<QcresultInfo> {

    /**
     * 筛选质控记录
     *
     * @param qcresultFilterVO
     * @return
     */
    public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);

    /**
     * 质控病历数统计
     *
     * @param qcresultFilterVO
     * @return
     */
    public int resultCount(QcresultFilterVO qcresultFilterVO);


    /**
     * 按科室统计各等级病历百分比
     *
     * @param filterVO
     * @return
     */
    public List<QcResultPercentDTO> levelPercentGroupByDept(FilterVO filterVO);

    /**
     * 按模块统计缺陷数
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> entryCountGroupByCase(FilterVO filterVO);

    /**
     * 条目缺陷分组统计
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> entryCountGroupByEntry(FilterVO filterVO);

    /**
     * 质控平均分按科室统计
     *
     * @param filterVO
     * @return
     */
    public List<AverageStatisticsDTO> getAverageScore(FilterVO filterVO);

    /**
     * 按科室统计质控病历数
     *
     * @param qcresultFilterVO
     * @return
     */
    public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO);


    /**
     * 各模块缺陷占比（分页）
     *
     * @param filterPageVO
     * @return
     */
    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);

    /**
     * 缺陷详情（分页）
     *
     * @param filterPageVO
     * @return
     */
    public IPage<EntryNumGroupDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);

    /**
     * 各科室质控平均分（分页）
     *
     * @param filterPageVO
     * @return
     */
    public IPage<AverageStatisticsDTO> getAverageScoreByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);

    /**
     * 各科室甲级病历占比排行（分页）
     *
     * @param filterPageVO
     * @return
     */
    public IPage<QcResultPercentDTO> levelPercentGroupByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);


    /**
     * 条目缺陷占比（内页）
     *
     * @return
     */
    public IPage<EntryNumDTO> entryGroupByEntryInnerPage(@Param("filterPageVO") FilterPageVO filterPageVO);

    /**
     * 各科室质控平均分（首页）-根据内外科系统统计
     *
     * @param filterVO
     * @return
     */
    public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO);

    /**
     * 单项否决缺陷占比
     *
     * @param filterVO
     * @return
     */
    public List<EntryNumDTO> entryRejectPercent(FilterVO filterVO);

    /**
     * 各科室甲/乙/丙级病历占比
     *
     * @param filterVO
     * @return
     */
    public List<DeptNumDTO> qcResultLevelPercent(FilterVO filterVO);
}