浏览代码

科室导出调整

chengyao 4 年之前
父节点
当前提交
9f94602111

+ 0 - 36
src/main/java/com/diagbot/dto/QualityBehospitalExportDTO.java

@@ -1,36 +0,0 @@
-package com.diagbot.dto;
-
-import cn.afterturn.easypoi.excel.annotation.Excel;
-import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * @Description:
- * @author: gaodm
- * @time: 2020/6/2 19:35
- */
-@Getter
-@Setter
-public class QualityBehospitalExportDTO {
-    @Excel(name = "主管医生", needMerge = true)
-    private String doctorName;
-    @Excel(name = "患者姓名", needMerge = true)
-    private String patName;
-    @Excel(name = "住院号", needMerge = true)
-    private String behospitalCode;
-    @Excel(name = "入院时间", needMerge = true, exportFormat = "yyyy/MM/dd")
-    private Date behospitalDate;
-    @Excel(name = "出院时间", needMerge = true, exportFormat = "yyyy/MM/dd")
-    private Date leaveHospitalDate;
-    @Excel(name = "分数", needMerge = true)
-    private Double score;
-    @Excel(name = "病案首页分数", needMerge = true)
-    private Double scoreBn;
-    @ExcelCollection(name = "")
-    private List<ExportExcelCaseDTO> exportExcelCaseDTOS;
-
-}

+ 232 - 0
src/main/java/com/diagbot/dto/QualityControlDeptDTO.java

@@ -0,0 +1,232 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:病历质控报表返回结构
+ * @Author:cy
+ * @time: 2021/1/20 13:32
+ */
+@Getter
+@Setter
+public class QualityControlDeptDTO {
+
+    /**
+     * 姓名
+     */
+    @Excel(name = "病人姓名", width = 12, orderNum = "1")
+    private String name;
+
+    /**
+     * 病人住院ID
+     */
+    @Excel(name = "住院号", width = 16, orderNum = "2")
+    private String behospitalCode;
+
+    /**
+     * 主管医生id
+     */
+    private String doctorId;
+
+    /**
+     * 医生姓名
+     */
+    @Excel(name = "主治医生", width = 12, orderNum = "3",mergeVertical = true)
+    private String doctorName;
+
+    /**
+     * 科室id(科室编码)
+     */
+    private String deptId;
+    /**
+     * 科室名称
+     */
+    @Excel(name = "科室名称", width = 16, orderNum = "4",mergeVertical = true)
+    private String deptName;
+
+    /**
+     * 入院时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date behospitalDate;
+
+    /**
+     * 出院时间
+     */
+    @Excel(name = "出院日期", width = 25, orderNum = "5", exportFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date leaveHospitalDate;
+
+    /**
+     * 病案首页--
+     */
+    @Excel(name = "病案首页", width = 30, orderNum = "6")
+    private String medHomePage;
+    /**
+     * 病案首页扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "7")
+    private Double medHomePageScore= 0d;
+    private Double medHomePageScoreOn= 0d;
+    private Double medHomePageScoreTw= 0d;
+    /**
+     * 入院记录--
+     */
+    @Excel(name = "入院记录",width = 30, orderNum = "8")
+    private String admissionNote;
+
+    /**
+     * 入院记录扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "9")
+    private Double admissionNoteScore= 0d;
+    //非单项否决扣分
+    private Double admissionNoteScoreOn= 0d;
+    //扣分项总和
+    private Double admissionNoteScoreTw= 0d;
+
+    /**
+     * 首次病程录--
+     */
+    @Excel(name = "首次病程录",width = 30, orderNum = "10")
+    private String firstCourseNote;
+
+    /**
+     * 首次病程录扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "11")
+    private Double firstCourseNoteScore= 0d;
+    private Double firstCourseNoteScoreOn= 0d;
+    private Double firstCourseNoteScoreTw= 0d;
+    /**
+     * 病程记录--
+     */
+    @Excel(name = "病程记录",width = 30, orderNum = "12")
+    private String courseRecord;
+
+    /**
+     * 病程记录扣分
+     */
+    @Excel(name = "扣分", width = 12,orderNum = "13")
+    private Double courseRecordScore= 0d;
+    private Double courseRecordScoreOn= 0d;
+    private Double courseRecordScoreTw= 0d;
+    /**
+     * 手术信息--
+     */
+    @Excel(name = "手术信息",width = 30, orderNum = "14")
+    private String  operationInfo;
+
+    /**
+     * 手术信息扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "15")
+    private Double operationInfoScore= 0d;
+    private Double  operationInfoScoreOn= 0d;
+    private Double  operationInfoScoreTw= 0d;
+    /**
+     * 出院记录--
+     */
+    @Excel(name = "出院记录",width = 30, orderNum = "16")
+    private String  dischargeNote;
+    /**
+     * 出院记录扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "17")
+    private Double  dischargeNoteScore= 0d;
+    private Double  dischargeNoteScoreOn= 0d;
+    private Double  dischargeNoteScoreTw= 0d;
+    /**
+     * 医嘱单--
+     */
+    @Excel(name = "医嘱单",width = 30, orderNum = "18")
+    private String  docAdviceNote;
+    /**
+     * 医嘱单扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "19")
+    private Double docAdviceNoteScore= 0d;
+    private Double  docAdviceNoteScoreOn= 0d;
+    private Double  docAdviceNoteScoreTw= 0d;
+    /**
+     * 其他
+     */
+    @Excel(name = "其他",width = 30, orderNum = "20")
+    private String  otherCase;
+    /**
+     * 其他扣分
+     */
+    @Excel(name = "扣分",width = 12, orderNum = "21")
+    private Double otherCaseScore= 0d;
+
+    /**
+     * 总分
+     */
+    @Excel(name = "总分",width = 12, orderNum = "22")
+    private Double  totalScore= 0d;
+    /**
+     * 病历等级
+     */
+    @Excel(name = "病历等级",width = 12, orderNum = "23")
+    private String level;
+
+    /**
+     * 病案首页核查人
+     */
+    @Excel(name = "首页检查者", width = 12,orderNum = "24")
+    private String  mrName;
+    /**
+     * 病历核查人
+     */
+    @Excel(name = "病历检查者",width = 12, orderNum = "25")
+    private String chName;
+
+
+    /**
+     * 病案首页模块总分
+     */
+    private Double medHomePageTolScore =0d;
+
+
+    /**
+     * 入院记录模块总分
+     */
+    private Double admissionNoteTolScore=0d;
+
+    /**
+     * 首次病程录模块总分
+     */
+    private Double firstCourseNoteTolScore=0d;
+
+    /**
+     * 病程记录模块总分
+     */
+    private Double courseRecordTolScore=0d;
+
+
+    /**
+     * 手术信息模块总分
+     */
+    private Double operationInfoTolScore=0d;
+
+
+    /**
+     * 出院记录模块总分
+     */
+    private Double dischargeNoteTolScore=0d;
+
+
+
+    /**
+     * 医嘱单模块总分
+     */
+    private Double docAdviceNoteTolScore=0d;
+
+
+
+}

+ 30 - 6
src/main/java/com/diagbot/facade/ConsoleByDeptExportFacade.java

@@ -3,12 +3,14 @@ package com.diagbot.facade;
 import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.diagbot.dto.*;
 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.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Lists;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,10 +18,7 @@ import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @Description: 报表导出装饰层
@@ -389,6 +388,7 @@ public class ConsoleByDeptExportFacade {
         behospitalPageVO.setSearchCount(false);
         Date startDate = behospitalPageVO.getLeaveHosDateStart();
         Date endDate = behospitalPageVO.getLeaveHosDateEnd();
+        orderMethod(behospitalPageVO);
         //时间间隔30天
         long interval = 30 * 24l * 60l * 60l * 1000l;
         if (endDate.getTime() < startDate.getTime()) {
@@ -398,10 +398,34 @@ public class ConsoleByDeptExportFacade {
             throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于30天");
         }
         String  fileName = "病历质控报表科室详情.xls";
-        IPage<QualityControlDTO> records = consoleByDeptFacade.qualityControlByDept(behospitalPageVO);
-        ExcelUtils.exportExcel(records.getRecords(), null, "sheet1", QualityControlDTO.class, fileName, response, 26.8f);
+        IPage<QualityControlDeptDTO> records = consoleByDeptFacade.qualityControlByDept(behospitalPageVO);
+        ExcelUtils.exportExcel(records.getRecords(), null, "sheet1", QualityControlDeptDTO.class, fileName, response, 26.8f);
     }
 
+    static void orderMethod(BehospitalPageVO behospitalPageVO){
+        List orders = behospitalPageVO.getOrders();
+        Boolean flag= false;
+        List<OrderItem> itemList = new ArrayList<>();
+        for (Object order : orders) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            OrderItem orderName = objectMapper.convertValue(order, OrderItem.class);
+            itemList.add(orderName);
+            if(!orderName.getColumn().equals("doctorName")){
+                flag = true;
+            }
+        }
+        //医生作为第一升序排列,传入排序随后 配合excel注解属性mergeVertical处理科室合并
+        if(flag){
+            OrderItem orderItem = new OrderItem();
+            orderItem.setAsc(true);
+            orderItem.setColumn("doctorName");
+            itemList.add(orderItem);
+            behospitalPageVO.setOrders(itemList);
+            Collections.reverse(itemList);
+        }
+
+    };
+
 
 
     /**

+ 3 - 3
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -1061,11 +1061,11 @@ public class ConsoleByDeptFacade {
      * @param behospitalPageVO
      * @return
      */
-    public IPage<QualityControlDTO> qualityControlByDept(@Param("filterVO")  BehospitalPageVO behospitalPageVO) {
+    public IPage<QualityControlDeptDTO> qualityControlByDept(@Param("filterVO")  BehospitalPageVO behospitalPageVO) {
         behospitalPageSet(behospitalPageVO);
         DecimalFormat df=new DecimalFormat("0.0");
-        IPage<QualityControlDTO> records = behospitalInfoFacade.qualityControlByDept(behospitalPageVO);
-        List<QualityControlDTO> qualityControlDTOs = records.getRecords();
+        IPage<QualityControlDeptDTO> records = behospitalInfoFacade.qualityControlByDept(behospitalPageVO);
+        List<QualityControlDeptDTO> qualityControlDTOs = records.getRecords();
         CaseScoreVO caseScoreVO = new CaseScoreVO();
         BeanUtil.copyProperties(behospitalPageVO,caseScoreVO);
         List<CaseScoreDTO>caseScoreDTOS= behospitalInfoFacade.getQualityCaseSorce(caseScoreVO);

+ 37 - 11
src/main/java/com/diagbot/facade/ConsoleExportFacade.java

@@ -1,27 +1,25 @@
 package com.diagbot.facade;
 
 import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.diagbot.dto.*;
 import com.diagbot.entity.SysHospitalSet;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.ExcelUtils;
-import com.diagbot.util.ListUtil;
-import com.diagbot.util.StringUtil;
-import com.diagbot.util.SysUserUtils;
+import com.diagbot.util.*;
 import com.diagbot.vo.*;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Lists;
+import com.google.gson.JsonObject;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @Description: 报表导出装饰层
@@ -623,8 +621,36 @@ public class ConsoleExportFacade {
         behospitalPageVO.setCurrent(1L);
         behospitalPageVO.setSize(Long.MAX_VALUE);
         behospitalPageVO.setSearchCount(false);
-        IPage<QualityControlDTO> records = consoleFacade.getQualityControl(behospitalPageVO);
+        orderMethod(behospitalPageVO);
+
+        IPage<QualityControlDTO> page = consoleFacade.getQualityControlExport(behospitalPageVO);
+        List<QualityControlDTO> records = page.getRecords();
+
         String fileName = "病历质控报表详情页.xls";
-        ExcelUtils.exportExcel(records.getRecords(), null, "sheet1", QualityControlDTO.class, fileName, response, 26.8f);
+        ExcelUtils.exportExcel(records, null, "sheet1", QualityControlDTO.class, fileName, response, 26.8f);
     }
+
+   static void orderMethod(BehospitalPageVO behospitalPageVO){
+       List orders = behospitalPageVO.getOrders();
+       Boolean flag= false;
+       List<OrderItem> itemList = new ArrayList<>();
+       for (Object order : orders) {
+           ObjectMapper objectMapper = new ObjectMapper();
+           OrderItem orderName = objectMapper.convertValue(order, OrderItem.class);
+           itemList.add(orderName);
+           if(!orderName.getColumn().equals("deptName")){
+               flag = true;
+           }
+       }
+       //科室作为第一升序排列,传入排序随后 配合excel注解属性mergeVertical处理科室合并
+       if(flag){
+           OrderItem orderItem = new OrderItem();
+           orderItem.setAsc(true);
+           orderItem.setColumn("deptName");
+           itemList.add(orderItem);
+           Collections.reverse(itemList);
+           behospitalPageVO.setOrders(itemList);
+       }
+
+   };
 }

+ 285 - 113
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1547,139 +1547,311 @@ public class ConsoleFacade {
             }
         });
         };
+        return records;
+    }
 
-        //模块总扣分
- /*       CaseScoreVO caseScoreVO = new CaseScoreVO();
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> getQualityControlExport(BehospitalPageVO behospitalPageVO) {
+        behospitalPageSet(behospitalPageVO);
+        DecimalFormat df=new DecimalFormat("0.0");
+        IPage<QualityControlDTO> records = behospitalInfoFacade.getQualityControl(behospitalPageVO);
+        List<QualityControlDTO> qualityControlDTOs = records.getRecords();
+        CaseScoreVO caseScoreVO = new CaseScoreVO();
         BeanUtil.copyProperties(behospitalPageVO,caseScoreVO);
-        List<QualityControlDTO>caseData= behospitalInfoFacade.getQualityCase(caseScoreVO);
-        long endTime2 = System.currentTimeMillis();
-        System.out.println("endTime2 = " + (endTime2-endTime1));
-        List<QualityControlDTO>sorceData= behospitalInfoFacade.getQualitySorce(caseScoreVO);
-        long endTime3 = System.currentTimeMillis();
-        System.out.println("endTime3 = " + (endTime3-endTime2));
-        if( ListUtil.isNotEmpty(qualityControlDTO)){
-            for (QualityControlDTO totalData : qualityControlDTO)  {
-                if( ListUtil.isNotEmpty(caseData )){
-                for (QualityControlDTO qualityControlDTO2 : caseData) {
-                 if(totalData.getBehospitalCode().equals(qualityControlDTO2.getBehospitalCode())){
-                        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;
-                 }
-                };}
-                if( ListUtil.isNotEmpty(sorceData)){
-                for (QualityControlDTO qualityControlDTO2 : sorceData) {
-                    if(totalData.getBehospitalCode().equals(qualityControlDTO2.getBehospitalCode())) {
-                        totalData.setAdmissionNote(qualityControlDTO2.getAdmissionNote()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        totalData.setFirstCourseNote(qualityControlDTO2.getFirstCourseNote()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        totalData.setMedHomePage(qualityControlDTO2.getMedHomePage()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        totalData.setDocAdviceNote(qualityControlDTO2.getDocAdviceNote()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        totalData.setCourseRecord(qualityControlDTO2.getCourseRecord()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        totalData.setOperationInfo(qualityControlDTO2.getOperationInfo()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        totalData.setDischargeNote(qualityControlDTO2.getDischargeNote()== null? "无缺陷":qualityControlDTO2.getAdmissionNote());
-                        //存在单项否决
-                        Double medHomePageScorTh = qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-                        Double admissionNoteScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-                        Double firstCourseNoteScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-                        Double courseRecordScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-                        Double operationInfoScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-                        Double dischargeNoteScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-                        Double docAdviceNoteScoreTh =  qualityControlDTO2.getAdmissionNoteScoreTw()-qualityControlDTO2.getAdmissionNoteScoreOn();
-
-                        //存在单项否决
-                        if(qualityControlDTO2.getMedHomePageScoreOn()>=totalData.getMedHomePageTolScore()){
-                            totalData.setMedHomePageScore( totalData.getMedHomePageTolScore()+medHomePageScorTh);
-                        }else{
-                            totalData.setMedHomePageScore(qualityControlDTO2.getMedHomePageScoreOn()+medHomePageScorTh);
-                        }
+        List<CaseScoreDTO>caseScoreDTOS= behospitalInfoFacade.getQualityCaseSorce(caseScoreVO);
+        if(ListUtil.isNotEmpty(qualityControlDTOs)){
+            qualityControlDTOs.forEach(qualityControlDTO->{
+                Double rePlaceTolScore = qualityControlDTO.getTotalScore();
+                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();
+                StringBuffer otherCase = new StringBuffer();
+                Double admissionNoteScoreOn = 0d;
+                Double admissionNoteScoreTw = 0d;
+                Double firstCourseNoteScoreOn = 0d;
+                Double firstCourseNoteScoreTw = 0d;
+                Double dischargeNoteScoreOn = 0d;
+                Double dischargeNoteScoreTw = 0d;
+                Double medHomePageScoreOn = 0d;
+                Double medHomePageScoreTw = 0d;
+                Double docAdviceNoteScoreOn = 0d;
+                Double docAdviceNoteScoreTw = 0d;
+                Double operationInfoScoreOn = 0d;
+                Double operationInfoScoreTw = 0d;
+                Double courseRecordScoreOn = 0d;
+                Double courseRecordScoreTw = 0d;
+                if(ListUtil.isNotEmpty(caseScoreDTOS)){
+                    AlgorithmVO algorithmVO = new AlgorithmVO();
+                    BeanUtil.copyProperties(behospitalPageVO,algorithmVO);
+                    algorithmVO.setType(0);
+                    List<QcResultAlgVO> qcResultAlgVOList = new ArrayList<QcResultAlgVO>();
+                    for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
+                        if (StringUtils.isNotEmpty(qualityControlDTO.getBehospitalCode())&&
+                                StringUtils.isNotEmpty(caseScoreDTO.getBehospitalCode())&&
+                                qualityControlDTO.getBehospitalCode().equals(caseScoreDTO.getBehospitalCode())) {
+                            double targetScore =  Double.valueOf(df.format(caseScoreDTO.getScore()));
+
+                            QcResultAlgVO qcResultAlgVO = new QcResultAlgVO();
+                            BeanUtil.copyProperties(caseScoreDTO,qcResultAlgVO);
+                            qcResultAlgVO.setIsReject(Integer.valueOf(caseScoreDTO.getIsReject()));
+                            qcResultAlgVO.setScore(new BigDecimal(caseScoreDTO.getScore()));
+                            qcResultAlgVO.setCasesScore(new BigDecimal(caseScoreDTO.getCasesScore()));
+                            qcResultAlgVOList.add(qcResultAlgVO);
 
+                            switch (caseScoreDTO.getModelId()) {
+                                case "1":
+                                    String admissionMsg = caseScoreDTO.getMsg() + ";";
+                                    admissionNote.append(admissionMsg);
+                                    //对单个modeId进行扣分总和计算
+                                    //非单项否决总分
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        admissionNoteScoreOn += targetScore;
+                                        admissionNoteScoreOn = Double.valueOf(df.format(admissionNoteScoreOn));
+                                    }
 
-                        if(qualityControlDTO2.getAdmissionNoteScoreOn()>=totalData.getAdmissionNoteTolScore()){
-                            totalData.setAdmissionNoteScore(  totalData.getAdmissionNoteTolScore()+admissionNoteScoreTh);
-                        }else{
-                            totalData.setAdmissionNoteScore(qualityControlDTO2.getAdmissionNoteScoreOn()+admissionNoteScoreTh);
-                        }
+                                    //扣分总和
+                                    admissionNoteScoreTw += targetScore;
+                                    admissionNoteScoreTw = Double.valueOf(df.format(admissionNoteScoreTw));
+                                    qualityControlDTO.setAdmissionNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break;
+                                case "2":
+                                    String firstCourseNoteMsg = caseScoreDTO.getMsg() + ";";
+                                    firstCourseNote.append(firstCourseNoteMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        firstCourseNoteScoreOn +=targetScore;
+                                        firstCourseNoteScoreOn = Double.valueOf(df.format(firstCourseNoteScoreOn));
+                                    }
+                                    //扣分总和
+                                    firstCourseNoteScoreTw += targetScore;
+                                    firstCourseNoteScoreTw = Double.valueOf(df.format(firstCourseNoteScoreTw));
+                                    qualityControlDTO.setFirstCourseNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break;
+                                case "5":
+                                    String dischargeNoteMsg = caseScoreDTO.getMsg() + ";";
+                                    dischargeNote.append(dischargeNoteMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        dischargeNoteScoreOn += targetScore;
+                                        dischargeNoteScoreOn = Double.valueOf(df.format(dischargeNoteScoreOn));
+                                    }
+                                    //扣分总和
+                                    dischargeNoteScoreTw += targetScore;
+                                    dischargeNoteScoreTw = Double.valueOf(df.format(dischargeNoteScoreTw));
+                                    qualityControlDTO.setDischargeNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break;
+                                case "6":
+                                    String medHomePageMsg = caseScoreDTO.getMsg() + ";";
+                                    medHomePage.append(medHomePageMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        medHomePageScoreOn += targetScore;
+                                        medHomePageScoreOn = Double.valueOf(df.format(medHomePageScoreOn));
+                                    }
+                                    //扣分总和
+                                    medHomePageScoreTw += targetScore;
+                                    medHomePageScoreTw = Double.valueOf(df.format(medHomePageScoreTw));
+                                    qualityControlDTO.setMedHomePageTolScore(caseScoreDTO.getCasesScore());
+                                    break;
+                                case "8":
+                                    String docAdviceNoteMsg = caseScoreDTO.getMsg() + ";";
+                                    docAdviceNote.append(docAdviceNoteMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        docAdviceNoteScoreOn += targetScore;
+                                        docAdviceNoteScoreOn = Double.valueOf(df.format(docAdviceNoteScoreOn));
+                                    }
+                                    //扣分总和
+                                    docAdviceNoteScoreTw += targetScore;
+                                    docAdviceNoteScoreTw = Double.valueOf(df.format(docAdviceNoteScoreTw));
+                                    qualityControlDTO.setDocAdviceNoteTolScore(caseScoreDTO.getCasesScore());
+                                    break;
+                                case "17":
+                                    String operationInfoMsg = caseScoreDTO.getMsg() + ";";
+                                    operationInfo.append(operationInfoMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        operationInfoScoreOn += targetScore;
+                                        operationInfoScoreOn = Double.valueOf(df.format(operationInfoScoreOn));
+                                    }
+                                    //扣分总和
+                                    operationInfoScoreTw += targetScore;
+                                    operationInfoScoreTw = Double.valueOf(df.format(operationInfoScoreTw));
+                                    qualityControlDTO.setOperationInfoTolScore(caseScoreDTO.getCasesScore());
+                                    break;
+                                case "56":
+                                    String courseRecordMsg = caseScoreDTO.getMsg() + ";";
+                                    courseRecord.append(courseRecordMsg);
+                                    if (caseScoreDTO.getIsReject().equals("0")) {
+                                        courseRecordScoreOn += targetScore;
+                                        courseRecordScoreOn = Double.valueOf(df.format(courseRecordScoreOn));
+                                    }
+                                    //扣分总和
+                                    courseRecordScoreTw += targetScore;
+                                    courseRecordScoreTw = Double.valueOf(df.format(courseRecordScoreTw));
+                                    qualityControlDTO.setCourseRecordTolScore(caseScoreDTO.getCasesScore());
+                                    break;
 
+                            }
 
-                        if(qualityControlDTO2.getFirstCourseNoteScoreOn()>=totalData.getFirstCourseNoteTolScore()){
-                            totalData.setFirstCourseNoteScore(totalData.getFirstCourseNoteTolScore()+firstCourseNoteScoreTh);
-                        }else{
-                            totalData.setFirstCourseNoteScore( qualityControlDTO2.getFirstCourseNoteScoreOn()+firstCourseNoteScoreTh);
+                            String modelId = caseScoreDTO.getModelId();
+                            if(!(modelId.equals("1")||modelId.equals("2")||modelId.equals("5")||modelId.equals("6")||
+                                    modelId.equals("8")||modelId.equals("17")||modelId.equals("56"))){
+                                String otherCaseMsg = caseScoreDTO.getMsg() + ";";
+                                otherCase.append(otherCaseMsg);
+                            }
+                            //未评分
                         }
-
-                        if(qualityControlDTO2.getCourseRecordScoreOn()>=totalData.getCourseRecordTolScore()){
-                            totalData.setCourseRecordScore( totalData.getCourseRecordTolScore()+courseRecordScoreTh);
-                        }else{
-                            totalData.setCourseRecordScore(qualityControlDTO2.getCourseRecordScoreOn()+courseRecordScoreTh);
+                        if(StringUtils.isEmpty(caseScoreDTO.getBehospitalCode())){
+                            QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
+                            BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
+                            break;
                         }
+                    };
+                    algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+                    Double toltalScore = getScoreForCx(algorithmVO).doubleValue();
+                    qualityControlDTO.setTotalScore(toltalScore);
+                    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 = StringUtils.isEmpty(admissionNote) == true ?"无缺陷" : admissionNote.toString().substring(0,  admissionNote.toString().lastIndexOf(";"));
+                    qualityControlDTO.setAdmissionNote(admissionNoteString);
+                    String firstCourseNoteString = StringUtils.isEmpty(firstCourseNote) == true ?"无缺陷" :firstCourseNote.toString().substring(0,  firstCourseNote.toString().lastIndexOf(";"));
+                    qualityControlDTO.setFirstCourseNote(firstCourseNoteString);
+                    String dischargeNoteString = StringUtils.isEmpty(dischargeNote) == true ?"无缺陷" : dischargeNote.toString().substring(0,  dischargeNote.toString().lastIndexOf(";"));
+                    qualityControlDTO.setDischargeNote(dischargeNoteString);
+                    String medHomePageString = StringUtils.isEmpty(medHomePage) == true ?"无缺陷" : medHomePage.toString().substring(0,  medHomePage.toString().lastIndexOf(";"));
+                    qualityControlDTO.setMedHomePage(medHomePageString);
+                    String docAdviceNoteString = StringUtils.isEmpty(docAdviceNote) == true ?"无缺陷" : docAdviceNote.toString().substring(0,  docAdviceNote.toString().lastIndexOf(";"));
+                    qualityControlDTO.setDocAdviceNote(docAdviceNoteString);
+                    String operationInfoString = StringUtils.isEmpty(operationInfo) == true ?"无缺陷" : operationInfo.toString().substring(0,  operationInfo.toString().lastIndexOf(";"));
+                    qualityControlDTO.setOperationInfo(operationInfoString);
+                    String courseRecordString = StringUtils.isEmpty(courseRecord) == true ?"无缺陷" : courseRecord.toString().substring(0,  courseRecord.toString().lastIndexOf(";"));
+                    qualityControlDTO.setCourseRecord(courseRecordString);
+                    String otherCaseString = StringUtils.isEmpty(otherCase) == true ?"无缺陷" : otherCase.toString().substring(0,  otherCase.toString().lastIndexOf(";"));
+                    qualityControlDTO.setOtherCase(otherCaseString);
+
+
+                    for (CaseScoreDTO caseScoreDTO : caseScoreDTOS) {
+                        if (StringUtils.isNotEmpty(qualityControlDTO.getBehospitalCode())&&
+                                StringUtils.isNotEmpty(caseScoreDTO.getBehospitalCode())&&
+                                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));
+                                    }
+                                    break;
+                                case "2":
+                                    //  非单项否决总扣分大于扣分总和
+                                    if((firstCourseNoteScoreOn-qualityControlDTO.getFirstCourseNoteTolScore())>=0){
+                                        //扣分总和+单项否决总分
+                                        qualityControlDTO.setFirstCourseNoteScore(qualityControlDTO.getFirstCourseNoteTolScore()+(firstCourseNoteScoreTw-firstCourseNoteScoreOn));
+                                    }else{
+                                        qualityControlDTO.setFirstCourseNoteScore(firstCourseNoteScoreOn+(firstCourseNoteScoreTw-firstCourseNoteScoreOn));
+                                    }
+                                    break;
+                                case "5":
+                                    //  非单项否决总扣分大于扣分总和
+                                    if((dischargeNoteScoreOn-qualityControlDTO.getDischargeNoteTolScore())>=0){
+                                        //扣分总和+单项否决总分
+                                        qualityControlDTO.setDischargeNoteScore(qualityControlDTO.getDischargeNoteTolScore()+(dischargeNoteScoreTw-dischargeNoteScoreOn));
+                                    }else{
+                                        qualityControlDTO.setDischargeNoteScore(dischargeNoteScoreOn+(dischargeNoteScoreTw-dischargeNoteScoreOn));
+                                    }
+                                    break;
+                                case "6":
+                                    //  非单项否决总扣分大于扣分总和
+                                    if((medHomePageScoreOn-qualityControlDTO.getMedHomePageTolScore())>=0){
+                                        //扣分总和+单项否决总分
+                                        qualityControlDTO.setMedHomePageScore(qualityControlDTO.getMedHomePageTolScore()+(medHomePageScoreTw-medHomePageScoreOn));
+                                    }else{
+                                        qualityControlDTO.setMedHomePageScore(medHomePageScoreOn+(medHomePageScoreTw-medHomePageScoreOn));
+                                    }
+                                    break;
+                                case "8":
+                                    //  非单项否决总扣分大于扣分总和
+                                    if((docAdviceNoteScoreOn-qualityControlDTO.getDocAdviceNoteTolScore())>=0){
+                                        //扣分总和+单项否决总分
+                                        qualityControlDTO.setDocAdviceNoteScore(qualityControlDTO.getDocAdviceNoteTolScore()+(docAdviceNoteScoreTw-docAdviceNoteScoreOn));
+                                    }else{
+                                        qualityControlDTO.setDocAdviceNoteScore(docAdviceNoteScoreOn+(docAdviceNoteScoreTw-docAdviceNoteScoreOn));
+                                    }
+                                    break;
+                                case "17":
+                                    //  非单项否决总扣分大于扣分总和
+                                    if((operationInfoScoreOn-qualityControlDTO.getOperationInfoTolScore())>=0){
+                                        //扣分总和+单项否决总分
+                                        qualityControlDTO.setOperationInfoScore(qualityControlDTO.getOperationInfoTolScore()+(operationInfoScoreTw-operationInfoScoreOn));
+                                    }else{
+                                        qualityControlDTO.setOperationInfoScore(operationInfoScoreOn+(operationInfoScoreTw-operationInfoScoreOn));
+                                    }
+                                    break;
+                                case "56":
+                                    //  非单项否决总扣分大于扣分总和
+                                    if((courseRecordScoreOn-qualityControlDTO.getCourseRecordTolScore())>=0){
+                                        //扣分总和+单项否决总分
+                                        qualityControlDTO.setCourseRecordScore(qualityControlDTO.getCourseRecordTolScore()+(courseRecordScoreTw-courseRecordScoreOn));
+                                    }else{
+                                        qualityControlDTO.setCourseRecordScore(courseRecordScoreOn+(courseRecordScoreTw-courseRecordScoreOn));
+                                    }
+                                    break;
 
-                        if(qualityControlDTO2.getOperationInfoScoreOn()>=totalData.getOperationInfoTolScore()){
-                            totalData.setOperationInfoScore(totalData.getOperationInfoTolScore()+operationInfoScoreTh);
-                        }else{
-                            totalData.setOperationInfoScore(qualityControlDTO2.getOperationInfoScoreOn()+operationInfoScoreTh);
-                        }
+                            }
 
-                        if(qualityControlDTO2.getDischargeNoteScoreOn()>=totalData.getDischargeNoteTolScore()){
-                            totalData.setDischargeNoteScore(totalData.getDischargeNoteTolScore()+dischargeNoteScoreTh);
-                        }else{
-                            totalData.setDischargeNoteScore( qualityControlDTO2.getDischargeNoteScoreOn()+dischargeNoteScoreTh);
-                        }
 
-                        if(qualityControlDTO2.getDocAdviceNoteScoreOn()>=totalData.getDocAdviceNoteTolScore()){
-                            totalData.setDocAdviceNoteScore(totalData.getDocAdviceNoteTolScore()+docAdviceNoteScoreTh);
-                        }else{
-                            totalData.setDocAdviceNoteScore(qualityControlDTO2.getDocAdviceNoteScoreOn()+docAdviceNoteScoreTh);
-                        }
 
-                    }
-                };}
+                        } if(StringUtils.isEmpty(caseScoreDTO.getBehospitalCode())){
+                            QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
+                            BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
+                        }
 
-                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";
-                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());
+                    };
+                    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";
+                    mainScore =  qualityControlDTO.getMedHomePageScore()+qualityControlDTO.getAdmissionNoteScore()+qualityControlDTO.getFirstCourseNoteScore()+
+                            qualityControlDTO.getCourseRecordScore()+qualityControlDTO.getOperationInfoScore()+qualityControlDTO.getDischargeNoteScore()+qualityControlDTO. getDocAdviceNoteScore();
+                    scoreType = sysHospitalSetFacade.getScoreType(behospitalPageVO.getHospitalId());
                     if ("1".equals(scoreType)) {
-                        otherScore = (resPr-totalData.getTotalScore()-mainScore);
+                        otherScore = (resPr-qualityControlDTO.getTotalScore()-mainScore);
                     } else if ("0".equals(scoreType)) {
-                        otherScore = res-(totalData.getTotalScore()*res/resPr)-mainScore;
+                        otherScore = res-(qualityControlDTO.getTotalScore()*res/resPr)-mainScore;
                     }
-                    otherCaseScore = (double) Math.round(otherScore * 10) / 10;
-                    totalData.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore  );
+                    otherCaseScore =  Double.valueOf(df.format(otherScore));
+                    qualityControlDTO.setOtherCaseScore(otherCaseScore == null ? 0d : otherCaseScore  );
+                    qualityControlDTO.setTotalScore(rePlaceTolScore);
                 }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);
+                    QualityControlNullDTO qualityControlNullDTO = new QualityControlNullDTO();
+                    BeanUtil.copyProperties(qualityControlNullDTO,qualityControlDTO);
                 }
-
-            };
-        }else{return null; };
-        //
-        long endTime4= System.currentTimeMillis();
-        System.out.println("endTime4 = " + (endTime4-endTime3));
-        System.out.println("总 " + (endTime4-startTime));*/
+            });
+        };
         return records;
-
     }
-
     private void behospitalPageSet(BehospitalPageVO behospitalPageVO) {
         //入参验证
         //入院时间

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

@@ -188,6 +188,14 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      */
     public IPage<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO);
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> getQualityControlExport(BehospitalPageVO behospitalPageVO);
+
 
     /**
      * 各科室缺陷占比(主任医生)
@@ -448,7 +456,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param behospitalPageVO
      * @return
      */
-    public IPage<QualityControlDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);
+    public IPage<QualityControlDeptDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);
 
 
 

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

@@ -96,7 +96,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param behospitalPageVO
      * @return
      */
-    public IPage<QualityControlDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);
+    public IPage<QualityControlDeptDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO);
 
     /**
      * 入院总人数统计-科室-首页
@@ -200,6 +200,13 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      */
     public IPage<QualityControlDTO> getQualityControl(BehospitalPageVO behospitalPageVO);
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    public IPage<QualityControlDTO> getQualityControlExport(BehospitalPageVO behospitalPageVO);
 
     /**
      * 各科室缺陷占比(主任医生)

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

@@ -267,6 +267,17 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
         return baseMapper.getQualityControl(behospitalPageVO);
     }
 
+    /**
+     * 病历质控报表-科室
+     *
+     * @param behospitalPageVO
+     * @return
+     */
+    @Override
+    public IPage<QualityControlDTO> getQualityControlExport(BehospitalPageVO behospitalPageVO) {
+        return baseMapper.getQualityControlExport(behospitalPageVO);
+    }
+
 
     /**
      * 各科室缺陷占比(主任医生)
@@ -602,7 +613,7 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
      * @return
      */
     @Override
-    public IPage<QualityControlDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO) {
+    public IPage<QualityControlDeptDTO> qualityControlByDept(BehospitalPageVO behospitalPageVO) {
         return baseMapper.qualityControlByDept(behospitalPageVO);
     }
 

+ 1 - 1
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -456,7 +456,7 @@
         </if>
     </select>
 
-    <select id="qualityControlByDept" resultType="com.diagbot.dto.QualityControlDTO">
+    <select id="qualityControlByDept" resultType="com.diagbot.dto.QualityControlDeptDTO">
         SELECT * FROM (
         select
         t.name AS NAME,