package com.diagbot.web;

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

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.diagbot.annotation.SysLogger;
import com.diagbot.dto.AverageStatisticsDTO;
import com.diagbot.dto.AverageStatisticsFeeDTO;
import com.diagbot.dto.ColumnDTO;
import com.diagbot.dto.DeptNumDTO;
import com.diagbot.dto.EntryNumDTO;
import com.diagbot.dto.EntryNumGroupDTO;
import com.diagbot.dto.EntryStatisticsDTO;
import com.diagbot.dto.HomePageImproveDTO;
import com.diagbot.dto.HomePageNumDTO;
import com.diagbot.dto.LevelStatisticsDTO;
import com.diagbot.dto.LevelStatisticsTZDTO;
import com.diagbot.dto.MedicalCheckDTO;
import com.diagbot.dto.NumDTO;
import com.diagbot.dto.QcResultShortDTO;
import com.diagbot.dto.QualityControlDTO;
import com.diagbot.dto.ReBeHosDTO;
import com.diagbot.dto.RespDTO;
import com.diagbot.dto.SjcfStatisticsDTO;
import com.diagbot.dto.UnModifyMRDTO;
import com.diagbot.facade.ConsoleFacade;
import com.diagbot.vo.BehospitalPageVO;
import com.diagbot.vo.EntryStatisticsVO;
import com.diagbot.vo.FilterMedicalCheckVO;
import com.diagbot.vo.FilterOrderVO;
import com.diagbot.vo.FilterPageByAverageVO;
import com.diagbot.vo.FilterPageVO;
import com.diagbot.vo.FilterUnModifyMRVO;
import com.diagbot.vo.FilterVO;
import com.diagbot.vo.IndexTimeVO;
import com.diagbot.vo.QcResultPageVO;
import com.diagbot.vo.QcResultShortPageVO;
import com.diagbot.vo.ReBeHosPageVO;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.annotations.ApiIgnore;

/**
 * @Description:
 * @Author:zhaops
 * @time: 2024/4/13 16:45
 */
@RequestMapping("/console")
@RestController
@Api(value = "控制台统计相关API", tags = { "控制台统计相关API" })
@SuppressWarnings("unchecked")
public class ConsoleController {

    @Autowired
    private ConsoleFacade consoleFacade;

    //region-----------------------聚合接口开始-------------------------------
    @ApiOperation(value = "病历相关统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/mrStatistics")
    @SysLogger("mrStatistics")
    @ApiIgnore
    public RespDTO<Map<String, Object>> mrStatistics(@RequestBody @Valid FilterVO filterVO) {
        Map<String, Object> data = consoleFacade.mrStatistics(filterVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "缺陷相关统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/resultStatistics")
    @SysLogger("resultStatistics")
    @ApiIgnore
    public RespDTO<Map<String, Object>> resultStatistics(@RequestBody @Valid FilterVO filterVO) {
        Map<String, Object> data = consoleFacade.resultStatistics(filterVO);
        return RespDTO.onSuc(data);
    }

    @ApiOperation(value = "平均值相关统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/averageStatistics")
    @SysLogger("averageStatistics")
    @ApiIgnore
    public RespDTO<Map<String, Object>> averageStatistics(@RequestBody @Valid FilterVO filterVO) {
        Map<String, Object> data = consoleFacade.averageStatistics(filterVO);
        return RespDTO.onSuc(data);
    }
    //endregion-----------------------聚合接口结束-------------------------------

    //region-----------------------单独接口开始-------------------------------

    /**
     * 平均住院天数
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "平均住院天数[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageDayNum")
    @SysLogger("getAverageDayNum")
    public RespDTO<Map<String, Object>> getAverageDayNum(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.getAverageDayNum(filterVO));
    }

    /**
     * 平均住院费用
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "平均住院费用[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageFee")
    @SysLogger("getAverageFee")
    public RespDTO<Map<String, Object>> getAverageFee(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.getAverageFee(filterVO));
    }

    /**
     * 质控平均分按科室统计
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "质控平均分按科室统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageScore")
    @SysLogger("getAverageScore")
    public RespDTO<Map<String, Object>> getAverageScore(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.getAverageScore(filterVO));
    }

    /**
     * 各科室质控平均分（首页）-根据内外科系统统计
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "各科室质控平均分（首页）-根据内外科系统统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "deptClass： 科室分类：内科/外科，全部不传 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageScoreByDeptClass")
    @SysLogger("getAverageScoreByDeptClass")
    public RespDTO<Map<String, Object>> getAverageScoreByDeptClass(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.getAverageScoreByDeptClass(filterVO));
    }

    /**
     * 各科室甲级病历占比
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "各科室甲级病历占比[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getLevelResultDept")
    @SysLogger("getLevelResultDept")
    public RespDTO<Map<String, Object>> getLevelResultDept(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.getLevelResultDept(filterVO));
    }

    /**
     * 出院人数统计
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "出院人数统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/leaveHosCount")
    @SysLogger("leaveHosCount")
    public RespDTO<Map<String, Object>> leaveHosCount(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.leaveHosCount(filterVO));
    }


  /**
     * 病案指标
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "病案指标[by:zh]",
            notes = "startDate： 起始时间 <br>" +
                    "endDate： 结束时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/medicalRecordIndicator")
    @SysLogger("medicalRecordIndicator")
    public RespDTO<List<Map<String,String>>> medicalRecordIndicator(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.medicalRecordIndicator(filterVO));
    }

    /**
     * 病案指标后台维护接口
     * @param indexTimeVO
     * @return
     */
    @ApiOperation(value = "病案指标数据存储[by:cy]",
            notes = "startDate： 起始时间-样例[2021-01-01]请严格按照日历时间传参！！！ <br>" +
                    "endDate： 结束时间-样例[2021-01-01]请严格按照日历时间传参！！！<br>")
    @PostMapping("/saveMedicaIndicator")
    @SysLogger("saveMedicaIndicator")
    public RespDTO<Boolean> saveMedicaIndicator(@RequestBody @Valid IndexTimeVO indexTimeVO) {
        Boolean flag = consoleFacade.saveMedicaIndicator(indexTimeVO);
        return RespDTO.onSuc(flag);
    }

    /**
     * 质控病历统计
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "质控病历统计[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/mrCount")
    @SysLogger("mrCount")
    public RespDTO<Map<String, Object>> mrCount(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.mrCount(filterVO));
    }

    /**
     * 各模块缺陷占比排行
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "各模块缺陷占比排行（首页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryCountGroupByCase")
    @SysLogger("entryCountGroupByCase")
    public RespDTO<Map<String, Object>> entryCountGroupByCase(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.entryCountGroupByCase(filterVO));
    }

    /**
     * 条目缺陷占比
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "条目缺陷占比（首页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isReject： 单项否决 1-否决，0-非<br>" +
                    "casesName： 模块名称<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryCountGroupByEntry")
    @SysLogger("entryCountGroupByEntry")
    public RespDTO<Map<String, Object>> entryCountGroupByEntry(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.entryCountGroupByEntry(filterVO));
    }

    /**
     * 单项否决缺陷占比
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "单项否决缺陷占比（首页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryRejectPercent")
    @SysLogger("entryRejectPercent")
    public RespDTO<List<EntryNumDTO>> entryRejectPercent(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.entryRejectPercent(filterVO));
    }

    /**
     * 单项否决缺陷占比
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "各科室甲/乙/丙级病历占比（首页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "level： 病历等级 甲、乙、丙(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/qcResultLevelPercent")
    @SysLogger("qcResultLevelPercent")
    public RespDTO<List<DeptNumDTO>> qcResultLevelPercent(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.qcResultLevelPercent(filterVO));
    }

    /**
     * 各科室缺陷占比
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "各科室缺陷占比[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryByDept")
    @SysLogger("entryByDept")
    public RespDTO<Map<String, Object>> entryByDept(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.entryByDept(filterVO));
    }
    //endregion-----------------------单独接口结束-------------------------------

    //region-----------------------分页接口开始-------------------------------

    /**
     * 各模块缺陷占比（分页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "各模块缺陷占比（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryCountGroupByCasePage")
    @SysLogger("entryCountGroupByCasePage")
    public RespDTO<IPage<NumDTO>> entryCountGroupByCasePage(@RequestBody @Valid FilterPageVO filterPageVO) {
        return RespDTO.onSuc(consoleFacade.entryCountGroupByCasePage(filterPageVO));
    }

    /**
     * 条目缺陷占比（分页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "缺陷详情（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "deptName： 科室名称 <br>" +
                    "casesId： 模块id：243=病案首页 <br>" +
                    "casesName： 模块名称 <br>" +
                    "isReject： 单项否决 1-否决，0-非<br>" +
                    "ruleType： 规则类型 0：无，1：空项，2：错误<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryCountGroupByEntryPage")
    @SysLogger("entryCountGroupByEntryPage")
    public RespDTO<IPage<EntryNumGroupDTO>> entryCountGroupByEntryPage(@RequestBody @Valid FilterPageVO filterPageVO) {
        return RespDTO.onSuc(consoleFacade.entryCountGroupByEntryPage(filterPageVO));
    }

    /**
     * 按科室统计平均住院天数（分页）
     *
     * @param filterPageByAverageVO
     * @return
     */
    @ApiOperation(value = "按科室统计平均住院天数（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年<br>" +
                    "dateType： 时间类型 1-本月/本年，2-上月/去年，3-去年本月/去年<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageDayNumPage")
    @SysLogger("getAverageDayNumPage")
    public RespDTO<IPage<AverageStatisticsDTO>> getAverageDayNumPage(@RequestBody FilterPageByAverageVO filterPageByAverageVO) {
        return RespDTO.onSuc(consoleFacade.getAverageDayNumPage(filterPageByAverageVO));
    }

    /**
     * 按科室统计平均住院费用（分页）
     *
     * @param filterPageByAverageVO
     * @return
     */
    @ApiOperation(value = "按科室统计平均住院费用（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年<br>" +
                    "dateType： 时间类型 1-本月/本年，2-上月/去年，3-去年本月/去年<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageFeePage")
    @SysLogger("getAverageFeePage")
    public RespDTO<IPage<AverageStatisticsFeeDTO>> getAverageFeePage(@RequestBody FilterPageByAverageVO filterPageByAverageVO) {
        return RespDTO.onSuc(consoleFacade.getAverageFeePage(filterPageByAverageVO));
    }

    /**
     * 各科室质控平均分（分页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "各科室质控平均分（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/getAverageScoreByDeptPage")
    @SysLogger("getAverageScoreByDeptPage")
    public RespDTO<IPage<AverageStatisticsDTO>> getAverageScoreByDeptPage(@RequestBody @Valid FilterPageVO filterPageVO) {
        return RespDTO.onSuc(consoleFacade.getAverageScoreByDeptPage(filterPageVO));
    }

    /**
     * 各科室缺陷占比排行（分页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "各科室缺陷占比排行（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/resultStatisticsByDeptPage")
    @SysLogger("resultStatisticsByDeptPage")
    public RespDTO<IPage<NumDTO>> resultStatisticsByDeptPage(@RequestBody @Valid FilterPageVO filterPageVO) {
        return RespDTO.onSuc(consoleFacade.resultStatisticsByDeptPage(filterPageVO));
    }

    /**
     * 各科室甲级病历占比排行（分页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "各科室甲级病历占比排行（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/levelPercentGroupByDeptPage")
    @SysLogger("levelPercentGroupByDeptPage")
    public RespDTO<IPage<NumDTO>> levelPercentGroupByDeptPage(@RequestBody @Valid FilterPageVO filterPageVO) {
        return RespDTO.onSuc(consoleFacade.levelPercentGroupByDeptPage(filterPageVO));
    }

    /**
     * 条目缺陷占比（内页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "条目缺陷占比（分页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryGroupByEntryInnerPage")
    @SysLogger("entryGroupByEntryInnerPage")
    public RespDTO<IPage<EntryNumDTO>> entryGroupByEntryInnerPage(@RequestBody @Valid FilterPageVO filterPageVO) {
        return RespDTO.onSuc(consoleFacade.entryGroupByEntryInnerPage(filterPageVO));
    }
    //endregion-----------------------分页接口结束-------------------------------

    /**
     * 各科室缺陷占比（组合）
     *
     * @param filterOrderVO
     * @return
     */
    @ApiOperation(value = "各科室缺陷占比（组合）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "level： 病历等级 <br>" +
                    "name： 科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc： 排序（降序） <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/levelStatistics")
    @SysLogger("levelStatistics")
    public RespDTO<List<LevelStatisticsDTO>> levelStatistics(@RequestBody @Valid FilterOrderVO filterOrderVO) {
        return RespDTO.onSuc(consoleFacade.levelStatistics(filterOrderVO));
    }

    /**
     * 各科室缺陷占比（组合）-全院-根据内外科系统统计（台州）
     *
     * @param filterOrderVO
     * @return
     */
    @ApiOperation(value = "各科室缺陷占比（组合）-全院-根据内外科系统统计（台州）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "level： 病历等级 <br>" +
                    "name： 科室名称 <br>" +
                    "deptClass： 科室分类：内科/外科，全部不传 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc： 排序（降序） <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/levelStatisticsByDeptClass")
    @SysLogger("levelStatisticsByDeptClass")
    public RespDTO<List<LevelStatisticsTZDTO>> levelStatisticsByDeptClass(@RequestBody @Valid FilterOrderVO filterOrderVO) {
        return RespDTO.onSuc(consoleFacade.levelStatisticsByDeptClass_TZ(filterOrderVO));
    }

    /**
     * 病案首页不合格数病历详情(内页)
     * @param qcResultPageVO
     * @return
     */
    @ApiOperation(value = "病案首页不合格/合格数病历详情(内页)[by:cy]",
            notes = "behospitalCode： 病历号<br>" +
                    "patName： 病人姓名 <br>" +
                    "casesEntryName： 条目名称 <br>" +
                    "titleName： 标题名称 <br>" +
                    "casesEntryId： 条目id <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "checkStatus： 核查状态（1：已核查，0：未核查） <br>" +
                    "mrStatus： 首页核查状态（1：已核查，0：未核查） <br>" +
                    "chName： 病历核查人员 <br>" +
                    "mrName： 首页核查人员 <br>" +
                    "chTimeStart： 病历核查起始时间 <br>" +
                    "chTimeEnd： 病历核查截止时间 <br>" +
                    "mrTimeStart： 首页核查起始时间 <br>" +
                    "mrTimeEnd： 首页核查截止时间 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/badLevelPage")
    @SysLogger("badLevelPage")
    public RespDTO<IPage<QcResultShortDTO>> badLevelPage(@RequestBody @Valid QcResultPageVO qcResultPageVO) {
        return RespDTO.onSuc(consoleFacade.badLevelPage(qcResultPageVO));
    }


    /**
     * 病案首页合格率占比（首页）
     *
     * @param filterOrderVO
     * @return
     */
    @ApiOperation(value = "病案首页合格率占比（首页）[by:zhaops]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "level： 病历等级 <br>" +
                    "name： 科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc： 排序（降序） <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/homePageLevelLimit")
    @SysLogger("homePageLevelLimit")
    public RespDTO<List<HomePageNumDTO>> homePageLevelLimit(@RequestBody @Valid FilterOrderVO filterOrderVO) {
        return RespDTO.onSuc(consoleFacade.homePageLevelLimit(filterOrderVO));
    }

    /**
     * 条目缺陷质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "条目缺陷质控评分页（内页）[by:zhaops]",
            notes = "behospitalCode： 病历号<br>" +
                    "patName： 病人姓名 <br>" +
                    "casesEntryName： 条目名称 <br>" +
                    "casesEntryId： 条目id <br>" +
                    "casesName： 模块名称 <br>" +
                    "casesId： 模块id <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "beHosGT31Days： 住院超过31日标志 <br>" +
                    "isReject： 单项否决 1-否决，0-非<br>" +
                    "ruleType： 规则类型 0：无，1：空项，2：错误<br>" +
                    "checkStatus： 核查状态（1：已核查，0：未核查） <br>" +
                    "mrStatus： 首页核查状态（1：已核查，0：未核查） <br>" +
                    "chName： 病历核查人员 <br>" +
                    "mrName： 首页核查人员 <br>" +
                    "chTimeStart： 病历核查起始时间 <br>" +
                    "chTimeEnd： 病历核查截止时间 <br>" +
                    "mrTimeStart： 首页核查起始时间 <br>" +
                    "mrTimeEnd： 首页核查截止时间 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/qcResultShortPage")
    @SysLogger("qcResultShortPage")
    public RespDTO<IPage<QcResultShortDTO>> qcResultShortPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        return RespDTO.onSuc(consoleFacade.qcResultShortPage(qcResultShortPageVO));
    }

    /**
     * 关键条目缺陷占比统计
     *
     * @param entryStatisticsVO
     * @return
     */
    @ApiOperation(value = "关键条目缺陷占比统计[by:zhaops]",
            notes = "deptName：科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc：排序（降序） <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryStatistics")
    @SysLogger("entryStatistics")
    public RespDTO<List<EntryStatisticsDTO>> entryStatistics(@RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
        return RespDTO.onSuc(consoleFacade.entryStatistics(entryStatisticsVO));
    }
    
    
    
    /**
     * 三级查房制度相关制度
     *
     * @param entryStatisticsVO
     * @return
     */
    @ApiOperation(value = "三级查房制度相关制度[by:zhaops]",
            notes = "deptName：科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc：排序（降序） <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/sjcfStatistics")
    @SysLogger("sjcfStatistics")
    public RespDTO<List<SjcfStatisticsDTO>> sjcfStatistics(@RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
        return RespDTO.onSuc(consoleFacade.sjcfStatistics(entryStatisticsVO));
    }
    
    
    

    /**
     * 病案首页病历统计
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "病案首页病历统计[by:zhaops]",
            notes = "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/homePageMRCount")
    @SysLogger("homePageMRCount")
    public RespDTO<Map<String, Object>> homePageMRCount(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.homePageMRCount(filterVO));
    }

    /**
     * 出院人数统计
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "出院人数统计[by:zhaops]",
            notes = "behospitalCode： 病历号<br>" +
                    "fileCode： 病案号<br>" +
                    "patName： 病人姓名 <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "checkStatus： 核查状态（1：已核查，0：未核查） <br>" +
                    "mrStatus： 首页核查状态（1：已核查，0：未核查） <br>" +
                    "chName： 病历核查人员 <br>" +
                    "mrName： 首页核查人员 <br>" +
                    "chTimeStart： 病历核查起始时间 <br>" +
                    "chTimeEnd： 病历核查截止时间 <br>" +
                    "mrTimeStart： 首页核查起始时间 <br>" +
                    "mrTimeEnd： 首页核查截止时间 <br>" +
                    "leaveHosType： 离院人员类型（0/null：总人数，1：死亡人数，2：新生儿，3：手术病人数，4：非医嘱离院病人，5:31日再入院病人） <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/leaveHosMRPage")
    @SysLogger("leaveHosMRPage")
    public RespDTO<IPage<QcResultShortDTO>> leaveHosMRPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        return RespDTO.onSuc(consoleFacade.leaveHosMRPage(qcResultShortPageVO));
    }

    /**
     * 质控核查统计
     *
     * @param filterOrderVO
     * @return
     */
    @ApiOperation(value = "质控核查统计[by:zhaops]",
            notes = "name： 科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc：排序（降序） <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/qcCheckStatistics")
    @SysLogger("qcCheckStatistics")
    public RespDTO<List<HomePageImproveDTO>> qcCheckStatistics(@RequestBody @Valid FilterOrderVO filterOrderVO) {
        return RespDTO.onSuc(consoleFacade.qcCheckStatistics(filterOrderVO));
    }


    /**
     * 未整改病历质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "未整改病历质控评分页（内页）[by:zhaops]",
            notes = "behospitalCode： 病历号<br>" +
                    "patName： 病人姓名 <br>" +
                    "casesEntryName： 条目名称 <br>" +
                    "casesEntryId： 条目id <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "checkStatus： 核查状态（1：已核查，0：未核查） <br>" +
                    "mrStatus： 首页核查状态（1：已核查，0：未核查） <br>" +
                    "chName： 病历核查人员 <br>" +
                    "mrName： 首页核查人员 <br>" +
                    "chTimeStart： 病历核查起始时间 <br>" +
                    "chTimeEnd： 病历核查截止时间 <br>" +
                    "mrTimeStart： 首页核查起始时间 <br>" +
                    "mrTimeEnd： 首页核查截止时间 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/unModifyMRPage")
    @SysLogger("unModifyMRPage")
    public RespDTO<IPage<QcResultShortDTO>> unModifyMRPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        return RespDTO.onSuc(consoleFacade.unModifyMRPage(qcResultShortPageVO));
    }


    /**
     * 31天再入院人数（内页）
     *
     * @param reBeHosPageVO
     * @return
     */
    @ApiOperation(value = "31天再入院人数（内页）[by:zhaops]",
            notes = "name： 病人名称 <br>" +
                    "fileCode： 病案号 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/reHos31DaysPage")
    @SysLogger("reHos31DaysPage")
    public RespDTO<IPage<ReBeHosDTO>> reHos31DaysPage(@RequestBody @Valid ReBeHosPageVO reBeHosPageVO) {
        return RespDTO.onSuc(consoleFacade.reHos31DaysPage(reBeHosPageVO));
    }

    /**
     * 入院人数统计（首页）
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "入院人数统计（首页）[by:zhaops]",
            notes = "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/beHosCount")
    @SysLogger("beHosCount")
    public RespDTO<List<NumDTO>> beHosCount(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.beHosCount(filterVO));
    }

    /**
     * 单条条目缺陷统计（首页）
     *
     * @param filterVO
     * @return
     */
    @ApiOperation(value = "单条条目缺陷统计（首页）[by:zhaops]",
            notes = "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/casesEntryStatisticsById")
    @SysLogger("casesEntryStatisticsById")
    public RespDTO<List<NumDTO>> casesEntryStatisticsById(@RequestBody @Valid FilterVO filterVO) {
        return RespDTO.onSuc(consoleFacade.casesEntryStatisticsById(filterVO));
    }

    /**
     * 病案首页改善率质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "病案首页改善率质控评分页（内页）[by:zhaops]",
            notes = "behospitalCode： 病历号<br>" +
                    "patName： 病人姓名 <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "improveType： 改善标志（1：病案首页改善病历，2：病案首页改善至合格病历，3：病案首页改善至满分病历） <br>" +
                    "checkStatus： 核查状态（1：已核查，0：未核查） <br>" +
                    "mrStatus： 首页核查状态（1：已核查，0：未核查） <br>" +
                    "chName： 病历核查人员 <br>" +
                    "mrName： 首页核查人员 <br>" +
                    "chTimeStart： 病历核查起始时间 <br>" +
                    "chTimeEnd： 病历核查截止时间 <br>" +
                    "mrTimeStart： 首页核查起始时间 <br>" +
                    "mrTimeEnd： 首页核查截止时间 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/hmImproveMRPage")
    @SysLogger("hmImproveMRPage")
    public RespDTO<IPage<QcResultShortDTO>> hmImproveMRPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        return RespDTO.onSuc(consoleFacade.hmImproveMRPage(qcResultShortPageVO));
    }

    /**
     * 质控核查质控评分页（内页）
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "质控核查质控评分页（内页）[by:zhaops]",
            notes = "behospitalCode： 病历号<br>" +
                    "patName： 病人姓名 <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "checkStatus： 核查状态（1：已核查，0：未核查） <br>" +
                    "mrStatus： 首页核查状态（1：已核查，0：未核查） <br>" +
                    "chName： 病历核查人员 <br>" +
                    "mrName： 首页核查人员 <br>" +
                    "chTimeStart： 病历核查起始时间 <br>" +
                    "chTimeEnd： 病历核查截止时间 <br>" +
                    "mrTimeStart： 首页核查起始时间 <br>" +
                    "mrTimeEnd： 首页核查截止时间 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/qcCheckMRPage")
    @SysLogger("qcCheckMRPage")
    public RespDTO<IPage<QcResultShortDTO>> qcCheckMRPage(@RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        return RespDTO.onSuc(consoleFacade.qcCheckMRPage(qcResultShortPageVO));
    }

    /**
     * 病历稽查表（title）
     * @param
     * @return
     */
    @ApiOperation(value = "病历稽查获取title[by:cy]")
    @PostMapping("/medicalCheckTitle")
    @SysLogger("medicalCheckTitle")
    public RespDTO<List<ColumnDTO>> getMedicalCheckTitle() {
        return RespDTO.onSuc(consoleFacade.getMedicalCheckTitle());
    }

}
