Browse Source

病历质控报表-科室

chengyao 4 years ago
parent
commit
42faa3d7e3

+ 3 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -233,6 +233,9 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/print/export/medicalCheckExportByDept").permitAll()
                 .antMatchers("/consoleByDept/medicalCheckTitleKs").permitAll()
                 .antMatchers("/console/qualityControl").permitAll()
+                .antMatchers("/console/export/qualityControlExport").permitAll()
+                .antMatchers("/consoleByDept/qualityControlByDept").permitAll()
+                .antMatchers("/print/export/qualityControlExportByDept").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

+ 3 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -277,6 +277,9 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/print/export/medicalCheckExportByDept", request)
                 || matchers("/consoleByDept/medicalCheckTitleKs", request)
                 || matchers("/console/qualityControl", request)
+                || matchers("/console/export/qualityControlExport", request)
+                || matchers("/consoleByDept/qualityControlByDept", request)
+                || matchers("/print/export/qualityControlExportByDept", request)
                 || matchers("/", request)) {
             return true;
         }

+ 58 - 0
src/main/java/com/diagbot/dto/CaseScoreDTO.java

@@ -0,0 +1,58 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/14 13:07
+ */
+@Getter
+@Setter
+public class CaseScoreDTO {
+    //明细主键
+    private Long id;
+    //得分
+    private Double score;
+    //提示信息
+    private String msg;
+    // 控费标识(1:是控费条目,2:不是控费条目)
+    private Integer drgs;
+    // 质控形式(1:形式质控,2:内涵质控)
+    private Integer type;
+    //提示信息
+    private String code;
+    //提示信息
+    private String info;
+    //标准提示信息
+    private String standardMsg;
+    // 操作类型(1:新增,2:删除,3:修改)
+    private Integer optType;
+    // 初始类型(1:机器,2:人工)
+    private Integer gradeType;
+    //单项否决
+    private String isReject;
+    //模块名称
+    private String modelName;
+    //模块id
+    private String modelId;
+    private String behospitalCode;
+    //模块ID
+    private Long casesId;
+    //模块分数
+    private Double casesScore;
+    // 条目ID
+    private Long casesEntryId;
+    // 记录创建时间
+    private Date gmtCreate;
+    // 记录修改时间,如果时间是1970年则表示纪录未修改
+    private Date gmtModified;
+    // 条目id对应页面数据的key值
+    private List<Long> pageKeyList = new ArrayList<>();
+}

+ 36 - 34
src/main/java/com/diagbot/dto/QualityControlDTO.java

@@ -20,13 +20,13 @@ public class QualityControlDTO {
     /**
      * 姓名
      */
-    @Excel(name = "病人姓名", width = 30, orderNum = "1")
+    @Excel(name = "病人姓名", width = 12, orderNum = "1")
     private String name;
 
     /**
      * 病人住院ID
      */
-    @Excel(name = "住院号", width = 30, orderNum = "2")
+    @Excel(name = "住院号", width = 16, orderNum = "2")
     private String behospitalCode;
 
     /**
@@ -37,7 +37,7 @@ public class QualityControlDTO {
     /**
      * 医生姓名
      */
-    @Excel(name = "主治医生", width = 30, orderNum = "3")
+    @Excel(name = "主治医生", width = 12, orderNum = "3")
     private String doctorName;
 
     /**
@@ -47,7 +47,7 @@ public class QualityControlDTO {
     /**
      * 科室名称
      */
-    @Excel(name = "科室名称", width = 30, orderNum = "4")
+    @Excel(name = "科室名称", width = 16, orderNum = "4")
     private String deptName;
 
     /**
@@ -59,130 +59,132 @@ public class QualityControlDTO {
     /**
      * 出院时间
      */
-    @Excel(name = "出院日期", width = 30, orderNum = "5")
+    @Excel(name = "出院日期", width = 25, orderNum = "5")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date leaveHospitalDate;
 
     /**
      * 病案首页--
      */
-    @Excel(name = "病案首页", orderNum = "6")
+    @Excel(name = "病案首页", width = 30, orderNum = "6")
     private String medHomePage;
     /**
      * 病案首页扣分
      */
-    @Excel(name = "扣分", orderNum = "7")
-    private Double medHomePageScore;
+    @Excel(name = "扣分",width = 12, orderNum = "7")
+    private Double medHomePageScore= 0d;
     private Double medHomePageScoreOn= 0d;
     private Double medHomePageScoreTw= 0d;
     /**
      * 入院记录--
      */
-    @Excel(name = "入院记录", orderNum = "8")
+    @Excel(name = "入院记录",width = 30, orderNum = "8")
     private String admissionNote;
 
     /**
      * 入院记录扣分
      */
-    @Excel(name = "扣分", orderNum = "9")
-    private Double admissionNoteScore;
+    @Excel(name = "扣分",width = 12, orderNum = "9")
+    private Double admissionNoteScore= 0d;
+    //非单项否决扣分
     private Double admissionNoteScoreOn= 0d;
+    //扣分项总和
     private Double admissionNoteScoreTw= 0d;
 
     /**
      * 首次病程录--
      */
-    @Excel(name = "首次病程录", orderNum = "10")
+    @Excel(name = "首次病程录",width = 30, orderNum = "10")
     private String firstCourseNote;
 
     /**
      * 首次病程录扣分
      */
-    @Excel(name = "扣分", orderNum = "11")
-    private Double firstCourseNoteScore;
+    @Excel(name = "扣分",width = 12, orderNum = "11")
+    private Double firstCourseNoteScore= 0d;
     private Double firstCourseNoteScoreOn= 0d;
     private Double firstCourseNoteScoreTw= 0d;
     /**
      * 病程记录--
      */
-    @Excel(name = "病程记录", orderNum = "12")
+    @Excel(name = "病程记录",width = 30, orderNum = "12")
     private String courseRecord;
 
     /**
      * 病程记录扣分
      */
-    @Excel(name = "扣分", orderNum = "13")
-    private Double courseRecordScore;
+    @Excel(name = "扣分", width = 12,orderNum = "13")
+    private Double courseRecordScore= 0d;
     private Double courseRecordScoreOn= 0d;
     private Double courseRecordScoreTw= 0d;
     /**
      * 手术信息--
      */
-    @Excel(name = "手术信息", orderNum = "14")
+    @Excel(name = "手术信息",width = 30, orderNum = "14")
     private String  operationInfo;
 
     /**
      * 手术信息扣分
      */
-    @Excel(name = "扣分", orderNum = "15")
-    private Double operationInfoScore;
+    @Excel(name = "扣分",width = 12, orderNum = "15")
+    private Double operationInfoScore= 0d;
     private Double  operationInfoScoreOn= 0d;
     private Double  operationInfoScoreTw= 0d;
     /**
      * 出院记录--
      */
-    @Excel(name = "出院记录", orderNum = "16")
+    @Excel(name = "出院记录",width = 30, orderNum = "16")
     private String  dischargeNote;
     /**
      * 出院记录扣分
      */
-    @Excel(name = "扣分", orderNum = "17")
-    private Double  dischargeNoteScore;
+    @Excel(name = "扣分",width = 12, orderNum = "17")
+    private Double  dischargeNoteScore= 0d;
     private Double  dischargeNoteScoreOn= 0d;
     private Double  dischargeNoteScoreTw= 0d;
     /**
      * 医嘱单--
      */
-    @Excel(name = "医嘱单", orderNum = "18")
+    @Excel(name = "医嘱单",width = 30, orderNum = "18")
     private String  docAdviceNote;
     /**
      * 医嘱单扣分
      */
-    @Excel(name = "扣分", orderNum = "19")
-    private Double docAdviceNoteScore;
+    @Excel(name = "扣分",width = 12, orderNum = "19")
+    private Double docAdviceNoteScore= 0d;
     private Double  docAdviceNoteScoreOn= 0d;
     private Double  docAdviceNoteScoreTw= 0d;
     /**
      * 其他
      */
-    @Excel(name = "其他", orderNum = "20")
+    @Excel(name = "其他",width = 30, orderNum = "20")
     private String  otherCase;
     /**
      * 其他扣分
      */
-    @Excel(name = "扣分", orderNum = "21")
-    private Double otherCaseScore;
+    @Excel(name = "扣分",width = 12, orderNum = "21")
+    private Double otherCaseScore= 0d;
 
     /**
      * 总分
      */
-    @Excel(name = "总分", orderNum = "22")
-    private Double  totalScore;
+    @Excel(name = "总分",width = 12, orderNum = "22")
+    private Double  totalScore= 0d;
     /**
      * 病历等级
      */
-    @Excel(name = "病历等级", orderNum = "23")
+    @Excel(name = "病历等级",width = 12, orderNum = "23")
     private String level;
 
     /**
      * 病案首页核查人
      */
-    @Excel(name = "首页检查者", orderNum = "24")
+    @Excel(name = "首页检查者", width = 12,orderNum = "24")
     private String  mrName;
     /**
      * 病历核查人
      */
-    @Excel(name = "病历检查者", orderNum = "25")
+    @Excel(name = "病历检查者",width = 12, orderNum = "25")
     private String chName;
 
 

+ 15 - 0
src/main/java/com/diagbot/facade/ConsoleByDeptExportFacade.java

@@ -377,6 +377,21 @@ public class ConsoleByDeptExportFacade {
         ExcelUtils.exportExcel(records, null, "sheet1", MedicalDeptDTO.class, fileName, response, 15.8f);
     }
 
+    /**
+     * 病历质控报表-科室-导出
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public void qualityControlExportByDept(HttpServletResponse response, BehospitalPageVO behospitalPageVO) {
+        behospitalPageVO.setCurrent(1L);
+        behospitalPageVO.setSize(Long.MAX_VALUE);
+        behospitalPageVO.setSearchCount(false);
+        String  fileName = "病历质控报表科室详情.xls";
+        IPage<QualityControlDTO> records = consoleByDeptFacade.qualityControlByDept(behospitalPageVO);
+        ExcelUtils.exportExcel(records.getRecords(), null, "sheet1", QualityControlDTO.class, fileName, response, 15.8f);
+    }
+
 
 
     /**

+ 44 - 0
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.dto.*;
 import com.diagbot.entity.QcCasesEntry;
 import com.diagbot.entity.SysHospitalSet;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.util.*;
 import com.diagbot.vo.*;
 import com.google.common.collect.Lists;
@@ -1052,6 +1054,18 @@ public class ConsoleByDeptFacade {
         return medicalCheck;
     }
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> qualityControlByDept(@Param("filterVO")  BehospitalPageVO behospitalPageVO) {
+        behospitalPageSet(behospitalPageVO);
+        IPage<QualityControlDTO> records = behospitalInfoFacade.qualityControlByDept(behospitalPageVO);
+        return records;
+    }
+
 
     /**
      * 未整改病历统计-科室
@@ -1282,6 +1296,36 @@ public class ConsoleByDeptFacade {
         return unModifyMRDTO;
     }
 
+    private void behospitalPageSet(BehospitalPageVO behospitalPageVO) {
+        //入参验证
+        //入院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
+            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
+            behospitalPageVO.setBehosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(behospitalPageVO.getBehosDateEnd(), 1)));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
+            }
+        }
+        //出院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
+            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(behospitalPageVO.getLeaveHosDateEnd(), 1)));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
+            }
+        }
+        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        behospitalPageVO.setUserId(Long.valueOf(SysUserUtils.getCurrentPrincipleID()));
+    }
+
 
 
 }

+ 30 - 0
src/main/java/com/diagbot/facade/ConsoleExportFacade.java

@@ -597,4 +597,34 @@ public class ConsoleExportFacade {
             ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportWideExcelDTO.class, fileName, response);
         }
     }
+
+
+    /**
+     * 病历质控报表分页导出
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public void qualityControlExport(HttpServletResponse response, BehospitalPageVO behospitalPageVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        behospitalPageVO.setHospitalId(Long.valueOf(hospitalId));
+
+    Date startDate = behospitalPageVO.getLeaveHosDateStart();
+    Date endDate = behospitalPageVO.getLeaveHosDateEnd();
+    //时间间隔7天
+    long interval = 90 * 24l * 60l * 60l * 1000l;
+        if (endDate.getTime() < startDate.getTime()) {
+        throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+    }
+        if (endDate.getTime() - startDate.getTime() > interval) {
+        throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于90天");
+    }
+
+        behospitalPageVO.setCurrent(1L);
+        behospitalPageVO.setSize(Long.MAX_VALUE);
+        behospitalPageVO.setSearchCount(false);
+        IPage<QualityControlDTO> records = consoleFacade.getQualityControl(behospitalPageVO);
+        String fileName = "病历质控报表详情页.xls";
+        ExcelUtils.exportExcelUser(records.getRecords(), null, "sheet1", QualityControlDTO.class, fileName, response);
+    }
 }

+ 283 - 51
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1258,8 +1258,242 @@ public class ConsoleFacade {
         long startTime = System.currentTimeMillis();
         IPage<QualityControlDTO> records = behospitalInfoFacade.getQualityControl(behospitalPageVO);
         List<QualityControlDTO> qualityControlDTO = records.getRecords();
+       // List<QualityControlDTO> qualityControlDTOs = records.getRecords();
         long endTime1 = System.currentTimeMillis();
         System.out.println("endTime1 = " + (endTime1-startTime));
+       /* qualityControlDTOs.forEach(qualityControlDTO->{
+            List<CaseScoreDTO>caseScoreDTOS= behospitalInfoFacade.getQualityCaseSorce(behospitalPageVO);
+            StringBuffer admissionNote = new StringBuffer();
+            StringBuffer firstCourseNote = new StringBuffer();
+            StringBuffer dischargeNote = new StringBuffer();
+            StringBuffer medHomePage = new StringBuffer();
+            StringBuffer docAdviceNote = new StringBuffer();
+            StringBuffer operationInfo = new StringBuffer();
+            StringBuffer courseRecord = new StringBuffer();
+            Double admissionNoteScoreOn = qualityControlDTO.getAdmissionNoteScoreOn();
+            Double admissionNoteScoreTw = qualityControlDTO.getAdmissionNoteScoreTw();
+            Double firstCourseNoteScoreOn = qualityControlDTO.getFirstCourseNoteScoreOn();
+            Double firstCourseNoteScoreTw = qualityControlDTO.getFirstCourseNoteScoreTw();
+            Double dischargeNoteScoreOn = qualityControlDTO.getDischargeNoteScoreOn();
+            Double dischargeNoteScoreTw = qualityControlDTO.getDischargeNoteScoreTw();
+            Double medHomePageScoreOn = qualityControlDTO.getMedHomePageScoreOn();
+            Double medHomePageScoreTw = qualityControlDTO.getMedHomePageScoreTw();
+            Double docAdviceNoteScoreOn = qualityControlDTO.getDocAdviceNoteScoreOn();
+            Double docAdviceNoteScoreTw = qualityControlDTO.getDocAdviceNoteScoreTw();
+            Double operationInfoScoreOn = qualityControlDTO.getOperationInfoScoreOn();
+            Double operationInfoScoreTw = qualityControlDTO.getOperationInfoScoreTw();
+            Double courseRecordScoreOn = qualityControlDTO.getCourseRecordScoreOn();
+            Double courseRecordScoreTw = qualityControlDTO.getCourseRecordScoreTw();
+            for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
+                        if (qualityControlDTO.getBehospitalCode().equals(caseScoreDTO.getBehospitalCode())) {
+                            switch (caseScoreDTO.getModelId()) {
+                                case "1":
+                                    String admissionMsg = caseScoreDTO.getMsg() + ";";
+                                    admissionNote.append(admissionMsg);
+                                    //对单个modeId进行扣分总和计算
+                                    //非单项否决总分
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        admissionNoteScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    admissionNoteScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setAdmissionNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                case "2":
+                                    String firstCourseNoteMsg = caseScoreDTO.getMsg() + ";";
+                                    firstCourseNote.append(firstCourseNoteMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        firstCourseNoteScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    firstCourseNoteScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setFirstCourseNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                case "5":
+                                    String dischargeNoteMsg = caseScoreDTO.getMsg() + ";";
+                                    dischargeNote.append(dischargeNoteMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        dischargeNoteScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    dischargeNoteScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setDischargeNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                case "6":
+                                    String medHomePageMsg = caseScoreDTO.getMsg() + ";";
+                                    medHomePage.append(medHomePageMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        medHomePageScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    medHomePageScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setMedHomePageTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                case "8":
+                                    String docAdviceNoteMsg = caseScoreDTO.getMsg() + ";";
+                                    docAdviceNote.append(docAdviceNoteMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        docAdviceNoteScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    docAdviceNoteScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setDocAdviceNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                case "17":
+                                    String operationInfoMsg = caseScoreDTO.getMsg() + ";";
+                                    operationInfo.append(operationInfoMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        operationInfoScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    operationInfoScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setOperationInfoTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                case "56":
+                                    String courseRecordMsg = caseScoreDTO.getMsg() + ";";
+                                    courseRecord.append(courseRecordMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        courseRecordScoreOn += caseScoreDTO.getScore();
+                                    }
+                                    //扣分总和
+                                    courseRecordScoreTw += caseScoreDTO.getScore();
+                                    qualityControlDTO.setCourseRecordTolScore(caseScoreDTO.getCasesScore());
+                                    break; //可选
+                                //你可以有任意数量的case语句
+                                default: //可选
+                                    //语句
+                            }
+                        }
+                    };
+             qualityControlDTO.setAdmissionNoteScoreOn(admissionNoteScoreOn);
+             qualityControlDTO.setAdmissionNoteScoreTw(admissionNoteScoreTw);
+             qualityControlDTO.setFirstCourseNoteScoreOn(firstCourseNoteScoreOn);
+             qualityControlDTO.setFirstCourseNoteScoreTw(firstCourseNoteScoreTw);
+             qualityControlDTO.setDischargeNoteScoreOn(dischargeNoteScoreOn);
+             qualityControlDTO.setDischargeNoteScoreTw(dischargeNoteScoreTw);
+             qualityControlDTO.setMedHomePageScoreOn(medHomePageScoreOn);
+             qualityControlDTO.setMedHomePageScoreTw(medHomePageScoreTw);
+             qualityControlDTO.setDocAdviceNoteScoreOn(docAdviceNoteScoreOn);
+             qualityControlDTO.setDocAdviceNoteScoreTw(docAdviceNoteScoreTw);
+             qualityControlDTO.setOperationInfoScoreOn(operationInfoScoreOn);
+             qualityControlDTO.setOperationInfoScoreTw(operationInfoScoreTw);
+             qualityControlDTO.setCourseRecordScoreOn(courseRecordScoreOn);
+             qualityControlDTO.setCourseRecordScoreTw(courseRecordScoreTw);
+            String admissionNoteString =  admissionNote.toString().substring(0,  admissionNote.toString().lastIndexOf(";"));
+            qualityControlDTO.setAdmissionNote(admissionNoteString);
+            String firstCourseNoteString =  firstCourseNote.toString().substring(0,  firstCourseNote.toString().lastIndexOf(";"));
+            qualityControlDTO.setFirstCourseNote(firstCourseNoteString);
+            String dischargeNoteString = dischargeNote.toString().substring(0,  dischargeNote.toString().lastIndexOf(";"));
+            qualityControlDTO.setDischargeNote(dischargeNoteString);
+            String medHomePageString =  medHomePage.toString().substring(0,  medHomePage.toString().lastIndexOf(";"));
+            qualityControlDTO.setMedHomePage(medHomePageString);
+            String docAdviceNoteString =  docAdviceNote.toString().substring(0,  docAdviceNote.toString().lastIndexOf(";"));
+            qualityControlDTO.setDocAdviceNote(docAdviceNoteString);
+            String operationInfoString =  operationInfo.toString().substring(0,  operationInfo.toString().lastIndexOf(";"));
+            qualityControlDTO.setOperationInfo(operationInfoString);
+            String courseRecordString =  courseRecord.toString().substring(0,  courseRecord.toString().lastIndexOf(";"));
+            qualityControlDTO.setCourseRecord(courseRecordString);
+        *//*    Double admissionNoteScoreOn = qualityControlDTO.getAdmissionNoteScoreOn();
+            Double admissionNoteScoreTw = qualityControlDTO.getAdmissionNoteScoreTw();
+            Double firstCourseNoteScoreOn = qualityControlDTO.getFirstCourseNoteScoreOn();
+            Double firstCourseNoteScoreTw = qualityControlDTO.getFirstCourseNoteScoreTw();
+            Double dischargeNoteScoreOn = qualityControlDTO.getDischargeNoteScoreOn();
+            Double dischargeNoteScoreTw = qualityControlDTO.getDischargeNoteScoreTw();
+            Double medHomePageScoreOn = qualityControlDTO.getMedHomePageScoreOn();
+            Double medHomePageScoreTw = qualityControlDTO.getMedHomePageScoreTw();
+            Double docAdviceNoteScoreOn = qualityControlDTO.getDocAdviceNoteScoreOn();
+            Double docAdviceNoteScoreTw = qualityControlDTO.getDocAdviceNoteScoreTw();
+            Double operationInfoScoreOn = qualityControlDTO.getOperationInfoScoreOn();
+            Double operationInfoScoreTw = qualityControlDTO.getOperationInfoScoreTw();
+            Double courseRecordScoreOn = qualityControlDTO.getCourseRecordScoreOn();
+            Double courseRecordScoreTw = qualityControlDTO.getCourseRecordScoreTw();*//*
+            for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
+                if (qualityControlDTO.getBehospitalCode().equals(caseScoreDTO.getBehospitalCode())) {
+                    switch (caseScoreDTO.getModelId()) {
+                        case "1":
+                              //  非单项否决总扣分大于扣分总和
+                               if((admissionNoteScoreOn-qualityControlDTO.getAdmissionNoteTolScore())>=0){
+                                   //扣分总和+单项否决总分
+                                   qualityControlDTO.setAdmissionNoteScore(qualityControlDTO.getAdmissionNoteTolScore()+(admissionNoteScoreTw-admissionNoteScoreOn));
+                               }else{
+                                   qualityControlDTO.setAdmissionNoteScore(admissionNoteScoreOn+(admissionNoteScoreTw-admissionNoteScoreOn));
+                               }
+
+                            //扣分总和
+                            admissionNoteScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setAdmissionNoteTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        case "2":
+                            String firstCourseNoteMsg = caseScoreDTO.getMsg() + ";";
+                            firstCourseNote.append(firstCourseNoteMsg);
+                            if (caseScoreDTO.getIsReject().equals("0")) {
+                                firstCourseNoteScoreOn += caseScoreDTO.getScore();
+                            }
+                            //扣分总和
+                            firstCourseNoteScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setFirstCourseNoteTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        case "5":
+                            String dischargeNoteMsg = caseScoreDTO.getMsg() + ";";
+                            dischargeNote.append(dischargeNoteMsg);
+                            if (caseScoreDTO.getIsReject().equals("0")) {
+                                dischargeNoteScoreOn += caseScoreDTO.getScore();
+                            }
+                            //扣分总和
+                            dischargeNoteScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setDischargeNoteTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        case "6":
+                            String medHomePageMsg = caseScoreDTO.getMsg() + ";";
+                            medHomePage.append(medHomePageMsg);
+                            if (caseScoreDTO.getIsReject().equals("0")) {
+                                medHomePageScoreOn += caseScoreDTO.getScore();
+                            }
+                            //扣分总和
+                            medHomePageScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setMedHomePageTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        case "8":
+                            String docAdviceNoteMsg = caseScoreDTO.getMsg() + ";";
+                            docAdviceNote.append(docAdviceNoteMsg);
+                            if (caseScoreDTO.getIsReject().equals("0")) {
+                                docAdviceNoteScoreOn += caseScoreDTO.getScore();
+                            }
+                            //扣分总和
+                            docAdviceNoteScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setDocAdviceNoteTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        case "17":
+                            String operationInfoMsg = caseScoreDTO.getMsg() + ";";
+                            operationInfo.append(operationInfoMsg);
+                            if (caseScoreDTO.getIsReject().equals("0")) {
+                                operationInfoScoreOn += caseScoreDTO.getScore();
+                            }
+                            //扣分总和
+                            operationInfoScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setOperationInfoTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        case "56":
+                            String courseRecordMsg = caseScoreDTO.getMsg() + ";";
+                            courseRecord.append(courseRecordMsg);
+                            if (caseScoreDTO.getIsReject().equals("0")) {
+                                courseRecordScoreOn += caseScoreDTO.getScore();
+                            }
+                            //扣分总和
+                            courseRecordScoreTw += caseScoreDTO.getScore();
+                            qualityControlDTO.setCourseRecordTolScore(caseScoreDTO.getCasesScore());
+                            break; //可选
+                        //你可以有任意数量的case语句
+                        default: //可选
+                            //语句
+                    }
+                }
+
+            };
+
+
+
+        });*/
         //模块总扣分
         CaseScoreVO caseScoreVO = new CaseScoreVO();
         BeanUtil.copyProperties(behospitalPageVO,caseScoreVO);
@@ -1271,17 +1505,17 @@ public class ConsoleFacade {
         System.out.println("endTime3 = " + (endTime3-endTime2));
         if( ListUtil.isNotEmpty(qualityControlDTO)){
             for (QualityControlDTO totalData : qualityControlDTO)  {
-                if( ListUtil.isNotEmpty(caseData)){
+                if( ListUtil.isNotEmpty(caseData )){
                 for (QualityControlDTO qualityControlDTO2 : caseData) {
                  if(totalData.getBehospitalCode().equals(qualityControlDTO2.getBehospitalCode())){
-                        totalData.setAdmissionNoteTolScore(qualityControlDTO2.getAdmissionNoteTolScore() == null ? 0d: qualityControlDTO2.getAdmissionNoteTolScore());
-                        totalData.setFirstCourseNoteTolScore(qualityControlDTO2.getFirstCourseNoteTolScore() == null ? 0d: qualityControlDTO2.getFirstCourseNoteTolScore());
-                        totalData.setMedHomePageTolScore(qualityControlDTO2.getMedHomePageTolScore() == null ? 0d: qualityControlDTO2.getMedHomePageTolScore());
-                        totalData.setDocAdviceNoteTolScore(qualityControlDTO2.getDocAdviceNoteTolScore() == null ? 0d: qualityControlDTO2.getDocAdviceNoteTolScore());
-                        totalData.setCourseRecordTolScore(qualityControlDTO2.getCourseRecordTolScore() == null ? 0d: qualityControlDTO2.getCourseRecordTolScore());
-                        totalData.setOperationInfoTolScore(qualityControlDTO2.getOperationInfoTolScore() == null ? 0d: qualityControlDTO2.getOperationInfoTolScore());
-                        totalData.setDischargeNoteTolScore(qualityControlDTO2.getDischargeNoteTolScore() == null ? 0d: qualityControlDTO2.getDischargeNoteTolScore());
-                        totalData.setTotalScore(qualityControlDTO2.getTotalScore()== null ? 0d : qualityControlDTO2.getTotalScore());
+                        totalData.setAdmissionNoteTolScore(qualityControlDTO2.getAdmissionNoteTolScore());
+                        totalData.setFirstCourseNoteTolScore(qualityControlDTO2.getFirstCourseNoteTolScore());
+                        totalData.setMedHomePageTolScore(qualityControlDTO2.getMedHomePageTolScore());
+                        totalData.setDocAdviceNoteTolScore(qualityControlDTO2.getDocAdviceNoteTolScore());
+                        totalData.setCourseRecordTolScore(qualityControlDTO2.getCourseRecordTolScore());
+                        totalData.setOperationInfoTolScore(qualityControlDTO2.getOperationInfoTolScore());
+                        totalData.setDischargeNoteTolScore(qualityControlDTO2.getDischargeNoteTolScore());
+                        totalData.setTotalScore(qualityControlDTO2.getTotalScore());
                     }else{
                      continue;
                  }
@@ -1306,91 +1540,89 @@ public class ConsoleFacade {
                         Double docAdviceNoteScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
 
                         //存在单项否决
-                        Double medHomePageScore =  totalData.getMedHomePageTolScore()+medHomePageScorTh;
-                        Double medHomePageScoreTw = qualityControlDTO2.getMedHomePageScoreOn()+medHomePageScorTh;
                         if(qualityControlDTO2.getMedHomePageScoreOn()>=totalData.getMedHomePageTolScore()){
-                            totalData.setMedHomePageScore( medHomePageScore == null ? 0d : medHomePageScore);
+                            totalData.setMedHomePageScore( totalData.getMedHomePageTolScore()+medHomePageScorTh);
                         }else{
-                            totalData.setMedHomePageScore(medHomePageScoreTw == null ? 0d : medHomePageScoreTw);
+                            totalData.setMedHomePageScore(qualityControlDTO2.getMedHomePageScoreOn()+medHomePageScorTh);
                         }
 
-                        Double admissionNoteTolScore =  totalData.getAdmissionNoteTolScore()+admissionNoteScoreTh;
-                        Double admissionNoteTolScoreTw= qualityControlDTO2.getAdmissionNoteScoreOn()+admissionNoteScoreTh;
+
                         if(qualityControlDTO2.getAdmissionNoteScoreOn()>=totalData.getAdmissionNoteTolScore()){
-                            totalData.setAdmissionNoteScore( admissionNoteTolScore == null ? 0d : admissionNoteTolScore);
+                            totalData.setAdmissionNoteScore(  totalData.getAdmissionNoteTolScore()+admissionNoteScoreTh);
                         }else{
-                            totalData.setAdmissionNoteScore( admissionNoteTolScoreTw == null ? 0d : admissionNoteTolScoreTw);
+                            totalData.setAdmissionNoteScore(qualityControlDTO2.getAdmissionNoteScoreOn()+admissionNoteScoreTh);
                         }
 
-                        Double firstCourseNoteScore =  totalData.getFirstCourseNoteTolScore()+firstCourseNoteScoreTh;
-                        Double firstCourseNoteScoreTw =  qualityControlDTO2.getFirstCourseNoteScoreOn()+firstCourseNoteScoreTh;
+
                         if(qualityControlDTO2.getFirstCourseNoteScoreOn()>=totalData.getFirstCourseNoteTolScore()){
-                            totalData.setFirstCourseNoteScore(firstCourseNoteScore == null ? 0d : firstCourseNoteScore);
+                            totalData.setFirstCourseNoteScore(totalData.getFirstCourseNoteTolScore()+firstCourseNoteScoreTh);
                         }else{
-                            totalData.setFirstCourseNoteScore(firstCourseNoteScoreTw == null ? 0d : firstCourseNoteScoreTw);
+                            totalData.setFirstCourseNoteScore( qualityControlDTO2.getFirstCourseNoteScoreOn()+firstCourseNoteScoreTh);
                         }
-                        Double courseRecordScore =  totalData.getCourseRecordTolScore()+courseRecordScoreTh;
-                        Double courseRecordScoreTw =  qualityControlDTO2.getCourseRecordScoreOn()+courseRecordScoreTh;
+
                         if(qualityControlDTO2.getCourseRecordScoreOn()>=totalData.getCourseRecordTolScore()){
-                            totalData.setCourseRecordScore(courseRecordScore == null ? 0d : courseRecordScore);
+                            totalData.setCourseRecordScore( totalData.getCourseRecordTolScore()+courseRecordScoreTh);
                         }else{
-                            totalData.setCourseRecordScore(courseRecordScoreTw == null ? 0d : courseRecordScoreTw);
+                            totalData.setCourseRecordScore(qualityControlDTO2.getCourseRecordScoreOn()+courseRecordScoreTh);
                         }
-                        Double operationInfoScore = totalData.getOperationInfoTolScore()+operationInfoScoreTh;
-                        Double operationInfoScoreTw =  qualityControlDTO2.getOperationInfoScoreOn()+operationInfoScoreTh;
+
                         if(qualityControlDTO2.getOperationInfoScoreOn()>=totalData.getOperationInfoTolScore()){
-                            totalData.setOperationInfoScore(operationInfoScore == null ? 0d : operationInfoScore);
+                            totalData.setOperationInfoScore(totalData.getOperationInfoTolScore()+operationInfoScoreTh);
                         }else{
-                            totalData.setOperationInfoScore(operationInfoScoreTw == null ? 0d : operationInfoScoreTw);
+                            totalData.setOperationInfoScore(qualityControlDTO2.getOperationInfoScoreOn()+operationInfoScoreTh);
                         }
-                        Double dischargeNoteScore = totalData.getDischargeNoteTolScore()+dischargeNoteScoreTh;
-                        Double dischargeNoteScoreTw = qualityControlDTO2.getDischargeNoteScoreOn()+dischargeNoteScoreTh;
+
                         if(qualityControlDTO2.getDischargeNoteScoreOn()>=totalData.getDischargeNoteTolScore()){
-                            totalData.setDischargeNoteScore(dischargeNoteScore == null ? 0d : dischargeNoteScore);
+                            totalData.setDischargeNoteScore(totalData.getDischargeNoteTolScore()+dischargeNoteScoreTh);
                         }else{
-                            totalData.setDischargeNoteScore(dischargeNoteScoreTw == null ? 0d : dischargeNoteScoreTw);
+                            totalData.setDischargeNoteScore( qualityControlDTO2.getDischargeNoteScoreOn()+dischargeNoteScoreTh);
                         }
-                        Double docAdviceNoteScore =totalData.getDocAdviceNoteTolScore()+docAdviceNoteScoreTh;
-                        Double docAdviceNoteScoreTw =qualityControlDTO2.getDocAdviceNoteScoreOn()+docAdviceNoteScoreTh;
+
                         if(qualityControlDTO2.getDocAdviceNoteScoreOn()>=totalData.getDocAdviceNoteTolScore()){
-                            totalData.setDocAdviceNoteScore(docAdviceNoteScore == null ? 0d : docAdviceNoteScore);
+                            totalData.setDocAdviceNoteScore(totalData.getDocAdviceNoteTolScore()+docAdviceNoteScoreTh);
                         }else{
-                            totalData.setDocAdviceNoteScore(docAdviceNoteScoreTw == null ? 0d : docAdviceNoteScoreTw);
+                            totalData.setDocAdviceNoteScore(qualityControlDTO2.getDocAdviceNoteScoreOn()+docAdviceNoteScoreTh);
                         }
 
-                    }else{
-                        continue;
                     }
                 };}
-            Double mainScore =  totalData.getMedHomePageScore()+totalData.getAdmissionNoteScore()+totalData.getFirstCourseNoteScore()+
-            totalData.getCourseRecordScore()+totalData.getOperationInfoScore()+totalData.getDischargeNoteScore()+totalData. getDocAdviceNoteScore();
+
                 Double otherScore = new Double(0d);
+                Double mainScore = new Double(0d);
                 Double otherCaseScore = null;
                 Double res = new Double(120d);
                 Double resPr = new Double(100d);
                 String scoreType = "0";
-                 scoreType = sysHospitalSetFacade.getScoreType(caseScoreVO.getHospitalId());
+                if( ListUtil.isNotEmpty(sorceData) &&  ListUtil.isNotEmpty(sorceData)){
+                    mainScore =  totalData.getMedHomePageScore()+totalData.getAdmissionNoteScore()+totalData.getFirstCourseNoteScore()+
+                            totalData.getCourseRecordScore()+totalData.getOperationInfoScore()+totalData.getDischargeNoteScore()+totalData. getDocAdviceNoteScore();
+                    scoreType = sysHospitalSetFacade.getScoreType(caseScoreVO.getHospitalId());
                     if ("1".equals(scoreType)) {
                         otherScore = (resPr-totalData.getTotalScore()-mainScore);
                     } else if ("0".equals(scoreType)) {
                         otherScore = res-(totalData.getTotalScore()*res/resPr)-mainScore;
                     }
-                 otherCaseScore = (double) Math.round(otherScore * 10) / 10;
-                totalData.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore  );
-
+                    otherCaseScore = (double) Math.round(otherScore * 10) / 10;
+                    totalData.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore  );
+                }else{
+                    totalData.setAdmissionNoteScore(null);
+                    totalData.setMedHomePageScore(null);
+                    totalData.setCourseRecordScore(null);
+                    totalData.setFirstCourseNoteScore(null);
+                    totalData.setAdmissionNoteScore(null);
+                    totalData.setDischargeNoteScore(null);
+                    totalData.setOperationInfoScore(null);
+                    totalData.setOtherCase(null);
+                    totalData.setTotalScore(null);
+                }
 
             };
-        }
+        }else{return null; };
 
 
         //
         long endTime4= System.currentTimeMillis();
         System.out.println("endTime4 = " + (endTime4-endTime3));
-
-
-      /*  List<QualityControlDTO>records= behospitalInfoFacade.getQualityCaseSorce(behospitalPageVO);
-        long endTime3 = System.currentTimeMillis();*/
-    //    System.out.println("endTime3 = " + (endTime3-startTime));
         System.out.println("总耗时 = " + (endTime3-startTime));
         return records;
 

+ 10 - 1
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -169,7 +169,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param behospitalPageVO
      * @return
      */
-    public List<QualityControlDTO> getQualityCaseSorce(BehospitalPageVO behospitalPageVO);
+    public List<CaseScoreDTO> getQualityCaseSorce(BehospitalPageVO behospitalPageVO);
 
 
 
@@ -435,6 +435,15 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      */
     public List<UnModifyMRDetailDTO> unModifyMRSByDept(FilterUnModifyMRVO filterUnModifyMRVO);
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);
+
+
 
     /**
      * 病历稽查表

+ 9 - 1
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -90,6 +90,14 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      */
     public List<NumDTO> leaveHosCountByDept(FilterVO filterVO);
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);
+
     /**
      * 入院总人数统计-科室-首页
      *
@@ -171,7 +179,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param behospitalPageVO
      * @return
      */
-    public List<QualityControlDTO> getQualityCaseSorce(BehospitalPageVO behospitalPageVO);
+    public List<CaseScoreDTO> getQualityCaseSorce(BehospitalPageVO behospitalPageVO);
 
 
     /**

+ 13 - 1
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -241,7 +241,7 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
      * @return
      */
     @Override
-    public List<QualityControlDTO> getQualityCaseSorce(BehospitalPageVO behospitalPageVO) {
+    public List<CaseScoreDTO> getQualityCaseSorce(BehospitalPageVO behospitalPageVO) {
         return baseMapper.getQualityCaseSorce(behospitalPageVO);
     }
     /**
@@ -583,6 +583,18 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
         return baseMapper.unModifyMRSByDept(filterUnModifyMRVO);
     }
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    @Override
+    public IPage<QualityControlDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO) {
+        return baseMapper.qualityControlByDept(behospitalPageVO);
+    }
+
+
     /**
      * 病历稽查表
      *

+ 20 - 0
src/main/java/com/diagbot/web/ConsoleByDeptController.java

@@ -510,5 +510,25 @@ public class ConsoleByDeptController {
         return RespDTO.onSuc(consoleByDeptFacade.getMedicalChecks(filterVO));
     }
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    @ApiOperation(value = "病历质控报表[by:cy]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>" +
+                    "isPlacefile: 是否归档(0:未归档,1:已归档) <br>")
+    @PostMapping("/qualityControlByDept")
+    @SysLogger("qualityControlByDept")
+    public RespDTO<IPage<QualityControlDTO>> qualityControlByDept(@RequestBody BehospitalPageVO behospitalPageVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.qualityControlByDept(behospitalPageVO));
+    }
+
+
     //endregion -----------------------内页接口结束------------------------------
 }

+ 18 - 0
src/main/java/com/diagbot/web/ConsoleByDeptExportController.java

@@ -396,6 +396,24 @@ public class ConsoleByDeptExportController {
         consoleByDeptExportFacade.medicalCheckExportByDept(response, filterVO);
     }
 
+    /**
+     * 病历质控报表-科室-导出
+     * @param behospitalPageVO
+     * @return
+     */
+    @ApiOperation(value = "病历质控报表导出-科室[by:cy]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>" +
+                    "isPlacefile: 是否归档(0:未归档,1:已归档) <br>")
+    @PostMapping("/qualityControlExportByDept")
+    @SysLogger("qualityControlExportByDept")
+    public void qualityControlExportByDept(HttpServletResponse response, @RequestBody @Valid BehospitalPageVO behospitalPageVO) {
+        consoleByDeptExportFacade.qualityControlExportByDept(response, behospitalPageVO);
+    }
+
 /**
      * 病历稽查统计(首页)
      * @param filterVO

+ 20 - 0
src/main/java/com/diagbot/web/ConsoleExportController.java

@@ -497,4 +497,24 @@ public class ConsoleExportController {
     public void qcCheckMRPageExport(HttpServletResponse response, @RequestBody @Valid QcResultShortPageVO qcResultShortPageVO) {
         consoleExportFacade.qcCheckMRPageExport(response, qcResultShortPageVO);
     }
+
+
+    /**
+     * 病历质控报表分页导出
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    @ApiOperation(value = "病历质控报表导出[by:cy]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>" +
+                    "isPlacefile: 是否归档(0:未归档,1:已归档) <br>")
+    @PostMapping("/qualityControlExport")
+    @SysLogger("qualityControlExport")
+    public void qualityControlExport(HttpServletResponse response, @RequestBody BehospitalPageVO behospitalPageVO) {
+        consoleExportFacade.qualityControlExport(response, behospitalPageVO);
+    }
 }

+ 87 - 130
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -214,48 +214,32 @@
         AND m1.hospital_id = m2.hospital_id
         AND m1.behospital_code = m2.behospital_code
     </select>
-    <select id="getQualityCaseSorce" resultType="com.diagbot.dto.QualityControlDTO">
-        select
-        t1.*,
-        t2.admissionNoteTolScore,
-        t2.firstCourseNoteTolScore,
-        t2.medHomePageTolScore,
-        t2.docAdviceNoteTolScore,
-        t2.courseRecordTolScore,
-        t2.operationInfoTolScore,
-        t2.dischargeNoteTolScore,
-        t2.score_res FROM (
+
+    <select id="getQualitySorce" resultType="com.diagbot.dto.QualityControlDTO">
         SELECT
         t1.behospital_code,
         t1.hospital_id,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 1 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS admissionNote,
         SUM(CASE WHEN  t1.mode_id =1  AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS admissionNoteScoreOn,
         SUM(CASE WHEN  t1.mode_id =1 THEN t1.score ELSE 0 END) AS admissionNoteScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =1 THEN t1.score ELSE 0 END)-SUM(CASE WHEN  t1.mode_id =1  AND t1.is_reject = 0 THEN t1.score ELSE 0 END)) AS admissionNoteScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 2 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS firstCourseNote,
         SUM(CASE WHEN  t1.mode_id =2 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)  AS firstCourseNoteScoreOn,
         SUM(CASE WHEN  t1.mode_id =2 THEN t1.score ELSE 0 END)  AS firstCourseNoteScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =2 THEN t1.score ELSE 0 END) -SUM(CASE WHEN  t1.mode_id =2 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)) AS firstCourseNoteScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 6 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS medHomePage,
         SUM(CASE WHEN  t1.mode_id =6 AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS medHomePageScoreOn,
         SUM(CASE WHEN  t1.mode_id =6 THEN t1.score ELSE 0 END) AS medHomePageScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =6 THEN t1.score ELSE 0 END)-SUM(CASE WHEN  t1.mode_id =6 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)) AS medHomePageScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 8 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS docAdviceNote,
         SUM(CASE WHEN  t1.mode_id =8 AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS docAdviceNoteScoreOn,
         SUM(CASE WHEN  t1.mode_id =8 THEN t1.score ELSE 0 END) AS docAdviceNoteScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =8 THEN t1.score ELSE 0 END)-SUM(CASE WHEN  t1.mode_id =8 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)) AS docAdviceNoteScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 56 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS courseRecord,
         SUM(CASE WHEN  t1.mode_id =56 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)  AS courseRecordScoreOn,
         SUM(CASE WHEN  t1.mode_id =56 THEN t1.score ELSE 0 END)  AS courseRecordScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =56 THEN t1.score ELSE 0 END)-SUM(CASE WHEN  t1.mode_id =56 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)) AS courseRecordScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 17 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS operationInfo,
         SUM(CASE WHEN  t1.mode_id =17 AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS operationInfoScoreOn,
         SUM(CASE WHEN  t1.mode_id =17  THEN t1.score ELSE 0 END) AS operationInfoScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =17  THEN t1.score ELSE 0 END)-SUM(CASE WHEN  t1.mode_id =17 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)) AS operationInfoScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 5 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS dischargeNote,
         SUM(CASE WHEN  t1.mode_id =5 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)  AS dischargeNoteScoreOn,
         SUM(CASE WHEN  t1.mode_id =5 THEN t1.score ELSE 0 END)  AS dischargeNoteScoreTw,
-        (SUM(CASE WHEN  t1.mode_id =5 THEN t1.score ELSE 0 END)-GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 5 THEN t1.msg ELSE NULL END SEPARATOR ';' )) AS dischargeNoteScoreTh,
         GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id != 1 AND t1.mode_id !=  2 AND t1.mode_id !=  6 AND t1.mode_id != 8 AND t1.mode_id != 156 AND t1.mode_id != 17 AND t1.mode_id != 5 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS otherCase
         FROM (
         SELECT
@@ -311,42 +295,21 @@
             and e.level = #{level}
         </if>
         ORDER BY b.order_no, c.grade_type DESC, a.order_no
-        )t1 GROUP BY behospital_code)t1
-        LEFT JOIN (
-        SELECT m1.*, m2.score_res FROM(
-        SELECT
-        m1.hospital_id,
-        m1.behospital_code,
-        SUM(CASE WHEN  m1.mode_id =1 THEN m1.cases_score ELSE 0 END) AS admissionNoteTolScore,
-        SUM(CASE WHEN  m1.mode_id =2 THEN m1.cases_score ELSE 0 END) AS firstCourseNoteTolScore,
-        SUM(CASE WHEN  m1.mode_id =6 THEN m1.cases_score ELSE 0 END) AS medHomePageTolScore,
-        SUM(CASE WHEN  m1.mode_id =8 THEN m1.cases_score ELSE 0 END) AS docAdviceNoteTolScore,
-        SUM(CASE WHEN  m1.mode_id =56 THEN m1.cases_score ELSE 0 END) AS courseRecordTolScore,
-        SUM(CASE WHEN  m1.mode_id =17 THEN m1.cases_score ELSE 0 END) AS operationInfoTolScore,
-        SUM(CASE WHEN  m1.mode_id =5 THEN m1.cases_score ELSE 0 END) AS dischargeNoteTolScore
-        FROM (
-        SELECT
-        c.behospital_code,
-        a.mode_id,
-        c.cases_score,
-        c.cases_id,
-        c.hospital_id
-        FROM
-        `qc_cases_entry` a,
-        qc_mode b,
-        med_qcresult_detail c,
-        qc_cases_hospital d,
-        med_behospital_info e
-        WHERE a.is_deleted = 'N' AND b.is_deleted = 'N' AND c.is_deleted = 'N' AND d.is_deleted = 'N'AND e.is_deleted = 'N'
-        AND a.id = c.cases_entry_id
-        AND a.mode_id = b.id
+        )t1 GROUP BY behospital_code
+    </select>
+
+
+    <select id="getQualityCaseSorce" resultType="com.diagbot.dto.CaseScoreDTO">
+     SELECT b.`name`,a.mode_id,b.`name` model_name,c.score,d.score cases_score,c.msg,c.cases_entry_id,c.is_reject
+        FROM `qc_cases_entry` a, qc_mode b, med_qcresult_detail c, qc_cases_hospital d, med_behospital_info e
+        where a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N' and d.is_deleted = 'N'AND e.is_deleted = 'N'
+        and a.id = c.cases_entry_id
+        and a.mode_id = b.id
         AND c.cases_id = d.cases_id
-        AND c.hospital_id = d.hospital_id
+        and c.hospital_id = d.hospital_id
         AND c.behospital_code = e.behospital_code
         AND c.hospital_id = e.hospital_id
-        <if test="hospitalId != null">
-            and c.hospital_id = #{hospitalId}
-        </if>
+        and c.hospital_id = #{hospitalId}
         <if test="deptName != null and deptName != ''">
             and e.beh_dept_name= #{deptName}
         </if>
@@ -371,103 +334,93 @@
         <if test="level != null and level != ''">
             and e.level = #{level}
         </if>
-        <if test="level != null and level != ''">
-            and e.level = #{level}
-        </if>
-        GROUP BY mode_id
-        ORDER BY b.order_no, c.grade_type DESC, a.order_no
-        )m1  GROUP BY  behospital_code)m1 LEFT JOIN  med_qcresult_info m2
-        ON m2.is_deleted = 'N'
-        AND m1.hospital_id = m2.hospital_id
-        AND m1.behospital_code = m2.behospital_code
-        )t2
-        ON t1.hospital_id = t2.hospital_id
-        AND t1.behospital_code = t2.behospital_code
+        GROUP BY c.behospital_code,a.mode_id,c.cases_entry_id
+        order by c.behospital_code
     </select>
-    <select id="getQualitySorce" resultType="com.diagbot.dto.QualityControlDTO">
-        SELECT
-        t1.behospital_code,
-        t1.hospital_id,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 1 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS admissionNote,
-        SUM(CASE WHEN  t1.mode_id =1  AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS admissionNoteScoreOn,
-        SUM(CASE WHEN  t1.mode_id =1 THEN t1.score ELSE 0 END) AS admissionNoteScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 2 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS firstCourseNote,
-        SUM(CASE WHEN  t1.mode_id =2 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)  AS firstCourseNoteScoreOn,
-        SUM(CASE WHEN  t1.mode_id =2 THEN t1.score ELSE 0 END)  AS firstCourseNoteScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 6 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS medHomePage,
-        SUM(CASE WHEN  t1.mode_id =6 AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS medHomePageScoreOn,
-        SUM(CASE WHEN  t1.mode_id =6 THEN t1.score ELSE 0 END) AS medHomePageScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 8 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS docAdviceNote,
-        SUM(CASE WHEN  t1.mode_id =8 AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS docAdviceNoteScoreOn,
-        SUM(CASE WHEN  t1.mode_id =8 THEN t1.score ELSE 0 END) AS docAdviceNoteScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 56 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS courseRecord,
-        SUM(CASE WHEN  t1.mode_id =56 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)  AS courseRecordScoreOn,
-        SUM(CASE WHEN  t1.mode_id =56 THEN t1.score ELSE 0 END)  AS courseRecordScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 17 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS operationInfo,
-        SUM(CASE WHEN  t1.mode_id =17 AND t1.is_reject = 0 THEN t1.score ELSE 0 END) AS operationInfoScoreOn,
-        SUM(CASE WHEN  t1.mode_id =17  THEN t1.score ELSE 0 END) AS operationInfoScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id = 5 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS dischargeNote,
-        SUM(CASE WHEN  t1.mode_id =5 AND t1.is_reject = 0 THEN t1.score ELSE 0 END)  AS dischargeNoteScoreOn,
-        SUM(CASE WHEN  t1.mode_id =5 THEN t1.score ELSE 0 END)  AS dischargeNoteScoreTw,
-        GROUP_CONCAT(DISTINCT CASE WHEN t1.mode_id != 1 AND t1.mode_id !=  2 AND t1.mode_id !=  6 AND t1.mode_id != 8 AND t1.mode_id != 156 AND t1.mode_id != 17 AND t1.mode_id != 5 THEN t1.msg ELSE NULL END SEPARATOR ';' ) AS otherCase
-        FROM (
-        SELECT
-        c.behospital_code,
-        c.hospital_id,
-        a.mode_id,
-        c.cases_score,
-        c.score,
-        c.msg,
-        c.is_reject,
-        c.cases_id
-        FROM
-        `qc_cases_entry` a,
-        qc_mode b,
-        med_qcresult_detail c,
-        qc_cases_hospital d,
-        med_behospital_info e
-        WHERE a.is_deleted = 'N' AND b.is_deleted = 'N' AND c.is_deleted = 'N' AND d.is_deleted = 'N'AND e.is_deleted = 'N'
-        AND a.id = c.cases_entry_id
-        AND a.mode_id = b.id
-        AND c.cases_id = d.cases_id
-        AND c.hospital_id = d.hospital_id
-        AND c.behospital_code = e.behospital_code
-        AND c.hospital_id = e.hospital_id
-        <if test="hospitalId != null">
-            and c.hospital_id = #{hospitalId}
+
+    <select id="getQualityControl" resultType="com.diagbot.dto.QualityControlDTO">
+        SELECT * FROM (
+        select
+        t.name AS NAME,
+        t.behospital_code AS behospitalCode,
+        t.doctor_name AS doctorName,
+        t.beh_dept_name AS deptName,
+        t.beh_dept_id AS deptId,
+        t.leave_hospital_date AS leaveHospitalDate,
+        t.level,
+        t.is_deleted,
+        g.check_name AS ch_name,
+        h.check_name AS mr_name
+        from (
+        select a.*, ifnull(b.level,'未评分') as level, b.grade_type, b.score_res, b.gmt_create as
+        grade_time from med_behospital_info a
+        LEFT JOIN med_qcresult_info b
+        on a.behospital_code = b.behospital_code and b.is_deleted = 'N'
+        ) t
+        LEFT JOIN (SELECT * FROM med_check_info WHERE is_deleted = 'N' AND check_type = 0 ) g
+        ON t.behospital_code = g.behospital_code
+        AND t.hospital_id = g.hospital_id
+        LEFT JOIN (SELECT * FROM med_check_info WHERE is_deleted = 'N'AND check_type = 1 ) h
+        ON t.behospital_code = h.behospital_code
+        AND t.hospital_id = h.hospital_id
+        where t.is_deleted = 'N'
+        <if test="diagnose != null and diagnose != ''">
+            AND t.diagnose LIKE CONCAT( '%', #{diagnose}, '%' )
         </if>
         <if test="deptName != null and deptName != ''">
-            and e.beh_dept_name= #{deptName}
+            and t.beh_dept_name= #{deptName}
         </if>
-        <if test="behospitalCode != null and behospitalCode != ''">
-            and e.behospital_code like CONCAT('%',#{behospitalCode},'%')
+        <if test="doctorName != null and doctorName != ''">
+            and CONCAT(
+            IFNULL(t.doctor_name,''),IFNULL(t.beh_doctor_name,''),IFNULL(t.director_doctor_name,''))
+            like CONCAT('%',#{doctorName},'%')
         </if>
-        <if test="isPlacefile != null and isPlacefile != ''">
-            and e.is_placefile = #{isPlacefile}
+        <if test="name != null and name != ''">
+            and t.name like CONCAT('%',#{name},'%')
+        </if>
+        <if test="doctorCode != null and doctorCode != ''">
+            and (t.doctor_id = #{doctorCode}
+            or t.beh_doctor_id = #{doctorCode}
+            or t.director_doctor_id = #{doctorCode})
+        </if>
+        <if test="fileCode != null and fileCode != ''">
+            and t.file_code like CONCAT('%',#{fileCode},'%')
+        </if>
+        <if test="hospitalId != null">
+            and t.hospital_id = #{hospitalId}
+        </if>
+        <if test="behospitalCode != null and behospitalCode != ''">
+            and t.behospital_code like CONCAT('%',#{behospitalCode},'%')
         </if>
         <if test="behosDateStart != null">
-            <![CDATA[ and e.behospital_date >= #{behosDateStart}]]>
+            <![CDATA[ and t.behospital_date >= #{behosDateStart}]]>
         </if>
         <if test="behosDateEnd != null">
-            <![CDATA[ and e.behospital_date < #{behosDateEnd}]]>
+            <![CDATA[ and t.behospital_date < #{behosDateEnd}]]>
         </if>
         <if test="leaveHosDateStart != null">
-            <![CDATA[ and e.leave_hospital_date >= #{leaveHosDateStart}]]>
+            <![CDATA[ and t.leave_hospital_date >= #{leaveHosDateStart}]]>
         </if>
         <if test="leaveHosDateEnd != null">
-            <![CDATA[ and e.leave_hospital_date < #{leaveHosDateEnd}]]>
+            <![CDATA[ and t.leave_hospital_date < #{leaveHosDateEnd}]]>
         </if>
         <if test="level != null and level != ''">
-            and e.level = #{level}
+            and t.level = #{level}
         </if>
-        <if test="level != null and level != ''">
-            and e.level = #{level}
+        <if test="isPlacefile != null and isPlacefile != ''">
+            and t.is_placefile = #{isPlacefile}
+        </if>
+        and t.qc_type_id != 0) p
+        where p.is_deleted="N"
+        <if test="chName != null and chName !=''">
+            AND p.ch_name like CONCAT('%',#{chName},'%')
+        </if>
+        <if test="mrName != null and mrName !=''">
+            AND p.mr_name like CONCAT('%',#{mrName},'%')
         </if>
-        ORDER BY b.order_no, c.grade_type DESC, a.order_no
-        )t1 GROUP BY behospital_code
     </select>
 
-    <select id="getQualityControl" resultType="com.diagbot.dto.QualityControlDTO">
+    <select id="qualityControlByDept" resultType="com.diagbot.dto.QualityControlDTO">
         SELECT * FROM (
         select
         t.name AS NAME,
@@ -481,10 +434,13 @@
         g.check_name AS ch_name,
         h.check_name AS mr_name
         from (
-        select a.*, ifnull(b.level,'未评分') as level, b.grade_type, b.score_res, b.gmt_create as
+        select a.*, ifnull(b.level,'未评分') as level, b.grade_type,d.user_id, b.score_res, b.gmt_create as
         grade_time from med_behospital_info a
         LEFT JOIN med_qcresult_info b
         on a.behospital_code = b.behospital_code and b.is_deleted = 'N'
+        LEFT JOIN sys_user_dept d
+        ON a.hospital_id = d.hospital_id
+        AND a.beh_dept_id = d.dept_id
         ) t
         LEFT JOIN (SELECT * FROM med_check_info WHERE is_deleted = 'N' AND check_type = 0 ) g
         ON t.behospital_code = g.behospital_code
@@ -493,6 +449,7 @@
         ON t.behospital_code = h.behospital_code
         AND t.hospital_id = h.hospital_id
         where t.is_deleted = 'N'
+        AND t.user_id = #{userId}
         <if test="diagnose != null and diagnose != ''">
             AND t.diagnose LIKE CONCAT( '%', #{diagnose}, '%' )
         </if>