package com.diagbot.web;

import javax.servlet.http.HttpServletResponse;
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.diagbot.annotation.SysLogger;
import com.diagbot.facade.ConsoleExportFacade;
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.QcResultShortPageVO;
import com.diagbot.vo.ReBeHosPageVO;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * @Description:
 * @Author:zhaops
 * @time: 2024/4/13 16:45
 */
@RequestMapping("/console/export")
@RestController
@Api(value = "数据报表明细导出相关API", tags = { "数据报表明细导出相关API" })
public class ConsoleExportController {

    @Autowired
    private ConsoleExportFacade consoleExportFacade;


    /**
     * 条目缺陷占比（内页）
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "条目缺陷占比导出[by:gaodm]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryGroupByEntryExport")
    @SysLogger("entryGroupByEntryExport")
    public void entryGroupByEntryExport(HttpServletResponse response, @RequestBody @Valid FilterPageVO filterPageVO) {
        consoleExportFacade.entryGroupByEntryExport(response, filterPageVO);
    }

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

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

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

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

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

    /**
     * 条目缺陷占比导出
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "缺陷详情导出[by:gaodm]",
            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("/entryCountGroupByEntryExport")
    @SysLogger("entryCountGroupByEntryExport")
    public void entryCountGroupByEntryExport(HttpServletResponse response, @RequestBody @Valid FilterPageVO filterPageVO) {
        consoleExportFacade.entryCountGroupByEntryExport(response, filterPageVO);
    }

    /**
     * 各模块缺陷占比导出
     *
     * @param filterPageVO
     * @return
     */
    @ApiOperation(value = "各模块缺陷占比导出[by:gaodm]",
            notes = "type： 统计维度 1-本月，2-本年(必填)<br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryCountGroupByCaseExport")
    @SysLogger("entryCountGroupByCaseExport")
    public void entryCountGroupByCaseExport(HttpServletResponse response, @RequestBody @Valid FilterPageVO filterPageVO) {
        consoleExportFacade.entryCountGroupByCaseExport(response, filterPageVO);
    }

    /**
     * 关键条目缺陷占比统计导出
     *
     * @param entryStatisticsVO
     * @return
     */
    @ApiOperation(value = "关键条目缺陷占比统计导出[by:gaodm]",
            notes = "deptName：科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc：排序（降序） <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/entryStatisticsExport")
    @SysLogger("entryStatisticsExport")
    public void entryStatisticsExport(HttpServletResponse response, @RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
        consoleExportFacade.entryStatisticsExport(response, entryStatisticsVO);
    }

    
    /**
     * 三级查房制度相关制度
     *
     * @param entryStatisticsVO
     * @return
     */
    @ApiOperation(value = "三级查房制度相关制度导出[by:gaodm]",
            notes = "deptName：科室名称 <br>" +
                    "asc： 排序（升序） <br>" +
                    "desc：排序（降序） <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/sjcfStatisticsExport")
    @SysLogger("sjcfStatisticsExport")
    public void sjcfStatisticsExport(HttpServletResponse response, @RequestBody @Valid EntryStatisticsVO entryStatisticsVO) {
        consoleExportFacade.sjcfStatisticsExport(response, entryStatisticsVO);
    }
    
    /**
     * 缺陷详情质控评分页导出
     *
     * @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("/qcResultShortPageExport")
    @SysLogger("qcResultShortPageExport")
    public void qcResultShortPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.qcResultShortPageExport(response, qcResultShortPageVO);
    }

    /**
     * 出院人数统计导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "出院人数统计导出[by:zhaops]",
            notes = "behospitalCode： 病历号<br>" +
                    "patName： 病人姓名 <br>" +
                    "behDeptName：科室名称 <br>" +
                    "doctorId：医生工号 <br>" +
                    "doctorName：医生姓名 <br>" +
                    "level： 病历等级 <br>" +
                    "leaveHosType： 离院人员类型（0/null：总人数，1：死亡人数，2：新生儿，3：手术病人数，4：非医嘱离院病人，5:31日再入院病人） <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("/leaveHosMrPageExport")
    @SysLogger("leaveHosMrPageExport")
    public void leaveHosMrPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.leaveHosMrPageExport(response, qcResultShortPageVO);
    }

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

    /**
     * 未整改病历详情页导出
     *
     * @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("/unModifyMRPageExport")
    @SysLogger("unModifyMRPageExport")
    public void unModifyMRPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.unModifyMRPageExport(response, qcResultShortPageVO);
    }

    /**
     * 病案首页不合格/合格数病历详情页导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "病案首页不合格/合格数病历详情页导出[by:cy]",
            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("/badLevelPagePageExport")
    @SysLogger("badLevelPagePageExport")
    public void badLevelPagePageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.badLevelPagePageExport(response, qcResultShortPageVO);
    }


    /**
     * 稽查病历详情页导出
     *
     * @param qcResultShortPageVO
     * @return
     */
    @ApiOperation(value = "稽查病历详情页导出[by:cy]",
            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("/medicalCheckInnerExport")
    @SysLogger("medicalCheckInnerExport")
    public void medicalCheckInnerExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.unModifyMRPageExport(response, qcResultShortPageVO);
    }

    /**
     * 未整改病历统计导出
     * 31天再入院统计导出
     *
     * @param reBeHosPageVO
     * @return
     */
    @ApiOperation(value = "31天再入院统计导出[by:zhaops]",
            notes = "name： 病人姓名 <br>" +
                    "fileCode： 病案号 <br>" +
                    "startDate： 起始时间 <br>" +
                    "endDate： 截止时间 <br>" +
                    "isPlacefile： 是否归档（0：未归档，1：已归档） <br>")
    @PostMapping("/reHos31DaysPageExport")
    @SysLogger("reHos31DaysPageExport")
    public void reHos31DaysPageExport(HttpServletResponse response, @RequestBody @Valid ReBeHosPageVO reBeHosPageVO) {
        consoleExportFacade.reHos31DaysPageExport(response, reBeHosPageVO);
    }

    /**
     * 病案首页改善率质控评分页导出
     *
     * @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("/hmImproveMRPageExport")
    @SysLogger("hmImproveMRPageExport")
    public void hmImproveMRPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.hmImproveMRPageExport(response, 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("/qcCheckMRPageExport")
    @SysLogger("qcCheckMRPageExport")
    public void qcCheckMRPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
        consoleExportFacade.qcCheckMRPageExport(response, qcResultShortPageVO);
    }

}
