package com.diagbot.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.diagbot.dto.*;
import com.diagbot.entity.QcresultInfo;
import com.diagbot.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 质控评分结果信息
每次评分增加一条信息，前面所有评分is_deleted全部设置为Y Mapper 接口
 * </p>
 *
 * @author zhoutg
 * @since 2020-04-13
 */
public interface QcresultInfoMapper extends BaseMapper<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);

    public List<Map<String, Object>> resultMrCountByDept(QcresultFilterVO qcresultFilterVO);

    /**
     * 各模块缺陷占比-按科室
     *
     * @param filterVO
     * @return
     */
    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterVO filterVO);

    /**
     * 条目缺陷占比-按科室
     *
     * @param filterVO
     * @return
     */
    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterVO filterVO);

    /**
     * 各模块缺陷占比（分页）
     *
     * @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<EntryNumGroupDTO> entryCountGroupXYByEntryPage(@Param("filterPageVO") FilterPageXYVO filterPageVO);

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

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

    /**
     * 各模块缺陷占比-科室（分页）
     *
     * @param filterPageByDeptVO
     * @return
     */
    public IPage<NumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);

    /**
     * 缺陷详情-科室（分页）
     *
     * @param filterPageByDeptVO
     * @return
     */
    public IPage<EntryNumGroupDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
    /**
     * 条目缺陷占比基础数据（内页）
     *
     * @return
     */
    public IPage<EntryNumDTO> entryGroupByEntryInnerPage(@Param("filterPageVO") FilterPageVO filterPageVO);
    /**
     * 病历等级占比
     *
     * @param filterVO
     * @return
     */
    List<LevelPercentDTO> levelPercentByDept(FilterVO filterVO);
    /**
     * 条目缺陷总数（内页）
     *
     * @return
     */
    public Integer entryGroupByEntrySum(@Param("hospitalId") String hospitalId, @Param("isPlacefile") String isPlacefile, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 条目缺陷分值统计（内页）
     *
     * @return
     */
    public List<EntryNumDTO> entryGroupByEntryScore(@Param("hospitalId") String hospitalId, @Param("isPlacefile") String isPlacefile, @Param("ids") Set<Long> ids);

    /**
     * 条目缺陷占比-科室（内页）
     *
     * @param filterPageByDeptVO
     * @return
     */
    public IPage<DeptEntryNumDTO> entryGroupByEntryAndDeptInnerPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);

    /**
     * 各科室质控平均分（首页）-根据内外科系统统计
     *
     * @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);

    /**
     * 历史评分
     * @param historyAnalyzePageVO
     * @return
     */
    public IPage<QcCasesHistoryDTO> getMedQcresultResult(HistoryAnalyzePageVO historyAnalyzePageVO);
    /**
     * 病历扣分大于等于5占比
     *
     * @param filterVO
     * @return
     */
    public List<DeptNumDTO> deductGT5ByDept(FilterVO filterVO);
}
