ソースを参照

Merge remote-tracking branch 'origin/20211018_yw_check' into 20211018_yw_check

chengyao 3 年 前
コミット
90671cc36e
44 ファイル変更1636 行追加598 行削除
  1. 187 100
      doc/031.20210326v2.0.2/qc_initv2.0.2.sql
  2. 13 0
      doc/033.20210608v2.0.4/qc_initv2.0.4.sql
  3. 12 0
      doc/034.20210804_2.0.5/qc_initv2.0.5.sql
  4. 1 1
      pom.xml
  5. 35 4
      src/main/java/com/diagbot/aggregate/LeaveHosStatisticsAggregate.java
  6. 10 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  7. 10 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  8. 1 1
      src/main/java/com/diagbot/dto/JwtDTO.java
  9. 5 4
      src/main/java/com/diagbot/dto/MedManageParamsDTO.java
  10. 6 6
      src/main/java/com/diagbot/dto/ReBeHosByDeptDTO.java
  11. 7 6
      src/main/java/com/diagbot/dto/ReBeHosDTO.java
  12. 18 4
      src/main/java/com/diagbot/dto/ReBeHosDetailByDeptDTO.java
  13. 21 4
      src/main/java/com/diagbot/dto/ReBeHosDetailDTO.java
  14. 8 1
      src/main/java/com/diagbot/dto/ReBeHosMergeDTO.java
  15. 35 0
      src/main/java/com/diagbot/dto/StrAdmissionNoteDTO.java
  16. 1 21
      src/main/java/com/diagbot/entity/MedIndexResult.java
  17. 12 1
      src/main/java/com/diagbot/enums/QualityContent.java
  18. 26 18
      src/main/java/com/diagbot/facade/AlgorithmFacade.java
  19. 109 66
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  20. 1 2
      src/main/java/com/diagbot/facade/ConsoleByDeptExportFacade.java
  21. 51 3
      src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java
  22. 1 2
      src/main/java/com/diagbot/facade/ConsoleExportFacade.java
  23. 451 44
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  24. 65 0
      src/main/java/com/diagbot/facade/DataEditFacade.java
  25. 2 0
      src/main/java/com/diagbot/facade/FilterFacade.java
  26. 25 24
      src/main/java/com/diagbot/facade/MedCheckInfoFacade.java
  27. 16 11
      src/main/java/com/diagbot/facade/MedCheckWorkFacade.java
  28. 56 31
      src/main/java/com/diagbot/facade/SysUserFacade.java
  29. 9 2
      src/main/java/com/diagbot/task/MedIndexTask.java
  30. 1 1
      src/main/java/com/diagbot/vo/AnalyzeVO.java
  31. 3 3
      src/main/java/com/diagbot/vo/CheckJobPageVO.java
  32. 3 3
      src/main/java/com/diagbot/vo/CheckWorkPageVO.java
  33. 6 7
      src/main/java/com/diagbot/vo/CheckedRecordListVO.java
  34. 18 0
      src/main/java/com/diagbot/vo/DataEditVO.java
  35. 2 0
      src/main/java/com/diagbot/vo/ReBeHosPageVO.java
  36. 54 0
      src/main/java/com/diagbot/web/DataEditController.java
  37. 3 3
      src/main/java/com/diagbot/web/MedCheckWorkController.java
  38. 8 1
      src/main/java/com/diagbot/web/SysUserController.java
  39. 4 7
      src/main/resources/application-test.yml
  40. 1 1
      src/main/resources/logback-spring.xml
  41. 307 192
      src/main/resources/mapper/BehospitalInfoMapper.xml
  42. 26 19
      src/main/resources/mapper/MedCheckInfoMapper.xml
  43. 6 4
      src/main/resources/mapper/MedIndexResultMapper.xml
  44. 0 1
      src/main/resources/mapper/MedicalRecordMapper.xml

ファイルの差分が大きいため隠しています
+ 187 - 100
doc/031.20210326v2.0.2/qc_initv2.0.2.sql


+ 13 - 0
doc/033.20210608v2.0.4/qc_initv2.0.4.sql

@@ -0,0 +1,13 @@
+use `qc`;
+
+-- 字典表加入密码正则表达式  不同的医院需要修改id为对应的医院id
+SET @id ='4';
+INSERT INTO `sys_dictionary_info` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '30', @id, '^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\\d]){1,})(?=(.*[\\W]){1,})(?!.*\\s).{8,12}$', '2', '0', '正则表达式(至少8个字符,少于12个字符,大写字母+小写字母+数字+特殊字符)');
+
+UPDATE `sys_menu` SET `name`='31日再入院病历数' WHERE (`name`='31日再入院病人数');
+UPDATE `sys_menu` SET `name`='31日再入院病历数' WHERE (`name`='31日再入院病人数');
+UPDATE `sys_permission` SET  `name`='31日再入院病历数报表',`descritpion`='31日再入院病历数报表' WHERE (`permissionUrl`='/console/reHos31DaysPage');
+UPDATE `sys_permission` SET  `name`='31日再入院病历数报表',`descritpion`='31日再入院病历数报表(科室)' WHERE (`permissionUrl`='/consoleByDept/reHos31DaysPageByDept');
+
+
+

+ 12 - 0
doc/034.20210804_2.0.5/qc_initv2.0.5.sql

@@ -0,0 +1,12 @@
+use `qc`;
+INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '数据编辑', '-1', 'YH-SJBJ', '1', '1', '11', '入院记录展示/编辑');
+SET @id =@@identity;
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1',@id, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1',@id, NULL);
+
+INSERT INTO `sys_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '数据编辑', 'FUNC000151', '/qc/dataEdit/getDataEdit', 'ALL', '数据编辑获取入院记录json数据', NULL);
+SET @it =@@identity;
+INSERT INTO `sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @id, @it, NULL, '数据编辑获取入院记录json数据');
+
+
+

+ 1 - 1
pom.xml

@@ -6,7 +6,7 @@
 
     <groupId>com.diagbot</groupId>
     <artifactId>mrqc-sys</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>qiyuan-0.0.1-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <name>mrqc-sys</name>

+ 35 - 4
src/main/java/com/diagbot/aggregate/LeaveHosStatisticsAggregate.java

@@ -1,15 +1,20 @@
 package com.diagbot.aggregate;
 
+import com.diagbot.dto.ReBeHosDTO;
 import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.ReBeHosPageVO;
 import io.github.lvyahui8.spring.annotation.DataConsumer;
 import io.github.lvyahui8.spring.annotation.DataProvider;
 import io.github.lvyahui8.spring.annotation.InvokeParameter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * @Description:
@@ -20,6 +25,8 @@ import java.util.Map;
 public class LeaveHosStatisticsAggregate {
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private ConsoleFacade consoleFacade;
 
     @DataProvider("setAllLeaveHos")
     public Map<String, Object> setAllLeaveHos(
@@ -37,7 +44,7 @@ public class LeaveHosStatisticsAggregate {
         retMap.put("新生儿人数", newBornNum);
         retMap.put("手术病人数", operationNum);
         retMap.put("非医嘱离院病人数", nonAdviceNum);
-        retMap.put("31日再入院病数", reBehospitalNum);
+        retMap.put("31日再入院病数", reBehospitalNum);
         return retMap;
 
     }
@@ -105,6 +112,30 @@ public class LeaveHosStatisticsAggregate {
      */
     @DataProvider("get31DaysBehospitalCount")
     public Integer get31DaysBehospitalCount(@InvokeParameter("filterVO") FilterVO filterVO) {
-        return behospitalInfoFacade.get31DaysBehospitalCount(filterVO);
+        ReBeHosPageVO reBeHosPageVO = new ReBeHosPageVO();
+        BeanUtil.copyProperties(filterVO,reBeHosPageVO);
+        reBeHosPageVO.setStartDate(timeTrans(filterVO.getStartDate()));
+        reBeHosPageVO.setEndDate(timeTrans(filterVO.getEndDate()));
+        reBeHosPageVO.setFlag(31);
+        List<ReBeHosDTO> records = consoleFacade.reHos31DaysPage(reBeHosPageVO).getRecords();
+        Set<String> codeList = new HashSet<>();
+        records.forEach(obj->{
+            obj.getDetails().forEach(opj->{
+                codeList.add(opj.getBehospitalCode());
+            });
+        });
+        return codeList.size();
+    }
+
+    public static Date timeTrans(String time){
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date date = format.parse(time);
+            return date;
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return new Date();
+
     }
 }

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

@@ -39,6 +39,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .regexMatchers(".*swagger.*", ".*v2.*", ".*webjars.*", "/druid.*", "/actuator.*", "/hystrix.*").permitAll()
                 .antMatchers("/sys/user/getJwt").permitAll()
                 .antMatchers("/sys/user/getCaptcha").permitAll()
+                .antMatchers("/sys/user/getHospitalMark").permitAll()
                 .antMatchers("/sys/user/getJwtNoPass").permitAll()
                 .antMatchers("/sys/user/refreshJwt").permitAll()
                 .antMatchers("/sys/user/checkToken").permitAll()
@@ -237,8 +238,17 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/consoleByDept/medicalCheckFormKs").permitAll()
                 .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("/qc/behospitalInfo/getMedQualityCoList").permitAll()
+                .antMatchers("/console/saveMedicaIndicator").permitAll()
                 .antMatchers("/qc/medCheckInfo/createMedBeHospitalInfoType").permitAll()
                 .antMatchers("/qc/medCheckWork/getLocalRegionMedoup").permitAll()
+                .antMatchers("/qc/medCheckInfo/addMedCheckInfo").permitAll()
+                .antMatchers("/qc/medCheckInfo/getDataEdit").permitAll()
+                .antMatchers("/qc/medCheckInfo/saveDataEdit").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

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

@@ -82,6 +82,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/hystrix/**", request)
                 || matchers("/sys/user/getJwt", request)
                 || matchers("/sys/user/getCaptcha", request)
+                || matchers("/sys/user/getHospitalMark", request)
                 || matchers("/sys/user/getJwtNoPass", request)
                 || matchers("/sys/user/refreshJwt", request)
                 || matchers("/sys/dictionaryInfo/getDictionary", request)
@@ -281,8 +282,17 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/consoleByDept/medicalCheckFormKs", request)
                 || 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("/qc/behospitalInfo/getMedQualityCoList", request)
+                || matchers("/console/saveMedicaIndicator", request)
                 || matchers("/qc/medCheckInfo/createMedBeHospitalInfoType", request)
                 || matchers("/qc/medCheckWork/getLocalRegionMedoup", request)
+                || matchers("/qc/medCheckInfo/addMedCheckInfo", request)
+                || matchers("/qc/dataEdit/getDataEdit", request)
+                || matchers("/qc/dataEdit/saveDataEdit", request)
                 || matchers("/", request)) {
             return true;
         }

+ 1 - 1
src/main/java/com/diagbot/dto/JwtDTO.java

@@ -20,5 +20,5 @@ public class JwtDTO {
     //用户权限列表
     private List<SysRoleDTO> selRoles;
     //用户密码复杂度是否符合
-//    private String passwordComplexity;
+    private String passwordComplexity;
 }

+ 5 - 4
src/main/java/com/diagbot/dto/MedManageParamsDTO.java

@@ -37,10 +37,11 @@ public class MedManageParamsDTO implements Serializable {
     //医嘱状态判别
     private String daStatus;
 
-    /**
-     * 住院科室名称
-     */
-    private String behDeptName;
+    //病历标题
+    private String content;
+
+    //文书内容(blob)
+    private String rec_title;
 
 
 

+ 6 - 6
src/main/java/com/diagbot/dto/ReBeHosByDeptDTO.java

@@ -25,19 +25,19 @@ public class ReBeHosByDeptDTO {
      */
     @Excel(name = "性别", width = 10, needMerge = true, orderNum = "2")
     private String sex;
-    /**
-     * 主诊断
-     */
-    @Excel(name = "主诊断", width = 50, needMerge = true, orderNum = "3")
-    private String diagnose;
+
     /**
      * 间隔天数
      */
     @Excel(name = "间隔天数", width = 10, needMerge = true, orderNum = "4")
     private Integer diffDays;
+
+    @Excel(name = "是否有出院31天内再住院计划", width = 30, needMerge = true,  orderNum = "5")
+    private String lastAgainBehospitalPlan;//31天再入院计划(是/否)
+
     /**
      * 比较病历组
      */
-    @ExcelCollection(name = "", orderNum = "5")
+    @ExcelCollection(name = "", orderNum = "6")
     private List<ReBeHosDetailByDeptDTO> details;
 }

+ 7 - 6
src/main/java/com/diagbot/dto/ReBeHosDTO.java

@@ -25,19 +25,20 @@ public class ReBeHosDTO {
      */
     @Excel(name = "性别", width = 10, needMerge = true, orderNum = "2")
     private String sex;
-    /**
-     * 主诊断
-     */
-    @Excel(name = "主诊断", width = 50, needMerge = true, orderNum = "3")
-    private String diagnose;
+
     /**
      * 间隔天数
      */
     @Excel(name = "间隔天数", width = 10, needMerge = true, orderNum = "4")
     private Integer diffDays;
+
+
+    @Excel(name = "是否有出院31天内再住院计划", width = 30, needMerge = true,  orderNum = "5")
+    private String lastAgainBehospitalPlan;//31天再入院计划(是/否)
+
     /**
      * 比较病历组
      */
-    @ExcelCollection(name = "", orderNum = "5")
+    @ExcelCollection(name = "", orderNum = "6")
     private List<ReBeHosDetailDTO> details;
 }

+ 18 - 4
src/main/java/com/diagbot/dto/ReBeHosDetailByDeptDTO.java

@@ -25,6 +25,7 @@ public class ReBeHosDetailByDeptDTO {
      */
     @Excel(name = "病人姓名", width = 20, orderNum = "2")
     private String name;
+
     /**
      * 病历等级
      */
@@ -51,26 +52,39 @@ public class ReBeHosDetailByDeptDTO {
      */
     @Excel(name = "主管医生", width = 50, orderNum = "6")
     private String doctorName;
+
+    /**
+     * 入院诊断
+     */
+    @Excel(name = "入院诊断", width = 50, needMerge = true, orderNum = "7")
+    private String diagnose;
+
+    /**
+     * 出院诊断
+     */
+    @Excel(name = "出院诊断", width = 50, needMerge = true, orderNum = "8")
+    private String diagnoseName;
+
     /**
      * 出院日期
      */
-    @Excel(name = "出院日期", format = "yyyy-MM-dd", width = 30, orderNum = "7")
+    @Excel(name = "出院日期", format = "yyyy-MM-dd", width = 30, orderNum = "9")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date leaveHospitalDate;
     /**
      * 入院日期
      */
-    @Excel(name = "入院日期", format = "yyyy-MM-dd", width = 30, orderNum = "8")
+    @Excel(name = "入院日期", format = "yyyy-MM-dd", width = 30, orderNum = "10")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date behospitalDate;
     /**
      * 住院天数
      */
-    @Excel(name = "住院天数", width = 15, orderNum = "9")
+    @Excel(name = "住院天数", width = 15, orderNum = "11")
     private String behospitalDayNum;
     /**
      * 住院费用
      */
-    @Excel(name = "住院费用", width = 15, orderNum = "10")
+    @Excel(name = "住院费用", width = 15, orderNum = "12")
     private String totleFee;
 }

+ 21 - 4
src/main/java/com/diagbot/dto/ReBeHosDetailDTO.java

@@ -25,6 +25,8 @@ public class ReBeHosDetailDTO {
      */
     @Excel(name = "病人姓名", width = 20, orderNum = "2")
     private String name;
+
+
     /**
      * 病历等级
      */
@@ -44,26 +46,41 @@ public class ReBeHosDetailDTO {
      */
     @Excel(name = "科室", width = 50, orderNum = "5")
     private String behDeptName;
+
+    /**
+     * 入院诊断
+     */
+    @Excel(name = "入院诊断", width = 50, needMerge = true, orderNum = "6")
+    private String diagnose;
+
+    /**
+     * 出院诊断
+     */
+    @Excel(name = "出院诊断", width = 50, needMerge = true, orderNum = "7")
+    private String diagnoseName;
     /**
      * 出院日期
      */
-    @Excel(name = "出院日期", format = "yyyy-MM-dd", width = 30, orderNum = "6")
+    @Excel(name = "出院日期", format = "yyyy-MM-dd", width = 30, orderNum = "8")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date leaveHospitalDate;
     /**
      * 入院日期
      */
-    @Excel(name = "入院日期", format = "yyyy-MM-dd", width = 30, orderNum = "7")
+    @Excel(name = "入院日期", format = "yyyy-MM-dd", width = 30, orderNum = "9")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date behospitalDate;
     /**
      * 住院天数
      */
-    @Excel(name = "住院天数", width = 15, orderNum = "8")
+    @Excel(name = "住院天数", width = 15, orderNum = "10")
     private String behospitalDayNum;
     /**
      * 住院费用
      */
-    @Excel(name = "住院费用", width = 15, orderNum = "9")
+    @Excel(name = "住院费用", width = 15, orderNum = "11")
     private String totleFee;
+
+    private String age;
+
 }

+ 8 - 1
src/main/java/com/diagbot/dto/ReBeHosMergeDTO.java

@@ -15,7 +15,8 @@ import java.util.Date;
 @Setter
 public class ReBeHosMergeDTO {
     private String fileCode;
-    private String diagnose;
+    private String diagnose = "";
+    private String diagnoseName = "";//病案首页诊断
     private String name;
     private String sex;
     private String doctorName;
@@ -29,6 +30,8 @@ public class ReBeHosMergeDTO {
     private Date behospitalDate;
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date leaveHospitalDate;
+    private String lastDiagnose = "";
+    private String lastDiagnoseName = "";
     private String lastBehDeptId;
     private String lastBehDeptName;
     private String lastDoctorName;
@@ -42,6 +45,10 @@ public class ReBeHosMergeDTO {
     private Integer diffDays;
     private String totleFee;
     private String behospitalDayNum;
+    private String againBehospitalPlan;//31天再入院计划(是/否)
+    private String age;//年龄
+    private String lastAge;//年龄
     private String lastTotleFee;
     private String lastBehospitalDayNum;
+    private String lastAgainBehospitalPlan;//31天再入院计划(是/否)
 }

+ 35 - 0
src/main/java/com/diagbot/dto/StrAdmissionNoteDTO.java

@@ -0,0 +1,35 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 入院记录
+ * </p>
+ *
+ * @author cy
+ * @since 2020-10-09
+ */
+@Data
+public class StrAdmissionNoteDTO implements Serializable {
+
+
+    /**
+     * 记录编号
+     */
+    private String recId;
+
+
+    /**
+     * 结构化数据
+     */
+    private String wholeData;
+
+    /**
+     * modeId
+     */
+    private String modeId;
+
+}

+ 1 - 21
src/main/java/com/diagbot/entity/MedIndexResult.java

@@ -98,11 +98,6 @@ public class MedIndexResult implements Serializable {
      */
     private Double bloodResult;
 
-    /**
-     * 医师查房记录完整率--分母
-     */
-    private Double wardRoundResult;
-
     /**
      * 患者抢救记录及时完成率--分母
      */
@@ -114,25 +109,10 @@ public class MedIndexResult implements Serializable {
     private Double secFileResult;
 
     /**
-     * 出院患者病历归档完整率--分
+     * 出院患者病历归档完整率--分
      */
     private Double fileCompleteResult;
 
-    /**
-     * 不合理复制病历发生率--分母
-     */
-    private Double noCopyResult;
-
-    /**
-     * 知情同意书规范签署率--分母
-     */
-    private Double recordSignResult;
-
-    /**
-     * 甲级病历率--分母
-     */
-    private Double firRecordResult;
-
     private String startDate;
 
     private String endDate;

+ 12 - 1
src/main/java/com/diagbot/enums/QualityContent.java

@@ -148,13 +148,24 @@ public class QualityContent {
      *   临床用血
      */
     public static List<String> BLOODLIST = Arrays.asList(
-            "交叉配血","血交叉","血常规");
+            "交叉配血","血交叉");
 
     /**
      * 用于代码判断指标1、2、3执行路径
      */
     public static List<String> FOURSTR = Arrays.asList(
             "住院病案管理人员月均负担出院患者病历数", "病案编码人员月均负担出院患者病历数", "门诊病案管理人员月均负担门诊患者病历数");
+
+    // 放疗药物目录
+    public static List<String> radiotherapyDrugList = Arrays.asList(
+            "艾迪注射液", "康艾注射液", "康莱特注射液", "鸦胆子油乳注射液", "榄香烯乳注射液", "香菇多糖", "胎盘多肽注射液", "甘露聚糖肽注射液",
+            "脾多肽注射液", "E巨和粒", "欣粒生", "特尔津", "日达仙注射剂", "益比奥", "特比澳", "胸腺五肽", "古拉定","天晴甘美", "易善复", "己糖神经节苷脂钠",
+            "核糖核酸II", "参芪扶正注射液", "甘露醇注射液", "兰索拉唑", "奥西康", "卡络磺钠注射液", "维生素K1注射液", "氨甲苯酸注射液", "酚磺乙胺注射液",
+            "盐酸甲氧氯普胺注", "甲磺酸托烷司琼注射液", "伊班膦酸钠注射液", "唑来膦酸", "盐酸氨溴索注射液","氨茶碱注射液", "孟鲁司特钠片", "阿托伐他汀钙片",
+            "阿卡波糖片", "盐酸二甲双胍片", "瑞格列奈片", "格列齐特片","拉米夫定片","耐信","益血生胶囊","地榆升白片", "鲨肝醇片", "复方皂矾丸", "加巴喷丁胶囊",
+            "塞来昔布胶囊", "氨酚曲马多片", "盐酸羟考酮缓释片","硫酸吗啡缓释片", "盐酸吗啡片","复方甲氧那明胶囊","醋酸甲地孕酮分散","枸橼酸托瑞米芬片","标准桃金娘油肠溶",
+            "甲氧氯普胺片","多潘立酮片"
+    );
 }
 
 

+ 26 - 18
src/main/java/com/diagbot/facade/AlgorithmFacade.java

@@ -197,7 +197,11 @@ public class AlgorithmFacade {
                 }
                 qcResultAlgVOList.add(algorithmVO.getOptResultAlgVO());
             }
-
+            if(ListUtil.isEmpty(qcResultAlgVOList)){
+                qcResultAlgVOList = new ArrayList<>();
+                qcResultAlgVOList.add(algorithmVO.getOptResultAlgVO());
+                algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+            }
         }
         //删除
         else if (algorithmVO.getType().equals(2)||(algorithmVO.getType().equals(4)&&0==algorithmVO.getDelStatus())) {
@@ -226,28 +230,32 @@ public class AlgorithmFacade {
                 throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "恢复操作条目不能为空!");
             }
             //操作数据
-            if (ListUtil.isNotEmpty(qcResultAlgVOList)) {
-                Boolean hasData = false;
-                Long optId = algorithmVO.getOptResultAlgVO().getId(); // 操作id
-                QcresultDetail qcresultDetail = qcresultDetailFacade.getOne(new QueryWrapper<QcresultDetail>()
-                        .eq("id",optId));
-                if(qcresultDetail!=null)
-                {
-                    QcResultAlgVO qcResultAlgVO = new QcResultAlgVO();
-                    qcResultAlgVO.setScore(qcresultDetail.getScore());
-                    qcResultAlgVO.setId(qcresultDetail.getId());
-                    qcResultAlgVO.setCasesEntryId(qcresultDetail.getCasesEntryId());
-                    qcResultAlgVO.setCasesId(qcresultDetail.getCasesId());
-                    qcResultAlgVO.setMsg(qcresultDetail.getMsg());
-                    qcResultAlgVO.setIsReject(qcresultDetail.getIsReject());
-                    qcResultAlgVO.setCasesScore(qcresultDetail.getCasesScore());
+            Boolean hasData = false;
+            Long optId = algorithmVO.getOptResultAlgVO().getId(); // 操作id
+            QcresultDetail qcresultDetail = qcresultDetailFacade.getOne(new QueryWrapper<QcresultDetail>()
+                    .eq("id",optId));
+            if(qcresultDetail!=null)
+            {
+                QcResultAlgVO qcResultAlgVO = new QcResultAlgVO();
+                qcResultAlgVO.setScore(qcresultDetail.getScore());
+                qcResultAlgVO.setId(qcresultDetail.getId());
+                qcResultAlgVO.setCasesEntryId(qcresultDetail.getCasesEntryId());
+                qcResultAlgVO.setCasesId(qcresultDetail.getCasesId());
+                qcResultAlgVO.setMsg(qcresultDetail.getMsg());
+                qcResultAlgVO.setIsReject(qcresultDetail.getIsReject());
+                qcResultAlgVO.setCasesScore(qcresultDetail.getCasesScore());
+                if (ListUtil.isNotEmpty(qcResultAlgVOList)) {
+                    qcResultAlgVOList.add(qcResultAlgVO);
+                }else{
+                    qcResultAlgVOList = new ArrayList<>();
                     qcResultAlgVOList.add(qcResultAlgVO);
-                    hasData = true;
+                    algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
                 }
+                hasData = true;
+            }
                 if (!hasData) {
                     throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "恢复的条目不存在!");
                 }
-            }
         }
 
         //修改

+ 109 - 66
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -1,6 +1,7 @@
 package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,37 +14,17 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.BehospitalInfoServiceImpl;
-import com.diagbot.service.impl.MedQcresultDetailServiceImpl;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.DateUtil;
-import com.diagbot.util.EncrypDES;
-import com.diagbot.util.EntityUtil;
-import com.diagbot.util.ExcelUtils;
-import com.diagbot.util.ListUtil;
-import com.diagbot.util.MapUtil;
-import com.diagbot.util.StringUtil;
-import com.diagbot.util.SysUserUtils;
-import com.diagbot.vo.AlgorithmVO;
-import com.diagbot.vo.AnalyzeCdsVO;
-import com.diagbot.vo.AnalyzeCodeVO;
-import com.diagbot.vo.AnalyzeRunVO;
-import com.diagbot.vo.AnalyzeVO;
-import com.diagbot.vo.BasDeptInfoVO;
-import com.diagbot.vo.BehospitalPageVO;
-import com.diagbot.vo.ExportQcresultVO;
-import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.GetDetailVO;
-import com.diagbot.vo.MedrecVo;
-import com.diagbot.vo.QcResultAlgQueryVO;
-import com.diagbot.vo.QcResultAlgVO;
-import com.diagbot.vo.QueryVo;
-import com.diagbot.vo.RecordContentVO;
-import com.diagbot.vo.TaskVO;
+import com.diagbot.service.impl.QcresultDetailServiceImpl;
+import com.diagbot.service.impl.StrInformedConsentServiceImpl;
+import com.diagbot.util.*;
+import com.diagbot.vo.*;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -51,15 +32,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -172,10 +146,13 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     SysHospitalSetFacade sysHospitalSetFacade;
     @Autowired
     QcCasesRelevanceEntryFacade qcCasesRelevanceEntryFacade;
+    @Autowired
+    StrInformedConsentServiceImpl strInformedConsentServiceImpl;
+
     @Autowired
     SysUserRoleFacade sysUserRoleFacade;
     @Autowired
-    MedQcresultDetailServiceImpl medQcresultDetailService;
+    QcresultDetailFacade qcresultDetailFacade;
 
 
     /**
@@ -251,6 +228,13 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 .eq("behospital_code", getDetailVO.getBehospitalCode()), false
         );
 
+        // 获取患者年龄
+        HomePage homePage = homePageFacade.getOne(new QueryWrapper<HomePage>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", getDetailVO.getHospitalId())
+                .eq("behospital_code", getDetailVO.getBehospitalCode()), false
+        );
+
         List<String> paramList = getDetailVO.getParamStr();// 参数列表
 
         if (ListUtil.isEmpty(paramList) || paramList.contains("beHospital")) {
@@ -259,6 +243,9 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历已删除!");
             }
             BeanUtil.copyProperties(behospitalInfo, behosDTO);
+            if(null != homePage && StringUtils.isNotEmpty(homePage.getAge()) && StringUtils.isNotEmpty(homePage.getAgeUnit())){
+                behosDTO.setAge(homePage.getAge()+homePage.getAgeUnit());
+            }
             res.put("beHospital", behosDTO);
         }
 
@@ -713,7 +700,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         );
 
         //知情同意书
-        List<MedicalRecord> recordList = medicalRecordFacade.list(new QueryWrapper<MedicalRecord>()
+    /*    List<MedicalRecord> recordList = medicalRecordFacade.list(new QueryWrapper<MedicalRecord>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("behospital_code", analyzeVO.getBehospitalCode())
                 .eq("hospital_id", hospitalId)
@@ -721,7 +708,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 .orderByAsc("rec_date")
         );
         List<MedicalRecordDTO> medicalRecordDTOList = BeanUtil.listCopyTo(recordList, MedicalRecordDTO.class);
-
+*/
         List<HomeDiagnoseInfo> homePageList = new ArrayList<>();
         List<HomeOperationInfo> homeOperationInfoList = new ArrayList<>();
         if (homePage != null) {
@@ -1026,13 +1013,14 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 */
 //        ==================================
 
+        addData("有创操作", recMap, medrecVoList);
 
         addData("病理检验送检单", recMap, medrecVoList);
 
         addData("日常病程录", recMap, medrecVoList);
 
-        DataWithKey("知情同意书", medicalRecordDTOList, medrecVoList);
-        //addDataWithInnerKey("知情同意书", recMap, medrecVoList);
+        //DataWithKey("知情同意书", medicalRecordDTOList, medrecVoList);
+        addDataWithInnerKey("知情同意书", recMap, medrecVoList);
         addDataWithInnerKey("谈话告知书", recMap, medrecVoList);
 
         //==============文书====================
@@ -2309,9 +2297,10 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                                                String isPlacefile) {
         Long hospitalId = analyzeVO.getHospitalId();
         List<QcResultAlgVO> qcResultAlgVOList = new ArrayList<>();
-        //获取本用户原手动添加的扣分条目
-        List<Long> casesEntryIds = addQcDetailHistory(analyzeVO, codeList);
-
+        //获取本用户原手动添加的扣分条目(删除|未删除)
+        List<QcCasesEntry> qcCasesEntryHistory = new ArrayList<>();
+        List<QcresultDetail> qcresultDetails = getQcDetailHistory(analyzeVO, codeList,qcCasesEntryHistory);
+        Map<Long,List<QcCasesEntry>> qcCasesEntryHistoryMap = qcCasesEntryHistory.stream().collect(Collectors.groupingBy(QcCasesEntry::getId));
         if (ListUtil.isNotEmpty(codeList)) {
             // 根据质控结果获取质控条目
             QcResultAlgQueryVO qcResultAlgQueryVO = new QcResultAlgQueryVO();
@@ -2328,6 +2317,23 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 bean.setInfo(info);
             }
         }
+        //1.1未删除的手工评分
+        List<QcresultDetail> notDelQcDetailHistory = qcresultDetails.stream()
+                .filter(qcresultDetail -> "N".equals(qcresultDetail.getIsDeleted())).collect(Collectors.toList());
+        List<QcResultAlgVO> rgQcResultAlgVOList = new ArrayList<>();
+        if(ListUtil.isNotEmpty(notDelQcDetailHistory)){
+            notDelQcDetailHistory.stream().forEach(qcresultDetail -> {
+                QcResultAlgVO temp = new QcResultAlgVO();
+                BeanUtils.copyProperties(qcresultDetail,temp);
+                try{
+                    temp.setCode(qcCasesEntryHistoryMap.get(qcresultDetail.getCasesEntryId()).get(0).getCode());
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+                rgQcResultAlgVOList.add(temp);
+            });
+        }
+        qcResultAlgVOList.addAll(rgQcResultAlgVOList);
 
         // 评分
         AlgorithmVO algorithmVO = new AlgorithmVO();
@@ -2341,6 +2347,39 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         //保存
         Map<String, Object> pageMap = outputInfo.getPageData();
+        //保存解析过后的手术知情同意书
+            List<String> recIds = new ArrayList<>();
+            if(pageMap.containsKey("手术知情同意书")){
+                Object informObject = pageMap.get("手术知情同意书");
+                List<Map<String,Object>> informList= (List<Map<String,Object>>) informObject;
+                List<StrInformedConsent> strInformedConsents = new ArrayList<>();
+                if(ListUtil.isNotEmpty(informList)) {
+                    informList.forEach(obj ->
+                            {
+                                Map<String, String> strMap = new HashMap<>();
+                                strMap.put("使用植入性材料", String.valueOf(obj.get("使用植入性材料")));
+                                StrInformedConsent strInformedConsent = new StrInformedConsent();
+                                strInformedConsent.setHospitalId(analyzeVO.getHospitalId());
+                                strInformedConsent.setBehospitalCode(analyzeVO.getBehospitalCode());
+                                strInformedConsent.setRecId(String.valueOf(obj.get("记录编号")));
+                                strInformedConsent.setRecTitle(String.valueOf(obj.get("病历标题")));
+                                strInformedConsent.setRecType("知情同意书");
+                                strInformedConsent.setContent(JSONObject.toJSONString(strMap));
+                                strInformedConsent.setGmtCreate(new Date());
+                                strInformedConsents.add(strInformedConsent);
+                                recIds.add(String.valueOf(obj.get("记录编号")));
+                            }
+                    );
+                    //删除手术知情同意书历史ric_id
+                    strInformedConsentServiceImpl.remove( new QueryWrapper<StrInformedConsent>()
+                            .eq("hospital_id",analyzeVO.getHospitalId())
+                            .eq("is_deleted",IsDeleteEnum.N.getKey())
+                            .eq("behospital_code",analyzeVO.getBehospitalCode())
+                            .in("rec_id",recIds));
+                    //新增
+                    strInformedConsentServiceImpl.saveBatch(strInformedConsents);
+                }
+            }
         // 手动拼接数据【知情同意书】【谈话告知书】
         List<MedicalRecord> recordList = medicalRecordFacade.list(new QueryWrapper<MedicalRecord>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -2376,18 +2415,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         String menuData = JSON.toJSONString(qcModeDTOList);
 
         // 保存评分结果信息
-        //删除原手工扣分条目
-        if(ListUtil.isNotEmpty(casesEntryIds)){
-            if(ListUtil.isNotEmpty(algorithmVO.getQcResultAlgVOList())){
-                List<QcResultAlgVO> qcResultAlgVOListTemp = new ArrayList<>();
-                algorithmVO.getQcResultAlgVOList().stream().forEach(qcResultAlgVO -> {
-                    if(!casesEntryIds.contains(qcResultAlgVO.getCasesEntryId())){
-                        qcResultAlgVOListTemp.add(qcResultAlgVO);
-                    }
-                });
-                algorithmVO.setQcResultAlgVOList(qcResultAlgVOListTemp);
-            }
-        }
+        //计分删除人工添加条目
+        algorithmVO.getQcResultAlgVOList().removeAll(rgQcResultAlgVOList);
         Date date = qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, pageData, menuData, analyzeVO.getIsTask(), null);
 
         // 返回结果信息
@@ -2400,30 +2429,44 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     /**
      * @param analyzeVO
      * @param codeList
-     * @Description添加原手动扣分分值条目
+     * @Description获取原手动扣分分值条目
      * @Return void
      */
-    private List<Long> addQcDetailHistory(AnalyzeVO analyzeVO, List<String> codeList) {
+    private List<QcresultDetail> getQcDetailHistory(AnalyzeVO analyzeVO, List<String> codeList,List<QcCasesEntry> qcCasesEntryHistory) {
+        List<QcresultDetail> qcresultDetails = null;
         try {
-            List<Long> qcDetailIDHistory = medQcresultDetailService.list(new QueryWrapper<MedQcresultDetail>()
+            QcresultInfo qcresultInfoup
+                    = qcresultInfoFacade.getOne(
+                    new QueryWrapper<QcresultInfo>()
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("hospital_id", analyzeVO.getHospitalId())
+                            .eq("behospital_code", analyzeVO.getBehospitalCode()), false);
+            //未评过分
+            if(qcresultInfoup==null){
+                return null;
+            }
+            //1.获取上一次评分手工添加的条目
+            qcresultDetails = qcresultDetailFacade.list(new QueryWrapper<QcresultDetail>()
                     .eq("hospital_id", analyzeVO.getHospitalId())
                     .eq("behospital_code", analyzeVO.getBehospitalCode())
                     .eq("grade_type", "2")
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(MedQcresultDetail::getCasesEntryId).collect(Collectors.toList());
+                    .eq("qcresult_info_id", qcresultInfoup.getId()));
+            List<Long> qcDetailIDHistory = qcresultDetails.stream().map(QcresultDetail::getCasesEntryId).collect(Collectors.toList());
+
             if (ListUtil.isNotEmpty(qcDetailIDHistory)) {
-                List<String> codes = qcCasesEntryFacade.list(new QueryWrapper<QcCasesEntry>()
-                        .select("code")
+                List<QcCasesEntry> qcCasesEntries = qcCasesEntryFacade.list(new QueryWrapper<QcCasesEntry>()
+                        .select("id,code")
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .in("id", qcDetailIDHistory)).stream().map(QcCasesEntry::getCode).collect(Collectors.toList());
-                if (ListUtil.isNotEmpty(codes)) {
-                    codeList.addAll(codes);
+                        .in("id", qcDetailIDHistory));
+                if (ListUtil.isNotEmpty(qcCasesEntries)) {
+                    qcCasesEntryHistory.addAll(qcCasesEntries);
+                    codeList.removeAll(qcCasesEntryHistory.stream().map(QcCasesEntry::getCode).collect(Collectors.toList()));
                 }
-                return qcDetailIDHistory;
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return null;
+        return qcresultDetails;
     }
 
     /**

+ 1 - 2
src/main/java/com/diagbot/facade/ConsoleByDeptExportFacade.java

@@ -332,9 +332,8 @@ public class ConsoleByDeptExportFacade {
      * @return
      */
     public void reHos31DaysPageExportByDept(HttpServletResponse response, ReBeHosPageVO reBeHosPageVO) {
-        reBeHosPageVO.setCurrent(1L);
-        reBeHosPageVO.setSize(Long.MAX_VALUE);
         reBeHosPageVO.setSearchCount(false);
+        reBeHosPageVO.setFlag(1);
         IPage<ReBeHosByDeptDTO> page = consoleByDeptFacade.reHos31DaysPageByDept(reBeHosPageVO);
         List<ReBeHosByDeptDTO> records = page.getRecords();
         String fileName = "31天再入院统计详情.xls";

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

@@ -900,13 +900,25 @@ public class ConsoleByDeptFacade {
      */
     public IPage<ReBeHosByDeptDTO> reHos31DaysPageByDept(ReBeHosPageVO reBeHosPageVO) {
         filterFacade.reBeHosPageVOSet(reBeHosPageVO);
+        long size = reBeHosPageVO.getSize();
+        long current = reBeHosPageVO.getCurrent();
+        reBeHosPageVO.setCurrent(1L);
+        reBeHosPageVO.setSize(Long.MAX_VALUE);
         IPage<ReBeHosMergeDTO> page = behospitalInfoFacade.reHos31DaysPageByDept(reBeHosPageVO);
         List<ReBeHosMergeDTO> records = page.getRecords();
         IPage<ReBeHosByDeptDTO> retPage = new Page<>();
-        BeanUtil.copyProperties(page, retPage);
-        List<ReBeHosByDeptDTO> retRecords = Lists.newLinkedList();
         if (ListUtil.isNotEmpty(records)) {
-            for (ReBeHosMergeDTO record : records) {
+            List<ReBeHosByDeptDTO> retRecords = Lists.newLinkedList();
+            BeanUtil.copyProperties(page, retPage);
+            Iterator<ReBeHosMergeDTO> iterator = records.iterator();
+            while(iterator.hasNext()){
+                ReBeHosMergeDTO record = iterator.next();
+                strTrans(record);
+                Boolean flag = ConsoleFacade.isContainDiagnose(record);
+                if(!flag){
+                    iterator.remove();
+                    continue;
+                }
                 ReBeHosByDeptDTO retRecord = new ReBeHosByDeptDTO();
                 BeanUtil.copyProperties(record, retRecord);
                 List<ReBeHosDetailByDeptDTO> details = Lists.newLinkedList();
@@ -918,6 +930,8 @@ public class ConsoleByDeptFacade {
                 lastDetailRecord.setBehDeptId(record.getLastBehDeptId());
                 lastDetailRecord.setBehDeptName(record.getLastBehDeptName());
                 lastDetailRecord.setDoctorName(record.getLastDoctorName());
+                lastDetailRecord.setDiagnose(record.getLastDiagnose());
+                lastDetailRecord.setDiagnoseName(record.getLastDiagnoseName());
                 lastDetailRecord.setBehospitalCode(record.getLastBehospitalCode());
                 lastDetailRecord.setBehospitalDate(record.getLastBehospitalDate());
                 lastDetailRecord.setLeaveHospitalDate(record.getLastLeaveHospitalDate());
@@ -929,10 +943,44 @@ public class ConsoleByDeptFacade {
                 retRecord.setDetails(details);
                 retRecords.add(retRecord);
             }
+
+        if(reBeHosPageVO.getFlag()==1){
+            size = retRecords.size();
+        }
+        retPage.setSize(size);
+        retPage.setTotal(retRecords.size());
+        retPage.setCurrent(current);
+        if(0 == current){
+            current = 1;
+        }
+        int startIndex = ((int)current -1)*10;
+        int endIndex = startIndex + (int) size;
+
+        if(retRecords.size()>1){
+            if( retRecords.size()-startIndex<(int)size){
+                retRecords = retRecords.subList(startIndex,retRecords.size());
+            }else{
+                retRecords = retRecords.subList(startIndex,endIndex );
+            }
         }
         retPage.setRecords(retRecords);
+        }
         return retPage;
     }
+
+    public static void strTrans(ReBeHosMergeDTO record) {
+        String replace = record.getLastAgainBehospitalPlan();
+        if(StringUtils.isEmpty(replace)){
+            replace = "否";
+            record.setLastAgainBehospitalPlan(replace);
+            return;
+        }
+        replace = replace.replace("无", "否")
+                .replace("-", "无").replace("是一周后", "是")
+                .replace("1", "否").replace("2", "是")
+                .replace("有", "是");
+        record.setLastAgainBehospitalPlan(replace);
+    }
     /**
      * 未整改病历质控评分页-科室(内页)
      *

+ 1 - 2
src/main/java/com/diagbot/facade/ConsoleExportFacade.java

@@ -478,9 +478,8 @@ public class ConsoleExportFacade {
      * @return
      */
     public void reHos31DaysPageExport(HttpServletResponse response, ReBeHosPageVO reBeHosPageVO) {
-        reBeHosPageVO.setCurrent(1L);
-        reBeHosPageVO.setSize(Long.MAX_VALUE);
         reBeHosPageVO.setSearchCount(false);
+        reBeHosPageVO.setFlag(1);
         IPage<ReBeHosDTO> page = consoleFacade.reHos31DaysPage(reBeHosPageVO);
         List<ReBeHosDTO> records = page.getRecords();
         String fileName = "31天再入院统计详情.xls";

+ 451 - 44
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -420,11 +421,12 @@ public class ConsoleFacade {
         //MR
         Long mr = triggeringRulesMap.get("MR");
         //细菌培养
-        Long bacterialCulture = 0L;
+        Long bacterialCulture = triggeringRulesMap.get("bacterialCulture");
         //抗菌药物
-        Long antibiosis = 0L;
+        Long antibiosis = triggeringRulesMap.get("antibiosis");
         //恶性肿瘤化学治疗
-        Long chemotherapyMalignantTumors = 0L;
+        Long chemotherapyMalignantTumors = triggeringRulesMap.get("chemotherapyMalignantTumors");
+
         Map<String, Double> medicalRecordIndicator = medIndexResultFacade.medicalRecordIndicator(filterVO);
         Double startCount = medicalRecordIndicator.get("startCount");
         Double operationFeeNum = medicalRecordIndicator.get("operationFeeNum");
@@ -542,16 +544,23 @@ public class ConsoleFacade {
                 hashMapArrayList.add(stringStringHashMap);
             }
         }
+        //指标十四 恶性肿瘤放射治疗
+        if (indexName.equals(QualityContent.EXZL_FSZL_FHL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = tumorRadiationMethod(medicalRecordIndicator,hashMapArrayList,triggeringRulesMap);
+        }
 
         //指标十五 手术记录
         if (indexName.equals(QualityContent.SS_XGJL_WCL)||indexName.equals(QualityContent.QB)) {
             hashMapArrayList = operationMethod(medicalRecordIndicator,hashMapArrayList,triggeringRulesMap);
         }
 
+        //指标十六 植入物相关记录符合率
+        if (indexName.equals(QualityContent.ZRW_XGJL_WCL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = implantsMethod(medicalRecordIndicator,hashMapArrayList,triggeringRulesMap);
+        }
 
         //指标十七  临床用血相关记录符合率
         if (indexName.equals(QualityContent.LCYX_XGJL_WCL)||indexName.equals(QualityContent.QB)) {
-            filterVO.setFlagStr("1");
             hashMapArrayList = bloodMethod(hashMapArrayList,medicalRecordIndicator,triggeringRulesMap);
         }
 
@@ -570,9 +579,24 @@ public class ConsoleFacade {
             hashMapArrayList = getfileSecAmount(medicalRecordIndicator,hashMapArrayList, baseIndex);
         }
 
-        //指标二十七
+        //指标二十一 出院患者病历归档完整率
+        if (indexName.equals(QualityContent.CCHZ_GD_WZL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = fileCompleteMethod(medicalRecordIndicator,hashMapArrayList, baseIndex);
+        }
+
+        //指标二十二 不合理复制病历发生率
+        if (indexName.equals(QualityContent.BHL_FZ_FSL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = unreasonedCopyMethod(hashMapArrayList, baseIndex, triggeringRulesMap);
+        }
+
+        //指标二十三 知情同意书规范签署率
+        if (indexName.equals(QualityContent.ZQTYS_GF_QSL)||indexName.equals(QualityContent.QB)) {
+            hashMapArrayList = contentSignMethod(hashMapArrayList, baseIndex, triggeringRulesMap);
+        }
+
+        //指标二十四 甲级率
         if (indexName.equals(QualityContent.JJBLL)||indexName.equals(QualityContent.QB)) {
-            hashMapArrayList = firMethod(indexName,hashMapArrayList,baseIndex);
+            hashMapArrayList = firMethod(hashMapArrayList,baseIndex);
         }
         return hashMapArrayList;
     }
@@ -631,18 +655,47 @@ public class ConsoleFacade {
                 String behospitalCode = stringStringMap.get("behospitalCode");
                 //出院code
                 outHospitalCode.add(behospitalCode);
-                if (Double.parseDouble(stringStringMap.get("operationFee")) > 0) {
-                    //手术code
-                    operationCode.add(behospitalCode);
-                }
-                if (Double.parseDouble(stringStringMap.get("operationFee")) > 0 && Double.parseDouble(stringStringMap.get("pathologyFee")) > QualityContent.pathologyFee) {
-                    //病理code
-                    operationPathologyCode.add(behospitalCode);
+                String operationFee = stringStringMap.get("operationFee");
+                String pathologyFee = stringStringMap.get("pathologyFee");
+                String antibiosisFee = stringStringMap.get("antibiosisFee");
+                if(StringUtil.isNotEmpty(operationFee)) {
+                    double of = 0.0;
+                    try {
+                        of = Double.parseDouble(operationFee);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    if (of > 0) {
+                        //手术code
+                        operationCode.add(behospitalCode);
+                    }
                 }
-                if (Double.parseDouble(stringStringMap.get("antibiosisFee")) > 0) {
-                    //抗菌code
-                    antibiosisCode.add(behospitalCode);
+                if(StringUtil.isNotEmpty(operationFee)&&StringUtil.isNotEmpty(pathologyFee)) {
+                    double of = 0.0;
+                    double pf = 0.0;
+                    try {
+                        of = Double.parseDouble(operationFee);
+                        pf = Double.parseDouble(pathologyFee);
+                    } catch (NumberFormatException e) {
+                        e.printStackTrace();
+                    }
+                    if (of > 0 && pf > QualityContent.pathologyFee) {
+                        //病理code
+                        operationPathologyCode.add(behospitalCode);
+                    }
                 }
+                    if(StringUtil.isNotEmpty(antibiosisFee)) {
+                        double af = 0.0;
+                        try {
+                            af = Double.parseDouble(antibiosisFee);
+                        } catch (NumberFormatException e) {
+                            e.printStackTrace();
+                        }
+                        if (af > 0) {
+                        //抗菌code
+                        antibiosisCode.add(behospitalCode);
+                    }
+            }
             }
         }
                 if(ListUtil.isNotEmpty(adviceVerify)){
@@ -749,17 +802,37 @@ public class ConsoleFacade {
             Set<String> rescueCode = new CopyOnWriteArraySet<>();
             Set<String> bloodCode = new CopyOnWriteArraySet<>();
         //指标二十七
+        //指标14--恶性肿瘤放射治疗记录符合率
+        Set<String> tumorRadiationSet = tumorRadiationMethods(adviceNum, medIndexResult);
+
+        //指标15 手术记录
+        medIndexResult.setOperationCompleteResult(Double.parseDouble(operationFeeNum+""));
+
+        //指标16--植入物相关记录符合率
+        Set<String> implantsCode = implantsMethods(filterVO, medIndexResult);
+
+        //指标17  临床用血相关记录符合率
+        bloodMethods(doctorAdviceMedManageParams, filterVO,medIndexResult,bloodCode);
 
         //指标18 医师查房记录 查询直接返回 -code需要加载
 
         //指标19 抢救记录
         rescueMethods(doctorAdviceMedManageParams,medIndexResult,rescueCode);
+
         //指标20 出院患者病历2日归档
         getfileSecAmounts(filterVO,medIndexResult);
-        //指标15 手术记录
-        medIndexResult.setOperationCompleteResult(Double.parseDouble(operationFeeNum+""));
-        //指标17  临床用血相关记录符合率
-        bloodMethods(doctorAdviceMedManageParams, filterVO,medIndexResult,bloodCode);
+
+        //指标21 出院患者病历归档完整率
+        fileCompleteMethods(filterVO,medIndexResult);
+
+        //指标22 不合理复制病历发生率 查询直接返回
+
+        //指标23  知情同意书规范签署率 //分子通过规则
+       // contentSignMethods(contentFile,medIndexResult);
+
+        //指标24 甲级率 查询直接返回
+
+
         medIndexResult.setHospitalId(filterVO.getHospitalId());
         medIndexResult.setStartDate(filterVO.getStartDate());
         medIndexResult.setEndDate(filterVO.getEndDate());
@@ -838,34 +911,62 @@ public class ConsoleFacade {
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(operationCode.size()>0&&operationCode!=null) {
+        if(tumorRadiationSet.size()>0 && tumorRadiationSet != null) {
+            medIndexRelevance.setRelevanceType(14);
+            for (String Code : tumorRadiationSet) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+            if(operationCode.size() > 0 && operationCode != null) {
                 medIndexRelevance.setRelevanceType(15);
                 for (String Code : operationCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(bloodCode.size()>0&&bloodCode!=null) {
+        if(implantsCode.size() > 0 && implantsCode != null) {
+            medIndexRelevance.setRelevanceType(16);
+            for (String Code : implantsCode) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+            if(bloodCode.size() > 0 && bloodCode != null) {
                 medIndexRelevance.setRelevanceType(17);
                 for (String Code : bloodCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(outHospitalCode.size()>0&&outHospitalCode!=null) {
+            if(outHospitalCode.size() > 0 && outHospitalCode != null) {
                 medIndexRelevance.setRelevanceType(18);
                 for (String Code : outHospitalCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
-            if(rescueCode.size()>0&&rescueCode!=null) {
+            if(rescueCode.size() > 0 && rescueCode != null) {
                 medIndexRelevance.setRelevanceType(19);
                 for (String Code : rescueCode) {
                     medIndexRelevance.setBehospitalCode(Code);
                     medIndexRelevanceFacade.save(medIndexRelevance);
                 }
             }
+        if(outHospitalCode.size() > 0 && outHospitalCode != null) {
+            medIndexRelevance.setRelevanceType(22);
+            for (String Code : outHospitalCode) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
+        if(outHospitalCode.size() > 0 && outHospitalCode != null) {
+            medIndexRelevance.setRelevanceType(23);
+            for (String Code : outHospitalCode) {
+                medIndexRelevance.setBehospitalCode(Code);
+                medIndexRelevanceFacade.save(medIndexRelevance);
+            }
+        }
         }
     /**
      * 两数据相除得到百分比
@@ -958,6 +1059,7 @@ public class ConsoleFacade {
         Set<String> bacterialCultureCode = new CopyOnWriteArraySet<>();
         Set<String> antibiosisBehospitalCode = new CopyOnWriteArraySet<>();
         Set<String> chemotherapyMalignantTumorsBehospitalCode = new CopyOnWriteArraySet<>();
+        Set<String> tumorRadiationBehospitalCode = new CopyOnWriteArraySet<>();
         //无首页code
         List<String> behospitalCodeList = adviceVerify(filterVO);
         //首页为肿瘤code
@@ -1078,6 +1180,24 @@ public class ConsoleFacade {
                                     }
                                 }
                             }
+
+                            if (indexName.equals(QualityContent.EXZL_FSZL_FHL) || indexName.equals(QualityContent.QB)) {
+                                if (ListUtil.isNotEmpty(malignancyCodeList)) {
+                                    if (malignancyCodeList.contains(behospitalCode)) {
+                                        if (!tumorRadiationBehospitalCode.contains(behospitalCode)) {
+                                            if (doctorAdviceType.equals(QualityContent.STAT_ORDER) || doctorAdviceType.equals(QualityContent.STANDING_ORDER)) {
+                                                List<String> tumorRadiationDrugList = QualityContent.radiotherapyDrugList;
+                                                for (String tumorRadiationDrug : tumorRadiationDrugList) {
+                                                    if (daItemName.contains(tumorRadiationDrug)) {
+                                                        //医嘱含有放射治疗药物
+                                                        tumorRadiationBehospitalCode.add(behospitalCode);
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
                         }
                     }
                 }
@@ -1125,11 +1245,16 @@ public class ConsoleFacade {
             }else {
                 mapCode.put("antibiosis",null);
             }
-            if(antibiosisBehospitalCode!=null && antibiosisBehospitalCode.size()>0){
-                mapCode.put("chemotherapyMalignantTumors",antibiosisBehospitalCode);
+            if(chemotherapyMalignantTumorsBehospitalCode!=null && chemotherapyMalignantTumorsBehospitalCode.size()>0){
+                mapCode.put("chemotherapyMalignantTumors",chemotherapyMalignantTumorsBehospitalCode);
             }else {
                 mapCode.put("chemotherapyMalignantTumors",null);
             }
+            if(tumorRadiationBehospitalCode!=null && tumorRadiationBehospitalCode.size()>0){
+                mapCode.put("tumorRadiationSecNum",tumorRadiationBehospitalCode);
+            }else {
+                mapCode.put("tumorRadiationSecNum",null);
+            }
             return mapCode;
         }
     }
@@ -2877,13 +3002,25 @@ public class ConsoleFacade {
      */
     public IPage<ReBeHosDTO> reHos31DaysPage(ReBeHosPageVO reBeHosPageVO) {
         filterFacade.reBeHosPageVOSet(reBeHosPageVO);
+        long size = reBeHosPageVO.getSize();
+        long current = reBeHosPageVO.getCurrent();
+        reBeHosPageVO.setCurrent(1L);
+        reBeHosPageVO.setSize(Long.MAX_VALUE);
         IPage<ReBeHosMergeDTO> page = behospitalInfoFacade.reHos31DaysPage(reBeHosPageVO);
         List<ReBeHosMergeDTO> records = page.getRecords();
         IPage<ReBeHosDTO> retPage = new Page<>();
-        BeanUtil.copyProperties(page, retPage);
-        List<ReBeHosDTO> retRecords = Lists.newLinkedList();
         if (ListUtil.isNotEmpty(records)) {
-            for (ReBeHosMergeDTO record : records) {
+            BeanUtil.copyProperties(page, retPage);
+            List<ReBeHosDTO> retRecords = Lists.newLinkedList();
+            Iterator<ReBeHosMergeDTO> iterator = records.iterator();
+            while(iterator.hasNext()){
+                ReBeHosMergeDTO record = iterator.next();
+                ConsoleByDeptFacade.strTrans(record);
+                Boolean flag = isContainDiagnose(record);
+                if(!flag){
+                    iterator.remove();
+                    continue;
+                }
                 ReBeHosDTO retRecord = new ReBeHosDTO();
                 BeanUtil.copyProperties(record, retRecord);
                 List<ReBeHosDetailDTO> details = Lists.newLinkedList();
@@ -2892,6 +3029,9 @@ public class ConsoleFacade {
                 details.add(detailRecord);
                 ReBeHosDetailDTO lastDetailRecord = new ReBeHosDetailDTO();
                 lastDetailRecord.setName(record.getName());
+                lastDetailRecord.setAge(record.getLastAge());
+                lastDetailRecord.setDiagnose(record.getLastDiagnose());
+                lastDetailRecord.setDiagnoseName(record.getLastDiagnoseName());
                 lastDetailRecord.setBehDeptId(record.getLastBehDeptId());
                 lastDetailRecord.setBehDeptName(record.getLastBehDeptName());
                 lastDetailRecord.setBehospitalCode(record.getLastBehospitalCode());
@@ -2905,11 +3045,84 @@ public class ConsoleFacade {
                 retRecord.setDetails(details);
                 retRecords.add(retRecord);
             }
+            //首页返回全部数据
+        if(reBeHosPageVO.getFlag()==31){
+            retPage.setRecords(retRecords);
+            return retPage;
+        }
+        //导出操作
+        if(reBeHosPageVO.getFlag()==1){
+            size = retRecords.size();
+        }
+        retPage.setSize(size);
+        retPage.setTotal(retRecords.size());
+        retPage.setCurrent(current);
+        //数据返回索引处理
+        if(0 == current){
+            current = 1;
+        }
+        int startIndex = ((int)current -1)*10;
+        int endIndex = startIndex + (int) size;
+
+        if(retRecords.size()>1){
+            if( retRecords.size()-startIndex<(int)size){
+                retRecords = retRecords.subList(startIndex,retRecords.size());
+            }else{
+                retRecords = retRecords.subList(startIndex,endIndex );
+            }
         }
         retPage.setRecords(retRecords);
+        }
         return retPage;
     }
 
+
+   static Boolean isContainDiagnose(ReBeHosMergeDTO record){
+       // String lastDiagnoseName = replace(record.getLastDiagnoseName());本身使用,分隔
+        String diagnose =replace(record.getDiagnose());//手动分隔
+        String lastDiagnose = replace(record.getLastDiagnose());
+        record.setDiagnose(diagnose);
+        record.setLastDiagnose(lastDiagnose);
+        Set lastDiagnoseNames = strTranListMethod(record.getLastDiagnoseName());
+        Set diagnoses = strTranListMethod(record.getDiagnose());
+        long count = diagnoses.stream().filter(obj ->null != lastDiagnoseNames && null != obj && lastDiagnoseNames.contains(obj)).count();
+        if(count<=0){
+            return false;
+        }
+        return true;
+    };
+
+    static String replace(String str){
+        if(StringUtils.isEmpty(str)){
+            return null;
+        }
+        str = str.trim().replace(";", ",").replace(";", ",")
+                        .replace("、", ",").replace(",", ",")
+                        .replace("|", ",").replace(" ", ",")
+                        .replace(":", ",") .replace(":", ",");
+        if(str.startsWith(",")){
+            str = str.substring(1);
+        }
+        if(str.endsWith(",")){
+            str = str.substring(0,str.length()-1);
+        }
+
+       return str;
+    }
+    static Set strTranListMethod(String str){
+        Set<String> names = new HashSet<>();
+        if(StringUtils.isNotEmpty(str)){
+        if(str.contains(",") && str.length()>1){
+            for (String diagnoseName : str.split(",")) {
+                names.add(diagnoseName);
+            }
+        }else{
+            names.add(str);
+             }
+        }
+        return names;
+    };
+
     /**
      * 入院人数统计(首页)
      *
@@ -2973,11 +3186,63 @@ public class ConsoleFacade {
         return behospitalInfoFacade.hmImproveMRPage(qcResultShortPageVO);
     }
 
+
+    //指标十四 恶性肿瘤放射治疗
+    private List<Map<String, String>> tumorRadiationMethod(Map<String, Double> medManageParams,List<Map<String, String>> retList, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        //接受肿瘤放射治疗的质控病历总数
+        Double count = medManageParams.get("tumorRadiationResult");
+        String num = null;
+        if( null == count){
+            count = 0d;
+        }
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            double tumorRadiationDo = currencyCal(count, triggeringRulesMap.get("tumorRadiationNum"));//triggeringRules(filterVO)
+            num = String.valueOf(tumorRadiationDo);
+            if(tumorRadiationDo<0d){
+                num = null;
+            }
+        };
+
+        firMap.put("name","恶性肿瘤放射治疗记录符合率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        firMap.put("num",String.valueOf(count));
+        retList.add(firMap);
+        return retList;
+    }
+
+    //指标十六 植入物相关记录符合率
+    private List<Map<String, String>> implantsMethod(Map<String, Double> medManageParams,List<Map<String, String>> retList, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        //使用植入物的质控病历总数
+        Double count = medManageParams.get("implantsResult");
+        if( null == count){
+            count = 0d;
+        }
+        String num = null;
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            double implantsDo = currencyCal(count, triggeringRulesMap.get("implantsNum"));//triggeringRules(filterVO)
+            num = String.valueOf(implantsDo);
+            if(implantsDo<0d){
+                num = null;
+            }
+        };
+
+        firMap.put("name","植入物相关记录符合率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        firMap.put("num",String.valueOf(count));
+        retList.add(firMap);
+        return retList;
+    }
+
     //指标十八 抢救记录
     private  List<Map<String, String>> rescueMethod( Map<String, Double> medManageParams, List<Map<String, String>> retList,Map<String, Long> triggeringRulesMap){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         //接受抢救的质控病历总数
-        double count = medManageParams.get("rescue_result");
+        Double count = medManageParams.get("rescueResult");
+        if( null == count){
+            count = 0d;
+        }
         String num = null;
         if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
             double rescueDo = currencyCal(count, triggeringRulesMap.get("rescueNum"));
@@ -2985,11 +3250,11 @@ public class ConsoleFacade {
             if(rescueDo<0d){
                 num = null;
             }
-            firMap.put("num",String.valueOf(count));
         };
 
         firMap.put("name","患者抢救记录及时完成率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        firMap.put("num",String.valueOf(count));
         retList.add(firMap);
         return retList;
     };
@@ -2998,16 +3263,70 @@ public class ConsoleFacade {
     private List<Map<String, String>> WardRoundMethod( List<Map<String, String>> retList, Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         String num = null;
+        Object forWorkNum = baseIndex.get("forWorkNum");
         if( triggeringRulesMap.containsKey("WardRoundNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
             double wardRoundDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("WardRoundNum"));
             num = String.valueOf(wardRoundDo);
             if(wardRoundDo<0d){
                 num = null;
             }
-            firMap.put("num",baseIndex.get("forWorkNum").toString());
         };
         firMap.put("name","医师查房记录完成率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        if(null == forWorkNum){
+            firMap.put("num","0");
+        }else{
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
+        retList.add(firMap);
+        return retList;
+    }
+
+
+    //指标二十二 不合理复制病历发生率
+    private List<Map<String, String>> unreasonedCopyMethod( List<Map<String, String>> retList, Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap){
+       LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+       String num = null;
+        Object forWorkNum = baseIndex.get("forWorkNum");
+        if( triggeringRulesMap.containsKey("unreasonedCopyNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
+           double wardRoundDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("unreasonedCopyNum"));
+           num = String.valueOf(wardRoundDo);
+           if(wardRoundDo<0d){
+               num = null;
+           }
+       };
+       firMap.put("name","不合理复制病历发生率");
+       firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        if(null == forWorkNum){
+            firMap.put("num","0");
+        }else{
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
+       retList.add(firMap);
+        return retList;
+        };
+
+
+    //指标二十三 知情同意书规范签署率
+    private List<Map<String, String>> contentSignMethod(List<Map<String, String>> retList, Map<String, Object> baseIndex, Map<String, Long> triggeringRulesMap){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        Object forWorkNum = baseIndex.get("forWorkNum");
+        String num = null;
+        if( triggeringRulesMap.containsKey("InformedNum") && baseIndex.containsKey("forWorkNum") && !baseIndex.get("forWorkNum").toString().equals("0")){
+            double InformedDo = currencyCal(baseIndex.get("forWorkNum"), triggeringRulesMap.get("InformedNum"));
+            num = String.valueOf(InformedDo);
+            if(InformedDo<0d){
+                num = null;
+            }
+        }
+        firMap.put("name","知情同意书规范签署率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        if(null == forWorkNum){
+            firMap.put("num","0");
+        }else{
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
+
         retList.add(firMap);
         return retList;
     }
@@ -3016,6 +3335,9 @@ public class ConsoleFacade {
     private  List<Map<String, String>> operationMethod(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Long> triggeringRulesMap){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         String operationFeeNum = medManageParams.get("operationFeeNum")+"";
+        if(StringUtils.isEmpty(operationFeeNum)){
+            operationFeeNum = "0";
+        }
         String num = null;
         if( triggeringRulesMap.containsKey("operationRecordNum") && StringUtils.isNotEmpty(operationFeeNum) && ! operationFeeNum.equals("0")){
             double operationRecordDo = currencyCal(operationFeeNum, triggeringRulesMap.get("operationRecordNum"));
@@ -3023,13 +3345,13 @@ public class ConsoleFacade {
             if(operationRecordDo<0d){
                 num = null;
             }
-            firMap.put("num",operationFeeNum);
         };
         firMap.put("name","手术相关记录完成率");
         if("0.0".equals(num)){
             num = "0.00";
         }
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        firMap.put("num",operationFeeNum);
 
         retList.add(firMap);
         return retList;
@@ -3038,7 +3360,10 @@ public class ConsoleFacade {
     //指标十六  临床用血相关记录符合率
     private  List<Map<String, String>> bloodMethod( List<Map<String, String>>retList,Map<String, Double> bloodRes,Map<String, Long> triggeringRulesMap){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
-        double count = bloodRes.get("blood_result");
+        Double count = bloodRes.get("bloodResult");
+        if( null == count){
+            count = 0d;
+        }
         String num = null;
         if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
             //指标十七
@@ -3047,11 +3372,11 @@ public class ConsoleFacade {
             if(bloodDo<0d){
                 num = null;
             }
-            firMap.put("num",String.valueOf(count));
         }
 
         firMap.put("name","临床用血相关记录符合率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        firMap.put("num",String.valueOf(count));
         retList.add(firMap);
         return retList;
     }
@@ -3071,21 +3396,55 @@ public class ConsoleFacade {
     private List<Map<String, String>> getfileSecAmount(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Object> baseIndex){
         LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
         DecimalFormat df = new DecimalFormat("#0.00");
-        double count = medManageParams.get("sec_file_result");
+        Double count = medManageParams.get("secFileResult");
+        Object forWorkNum = baseIndex.get("forWorkNum");
+        if( null == count){
+            count = 0d;
+        }
         String num = null;
-        if(StringUtils.isNotEmpty( baseIndex.get("sevenWorkNum").toString()) && ! baseIndex.get("sevenWorkNum").toString().equals("0") ){
-            double retNum =count* 100/Double.parseDouble(baseIndex.get("sevenWorkNum").toString());
+        if(StringUtils.isNotEmpty( baseIndex.get("forWorkNum").toString()) && ! baseIndex.get("forWorkNum").toString().equals("0") ){
+            double retNum =count* 100/Double.parseDouble(baseIndex.get("forWorkNum").toString());
             double firGradeStr = Double.parseDouble(df.format(retNum));
             num = String.valueOf(firGradeStr);
-            firMap.put("num",baseIndex.get("sevenWorkNum").toString());
+
         }
 
         firMap.put("name","出院患者病历2日归档率");
         firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        if(null == forWorkNum){
+            firMap.put("num","0");
+        }else{
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
         retList.add(firMap);
         return retList;
     };
 
+    //指标21 --出院患者病历归档完整率
+    private  List<Map<String, String>> fileCompleteMethod(Map<String, Double> medManageParams, List<Map<String, String>>retList, Map<String, Object> baseIndex){
+        LinkedHashMap<String, String> firMap = new LinkedHashMap<>();
+        Double count = medManageParams.get("fileCompleteResult");
+        Object forWorkNum = baseIndex.get("forWorkNum");
+        if( null == count){
+            count = 0d;
+        }
+        String num = null;
+        if(StringUtils.isNotEmpty( baseIndex.get("forWorkNum").toString()) && ! baseIndex.get("forWorkNum").toString().equals("0") ){
+            double retNum = currencyCal( baseIndex.get("forWorkNum").toString(),count);
+            num = String.valueOf(retNum);
+        }
+
+        firMap.put("name","出院患者病历归档完整率");
+        firMap.put("notCopiedStr",StringUtils.isEmpty(num) ? "0.00%":(num+"%"));
+        if(null == forWorkNum){
+            firMap.put("num","0");
+        }else{
+            firMap.put("num",baseIndex.get("forWorkNum").toString());
+        }
+        retList.add(firMap);
+        return retList;
+    }
+
 
     private List<Map<String, String>> ManageIndexMethod(String indexName,List<Map<String, String>> retList, Map<String, Object> baseIndex, MedIndexFilterVO timeVo){
         QueryWrapper<MedManagementInfo> query = new QueryWrapper<>();
@@ -3166,9 +3525,8 @@ public class ConsoleFacade {
     };
 
 
-    private List<Map<String, String>> firMethod(String indexName,List<Map<String, String>> retList, Map<String, Object> baseIndex){
+    private List<Map<String, String>> firMethod(List<Map<String, String>> retList, Map<String, Object> baseIndex){
         DecimalFormat df = new DecimalFormat("0.00");
-        if(indexName.equals(QualityContent.JJBLL)||indexName.equals(QualityContent.QB)) {
             //指标二十七 -甲级病历率
         LinkedHashMap<String, String> fouMap = new LinkedHashMap<>();
             Double firRecord = 0d;
@@ -3180,12 +3538,11 @@ public class ConsoleFacade {
                 double retNum = Double.parseDouble(baseIndex.get("sixWorkNum").toString()) * 100 / firRecord;
                 double firGradeStr = Double.parseDouble(df.format(retNum));
                 num4 = String.valueOf(firGradeStr);
-                fouMap.put("num",String.valueOf(firRecord));
             }
             fouMap.put("name","甲级病历率");
             fouMap.put("notCopiedStr",StringUtils.isEmpty(num4) ? "0.00%":(num4+"%"));
+        fouMap.put("num",String.valueOf(firRecord));
             retList.add(fouMap);
-        }
         return retList;
     };
 
@@ -3193,6 +3550,17 @@ public class ConsoleFacade {
     /**
      * ==============================后台维护===============================
      */
+    private  Set<String> tumorRadiationMethods( Map<String, Set<String>> adviceNum,MedIndexResult medIndexResult){
+        Set<String> tumorRadiationSecNum = new CopyOnWriteArraySet<>();
+        if(adviceNum.containsKey("tumorRadiationSecNum")&& adviceNum.get("tumorRadiationSecNum") != null && adviceNum.get("tumorRadiationSecNum").size()>0){
+            tumorRadiationSecNum = adviceNum.get("tumorRadiationSecNum");
+            double count = tumorRadiationSecNum.size();
+            if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+                medIndexResult.setTumorRadiationResult(count);
+            }
+        }
+        return tumorRadiationSecNum;
+    }
     //指标19 抢救记录
     private  void rescueMethods(List<MedManageParamsDTO> medManageParams,MedIndexResult medIndexResult, Set<String> rescueCode){
         List<MedManageParamsDTO> manageList= new ArrayList<>();
@@ -3231,7 +3599,7 @@ public class ConsoleFacade {
         System.out.println("lis项目存在用血住院病历号 = " + (xx2-xx1));
         //advice体现lis项目存在用血的住院病历号
         doctorAdviceList.parallelStream()
-                .filter(obj -> beCode.contains(obj.getBehospitalCode()) && obj.getDoctorAdviceType()
+                .filter(obj -> beCode.contains(obj.getBehospitalCode()) && StringUtils.isNotEmpty(obj.getDoctorAdviceType()) && obj.getDoctorAdviceType()
                         .equals(QualityContent.STAT_ORDER) && blood_list.contains(obj.getDaItemName()) &&
                         (StringUtils.isEmpty(obj.getDaStatus()) || (StringUtils.isNotEmpty(obj.getDaStatus()) && ! obj.getDaStatus()
                         .equals(QualityContent.CANCELLATION_ORDER))))
@@ -3339,6 +3707,45 @@ public class ConsoleFacade {
         filterVO.setLastEndDate(endTime);
     };
 
+    //指标 16--植入物相关记录符合率
+    private Set<String> implantsMethods(FilterVO filterVO,MedIndexResult medIndexResult){
+        filterVO.setFlagStr("4");
+        List<MedManageParamsDTO> fileLists = behospitalInfoFacade.getMedManageParams(filterVO);
+        Set<String> collect = fileLists.parallelStream().filter(obj -> {
+            String content = obj.getContent();
+            Map contenMap = JSON.parseObject(content, Map.class);
+            return contenMap.containsKey("使用植入性材料") && StringUtils.isNotEmpty(contenMap.get("使用植入性材料").toString())
+                    && "true".equals(contenMap.get("使用植入性材料").toString());
+        }).map(MedManageParamsDTO::getBehospitalCode).collect(Collectors.toSet());
+        double count = collect.size();
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            medIndexResult.setImplantsResult(count);
+        }
+        return collect;
+    }
+
+    //指标21 出院患者病历归档完整率
+    private void fileCompleteMethods(FilterVO filterVO,MedIndexResult medIndexResult){
+        filterVO.setFlagStr("3");
+        List<MedManageParamsDTO> fileLists = behospitalInfoFacade.getMedManageParams(filterVO);
+        double count = fileLists.stream().map(MedManageParamsDTO::getBehospitalCode).distinct().count();
+        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+            medIndexResult.setFileCompleteResult(count);
+        }
+    }
+
+    //指标23  知情同意书规范签署率
+//    private void contentSignMethods(List<MedManageParamsDTO>fileLists,MedIndexResult medIndexResult){
+//        Set<String> collect = fileLists.parallelStream().filter(obj -> {
+//            String content = obj.getContent();
+//            Map contenMap = JSON.parseObject(content, Map.class);
+//            return contenMap.containsKey("签署") && StringUtils.isNotEmpty(contenMap.get("签署").toString());
+//        }).map(MedManageParamsDTO::getBehospitalCode).collect(Collectors.toSet());
+//        double count = collect.size();
+//        if(StringUtils.isNotEmpty(String.valueOf(count)) &&  count != 0d){
+//            medIndexResult.setRecordSignResult(count);
+//        }
+//    }
 
 
     /**

+ 65 - 0
src/main/java/com/diagbot/facade/DataEditFacade.java

@@ -0,0 +1,65 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.diagbot.dto.StrAdmissionNoteDTO;
+import com.diagbot.entity.*;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.*;
+import com.diagbot.util.*;
+import com.diagbot.vo.DataEditVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:wangsy
+ * @time: 2021/08/14 11:37
+ */
+@Component
+public class DataEditFacade {
+
+    @Autowired
+    @Qualifier("strAdmissionNoteServiceImpl")
+    StrAdmissionNoteService strAdmissionNoteService;
+
+    /**
+     * 数据检索
+     */
+    public StrAdmissionNoteDTO dataSearch() {
+        Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        StrAdmissionNote strAdmissionNote= strAdmissionNoteService.getBaseMapper().selectOne(new QueryWrapper<StrAdmissionNote>()
+                .eq("hospital_id", hospitalId)
+                .eq("remark", hospitalId + "N")
+                .select("rec_id", "whole_data"));
+        StrAdmissionNoteDTO strAdmissionNoteDTO = new StrAdmissionNoteDTO();
+        BeanUtil.copyProperties(strAdmissionNote,strAdmissionNoteDTO);
+        strAdmissionNoteDTO.setModeId("200");
+        return strAdmissionNoteDTO;
+    }
+
+
+
+    /**
+     * 更新数据
+     *
+     * @param dataEditVO
+     * @return
+     */
+    public Boolean saveDataEditFacade(DataEditVO dataEditVO) {
+        return strAdmissionNoteService.update(new UpdateWrapper<StrAdmissionNote>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                .eq("rec_id", dataEditVO.getRecId())
+                .set("whole_data", dataEditVO.getWholeData())
+                .set("gmt_modified", DateUtil.now())
+                .set("modifier", SysUserUtils.getCurrentPrincipleID())
+        );
+    }
+
+}

+ 2 - 0
src/main/java/com/diagbot/facade/FilterFacade.java

@@ -518,10 +518,12 @@ public class FilterFacade {
      * @param reBeHosPageVO
      */
     public void reBeHosPageVOSet(ReBeHosPageVO reBeHosPageVO) {
+        if(null == reBeHosPageVO.getUserId() && StringUtils.isEmpty(reBeHosPageVO.getHospitalId())){
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String userId = SysUserUtils.getCurrentPrincipleID();
         reBeHosPageVO.setHospitalId(hospitalId);
         reBeHosPageVO.setUserId(Long.valueOf(userId));
+        }
     }
 
     /**

+ 25 - 24
src/main/java/com/diagbot/facade/MedCheckInfoFacade.java

@@ -218,7 +218,7 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
         else if (searchRoleIds.contains(CheckerRoleEnum.DEPT_SUPERVISOR.getKey() * 1l)
                 || searchRoleIds.contains(CheckerRoleEnum.HOSP_SUPERVISOR.getKey() * 1l)) {
             //查询没有指定科室
-            if (checkJobVO.getDeptList() == null || checkJobVO.getDeptList().isEmpty()) {
+            if (checkJobVO.getDepts() == null || checkJobVO.getDepts().isEmpty()) {
                 //科室获取待分配任务所在科室集合
                 if (CheckJobTypeEnum.DEPT_SUPERVISOR.getKey() == Integer.parseInt(checkJobVO.getJobType())) {
                     //获取当前用户科室
@@ -228,32 +228,33 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
                             .eq("user_id", principleId)
                     ).stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
                     if (ListUtil.isNotEmpty(deptIds)) {
-                        checkJobVO.setDeptList(deptIds);
+                        checkJobVO.setDepts(deptIds);
                     }
                     //获取病区集合
-                    List<String> wards = regionDeptService.list(new QueryWrapper<RegionDept>()
-                            .eq("is_deleted", IsDeleteEnum.N.getKey())
-                            .eq("hospital_id", hospitalId)
-                            .in(ListUtil.isNotEmpty(deptIds), "dept_id", deptIds)
-                    ).stream().map(RegionDept::getRegionCode).collect(Collectors.toList());
-                    if (ListUtil.isNotEmpty(wards)) {
-                        checkJobVO.setWardList(wards);
-                    }
+//                    List<String> wards = regionDeptService.list(new QueryWrapper<RegionDept>()
+//                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+//                            .eq("hospital_id", hospitalId)
+//                            .in(ListUtil.isNotEmpty(deptIds), "dept_id", deptIds)
+//                    ).stream().map(RegionDept::getRegionCode).collect(Collectors.toList());
+//                    if (ListUtil.isNotEmpty(wards)) {
+//                        checkJobVO.setRecords(wards);
+//                    }
 
-                    //医疗组
-                    List<String> doctorIds = sysUserFacade.list(new QueryWrapper<SysUser>()
-                            .eq("is_deleted", IsDeleteEnum.N.getKey())
-                            .eq("id", principleId)
-                    ).stream().map(SysUser::getUsername).collect(Collectors.toList());
-                    if (ListUtil.isNotEmpty(doctorIds)) {
-                        List<String> medoups = medoupUserService.list(new QueryWrapper<BasDoctorInfo>()
-                                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                                .in("doctor_id", doctorIds)
-                        ).stream().map(BasDoctorInfo::getGroupId).collect(Collectors.toList());
-                        if (ListUtil.isNotEmpty(medoups)) {
-                            checkJobVO.setMedoupList(medoups);
-                        }
-                    }
+                    //医疗组(没给医疗组条件默认全部)
+
+//                    List<String> doctorIds = sysUserFacade.list(new QueryWrapper<SysUser>()
+//                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+//                            .eq("id", principleId)
+//                    ).stream().map(SysUser::getUsername).collect(Collectors.toList());
+//                    if (ListUtil.isNotEmpty(doctorIds)) {
+//                        List<String> medoups = medoupUserService.list(new QueryWrapper<BasDoctorInfo>()
+//                                .eq("is_deleted", IsDeleteEnum.N.getKey())
+//                                .in("doctor_id", doctorIds)
+//                        ).stream().map(BasDoctorInfo::getGroupId).collect(Collectors.toList());
+//                        if (ListUtil.isNotEmpty(medoups)) {
+//                            checkJobVO.setMedoups(medoups);
+//                        }
+//                    }
                     return getCheckList(checkJobVO);
                 }
                 //院区获取

+ 16 - 11
src/main/java/com/diagbot/facade/MedCheckWorkFacade.java

@@ -312,21 +312,26 @@ public class MedCheckWorkFacade {
 //                deptIds.add("999999999999");
 //            }
 //            checkWorkPageVO.setDepartment(deptIds);
-            //如果没有添加医疗组筛选条件默认筛选自身医疗组
+            //如果没有添加医疗组筛选条件默认筛选全部医疗组
             List<String> codes = null;
-            if (ListUtil.isEmpty(checkWorkPageVO.getMedoup())) {
-                List<String> doctorIds = sysUserFacade.list(new QueryWrapper<SysUser>()
+            if (ListUtil.isEmpty(checkWorkPageVO.getMedoups())) {
+                //获取当前用户科室
+                SysUserBaseVO sysUserBaseVO = new SysUserBaseVO();
+                sysUserBaseVO.setUserId(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+                List<String> deptIds = new ArrayList<>();
+                List<BasDeptInfoDTO> selDepts = sysUserFacade.getUserDepts(sysUserBaseVO).getSelDepts();
+                if (ListUtil.isNotEmpty(selDepts)) {
+                    deptIds = selDepts.stream().map(i -> i.getDeptId()).collect(Collectors.toList());
+                }
+                //通过科室获取医疗组
+                List<DeptMedoup> deptMedoups = deptMedoupService.list(new QueryWrapper<DeptMedoup>()
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("id", SysUserUtils.getCurrentPrincipleID())
-                ).stream().map(SysUser::getUsername).collect(Collectors.toList());
-                if (ListUtil.isNotEmpty(doctorIds)) {
-                    codes = medoupUserService.list(new QueryWrapper<BasDoctorInfo>()
-                            .eq("is_deleted", IsDeleteEnum.N.getKey())
-                            .in("doctor_id", doctorIds)
-                    ).stream().map(BasDoctorInfo::getGroupId).collect(Collectors.toList());
+                        .in("dept_id", deptIds));
+                if (ListUtil.isNotEmpty(deptMedoups)) {
+                    codes = deptMedoups.stream().map(DeptMedoup::getMedoupCode).collect(Collectors.toList());
                 }
             } else {
-                codes = checkWorkPageVO.getMedoup();
+                codes = checkWorkPageVO.getMedoups();
             }
             if (ListUtil.isNotEmpty(codes)) {
                 List<BasDoctorInfo> basDoctorInfos = basDoctorInfoFacade.list(new QueryWrapper<BasDoctorInfo>()

+ 56 - 31
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -122,9 +122,27 @@ public class SysUserFacade extends SysUserServiceImpl {
         outputStream.close();
     }
 
+
+    /**
+     * 获取标识--选择登录页面
+     * @return java.lang.Long
+     */
+    public Long getHospitalMark() {
+        Long mark = 0L;//0-默认通用医院 1-湘雅医院特殊登录页面
+        SysHospitalSet sysHospitalSet = sysHospitalSetFacade.lambdaQuery()
+                .eq(SysHospitalSet::getHospitalId, 35)
+                .eq(SysHospitalSet::getIsDeleted, IsDeleteEnum.N.getKey())
+                .eq(SysHospitalSet::getCode, "special_page_csxy").one();
+        if(null != sysHospitalSet){
+            String val = sysHospitalSet.getValue();
+            if(StringUtil.isNotBlank(val) && "1".equals(val)){
+               mark =  Long.valueOf(val);
+            }
+        }
+        return mark;
+    }
     /**
      * 获取jwt
-     *
      * @param username 用户名
      * @param password 密码
      * @return jwt
@@ -149,6 +167,8 @@ public class SysUserFacade extends SysUserServiceImpl {
         if (null == captchaObject || StringUtil.isBlank(captchaObject.toString()) || !captchaObject.toString().trim().equalsIgnoreCase(captcha)) {
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "验证码错误");
         }
+        //使用MD5对密码进行加密
+        String MD5Password = DigestUtils.md5DigestAsHex(password.getBytes());
         QueryWrapper<SysUser> userQueryWrapper = new QueryWrapper<>();
         userQueryWrapper.eq("username", username)
                 .eq("status", StatusEnum.Enable.getKey())
@@ -158,11 +178,11 @@ public class SysUserFacade extends SysUserServiceImpl {
             throw new CommonException(ServiceErrorCode.USER_NOT_FOUND);
         }
         PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
-        if (!passwordEncoder.matches(password, user.getPassword())) {
+        if (!passwordEncoder.matches(MD5Password, user.getPassword())) {
             throw new CommonException(ServiceErrorCode.USER_PASSWORD_ERROR);
         }
         JWT jwt = authServiceClient.getToken("Basic dWFhLXNlcnZpY2U6MTIzNDU2",
-                "password", username, password);
+                "password", username, MD5Password);
         if (null == jwt) {
             throw new CommonException(ServiceErrorCode.GET_TOKEN_FAIL);
         }
@@ -192,22 +212,22 @@ public class SysUserFacade extends SysUserServiceImpl {
         jwtStore.setRefreshToken(jwt.getRefresh_token());
         tokenFacade.createToken(jwtStore);
         /***
-         * 未加密密码复杂度判断
+         * 未经过MD5加密密码复杂度判断
          */
-        //获取用户医院id
-//        String hospitalID = SysUserUtils.getCurrentHospitalID();
-//        Long id = user.getId();
-//        QueryWrapper<SysUserHospital> UserHospitalQueryWrapper = new QueryWrapper<>();
-//        UserHospitalQueryWrapper
-//                .eq("user_id", id)
-//                .eq("is_deleted", IsDeleteEnum.N.getKey());
-//        SysUserHospital userHospital = sysUserHospitalFacade.getOne(UserHospitalQueryWrapper, false);
-//        Long hospitalId = userHospital.getHospitalId();
-//        String idStr = String.valueOf(hospitalId);
-//        Boolean passwordRegular = passwordRegular(password,idStr);
-//        if(!passwordRegular){
-//            data.setPasswordComplexity("密码复杂度过低,请及时修改密码");
-//        }
+     //   获取用户医院id
+   //     String hospitalID = SysUserUtils.getCurrentHospitalID();
+        Long id = user.getId();
+        QueryWrapper<SysUserHospital> UserHospitalQueryWrapper = new QueryWrapper<>();
+        UserHospitalQueryWrapper
+                .eq("user_id", id)
+                .eq("is_deleted", IsDeleteEnum.N.getKey());
+        SysUserHospital userHospital = sysUserHospitalFacade.getOne(UserHospitalQueryWrapper, false);
+        Long hospitalId = userHospital.getHospitalId();
+        String idStr = String.valueOf(hospitalId);
+        Boolean passwordRegular = passwordRegular(password,idStr);
+        if(!passwordRegular){
+            data.setPasswordComplexity("未修改初始密码,请及时修改密码");
+        }
         return data;
     }
 
@@ -304,17 +324,22 @@ public class SysUserFacade extends SysUserServiceImpl {
      * @return 修改密码是否成功
      */
     public Boolean modifyPassword(String password, String modifyPassword) {
+        //使用MD5对原密码和新密码进行加密
+        String MD5Password = DigestUtils.md5DigestAsHex(password.getBytes());
+        String MD5ModifyPassword = DigestUtils.md5DigestAsHex(modifyPassword.getBytes());
         if (StringUtil.isBlank(password)) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
-                    "请输入密码");
+                    "请输入密码");
         }
         if (StringUtil.isBlank(modifyPassword)) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
                     "请输入新密码");
         }
-        if (password.equals(modifyPassword)) {
-            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
-                    "原密码和新密码不能相同");
+        //对传入的密码进行格式验证
+        String hospitalID = SysUserUtils.getCurrentHospitalID();
+        Boolean regularBoolean = passwordRegular(modifyPassword,hospitalID);
+        if(!regularBoolean){
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "请输入正确格式的新密码");
         }
         String userId = SysUserUtils.getCurrentPrincipleID();
         SysUser user = this.getOne(new QueryWrapper<SysUser>()
@@ -326,15 +351,14 @@ public class SysUserFacade extends SysUserServiceImpl {
         }
         PasswordEncoder passwordEncoder
                 = PasswordEncoderFactories.createDelegatingPasswordEncoder();
-        if (!passwordEncoder.matches(password, user.getPassword())) {
+        if (!passwordEncoder.matches(MD5Password, user.getPassword())) {
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "原密码错误");
         }
-//        String hospitalID = SysUserUtils.getCurrentHospitalID();
-//        Boolean regularBoolean = passwordRegular(modifyPassword,hospitalID);
-//        if(!regularBoolean){
-//            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "请输入正确格式的新密码");
-//        }
-        String entryPassword = passwordEncoder.encode(modifyPassword);
+        if (password.equals(modifyPassword)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR,
+                    "原密码和新密码不能相同");
+        }
+        String entryPassword = passwordEncoder.encode(MD5ModifyPassword);
         user.setPassword(entryPassword);
         user.setGmtModified(DateUtil.now());
         user.setModifier(userId);
@@ -348,14 +372,15 @@ public class SysUserFacade extends SysUserServiceImpl {
      * @return
      */
     public Boolean passwordRegular(String password,String hospitalId){
-        //获取字点表中存储的正则表达式   "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,}"
         boolean check=true;
         Map<String, Map<String, String>> dictionaryWithKey = sysDictionaryFacade.getDictionaryWithKey();
         if(dictionaryWithKey!=null){
             Map<String, String> stringStringMap = dictionaryWithKey.get("30");
             if(stringStringMap!=null) {
                 String regular = stringStringMap.get(hospitalId);
-                check = password.matches(regular);
+                if(StringUtil.isNotEmpty(regular)) {
+                    check = password.matches(regular);
+                }
             }
         }
         return check;

+ 9 - 2
src/main/java/com/diagbot/task/MedIndexTask.java

@@ -53,8 +53,15 @@ public class MedIndexTask implements SchedulingConfigurer{
                         && task001.getIsUsed().equals(1)) {
                     log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
                     IndexTimeVO IndexTimeVO = new IndexTimeVO();
-                    IndexTimeVO.setHospitalId(task001.getParam());
-                    consoleFacade.saveMedicaIndicator(IndexTimeVO);
+                    String param = task001.getParam();
+                    String[] split = {param};
+                    if(param.contains(",")){
+                        split = param.split(",");
+                    }
+                    for (String str : split) {
+                        IndexTimeVO.setHospitalId(str);
+                        consoleFacade.saveMedicaIndicator(IndexTimeVO);
+                    }
                 }
             }
         }, new Trigger() {

+ 1 - 1
src/main/java/com/diagbot/vo/AnalyzeVO.java

@@ -29,6 +29,6 @@ public class AnalyzeVO {
     @ApiModelProperty(hidden = true)
     private Integer delStatus;
     //已核查不能再次评分校验
-    @ApiModelProperty(hidden = true)
+    @ApiModelProperty("已核查不能再次评分标志位,false表示核查与评分无关已核查也可以评分")
     private Boolean checkFlag = true;
 }

+ 3 - 3
src/main/java/com/diagbot/vo/CheckJobPageVO.java

@@ -44,11 +44,11 @@ public class CheckJobPageVO extends Page implements Serializable {
     private String doctorName;
     //科室id集合
     @ApiModelProperty("科室id集合")
-    private List<String> deptList;
+    private List<String> depts;
     @ApiModelProperty("病区集合")
-    private List<String> wardList;
+    private List<String> wards;
     @ApiModelProperty("医疗组集合")
-    private List<String> medoupList;
+    private List<String> medoups;
     //筛选分值集合
     @ApiModelProperty("筛选分值集合")
     private List<String> values;

+ 3 - 3
src/main/java/com/diagbot/vo/CheckWorkPageVO.java

@@ -61,17 +61,17 @@ public class CheckWorkPageVO extends Page implements Serializable {
      * 病区编号集合
      */
     @ApiModelProperty("病区编号集合")
-    private List<String> region;
+    private List<String> wards;
     /**
      * 科室编号集合
      */
     @ApiModelProperty("科室编号集合")
-    private List<String> department;
+    private List<String> depts;
     /**
      * 医疗组编号集合
      */
     @ApiModelProperty("医疗组编号集合")
-    private List<String> medoup;
+    private List<String> medoups;
     /**
      * 病人住院序号集合
      */

+ 6 - 7
src/main/java/com/diagbot/vo/CheckedRecordListVO.java

@@ -36,8 +36,8 @@ public class CheckedRecordListVO extends Page implements Serializable {
     /**
      * 科室
      */
-    @ApiModelProperty("科室")
-    private String behDeptId;
+    @ApiModelProperty("科室id集合")
+    private List<String> depts;
 
     /**
      * 病人姓名
@@ -89,11 +89,10 @@ public class CheckedRecordListVO extends Page implements Serializable {
     @ApiModelProperty(hidden = true)
     private String currentDeptIds;
 
-    @ApiModelProperty("病区编号")
-    private String regionCode;
-
-    @ApiModelProperty("医疗组编号")
-    private String medoupCode;
+    @ApiModelProperty("病区集合")
+    private List<String> wards;
+    @ApiModelProperty("医疗组集合")
+    private List<String> medoups;
     /**
      * 当前用户下级普通质控员Id集合
      */

+ 18 - 0
src/main/java/com/diagbot/vo/DataEditVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @author: wangsy
+ * @time: 2021/8/4 9:53
+ */
+@Data
+public class DataEditVO {
+    // 医院ID
+    private Long hospitalId;
+    // id
+    private String recId;
+    // json字符串
+    private String wholeData;
+}

+ 2 - 0
src/main/java/com/diagbot/vo/ReBeHosPageVO.java

@@ -37,4 +37,6 @@ public class ReBeHosPageVO extends Page {
      * 是否归档(0:未归档,1:已归档)
      */
     private String isPlacefile = "1";
+
+    private int flag = 0;//1-导出操作;
 }

+ 54 - 0
src/main/java/com/diagbot/web/DataEditController.java

@@ -0,0 +1,54 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.StrAdmissionNoteDTO;
+import com.diagbot.facade.DataEditFacade;
+import com.diagbot.vo.DataEditVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 数据导入 前端控制器
+ * </p>
+ *
+ * @author wangsy
+ * @since 2020-04-27
+ */
+@RestController
+@RequestMapping("/qc/dataEdit")
+@SuppressWarnings("unchecked")
+@Api(value = "数据编辑API", tags = {"数据编辑API"})
+public class DataEditController {
+
+    @Autowired
+    DataEditFacade dateEditFacade;
+
+    @ApiOperation(value = "获取入院记录结构化json数据")
+    @PostMapping("/getDataEdit")
+    @SysLogger("getDataEdit")
+    public RespDTO<StrAdmissionNoteDTO>getDataEdit() {
+        return RespDTO.onSuc(dateEditFacade.dataSearch());
+    }
+
+    @ApiOperation(value = "更新数据", notes = "recId: id\n" +
+            "wholeData: json字符串")
+    @PostMapping("/saveDataEdit")
+    @SysLogger("saveDataEdit")
+    @Transactional
+    public RespDTO<Boolean> saveDataEdit(@RequestBody @Valid DataEditVO dataEditVO) {
+        Boolean data = dateEditFacade.saveDataEditFacade(dataEditVO);
+        return RespDTO.onSuc(data);
+    }
+
+
+}

+ 3 - 3
src/main/java/com/diagbot/web/MedCheckWorkController.java

@@ -54,9 +54,9 @@ public class MedCheckWorkController {
                     "jobType:核查任务类型(0-科室任务 1-质控科 2-院级) <br>" +
                     "hospitalId: 医院ID<br>" +
                     "behospitalCode:病人住院序号<br>" +
-                    "region:病区<br>" +
-                    "departments:科室<br>" +
-                    "medoup:医疗组<br>" +
+                    "ward:病区<br>" +
+                    "depts:科室<br>" +
+                    "medoups:医疗组<br>" +
                     "level:病历等级<br>" +
                     "name:病人姓名<br>" +
                     "doctorName:医生姓名<br>" +

+ 8 - 1
src/main/java/com/diagbot/web/SysUserController.java

@@ -66,7 +66,7 @@ public class SysUserController {
 
     @ApiOperation(value = "登录获取jwt[by:gaodm]",
             notes = "username:用户名,必填<br>" +
-                    "password:密码, 必填, 默认密码:dc483e80a7a0bd9ef71d8cf973673924<br> ")
+                    "password:密码, 必填, 默认密码:a123456<br> ")
     @PostMapping("/getJwt")
     @SysLogger("getJwt")
     public RespDTO<JwtDTO> getJwt(HttpServletRequest request,@RequestBody UserLoginVO userLoginVO) {
@@ -81,6 +81,13 @@ public class SysUserController {
            userFacade.getCaptcha(request, response);
     }
 
+    @ApiOperation(value = "获取标识--选择登录页面[by:cy]")
+    @PostMapping("/getHospitalMark")
+    @SysLogger("getHospitalMark")
+    public RespDTO<Long> getHospitalMark() {
+        Long mark = userFacade.getHospitalMark();
+        return RespDTO.onSuc(mark);
+    }
     @ApiOperation(value = "登录获取jwt[by:gaodm]",
             notes = "username:用户名,必填<br>")
     @PostMapping("/getJwtNoPass")

+ 4 - 7
src/main/resources/application-test.yml

@@ -1,5 +1,5 @@
 server:
-  port: 5858
+  port: 5859
   max-http-header-size: 10MB
 
 hystrix:
@@ -109,12 +109,9 @@ spring:
   #redis
   redis:
     database:
-#      cache: 8 # cache索引
-#      token: 8 # Token索引
-#    host: 192.168.2.241  #Redis服务器地址
-      cache: 3 # cache索引
-      token: 3 # Token索引
-    host: 192.168.2.236  #Redis服务器地址
+      cache: 2 # cache索引
+      token: 2 # Token索引
+    host: 192.168.2.241  #Redis服务器地址
     port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
     password: lantone # Redis服务器连接密码(默认为空)
     lettuce:

+ 1 - 1
src/main/resources/logback-spring.xml

@@ -3,7 +3,7 @@
     <!-- 项目名称 -->
     <property name="APPDIR" value="mrqc-sys"/>
     <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
-    <property name="LOG_PATH" value="../logs"/>
+    <property name="LOG_PATH" value="../logs/qy"/>
 
     <!-- 彩色日志 -->
     <!-- 彩色日志依赖的渲染类 -->

ファイルの差分が大きいため隠しています
+ 307 - 192
src/main/resources/mapper/BehospitalInfoMapper.xml


+ 26 - 19
src/main/resources/mapper/MedCheckInfoMapper.xml

@@ -208,21 +208,21 @@
                 <if test="name !=null and name != ''">
                     and a.`name` LIKE CONCAT('%',#{name},'%')
                 </if>
-                <if test="deptList !=null and deptList.size()!=0 ">
+                <if test="depts !=null and depts.size()!=0 ">
                     and a.beh_dept_id in
-                    <foreach collection="deptList" item="item" open="(" close=")" separator=",">
+                    <foreach collection="depts" item="item" open="(" close=")" separator=",">
                         #{item}
                     </foreach>
                 </if>
-                <if test="wardList !=null and wardList.size()!=0 ">
+                <if test="wards !=null and wards.size()!=0 ">
                     AND a.ward_code in
-                    <foreach collection="wardList" item="item" open="(" close=")" separator=",">
+                    <foreach collection="wards" item="item" open="(" close=")" separator=",">
                         #{item}
                     </foreach>
                 </if>
-                <if test="medoupList !=null and medoupList.size()!=0 ">
+                <if test="medoups !=null and medoups.size()!=0 ">
                     AND mu.group_id in
-                    <foreach collection="medoupList" item="item" open="(" close=")" separator=",">
+                    <foreach collection="medoups" item="item" open="(" close=")" separator=",">
                         #{item}
                     </foreach>
                 </if>
@@ -395,9 +395,9 @@
         <if test="behospitalCode != null and behospitalCode != ''">
             AND mbi.behospital_code like CONCAT('%',#{behospitalCode},'%')
         </if>
-        <if test="department !=null and department.size > 0">
+        <if test="depts !=null and depts.size > 0">
             and mbi.beh_dept_id in
-            <foreach collection="department" item="item" open="(" close=")" separator=",">
+            <foreach collection="depts" item="item" open="(" close=")" separator=",">
                 #{item}
             </foreach>
         </if>
@@ -431,9 +431,9 @@
                 #{item}
             </foreach>
         </if>
-        <if test="region !=null and region.size > 0">
+        <if test="wards !=null and wards.size > 0">
             AND mbi.ward_code IN
-            <foreach collection="region" item="item" open="(" close=")" separator=",">
+            <foreach collection="wards" item="item" open="(" close=")" separator=",">
                 #{item}
             </foreach>
         </if>
@@ -494,18 +494,25 @@
         <if test="status!=null">
             and a.`status`=#{status}
         </if>
-        <if test="behDeptId!=null and behDeptId!=''">
-            and b.beh_dept_id=#{behDeptId}
-        </if>
-        <if test="regionCode!=null and regionCode!=''">
-            and b.ward_code = #{regionCode}
+        <if test="depts !=null and depts.size()!=0 ">
+            and b.beh_dept_id in
+            <foreach collection="depts" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
         </if>
-        <if test="regionCode!=null and regionCode!=''">
-            and b.ward_code = #{regionCode}
+        <if test="wards !=null and wards.size()!=0 ">
+            AND b.ward_code in
+            <foreach collection="wards" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
         </if>
-        <if test="medoupCode!=null and medoupCode!=''">
-            and medoup.`code` = #{medoupCode}
+        <if test="medoups !=null and medoups.size()!=0 ">
+            AND  medoup.`code` in
+            <foreach collection="medoups" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
         </if>
+
         <if test="name!=null and name!=''">
             and b.`name` like concat('%',#{name},'%')
         </if>

+ 6 - 4
src/main/resources/mapper/MedIndexResultMapper.xml

@@ -48,10 +48,12 @@
             COALESCE (sum(a.antibiosis_result), 0) AS 'antibiosisFeeNum',
             COALESCE (sum(a.tumor_chemistry_result),0) AS 'chemotherapyMalignantTumorsNum',
             COALESCE (sum(a.tumor_radiation_result),0) AS 'tumor_radiation_result',
-            COALESCE (sum(a.implants_result), 0) AS 'implants_result',
-            COALESCE (sum(a.blood_result), 0) AS 'blood_result',
-            COALESCE (sum(a.rescue_result), 0) AS 'rescue_result',
-            COALESCE (sum(a.sec_file_result), 0) AS 'sec_file_result'
+            COALESCE (sum(a.implants_result), 0) AS 'implantsResult',
+            COALESCE (sum(a.blood_result), 0) AS 'bloodResult',
+            COALESCE (sum(a.rescue_result), 0) AS 'rescueResult',
+            COALESCE (sum(a.sec_file_result), 0) AS 'secFileResult',
+            COALESCE (sum(a.file_complete_result), 0) AS 'fileCompleteResult',
+            COALESCE (sum(a.tumor_radiation_result), 0) AS 'tumorRadiationResult'
 
         FROM
             med_index_result a

+ 0 - 1
src/main/resources/mapper/MedicalRecordMapper.xml

@@ -46,7 +46,6 @@
         and t1.rec_id = t3.rec_id
         and t1.hospital_id = #{hospitalId}
         and t1.behospital_code = #{behospitalCode}
-        and t3.xml_text != ''
     </select>
 
     <select id="getRecordCount"  resultType="java.lang.Integer">