package com.diagbot.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.diagbot.dto.*;
import com.diagbot.entity.BehospitalInfo;
import com.diagbot.vo.*;
import org.apache.ibatis.annotations.Param;

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

/**
 * <p>
 * 住院病历信息 服务类
 * </p>
 *
 * @author zhoutg
 * @since 2020-04-13
 */
public interface BehospitalInfoService extends IService<BehospitalInfo> {

    public IPage<BehospitalInfoDTO> getPage(BehospitalPageVO behospitalPageVO);

    public List<MsgDTO> getMsg(AnalyzeVO analyzeVO);

    public List<MsgDTO> getMsgByEntryCode(AnalyzeCodeVO analyzeCodeVO);

    /**
     * 各科室缺陷占比-全院-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> entryByDept(FilterVO filterVO);

    /**
     * 质控结果缺陷总数查询
     *
     * @param filterVO
     * @return
     */
    public int getTotleResultNum(FilterVO filterVO);


    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);

    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);

    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);

    IPage<BehospitalInfoDTO> getPageByGroup(BehospitalPageVO behospitalPageVO);

    /**
     * 出院总人数统计-全院-首页
     *
     * @param filterVO
     * @return
     */
    public int leaveHosCount(FilterVO filterVO);

    /**
     * 新生儿出院人数统计-全院-首页
     *
     * @param filterVO
     * @return
     */
    public int newBornCount(FilterVO filterVO);

    /**
     * 死亡人数统计-全院-首页
     *
     * @param filterVO
     * @return
     */
    public int deathCount(FilterVO filterVO);

    /**
     * 手术人数统计-全院-首页
     *
     * @param filterVO
     * @return
     */
    public int operationCount(FilterVO filterVO);

    /**
     * 病案管理指标（内页）
     *
     * @param timeVo
     * @return
     */
    public Map<String, Object> getBaseIndex(MedIndexFilterVO timeVo);

    /**
     * 病案管理规则质控参数查询
     *
     * @param filterVO
     * @return
     */
    public Map<String, Object> getCountByEntry(FilterVO filterVO);

    /**
     * 病案管理规则质控病历参数查询
     *
     * @param filterVO
     * @return
     */
    public List<MedManageParamsDTO> getMedManageParams(FilterVO filterVO);


    /**
     * 出院总人数统计-科室-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> leaveHosCountByDept(FilterVO filterVO);

    /**
     * 病历质控报表-科室
     *
     * @param behospitalPageVO
     * @return
     */
    public IPage<QualityControlDeptDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);

    /**
     * 入院总人数统计-科室-首页
     *
     * @param filterVO
     * @return
     */
    public List<AdmissionCountDTO> admissionHosCountByDept(FilterVO filterVO);


    /**
     * 新生儿出院人数统计-科室-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> newBornCountByDept(FilterVO filterVO);

    /**
     * 死亡人数统计-科室-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> deathCountByDept(FilterVO filterVO);

    /**
     * 手术人数统计-科室-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> operationCountByDept(FilterVO filterVO);

    /**
     * 各科室缺陷占比排行（分页）
     *
     * @param filterPageVO
     * @return
     */
    public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);

    /**
     * 各科室缺陷占比（组合）
     *
     * @param filterOrderVO
     * @return
     */
    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO);

    /**
     * 病案首页合格率占比
     *
     * @param filterOrderVO
     * @return
     */
    public List<HomePageNumDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);

    /**
     * 医师病案首页合格率占比 湘雅定制
     *
     * @param filterOrderXYPageVO
     * @return
     */
    public IPage<HomePageNumXYDTO> homePageLevelStatisticsXY(FilterOrderXYPageVO filterOrderXYPageVO);


    /**
     * 病历质控报表-扣分项
     *
     * @param caseScoreVO
     * @return
     */
    public List<QualityControlDTO> getQualityCase(CaseScoreVO caseScoreVO);

    /**
     * 病历质控报表-扣分
     *
     * @param caseScoreVO
     * @return
     */
    public List<QualityControlDTO> getQualitySorce(CaseScoreVO caseScoreVO);

    /**
     * 病历质控报表
     *
     * @param caseScoreVO
     * @return
     */
    public List<CaseScoreDTO> getQualityCaseSorce(CaseScoreVO caseScoreVO);

    /**
     * 病历质控报表-科室
     *
     * @param caseScoreVO
     * @return
     */
    public List<CaseScoreDTO> getQualityCaseSorceByDept(CaseScoreVO caseScoreVO);


    /**
     * 病历质控报表
     *
     * @param behospitalPageVO
     * @return
     */
    public IPage<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO);

    /**
     * 病历质控报表-科室
     *
     * @param behospitalPageVO
     * @return
     */
    public IPage<QualityControlDTO> getQualityControlExport(BehospitalPageVO behospitalPageVO);

    /**
     * 各科室缺陷占比（主任医生）
     *
     * @param filterOrderVO
     * @return
     */
    public List<LevelStsByDeptDTO> levelStatisticsByDept(FilterOrderVO filterOrderVO);

    /**
     * 单条条目缺陷统计-首页
     *
     * @param filterVO
     * @return
     */
    public List<AdmissionCountDTO> casesEntryStatisticsByDept(FilterVO filterVO);

    /**
     * 病案首页合格率占比（主任医生）
     *
     * @param filterOrderByDeptVO
     * @return
     */
    public List<HomePageByDeptDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);


    /**
     * 缺陷明细-科室（分页）
     *
     * @param filterPageByDeptVO
     * @return
     */
    public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);

    /**
     * 各科室缺陷占比（组合）-全院-根据内外科系统统计（关联上级科室）
     *
     * @param filterOrderVO
     * @return
     */
    public List<LevelStatisticsTZDTO> levelStatisticsByDeptClass(FilterOrderVO filterOrderVO);

    /**
     * 各科室缺陷占比（组合）-全院-根据内外科系统统计（台州）
     *
     * @param filterOrderVO
     * @return
     */
    public List<LevelStatisticsTZDTO> levelStatisticsByDeptClass_TZ(FilterOrderVO filterOrderVO);

    List<ExportExcelDTO> exportExcel();

    /**
     * 质控评分导出到excel
     *
     * @param exportQcresultVO
     * @return
     */
    public List<ExportExcelDTO> exportQcresult(ExportQcresultVO exportQcresultVO);

    /**
     * 个人质控评分导出到excel
     *
     * @param exportQcresultVO
     * @return
     */
    public List<ExportExcelDTO> exportQcresultByPerson(ExportQcresultVO exportQcresultVO);


    /**
     * 科室质控评分导出到excel
     *
     * @param exportQcresultVO
     * @return
     */
    public List<ExportExcelDTO> exportQcresultByDept(ExportQcresultVO exportQcresultVO);

    /**
     * 科室质控评分导出到excel
     *
     * @param exportQcresultVO
     * @return
     */
    public List<ExportExcelDTO> exportQcresultByGroup(ExportQcresultVO exportQcresultVO);

    /**
     * 条目缺陷质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> qcResultShortPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 条目缺陷质控评分页-科室（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> qcResultShortByDeptPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 关键条目缺陷占比统计
     *
     * @param entryStatisticsVO
     * @return
     */
    public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO);

    /**
     * 关键条目缺陷占比统计-科室
     *
     * @param entryStatisticsVO
     * @return
     */
    public List<EntryStasByDeptDTO> entryStatisticsByDept(EntryStatisticsVO entryStatisticsVO);


    /**
     * 非医嘱离院病人记录
     *
     * @param filterVO
     * @return
     */
    public int nonAdviceCount(FilterVO filterVO);

    /**
     * 31天内再入院记录
     *
     * @param filterVO
     * @return
     */
    public int get31DaysBehospitalCount(FilterVO filterVO);

    /**
     * 病案首页质控病历数统计-全院（首页）
     *
     * @param filterVO
     * @return
     */
    public HomePageNumDTO homePageQcPercent(FilterVO filterVO);

    /**
     * 病案首页完整率统计-全院（首页）
     *
     * @param filterVO
     * @return
     */
    public HomePageNumDTO hmEmptyEntryPercent(FilterVO filterVO);

    /**
     * 离院病人质控评分详情页
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> leaveHosMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 离院病人质控评分详情页-科室
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> leaveHosMRPageByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 改善率统计-全院（首页）
     *
     * @param filterVO
     * @return
     */
    public HomePageImproveDTO homePageImproveCount(FilterVO filterVO);

    /**
     * 质控核查统计（内页）
     *
     * @param filterOrderVO
     * @return
     */
    public List<HomePageImproveDTO> qcCheckStatistics(FilterOrderVO filterOrderVO);

    /**
     * 质控核查统计-科室（内页）
     *
     * @param filterOrderVO
     * @return
     */
    public List<ImproveByDeptDTO> qcCheckStatisticsByDept(FilterOrderVO filterOrderVO);

    /**
     * 离院病人质控评分详情页导出到excel
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelDTO> leaveHosMRPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 离院病人质控评分详情-科室 页导出到excel
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelByDeptDTO> leaveHosMRPageExportByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);


    /**
     * 条目缺陷质控评分详情页导出到excel
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelDTO> qcResultShortPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 缺陷详情质控评分页导出-科室
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelByDeptDTO> qcResultShortByDeptPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 未整改病历统计
     *
     * @param filterUnModifyMRVO
     * @return
     */
    public List<UnModifyMRDetailDTO> unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO);

    /**
     * 未整改病历统计-科室
     *
     * @param filterUnModifyMRVO
     * @return
     */
    public List<UnModifyMRDetailDTO> unModifyMRSByDept(FilterUnModifyMRVO filterUnModifyMRVO);

    /**
     * 病历稽查表
     *
     * @return
     */
    IPage<MedicalCheckDTO> getMedicalCheck(FilterMedicalCheckVO filterVO, @Param("casesEntryIds") List<Long> casesEntryIds);

    /**
     * 病历稽查表
     *
     * @return
     */
    IPage<MedicalCheckDTO> getMedicalChecks(FilterMedicalCheckVO filterVO, @Param("casesEntryIds") List<Long> casesEntryIds);

    /**
     * 病历稽查表导出
     *
     * @return
     */
    List<MedicalCheckExportDTO> getMedicalCheckExport(FilterMedicalCheckVO filterVO);

    /**
     * 病历稽查表导出-科室
     *
     * @return
     */
    List<MedicalDeptDTO> medicalCheckExportByDept(FilterMedicalCheckVO filterVO);


    /**
     * 未整改病历质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> unModifyMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 未整改病历质控评分页-科室（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> unModifyMRByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 不合格数病历号（内页）
     *
     * @param qcResultPageVO
     * @return
     */
    public IPage<QcResultShortDTO> badLevelPage(@Param("qcResultPageVO") QcResultPageVO qcResultPageVO);

    /**
     * 未整改病历缺陷评分详情页导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelDTO> unModifyMRPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);


    /**
     * 未整改病历缺陷评分详情页导出-科室
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelByDeptDTO> unModifyExportByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);


    /**
     * 病案首页不合格/合格数病历详情页导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelDTO> badLevelPagePageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 病案首页不合格/合格数病历详情页导出-科室
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelByDeptDTO> homePageOrLevelExportByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);


    /**
     * 31天再入院详情页
     *
     * @param reBeHosPageVO
     * @return
     */
    public IPage<ReBeHosMergeDTO> reHos31DaysPage(@Param("reBeHosPageVO") ReBeHosPageVO reBeHosPageVO);

    /**
     * 31天再入院详情页
     *
     * @param reBeHosPageVO
     * @return
     */
    public IPage<ReBeHosMergeDTO> reHos31DaysPageByDept(@Param("reBeHosPageVO") ReBeHosPageVO reBeHosPageVO);

    /**
     * 入院人数统计-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> beHosCount(FilterVO filterVO);

    /**
     * 单条条目缺陷统计-首页
     *
     * @param filterVO
     * @return
     */
    public List<NumDTO> casesEntryStatisticsById(FilterVO filterVO);

    /**
     * 病案首页改善率质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> hmImproveMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 病案首页改善率质控评分页-科室（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> hmImproveMRPageByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 病案首页改善率质控评分页导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelDTO> hmImproveMRPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 病案首页改善率质控评分页导出-科室
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelByDeptDTO> improveMRExportByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 质控核查质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> qcCheckMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);


    /**
     * 质控核查质控评分页-科室（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    public IPage<QcResultShortDTO> qcCheckMRPageByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 质控核查质控评分页导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelDTO> qcCheckMRPageExport(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);

    /**
     * 质控核查质控评分页-科室 导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    public List<ExportExcelByDeptDTO> qcCheckMRPageExportByDept(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO);


    /**
     * 手术费，抗菌药物，手术和病理费等含有人数
     *
     * @param filterVO
     * @return
     */
    public List<Map<String, String>> selectOperationNum(@Param("filterVO") FilterVO filterVO);

    /**
     * 触发规则人数
     *
     * @param filterVO
     * @return
     */
    public Map<String, Long> triggeringRules(@Param("filterVO") FilterVO filterVO);

    /**
     * 病案首页关联的出院病历
     *
     * @param filterVO
     * @return
     */
    public List<Map<String, String>> getMedicalRecords(@Param("filterVO") FilterVO filterVO);

    /**
     * 首页恶性肿瘤人数
     *
     * @param filterVO
     * @return
     */
    public List<Map<String, String>> malignancy(@Param("filterVO") FilterVO filterVO);

    /**
     * 病历详情（H5）
     *
     * @param behInfoForH5VO
     * @return
     */
    IPage<BehInfoForH5DTO> behospitalInfoForH5(BehInfoForH5VO behInfoForH5VO);

}
