Selaa lähdekoodia

Merge branch 'shaoyf/dev' into shaoyf/master

# Conflicts:
#	dbanaly/src/main/resources/application-dev.yml
#	kernel/src/main/resources/bootstrap.yml
rengb 5 vuotta sitten
vanhempi
commit
52e6c2cbbc
19 muutettua tiedostoa jossa 435 lisäystä ja 107 poistoa
  1. 49 0
      dbanaly/src/main/resources/application-debug.yml
  2. 49 0
      dbanaly/src/main/resources/application-dev.yml
  3. 49 0
      dbanaly/src/main/resources/application-local.yml
  4. 10 6
      dbanaly/src/main/resources/application-db.yml
  5. 49 0
      dbanaly/src/main/resources/application-test.yml
  6. 24 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0001.java
  7. 38 38
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0121.java
  8. 1 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0296.java
  9. 1 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0173.java
  10. 31 30
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0209.java
  11. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02992.java
  12. 40 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0144.java
  13. 36 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03023.java
  14. 36 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03024.java
  15. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java
  16. 7 11
      kernel/src/main/resources/application.yml
  17. 1 0
      public/src/main/java/com/lantone/qc/pub/Content.java
  18. 2 1
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDifficultCaseDiscussDocTrans.java
  19. 8 8
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfFirstCourseRecordDocTrans.java

+ 49 - 0
dbanaly/src/main/resources/application-debug.yml

@@ -0,0 +1,49 @@
+spring:
+  datasource:
+    name: druidDataSource
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      lantone:
+        driver-class-name: com.mysql.jdbc.Driver
+        url: jdbc:mysql://192.168.2.236:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
+        username: root
+        password: lantone
+        initial-size: 8
+        min-idle: 1
+        max-active: 20
+        max-wait: 60000
+        time-between-eviction-runsMillis: 60000
+        min-evictable-idle-timeMillis: 300000
+        validation-query: select 'x' FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        pool-prepared-statements: true
+        max-open-prepared-statements: 20
+        max-pool-prepared-statement-per-connection-size: 20
+        filters: stat
+        connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+        use-global-data-source-stat: true
+  redis:
+    database: 10
+    host: 192.168.2.236
+    port: 6379
+    password: lantone
+    timeout: 2000
+    lettuce:
+      pool:
+        max-active: 8
+        min-idle: 0
+        max-wait: -1ms
+        max-idle: 8
+
+xml-is-encryped: true
+
+CRF:
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
+
+Similarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
+
+ChiefPresentSimilarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 49 - 0
dbanaly/src/main/resources/application-dev.yml

@@ -0,0 +1,49 @@
+spring:
+  datasource:
+    name: druidDataSource
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      lantone:
+        driver-class-name: com.mysql.jdbc.Driver
+        url: jdbc:mysql://192.168.2.121:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
+        username: root
+        password: QuGDHNG35r
+        initial-size: 8
+        min-idle: 1
+        max-active: 20
+        max-wait: 60000
+        time-between-eviction-runsMillis: 60000
+        min-evictable-idle-timeMillis: 300000
+        validation-query: select 'x' FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        pool-prepared-statements: true
+        max-open-prepared-statements: 20
+        max-pool-prepared-statement-per-connection-size: 20
+        filters: stat
+        connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+        use-global-data-source-stat: true
+  redis:
+    database: 10
+    host: 192.168.2.121
+    port: 6379
+    password: lantone
+    timeout: 2000
+    lettuce:
+      pool:
+        max-active: 8
+        min-idle: 0
+        max-wait: -1ms
+        max-idle: 8
+
+xml-is-encryped: true
+
+CRF:
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
+
+Similarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
+
+ChiefPresentSimilarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 49 - 0
dbanaly/src/main/resources/application-local.yml

@@ -0,0 +1,49 @@
+spring:
+  datasource:
+    name: druidDataSource
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      lantone:
+        driver-class-name: com.mysql.jdbc.Driver
+        url: jdbc:mysql://192.168.2.121:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
+        username: root
+        password: QuGDHNG35r
+        initial-size: 8
+        min-idle: 1
+        max-active: 20
+        max-wait: 60000
+        time-between-eviction-runsMillis: 60000
+        min-evictable-idle-timeMillis: 300000
+        validation-query: select 'x' FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        pool-prepared-statements: true
+        max-open-prepared-statements: 20
+        max-pool-prepared-statement-per-connection-size: 20
+        filters: stat
+        connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+        use-global-data-source-stat: true
+  redis:
+    database: 10
+    host: 192.168.2.121
+    port: 6379
+    password: lantone
+    timeout: 2000
+    lettuce:
+      pool:
+        max-active: 8
+        min-idle: 0
+        max-wait: -1ms
+        max-idle: 8
+
+xml-is-encryped: true
+
+CRF:
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
+
+Similarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
+
+ChiefPresentSimilarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 10 - 6
dbanaly/src/main/resources/application-db.yml

@@ -5,7 +5,7 @@ spring:
     druid:
       lantone:
         driver-class-name: com.mysql.jdbc.Driver
-        url: jdbc:mysql://192.168.2.122:3306/qc?useUnicode=true&characterEncoding=utf8
+        url: jdbc:mysql://192.168.2.122:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
         username: root
         password: lantone
         initial-size: 8
@@ -37,9 +37,13 @@ spring:
         max-wait: -1ms
         max-idle: 8
 
-mybatis-plus:
-  type-aliases-package: com.lantone.qc.dbanaly.lt.entity
-  configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+xml-is-encryped: true
 
-xml-is-encryped: true
+CRF:
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
+
+Similarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
+
+ChiefPresentSimilarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 49 - 0
dbanaly/src/main/resources/application-test.yml

@@ -0,0 +1,49 @@
+spring:
+  datasource:
+    name: druidDataSource
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      lantone:
+        driver-class-name: com.mysql.jdbc.Driver
+        url: jdbc:mysql://192.168.2.241:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
+        username: root
+        password: lantone
+        initial-size: 8
+        min-idle: 1
+        max-active: 20
+        max-wait: 60000
+        time-between-eviction-runsMillis: 60000
+        min-evictable-idle-timeMillis: 300000
+        validation-query: select 'x' FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        pool-prepared-statements: true
+        max-open-prepared-statements: 20
+        max-pool-prepared-statement-per-connection-size: 20
+        filters: stat
+        connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+        use-global-data-source-stat: true
+  redis:
+    database: 10
+    host: 192.168.2.241
+    port: 6379
+    password: lantone
+    timeout: 2000
+    lettuce:
+      pool:
+        max-active: 8
+        min-idle: 0
+        max-wait: -1ms
+        max-idle: 8
+
+xml-is-encryped: true
+
+CRF:
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
+
+Similarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
+
+ChiefPresentSimilarity:
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity

+ 24 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0001.java

@@ -16,7 +16,7 @@ import java.util.List;
 
 /**
  * @ClassName : BEH0001
- * @Description : 症状缺少时间描述
+ * @Description : 症状缺少时间描述(只要有时间就可以)
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28
  */
@@ -37,7 +37,22 @@ public class BEH0001 extends QCCatalogue {
             status.set("0");
             return;
         } else {
-            List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getChiefLabel().getClinicals();
+            List<PD> pds = chiefLabel.getPds();
+            if (pds != null && pds.size() > 0) {
+                for (PD pd : pds) {
+                    String pdName = pd.getName();
+                    if (StringUtil.isNotBlank(pdName)) {
+                        if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
+                                || pdName.contains("时") || pdName.contains("秒") || pdName.contains("半年")
+                                || pdName.contains("日") || pdName.contains("今") || pdName.contains("余年")
+                                || pdName.contains("年") || pdName.contains("分") || isDate(pdName)) {
+                            status.set("0");
+                            break;
+                        }
+                    }
+                }
+            }
+            /*List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getChiefLabel().getClinicals();
             if (clinicals.size() > 0) {
                 for (Clinical clinical : clinicals) {
                     String clinicalName = clinical.getName();
@@ -50,10 +65,14 @@ public class BEH0001 extends QCCatalogue {
                         }
                     }
                 }
-            }
+            }*/
         }
-        if (StringUtils.isNotEmpty(info.get())) {
+        /*if (StringUtils.isNotEmpty(info.get())) {
             status.set("-1");
-        }
+        }*/
+    }
+    private boolean isDate(String pdName) {
+        String regex = "[0-9]{4}.?[0-9]{2}.?[0-9]{2}";
+        return pdName.matches(regex);
     }
 }

+ 38 - 38
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0121.java

@@ -1,39 +1,39 @@
-package com.lantone.qc.kernel.catalogue.difficultcasediscuss;
-
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.pub.model.InputInfo;
-import com.lantone.qc.pub.model.OutputInfo;
-import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
-import com.lantone.qc.pub.util.ListUtil;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @ClassName : DIF0121
- * @Description : 	 疑难病例讨论记录无主持人小结意见
- * @Author : 楼辉荣
- * @Date: 2020-03-06 17:28
- */
-@Component
-public class DIF0121 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        List<DifficultCaseDiscussDoc> difficultCaseDiscussDocs = inputInfo.getDifficultCaseDiscussDocs();
-        if(ListUtil.isEmpty(difficultCaseDiscussDocs)){
-            return;
-        }
-        if(difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size()>0){
-            for (DifficultCaseDiscussDoc dcdd:difficultCaseDiscussDocs) {
-                Map<String, String> dcddStructureMap = dcdd.getStructureMap();
-                String diisDate = dcddStructureMap.get("结 论");
-                if(CatalogueUtil.isEmpty(diisDate)){
-                    status.set("-1");
-                    break;
-                }
-            }
-        }
-    }
+package com.lantone.qc.kernel.catalogue.difficultcasediscuss;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DIF0121
+ * @Description : 	 疑难病例讨论记录无主持人小结意见
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class DIF0121 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<DifficultCaseDiscussDoc> difficultCaseDiscussDocs = inputInfo.getDifficultCaseDiscussDocs();
+        if(ListUtil.isEmpty(difficultCaseDiscussDocs)){
+            return;
+        }
+        if(difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size()>0){
+            for (DifficultCaseDiscussDoc dcdd:difficultCaseDiscussDocs) {
+                Map<String, String> dcddStructureMap = dcdd.getStructureMap();
+                String diisDate = dcddStructureMap.get("结论");
+                if(CatalogueUtil.isEmpty(diisDate)){
+                    status.set("-1");
+                    break;
+                }
+            }
+        }
+    }
 }

+ 1 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0296.java

@@ -189,6 +189,7 @@ public class DUT0296 extends QCCatalogue {
         try {
             Date dateIn = StringUtil.parseDateTime(beDate);
             Date dateOut = StringUtil.parseDateTime(leaveDate);
+            if (dateIn == null || dateOut == null) return 0;
             Calendar from = Calendar.getInstance();
             from.setTime(dateIn);
             Calendar to = Calendar.getInstance();

+ 1 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0173.java

@@ -15,6 +15,7 @@ import java.util.stream.Collectors;
 /**
  * @ClassName : FIRP0173
  * @Description :门(急)诊诊断与现病史里的内容不一致
+ * 逻辑:门(急)诊诊断的第一个诊断要在现病史中“拟”、“以”后面的诊断中出现
  * @Author : 胡敬
  * @Date: 2020-03-18 16:30
  */

+ 31 - 30
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0209.java

@@ -1,31 +1,32 @@
-package com.lantone.qc.kernel.catalogue.firstpagerecord;
-
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.pub.Content;
-import com.lantone.qc.pub.model.InputInfo;
-import com.lantone.qc.pub.model.OutputInfo;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @ClassName : FIRP0209
- * @Description : 工作单位及地址没有填写
- * @Author : 楼辉荣
- * @Date: 2020-03-06 17:28ss
- */
-@Component
-public class FIRP0209 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
-            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String dischargeTime = firstpageStructureMap.get(Content.work_unit);
-            if(CatalogueUtil.isEmpty(dischargeTime)){
-                status.set("-1");
-            }
-
-        }
-    }
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0209
+ * @Description : 工作单位及地址没有填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28ss
+ */
+@Component
+public class FIRP0209 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String dischargeTime = firstpageStructureMap.get(Content.work_unit);
+            if(StringUtils.isBlank(dischargeTime)){
+                status.set("-1");
+            }
+
+        }
+    }
 }

+ 3 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02992.java

@@ -7,10 +7,12 @@ import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @ClassName : FIRP02992
@@ -49,6 +51,7 @@ public class FIRP02992 extends QCCatalogue {
             }
             String regx = ";|;|,|,|、| ";
             List<String> fpList = Lists.newArrayList(fpAllergyDrug.split(regx));
+            fpList = fpList.stream().filter(x -> StringUtils.isNotBlank(x) && !x.trim().equals("其它")).collect(Collectors.toList());
             // 全部包含
             for (String s : fpList) {
                 if (!beDrugAllergy.contains(s)) {

+ 40 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0144.java

@@ -10,10 +10,12 @@ import com.lantone.qc.pub.model.doc.DeathRecordDoc;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : THR0144
@@ -42,26 +44,54 @@ public class THR0144 extends QCCatalogue {
             return;
         }
         int j = 0; //最后两次查房记录
-        for (int i = allDoctorWradDocs.size() - 1; i > 0 && j < 2; i--) {
+        for (int i = allDoctorWradDocs.size() - 1; i >= 0 && j < 2; i--) {
             j++;
             ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(i);
             Map<String, String> structureMap = lastWardDoc.getStructureMap();
             String conditionRecord = structureMap.get("病情记录");
             String treatmentPlan = structureMap.get("治疗计划和措施");
             String title = structureMap.get("查房标题");
-            if (StringUtil.isBlank(title) || title.contains("病理报告")) {
+            String ob = structureMap.get("记录医师个人职称");
+            if ( StringUtils.isNotBlank(title) && title.contains("病理报告")) {
                 continue;
             }
             conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
             treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
             //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
-            if ((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || conditionRecord.contains("转上级医院"))
+            if (StringUtils.isNotBlank(title) && (conditionRecord.contains("出院") || treatmentPlan.contains("出院") || leave_method(treatmentPlan))
                     && (CatalogueUtil.subTitle(title).contains(Content.attend)
                     || CatalogueUtil.subTitle(title).contains(Content.director)
                     || CatalogueUtil.subTitle(title).contains("主刀"))) {
                 status.set("0");
                 return;
             }
+            //treatmentPlan里包含出院或转院,记录医师职称为A/F
+            if(StringUtils.isNotBlank(ob) && (conditionRecord.contains("出院") || treatmentPlan.contains("出院") || leave_method(treatmentPlan)
+                    || leave_method(conditionRecord))
+            && (ob.equals("A") || ob.equals("F"))){
+                status.set("0");
+                return;
+            }
+            //treatmentPlan前20个字包含A或F,并且包含出院或转院
+            boolean treat_boolean = false;
+            if(treatmentPlan.length()>10){
+                String sub_treat = treatmentPlan.substring(0, 10);
+                if(sub_treat.contains("A") || sub_treat.contains("F")){
+                    treat_boolean = true;
+                }
+            }
+            boolean record_boolean = false;
+            if(conditionRecord.length()>10){
+                String sub_treat = conditionRecord.substring(0, 10);
+                if(sub_treat.contains("A") || sub_treat.contains("F")){
+                    record_boolean = true;
+                }
+            }
+            if((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || leave_method(treatmentPlan))
+            && (record_boolean || treat_boolean)){
+                status.set("0");
+                return;
+            }
             //普通查房 内容需要包含“上级”和“出院”
             if (StringUtil.isBlank(title)
                     || (title.contains("日常查房记录") || title.contains("普通查房记录") || title.contains("日常病程记录"))
@@ -72,4 +102,11 @@ public class THR0144 extends QCCatalogue {
             }
         }
     }
+
+    public boolean leave_method(String content){
+        String compile = "(?<=转)(.+)(?=院)";
+        Pattern p = Pattern.compile(compile);
+        boolean b = p.matcher(content).find();
+        return b;
+    }
 }

+ 36 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03023.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
@@ -8,6 +9,7 @@ import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -30,12 +32,26 @@ public class THR03023 extends QCCatalogue {
          * 1、有病重医嘱、查房记录。
          * 2、第一个病重医嘱的开始时间当天有查房记录,结束时间有查房记录。
          * 3、每2天有查房记录。
+         * 4、如果医嘱结束时间大于出院时间,那以出院时间为结束时间
+         * 5、首程也算第一次查房
          */
         status.set("0");
         if (ListUtil.isEmpty(inputInfo.getDoctorAdviceDocs()) ||
                 ListUtil.isEmpty(inputInfo.getThreeLevelWardDocs())) {
             return;
         }
+
+        String leaveDateString = "";
+        Date leaveDate = null;
+        if (inputInfo.getLeaveHospitalDoc() != null) {
+            leaveDateString = inputInfo.getLeaveHospitalDoc().getStructureMap().get("出院时间");
+        } else if (inputInfo.getDeathRecordDoc() != null) {
+            leaveDateString = inputInfo.getDeathRecordDoc().getStructureMap().get("死亡时间");
+        }
+        if (StringUtils.isNotEmpty(leaveDateString)) {
+            leaveDate = StringUtil.parseDateTime(leaveDateString);
+        }
+
         List<DoctorAdviceDoc> doctorAdviceDocList = inputInfo.getDoctorAdviceDocs();
         List<List<Date>> doctorAdviceDate = new ArrayList<>();
 
@@ -49,6 +65,10 @@ public class THR03023 extends QCCatalogue {
                 if (StringUtil.isNotBlank(startDateStr) && StringUtil.isNotBlank(endDateStr)) {
                     Date startDate = StringUtil.parseDateTime(startDateStr);
                     Date endDate = StringUtil.parseDateTime(endDateStr);
+                    //如果医嘱结束时间大于出院时间,那以出院时间为结束时间
+                    if (leaveDate != null && leaveDate.before(endDate)) {
+                        endDate = leaveDate;
+                    }
                     if (startDate.before(endDate)) {
                         List<Date> listDate = new ArrayList<>();
                         listDate.add(DateUtil.dateZeroClear(startDate));
@@ -75,6 +95,15 @@ public class THR03023 extends QCCatalogue {
             }
         }
 
+        //首程也算第一次查房
+        if (inputInfo.getFirstCourseRecordDoc() != null) {
+            String recordTime = inputInfo.getFirstCourseRecordDoc().getStructureMap().get("病历日期");
+            if (StringUtils.isNotEmpty(recordTime)) {
+                Date recordDate = StringUtil.parseDateTime(recordTime);
+                dateRecordDay.add(DateUtil.dateZeroClear(recordDate));
+            }
+        }
+
         if (ListUtil.isEmpty(dateRecordDay)) {
             return ;
         }
@@ -95,17 +124,20 @@ public class THR03023 extends QCCatalogue {
 
         // 医嘱开始时间当天有查房记录
         if (!dateRecordDay.contains(doctorDateStart)) {
+            info.set(DateUtil.formatDate(doctorDateStart));
             status.set("-1");
             return ;
         }
         // 医嘱结束时间当天有查房记录
         if (!dateRecordDay.contains(doctorDateEnd)) {
+            info.set(DateUtil.formatDate(doctorDateEnd));
             status.set("-1");
             return ;
         }
         int flag = 0;
         Date nextDate = doctorDateStart;
         int returnFlag = 0; // 防止出现死循环系统崩溃
+        String infoStr = "";
         while(returnFlag <= 1000) {
             if (!dateRecordDay.contains(nextDate)) {
                 flag++;
@@ -114,7 +146,7 @@ public class THR03023 extends QCCatalogue {
             }
             if (flag == 2) {
                 status.set("-1");
-                return ;
+                infoStr = CatalogueUtil.concatInfo(infoStr, DateUtil.formatDate(nextDate));
             }
             nextDate = DateUtil.addDate(nextDate, 1);
             if (nextDate.after(doctorDateEnd)) {
@@ -122,5 +154,8 @@ public class THR03023 extends QCCatalogue {
             }
             returnFlag++; // 防止出现死循环系统崩溃
         }
+        if (StringUtils.isNotEmpty(infoStr)) {
+            info.set(infoStr);
+        }
     }
 }

+ 36 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03024.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
@@ -8,6 +9,7 @@ import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -30,12 +32,25 @@ public class THR03024 extends QCCatalogue {
          * 1、有病危医嘱、查房记录。
          * 2、第一个危重医嘱的开始时间当天有查房记录,结束时间有查房记录。
          * 3、每天有查房记录。
+         * 4、如果医嘱结束时间大于出院时间,那以出院时间为结束时间
+         * 5、首程也算第一次查房
          */
         status.set("0");
         if (ListUtil.isEmpty(inputInfo.getDoctorAdviceDocs()) ||
                 ListUtil.isEmpty(inputInfo.getThreeLevelWardDocs())) {
             return;
         }
+        String leaveDateString = "";
+        Date leaveDate = null;
+        if (inputInfo.getLeaveHospitalDoc() != null) {
+            leaveDateString = inputInfo.getLeaveHospitalDoc().getStructureMap().get("出院时间");
+        } else if (inputInfo.getDeathRecordDoc() != null) {
+            leaveDateString = inputInfo.getDeathRecordDoc().getStructureMap().get("死亡时间");
+        }
+        if (StringUtils.isNotEmpty(leaveDateString)) {
+            leaveDate = StringUtil.parseDateTime(leaveDateString);
+        }
+
         List<DoctorAdviceDoc> doctorAdviceDocList = inputInfo.getDoctorAdviceDocs();
         List<List<Date>> doctorAdviceDate = new ArrayList<>();
 
@@ -49,6 +64,10 @@ public class THR03024 extends QCCatalogue {
                 if (StringUtil.isNotBlank(startDateStr) && StringUtil.isNotBlank(endDateStr)) {
                     Date startDate = StringUtil.parseDateTime(startDateStr);
                     Date endDate = StringUtil.parseDateTime(endDateStr);
+                    //如果医嘱结束时间大于出院时间,那以出院时间为结束时间
+                    if (leaveDate != null && leaveDate.before(endDate)) {
+                        endDate = leaveDate;
+                    }
                     if (startDate.before(endDate)) {
                         List<Date> listDate = new ArrayList<>();
                         listDate.add(DateUtil.dateZeroClear(startDate));
@@ -69,8 +88,16 @@ public class THR03024 extends QCCatalogue {
         for (ThreeLevelWardDoc threeLevelWardDoc : allDoctorWradDocs) {
             Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
             String recordTime = rescueStructureMap.get("查房日期");
-            Date recordDate = StringUtil.parseDateTime(recordTime);
-            if (recordDate != null) {
+            if (StringUtils.isNotEmpty(recordTime)) {
+                Date recordDate = StringUtil.parseDateTime(recordTime);
+                dateRecordDay.add(DateUtil.dateZeroClear(recordDate));
+            }
+        }
+        //首程也算第一次查房
+        if (inputInfo.getFirstCourseRecordDoc() != null) {
+            String recordTime = inputInfo.getFirstCourseRecordDoc().getStructureMap().get("病历日期");
+            if (StringUtils.isNotEmpty(recordTime)) {
+                Date recordDate = StringUtil.parseDateTime(recordTime);
                 dateRecordDay.add(DateUtil.dateZeroClear(recordDate));
             }
         }
@@ -95,20 +122,23 @@ public class THR03024 extends QCCatalogue {
 
         // 医嘱开始时间当天有查房记录
         if (!dateRecordDay.contains(doctorDateStart)) {
+            info.set(DateUtil.formatDate(doctorDateStart));
             status.set("-1");
             return ;
         }
         // 医嘱结束时间当天有查房记录
         if (!dateRecordDay.contains(doctorDateEnd)) {
+            info.set(DateUtil.formatDate(doctorDateEnd));
             status.set("-1");
             return ;
         }
         Date nextDate = doctorDateStart;
         int returnFlag = 0; // 防止出现死循环系统崩溃
+        String infoStr = "";
         while(returnFlag <= 1000) {
             if (!dateRecordDay.contains(nextDate)) {
                 status.set("-1");
-                return ;
+                infoStr = CatalogueUtil.concatInfo(infoStr, DateUtil.formatDate(nextDate));
             }
             nextDate = DateUtil.addDate(nextDate, 1);
             if (nextDate.after(doctorDateEnd)) {
@@ -116,5 +146,8 @@ public class THR03024 extends QCCatalogue {
             }
             returnFlag++; // 防止出现死循环系统崩溃
         }
+        if (StringUtils.isNotEmpty(infoStr)) {
+            info.set(infoStr);
+        }
     }
 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java

@@ -43,7 +43,7 @@ public class CatalogueUtil {
         if (StringUtil.isEmpty(content)) {
             return "";
         }
-        return content.replaceAll("[\r\n|/r/n|\n|/n|/t|\t]", "").trim();
+        return content.replaceAll("[\r\n|/r/n|\n|/n|/t|\t]", " ").trim();
     }
 
     public static String[] extractDigit(String value) {

+ 7 - 11
kernel/src/main/resources/application.yml

@@ -12,19 +12,15 @@ spring:
       charset: UTF-8
       enabled: true
   profiles:
-    active: db
+    active: local
 
 qc:
   hospital_id: 2
 
-CRF:
-  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
-
-Similarity:
-  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
-
-ChiefPresentSimilarity:
-  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity
-
 logging:          # 日志
-  config: classpath:logback-spring.xml
+  config: classpath:logback-spring.xml
+
+mybatis-plus:
+  type-aliases-package: com.lantone.qc.dbanaly.lt.entity
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/Content.java

@@ -293,6 +293,7 @@ public class Content {
             "yyyy/MM/ddHH:m",
             "yyyy/MM/ddH:mm",
             "yyyy/MM/ddH:m",
+            "yyyy/MM/ddHH:mm:",
             "yyyy/M/ddHH:mm",
             "yyyy/M/ddHH:m",
             "yyyy/M/ddH:mm",

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDifficultCaseDiscussDocTrans.java

@@ -47,7 +47,8 @@ public class ShaoyfDifficultCaseDiscussDocTrans extends ModelDocTrans {
             "结 论=结论",
             "讨论意见=讨论内容",
             "事件日期=讨论时间",
-            "本人姓名=姓名"
+            "本人姓名=姓名",
+            "参加人员及职称=参加讨论者"
     );
 
 }

+ 8 - 8
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfFirstCourseRecordDocTrans.java

@@ -33,14 +33,14 @@ public class ShaoyfFirstCourseRecordDocTrans extends ModelDocTrans {
         if (sourceMap.get("主诊医生") != null) {
             sourceMap.put("主诊医生", sourceMap.get("主诊医生").replace("&amp;amp;nbsp;", ""));
         }
-        PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
-        MysqlJdbc nlpJdbc = new MysqlJdbc(propertiesUtil.getProperty("mysql.redis.user"), propertiesUtil.getProperty("mysql.redis.password"), propertiesUtil.getProperty("mysql.redis.url"));
-
-        Map<String, Object> map = new HashMap<>();
-        map.put("ft", sourceMap.get("病例特点"));
-        List<Map<String, Object>> list = new ArrayList<>();
-        list.add(map);
-        nlpJdbc.insert(list, "ft_temp", new String[]{"ft"});
+//        PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
+//        MysqlJdbc nlpJdbc = new MysqlJdbc(propertiesUtil.getProperty("mysql.redis.user"), propertiesUtil.getProperty("mysql.redis.password"), propertiesUtil.getProperty("mysql.redis.url"));
+//
+//        Map<String, Object> map = new HashMap<>();
+//        map.put("ft", sourceMap.get("病例特点"));
+//        List<Map<String, Object>> list = new ArrayList<>();
+//        list.add(map);
+//        nlpJdbc.insert(list, "ft_temp", new String[]{"ft"});
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
         structureMap.put("记录时间",structureMap.get("病历日期"));
         // 病例特点=主诉+现病史-发病情况+专科检查+实验室检查+影像学检查+辅助检查结果+呼吸+脉搏+体温+血压