Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

rengb 5 gadi atpakaļ
vecāks
revīzija
ec9dc3370d
36 mainītis faili ar 446 papildinājumiem un 155 dzēšanām
  1. 11 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0004.java
  2. 15 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0015.java
  3. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0034.java
  4. 20 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0299.java
  5. 9 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0161.java
  6. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0167.java
  7. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0184.java
  8. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0220.java
  9. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0225.java
  10. 5 12
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0247.java
  11. 5 12
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0249.java
  12. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0273.java
  13. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0274.java
  14. 5 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0130.java
  15. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0131.java
  16. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0132.java
  17. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0133.java
  18. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java
  19. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0135.java
  20. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0136.java
  21. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0137.java
  22. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0138.java
  23. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java
  24. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0429.java
  25. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0430.java
  26. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0431.java
  27. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0432.java
  28. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0433.java
  29. 19 8
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/FirstCourseRecordAI.java
  30. 23 2
      kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCTestController.java
  31. 13 14
      kernel/src/test/java/com/lantone/qc/kernel/DataTest.java
  32. 20 0
      kernel/src/test/java/com/lantone/qc/kernel/Doctor.java
  33. 73 25
      kernel/src/test/java/com/lantone/qc/kernel/TaizDataImportApiTest.java
  34. 6 5
      public/src/main/java/com/lantone/qc/pub/Content.java
  35. 13 0
      trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtil.java
  36. 153 0
      trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtilTemp.java

+ 11 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0004.java

@@ -4,6 +4,7 @@ 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 org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Collection;
@@ -25,11 +26,16 @@ public class BEH0004 extends QCCatalogue {
 
         status.set("0");
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        Collection<String> values = structureMap.values();
-        for (String value:values) {
-            if(CatalogueUtil.isEmpty(value)){
-                status.set("-1");
-                break;
+        if(structureMap != null){
+            String basePassage = structureMap.get("个人基本信息");
+            if(StringUtils.isNotEmpty(basePassage)){
+                String[] baseFilds = basePassage.split(",");
+                for (String fild:baseFilds) {
+                    if(StringUtils.isBlank(structureMap.get(fild))){
+                        status.set("-1");
+                        break;
+                    }
+                }
             }
         }
 

+ 15 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0015.java

@@ -1,12 +1,16 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.KernelConstants;
+import com.lantone.qc.kernel.util.RedisUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.BodyPart;
 import com.lantone.qc.pub.model.entity.Cause;
 import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Lis;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -21,14 +25,22 @@ import java.util.List;
  */
 @Component
 public class BEH0015 extends QCCatalogue {
+    @Autowired
+    private RedisUtil redisUtil;
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<String> clinicalList = (List<String>) redisUtil.getJsonStringValue(KernelConstants.CONCEPT_CLINIC_BODYPART_PROPERTIES_LIST);
         List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
         if(clinicals.size()>0){
             Clinical clinical = clinicals.get(0);
-            BodyPart bodyPart = clinical.getBodyPart();
-            if(bodyPart == null){
-                info.set(clinical.getName());
+            if(clinicalList.contains(clinical.getName())){
+                BodyPart bodyPart = clinical.getBodyPart();
+                if(bodyPart == null){
+                    status.set("-1");
+                    info.set(clinical.getName());
+                }
             }
+
         }
     }
 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0034.java

@@ -37,7 +37,7 @@ public class BEH0034 extends QCCatalogue {
                         .map(i -> i.getName())
                         .distinct()
                         .collect(Collectors.toList()),
-                pastLabel.getText()
+                pastLabel.getText().replace("“","\"").replace("”","\"")
         );
         if (ListUtil.isNotEmpty(wtOperationNames)) {
             status.set("-1");

+ 20 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0299.java

@@ -3,18 +3,37 @@ package com.lantone.qc.kernel.catalogue.clinicalblood;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.RescueDoc;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Map;
 
 /**
  * @ClassName : CLI0001
- * @Description : 无输血/血制品病程记录
+ * @Description : 无输血/血制品病程记录     和医嘱比较
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28
  */
 @Component
 public class CLI0299 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(doctorAdviceDocs.size()>0){
+            st:
+            for (DoctorAdviceDoc doc:doctorAdviceDocs) {
+                Map<String, String> structureMap = doc.getStructureMap();
+                if(structureMap.get("医嘱项目名称").contains("输血") && structureMap.get("医嘱处方类型").contains("治疗")){
+                    if(clinicalBloodDocs == null && clinicalBloodDocs.size() ==0){
+                        status.set("-1");
+                        break st;
+                    }
+                }
+            }
+        }
     }
 }

+ 9 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0161.java

@@ -26,12 +26,18 @@ public class FIRP0161 extends QCCatalogue {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String firstAdmissionAge = firstpageStructureMap.get(Content.age);
             String admissionAge = beHospitalStructureMap.get(Content.age);
-            if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
-                admissionAge = admissionAge.replace("岁", "");
-            }
+            firstAdmissionAge = removalUnit(firstAdmissionAge);
+            admissionAge = removalUnit(admissionAge);
             if (!CatalogueUtil.compareToken(firstAdmissionAge, admissionAge)) {
                 status.set("-1");
             }
         }
     }
+
+    private String removalUnit(String admissionAge) {
+        if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
+            admissionAge = admissionAge.replace("岁", "");
+        }
+        return admissionAge;
+    }
 }

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

@@ -23,7 +23,7 @@ public class FIRP0167 extends QCCatalogue {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String name = firstpageStructureMap.get(Content.name);
             String contactName = firstpageStructureMap.get(Content.contactName);
-            if (CatalogueUtil.compareToken(name,contactName)) {
+            if (CatalogueUtil.compareToken(name, contactName)) {
                 status.set("-1");
             }
         }

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0184.java

@@ -21,7 +21,8 @@ public class FIRP0184 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String drugAllergy = firstpageStructureMap.get(Content.drugAllergy);
-            if (!CatalogueUtil.isEmpty(drugAllergy)){
+            String allergyDrug = firstpageStructureMap.get(Content.drugAllergy);
+            if (!CatalogueUtil.isEmpty(drugAllergy) && !CatalogueUtil.isEmpty(allergyDrug)) {
                 status.set("0");
             }
         }

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

@@ -24,7 +24,7 @@ public class FIRP0220 extends QCCatalogue {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String firstAdmissionDate = firstpageStructureMap.get(Content.admisTime);
             String admissionDate = beHospitalStructureMap.get(Content.admisDate);
-            if (CatalogueUtil.equalsDate(firstAdmissionDate, admissionDate, "yyyy-MM-ddH")) {
+            if (CatalogueUtil.equalsDate(firstAdmissionDate, admissionDate, "yyyy-MM-ddHH")) {
                 status.set("0");
             }
         }

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

@@ -24,7 +24,7 @@ public class FIRP0225 extends QCCatalogue {
             Map<String, String> leaveHospitalStructureMap = inputInfo.getLeaveHospitalDoc().getStructureMap();
             String firstDischargeTime = firstpageStructureMap.get(Content.dischargeTime);//病案首页出院时间
             String dischargeTime = leaveHospitalStructureMap.get(Content.dischargeTime);//出院小结出院时间
-            if (CatalogueUtil.equalsDate(firstDischargeTime, dischargeTime, "yyyy-MM-ddH")) {
+            if (CatalogueUtil.equalsDate(firstDischargeTime, dischargeTime, "yyyy-MM-ddHH")) {
                 status.set("0");
             }
         }

+ 5 - 12
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0247.java

@@ -5,6 +5,7 @@ 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;
@@ -20,21 +21,13 @@ import java.util.regex.Pattern;
 @Component
 public class FIRP0247 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 name = firstpageStructureMap.get(Content.rescue_condition);
-            if (!CatalogueUtil.isEmpty(name)){
-                Pattern compile = Pattern.compile("(?<=抢救).*(?=次)");
-                Matcher matcher = compile.matcher(name);
-                while (matcher.find()){
-                    try{
-                        status.set("0");
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
+            if(firstpageStructureMap != null){
+                if(StringUtils.isEmpty(firstpageStructureMap.get("病人抢救次数"))){
+                    status.set("-1");
                 }
-
-
             }
         }
     }

+ 5 - 12
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0249.java

@@ -5,6 +5,7 @@ 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;
@@ -20,21 +21,13 @@ import java.util.regex.Pattern;
 @Component
 public class FIRP0249 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 name = firstpageStructureMap.get(Content.rescue_condition);
-            if (!CatalogueUtil.isEmpty(name)){
-                Pattern compile = Pattern.compile("(?<=成功).*(?=次)");
-                Matcher matcher = compile.matcher(name);
-                while (matcher.find()){
-                    try{
-                        status.set("0");
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
+            if(firstpageStructureMap != null){
+                if(StringUtils.isEmpty(firstpageStructureMap.get("病人抢救成功次数"))){
+                    status.set("-1");
                 }
-
-
             }
         }
     }

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0273.java

@@ -1,7 +1,6 @@
 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;
@@ -22,8 +21,8 @@ public class FIRP0273 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String infantAgeMonths = firstpageStructureMap.get(Content.infantAgeMonths);
-            String infantAgeDays = firstpageStructureMap.get(Content.infantAgeDays);
+            String infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+            String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
             if (StringUtil.isNotBlank(infantAgeMonths) && Integer.parseInt(infantAgeMonths) > 0) {
                 status.set("-1");
             }

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0274.java

@@ -22,8 +22,8 @@ public class FIRP0274 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String age = firstpageStructureMap.get(Content.age);
-            String infantAgeMonths = firstpageStructureMap.get(Content.infantAgeMonths);
-            String infantAgeDays = firstpageStructureMap.get(Content.infantAgeDays);
+            String infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+            String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
             if (CatalogueUtil.isEmpty(age)
                     && CatalogueUtil.isEmpty(infantAgeMonths)
                     && CatalogueUtil.isEmpty(infantAgeDays)) {

+ 5 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0130.java

@@ -24,12 +24,13 @@ public class THR0130 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.indications.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.indications.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+
                 if (threeLevelWardLabel.getClinicals().size() == 0 && threeLevelWardLabel.getSigns().size() == 0) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0131.java

@@ -24,12 +24,12 @@ public class THR0131 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.indications.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.indications.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(threeLevelWardLabel.getDiffDiagText())) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0132.java

@@ -24,12 +24,12 @@ public class THR0132 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.indications.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.indications.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiags().size() == 0
                         || StringUtil.isNotBlank(threeLevelWardLabel.getDiagBasisText()) && threeLevelWardLabel.getDiagBasisText().length() < 30
                         || threeLevelWardLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(threeLevelWardLabel.getDiffDiagText())

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0133.java

@@ -24,12 +24,12 @@ public class THR0133 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.indications.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.indications.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getTreatmentPlans().size() == 0) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java

@@ -24,12 +24,12 @@ public class THR0134 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.indications.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.indications.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiags().size() == 0) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0135.java

@@ -24,12 +24,12 @@ public class THR0135 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.director.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.director.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getClinicals().size() == 0 && threeLevelWardLabel.getSigns().size() == 0) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0136.java

@@ -24,12 +24,12 @@ public class THR0136 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.director.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.director.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(threeLevelWardLabel.getDiffDiagText())) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0137.java

@@ -24,12 +24,12 @@ public class THR0137 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.director.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.director.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiags().size() == 0
                         || StringUtil.isNotBlank(threeLevelWardLabel.getDiagBasisText()) && threeLevelWardLabel.getDiagBasisText().length() < 30
                         || threeLevelWardLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(threeLevelWardLabel.getDiffDiagText())

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0138.java

@@ -24,12 +24,12 @@ public class THR0138 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.director.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.director.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getTreatmentPlans().size() == 0) {
                     status.set("-1");
                     return;

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java

@@ -24,12 +24,12 @@ public class THR0139 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || StringUtil.isBlank(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())
-                        || !Content.director.equals(threeLevelWardDoc.getThreeLevelWardLabel().getTitle())) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null
+                        || StringUtil.isBlank(threeLevelWardLabel.getTitle())
+                        || !Content.director.equals(threeLevelWardLabel.getTitle())) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiags().size() == 0) {
                     status.set("-1");
                     return;

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0429.java

@@ -27,11 +27,10 @@ public class THR0429 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || threeLevelWardDoc.getThreeLevelWardLabel().getSerious() != 2) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null || threeLevelWardLabel.getSerious() != 2) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiags().size() == 0
                         || StringUtil.isNotBlank(threeLevelWardLabel.getDiagBasisText()) && threeLevelWardLabel.getDiagBasisText().length() < 30
                         || threeLevelWardLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(threeLevelWardLabel.getDiffDiagText())

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0430.java

@@ -27,11 +27,10 @@ public class THR0430 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || threeLevelWardDoc.getThreeLevelWardLabel().getSerious() != 3) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null || threeLevelWardLabel.getSerious() != 3) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getDiags().size() == 0
                         || StringUtil.isNotBlank(threeLevelWardLabel.getDiagBasisText()) && threeLevelWardLabel.getDiagBasisText().length() < 30
                         || threeLevelWardLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(threeLevelWardLabel.getDiffDiagText())

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0431.java

@@ -26,11 +26,10 @@ public class THR0431 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || threeLevelWardDoc.getThreeLevelWardLabel().getSerious() != 1) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null || threeLevelWardLabel.getSerious() != 1) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getTreatmentPlans().size() == 0) {
                     status.set("-1");
                     return;

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0432.java

@@ -26,11 +26,10 @@ public class THR0432 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || threeLevelWardDoc.getThreeLevelWardLabel().getSerious() != 2) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null || threeLevelWardLabel.getSerious() != 2) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getTreatmentPlans().size() == 0) {
                     status.set("-1");
                     return;

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0433.java

@@ -26,11 +26,10 @@ public class THR0433 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs().size() > 0) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-                if (threeLevelWardDoc.getThreeLevelWardLabel() == null
-                        || threeLevelWardDoc.getThreeLevelWardLabel().getSerious() != 3) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
+                if (threeLevelWardLabel == null || threeLevelWardLabel.getSerious() != 3) {
                     continue;
                 }
-                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardDoc.getThreeLevelWardLabel();
                 if (threeLevelWardLabel.getTreatmentPlans().size() == 0) {
                     status.set("-1");
                     return;

+ 19 - 8
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/FirstCourseRecordAI.java

@@ -11,7 +11,8 @@ import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.model.entity.Diag;
-import com.lantone.qc.pub.model.label.*;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.model.label.TreatPlanLabel;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 
@@ -51,18 +52,28 @@ public class FirstCourseRecordAI extends ModelAI {
 
             //病历特点与现病史比较相似度
             if (inputInfo.getBeHospitalizedDoc() != null && StringUtil.isNotBlank(inputInfo.getBeHospitalizedDoc().getPresentLabel().getText())) {
-                putContent(similarContent, firstCourseRecordDoc.getCaseCharacteristicLabel().getText(),inputInfo.getBeHospitalizedDoc().getPresentLabel().getText());
+                putContent(similarContent, firstCourseRecordDoc.getCaseCharacteristicLabel().getText(), inputInfo.getBeHospitalizedDoc().getPresentLabel().getText());
             }
 
             JSONObject midData = loadAI(crfContent, crfServiceClient);//crf返回数据
-            putCaseCharacteristicCrfData(midData.getJSONObject(Content.case_feature), inputInfo);//处理病历特点
-            putInitialDiagCrfData(midData.getJSONObject(Content.initial_diag), inputInfo);//处理初步诊断
-            putDiagnosisCrfData(midData.getJSONObject(Content.diag_basis), inputInfo);//处理诊断依据
-            putDifferentialDiagCrfData(midData.getJSONObject(Content.differential_diag_basis), inputInfo);//处理鉴别诊断
-            putTreatPlanCrfData(midData.getJSONObject(Content.treat_plan), inputInfo);//处理诊疗计划
+            if (midData.containsKey(Content.case_feature)) {
+                putCaseCharacteristicCrfData(midData.getJSONObject(Content.case_feature), inputInfo);//处理病历特点
+            }
+            if (midData.containsKey(Content.initial_diag)) {
+                putInitialDiagCrfData(midData.getJSONObject(Content.initial_diag), inputInfo);//处理初步诊断
+            }
+            if (midData.containsKey(Content.diag_basis)) {
+                putDiagnosisCrfData(midData.getJSONObject(Content.diag_basis), inputInfo);//处理诊断依据
+            }
+            if (midData.containsKey(Content.differential_diag_basis)) {
+                putDifferentialDiagCrfData(midData.getJSONObject(Content.differential_diag_basis), inputInfo);//处理鉴别诊断
+            }
+            if (midData.containsKey(Content.treat_plan)) {
+                putTreatPlanCrfData(midData.getJSONObject(Content.treat_plan), inputInfo);//处理诊疗计划
+            }
 
             double likeRate = loadSimilarAI(similarContent, similarityServiceClient);
-            putCaseCharacteristicSimilarData(likeRate,inputInfo);//存放与现病史文本相似度
+            putCaseCharacteristicSimilarData(likeRate, inputInfo);//存放与现病史文本相似度
         }
     }
 

+ 23 - 2
kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCTestController.java

@@ -3,7 +3,6 @@ package com.lantone.qc.kernel.web.controller;
 import com.google.common.collect.Lists;
 import com.lantone.qc.kernel.analysis.QCAnalysis;
 import com.lantone.qc.kernel.util.CacheFileManager;
-import com.lantone.qc.kernel.util.ModelDataUtil;
 import com.lantone.qc.kernel.util.KernelConstants;
 import com.lantone.qc.pub.jdbc.MysqlJdbc;
 import com.lantone.qc.pub.model.OutputInfo;
@@ -16,7 +15,9 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -98,6 +99,26 @@ public class QCTestController {
         return response;
     }
 
+
+    @ApiOperation(value = "质控单个病历测试,无需token信息", notes = "")
+    @PostMapping("qc_test_single")
+    public Response<OutputInfo> qc_test_single(String cid, String caseNumber, String hospitalId) {
+        Response response = new Response();
+        if (StringUtils.isEmpty(hospitalId)) {
+            response.setData("未填写医院流水号(hospitalId)......");
+        }
+        if (StringUtils.isEmpty(cid)) {
+            response.setData("未填写医院缩写(cid)......");
+        }
+        //key = 患者就诊号
+        Map<String, QueryVo> queryVoMap = createQueryVo(cid, hospitalId, caseNumber);
+        //key = 患者就诊号
+        OutputInfo outputInfo = qCAnalysis.anlysis(queryVoMap.get(caseNumber));
+        response.setData(outputInfo);
+        return response.success();
+    }
+
+
     public Map<String, QueryVo> createQueryVo(String cid, String hospitalId, String caseNumber) {
         PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
         MysqlJdbc mysqlJdbc = new MysqlJdbc(propertiesUtil.getProperty("mysql.test.user"),

+ 13 - 14
kernel/src/test/java/com/lantone/qc/kernel/DataTest.java

@@ -6,10 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.lantone.qc.pub.util.PropertiesUtil;
 
 import java.sql.*;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 
 /**
  * @ClassName : DataTest
@@ -22,11 +19,11 @@ public class DataTest {
 
     }
 
-    public static Map<String, String> loadHomePage(String patientId) {
+    public static List<Map<String, String>> loadHomePage(String tableName, String patientId) {
         Connection conn = null;
         Statement stmt = null;
         ResultSet rs = null;
-        Map<String, String> js = null;
+        List<Map<String, String>> resultList = null;
         try {
             PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
             Class.forName(propertiesUtil.getProperty("oracle.test.driver"));
@@ -46,7 +43,7 @@ public class DataTest {
             stmt = conn.createStatement();
 
             DatabaseMetaData dmd = conn.getMetaData();
-            ResultSet dmdRs = dmd.getColumns(null, null, "BR_RECHOME", null);
+            ResultSet dmdRs = dmd.getColumns(null, null, tableName, null);
 
             Map<String, String> colMap = new LinkedHashMap<>();
             while(dmdRs.next()){
@@ -54,8 +51,8 @@ public class DataTest {
             }
             dmdRs.close();
 
-            rs = stmt.executeQuery("select * from br_rechome where brzyid = '" + patientId + "'");
-            js = resultSetToJson(rs, colMap);
+            rs = stmt.executeQuery("select * from " + tableName + " where brzyid = '" + patientId + "'");
+            resultList = resultSetToJson(rs, colMap);
         } catch (SQLException ex) {
             ex.printStackTrace();
         } catch (Exception e) {
@@ -78,24 +75,26 @@ public class DataTest {
                 e.printStackTrace();
             }
         }
-        return js;
+        return resultList;
     }
 
-    public static Map<String, String> resultSetToJson(ResultSet rs, Map<String, String> map) throws SQLException, JSONException {
+    public static List<Map<String, String>> resultSetToJson(ResultSet rs, Map<String, String> map) throws SQLException, JSONException {
         // 获取列数
         ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
         int columnCount = metaData.getColumnCount();
-        // 遍历ResultSet中的每条数据
-        Map<String, String> result = new LinkedHashMap<>();
+        List<Map<String, String>> resultList = new ArrayList<>();
         while (rs.next()) {
+            // 遍历ResultSet中的每条数据
+            Map<String, String> result = new LinkedHashMap<>();
             // 遍历每一列
             for (int i = 1; i <= columnCount; i++) {
                 String columnName = metaData.getColumnLabel(i);
                 String value = rs.getString(columnName) == null ? "" : rs.getString(columnName);
                 result.put(map.get(columnName), value);
             }
+            resultList.add(result);
         }
-        return result;
+        return resultList;
     }
 
 }

+ 20 - 0
kernel/src/test/java/com/lantone/qc/kernel/Doctor.java

@@ -0,0 +1,20 @@
+package com.lantone.qc.kernel;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : Doctor
+ * @Description :
+ * @Author : 楼辉荣
+ * @Date: 2020-04-04 13:17
+ */
+@Getter
+@Setter
+public class Doctor {
+    private String doctorId;
+    private String doctorName;
+    private String deptId;
+    private String deptName;
+    private String professor;
+}

+ 73 - 25
kernel/src/test/java/com/lantone/qc/kernel/TaizDataImportApiTest.java

@@ -1,19 +1,19 @@
 package com.lantone.qc.kernel;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.google.gson.JsonObject;
 import com.lantone.qc.pub.jdbc.MysqlJdbc;
 import com.lantone.qc.pub.util.FastJsonUtils;
 import com.lantone.qc.pub.util.PropertiesUtil;
 import com.lantone.qc.trans.changx.util.CxXmlUtil;
+import com.lantone.qc.trans.changx.util.CxXmlUtilTemp;
 import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
-import com.lantone.qc.trans.util.http.HttpApi;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -41,10 +41,12 @@ public class TaizDataImportApiTest {
         //长兴患者信息
         if (cid.equals("changx")) {
             test.insertPatient(test.loadOraclePatients("BR_INPATIENTINFO_CX"));
+            test.insertDoctor(test.loadOracleDoctorInfos("GI_USERINFO", "HI_DEPTINFO"));
         }
         //台州患者信息
         if (cid.equals("taizhou")) {
             test.insertPatient(test.loadOraclePatients("BR_INPATIENTINFO_TZ20200330"));
+            test.insertDoctor(test.loadOracleDoctorInfos("GI_USERINFO", "HI_DEPTINFO"));
         }
         //病人流水号获取    病历号--->id
         Map<String, String> patientMap = test.loadPatients(hospitalId);
@@ -64,13 +66,27 @@ public class TaizDataImportApiTest {
         initMysqlJdbc().insert(list, "qc_cases_number_copy", new String[]{"hospital_id", "case_number"});
     }
 
+    private void insertDoctor(List<Doctor> doctors) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (Doctor doctor : doctors) {
+            Map<String, Object> doctorMap = new HashMap<>();
+            doctorMap.put("doctor_id", doctor.getDoctorId());
+            doctorMap.put("doctor_name", doctor.getDoctorName());
+            doctorMap.put("dept_id", doctor.getDeptId());
+            doctorMap.put("dept_name", doctor.getDeptName());
+            doctorMap.put("professor", doctor.getProfessor());
+            list.add(doctorMap);
+        }
+        initMysqlJdbc().insert(list, "qc_doctor_info", new String[]{"doctor_id", "doctor_name", "dept_id", "dept_name", "professor"});
+    }
+
     private void insertPatientText(Map<String, String> patientMap, Map<String, String> modelMap) {
         List<Map<String, Object>> list = new ArrayList<>();
 
         for (Map.Entry<String, String> entry : patientMap.entrySet()) {
             List<PatientText> patientTexts = new ArrayList<>();
             //病人的病案首页内容
-            Map<String, String> homePageMap = DataTest.loadHomePage(entry.getKey());
+            List<Map<String, String>> homePageMap = DataTest.loadHomePage("BR_RECHOME_CX", entry.getKey());
             if (homePageMap == null || homePageMap.isEmpty()) { //没病案首页直接不导入
                 deletePatient.add(entry.getKey()); //没病案首页的患者也要删除
                 continue;
@@ -81,13 +97,12 @@ public class TaizDataImportApiTest {
             firstPageTextMap.put("hospital_id", hospitalId);
             firstPageTextMap.put("mode_id", 6);
             firstPageTextMap.put("origin_mode", "病案首页");
-            firstPageTextMap.put("origin_text", FastJsonUtils.getBeanToJson(homePageMap));
+            firstPageTextMap.put("origin_text", FastJsonUtils.getBeanToJson(homePageMap.get(0)));
             String pagetext = "";
-            for (Map.Entry<String, String> e : homePageMap.entrySet()) {
+            for (Map.Entry<String, String> e : homePageMap.get(0).entrySet()) {
                 pagetext = pagetext + "【" + e.getKey() + "】:" + e.getValue().toString() + "\n";
             }
             firstPageTextMap.put("text", pagetext);
-
             if ("changx".equals(cid)) {
                 patientTexts = loadChangxOraclePatientTexts(entry.getKey());
             }
@@ -99,13 +114,30 @@ public class TaizDataImportApiTest {
             }
             //数据完整后才放入病案首页
             list.add(firstPageTextMap);
+
+            //病人医嘱信息
+            List<Map<String, String>> docAdviceMap = DataTest.loadHomePage("BR_DOCTADVICE_CX", entry.getKey());
+            for (Map<String, String> docMap : docAdviceMap) {
+                Map<String, Object> docAdviceTextMap = new HashMap<>();
+                docAdviceTextMap.put("case_number", entry.getKey());
+                docAdviceTextMap.put("case_number_id", patientMap.get(entry.getKey()));
+                docAdviceTextMap.put("hospital_id", hospitalId);
+                docAdviceTextMap.put("mode_id", 8);
+                docAdviceTextMap.put("origin_mode", "医嘱信息");
+                docAdviceTextMap.put("origin_text", FastJsonUtils.getBeanToJson(docMap));
+                pagetext = "";
+                for (Map.Entry<String, String> e : docMap.entrySet()) {
+                    pagetext = pagetext + "【" + e.getKey() + "】:" + e.getValue().toString() + "\n";
+                }
+                docAdviceTextMap.put("text", pagetext);
+                list.add(docAdviceTextMap);
+            }
+            //病人其他文书信息
             for (PatientText patientText : patientTexts) {
-//System.out.println(patientText.getBrzyid() + "  " + patientText.getBljlmc());
                 Map<String, Object> patientTextMap = new HashMap<>();
                 patientTextMap.put("case_number", patientText.getBrzyid());
                 patientTextMap.put("case_number_id", patientMap.get(patientText.getBrzyid()));
                 patientTextMap.put("hospital_id", hospitalId);
-//System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patientText.getBljlmc()));
                 patientTextMap.put("mode_id", modelMap.get(caseMap.get(patientText.getBljlmc())));
                 patientTextMap.put("origin_mode", patientText.getBljlmc());
                 if (patientTextMap.get("mode_id") == null) {
@@ -116,7 +148,7 @@ public class TaizDataImportApiTest {
                 String text = "";
                 Map<String, String> textMap = new HashMap<>();
                 if ("changx".equals(cid)) {
-                    textMap = CxXmlUtil.firstLevelNodeValue(patientText.getBljlnr(), caseMap.get(patientText.getBljlmc()));
+                    textMap = CxXmlUtilTemp.beHospitalizedXmlToMap(patientText.getBljlnr(), caseMap.get(patientText.getBljlmc()));
                 }
                 if ("taizhou".equals(cid)) {
                     textMap = TzXmlUtil.getXmlToMapForTZ(patientText.getBljlnr());
@@ -187,6 +219,35 @@ public class TaizDataImportApiTest {
         return patients;
     }
 
+    private List<Doctor> loadOracleDoctorInfos(String tableUser, String tableDept) {
+        MysqlJdbc mysqlJdbc = initOracleJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        List<Doctor> doctors = new ArrayList<>();
+        try {
+            st = conn.createStatement();
+            String sql = "select u.yhrydm, u.yhrymc, u.yhryzc, dept.zzksid, dept.zzksmc from " + tableDept + " dept, " + tableUser + " u where u.zzksid = dept.zzksid";
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                Doctor doctor = new Doctor();
+                doctor.setDoctorId(rs.getString(1));
+                doctor.setDoctorName(rs.getString(2));
+                doctor.setProfessor(rs.getString(3));
+                doctor.setDeptId(rs.getString(4));
+                doctor.setDeptName(rs.getString(5));
+                doctors.add(doctor);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return doctors;
+    }
+
     private List<PatientText> loadTaizhouOraclePatientTexts(String brzyid) {
         MysqlJdbc mysqlJdbc = initOracleJdbc();
         Connection conn = mysqlJdbc.connect();
@@ -259,19 +320,6 @@ public class TaizDataImportApiTest {
                 patientText.setBljlmc(r2);
                 patientText.setBljlnr(decompressed);
                 patientTexts.add(patientText);
-
-//                String[] decos = decompressed.split("<\\?");
-//                for (String s : decos) {
-//                    if (StringUtils.isEmpty(s)) continue;
-//                    PatientText patientText = new PatientText();
-//                    patientText.setBrzyid(r1);
-//                    patientText.setBljlmc(r2);
-//
-//                    s = "<?" + s;
-//                    s = CxXmlUtil.cutXml(s);
-//                    patientText.setBljlnr(s);
-//                    patientTexts.add(patientText);
-//                }
             }
         } catch (SQLException sqle) {
             sqle.printStackTrace();

+ 6 - 5
public/src/main/java/com/lantone/qc/pub/Content.java

@@ -128,10 +128,10 @@ public class Content {
     public static final String age = "年龄";
     public static final String nationality = "国籍";
     public static final String birth_date = "出生日期";
-    public static final String infantAgeMonths = "婴儿年龄月数";
-    public static final String infantAgeDays = "婴儿年龄天数";
-    public static final String newbornWeight = "儿出生体重";
-    public static final String newbornAdmisWeight = "儿入院体重";
+    public static final String newbornAgeMonths = "新生儿年龄月数";
+    public static final String newbornAgeDays = "新生儿年龄天数";
+    public static final String newbornWeight = "新生儿出生体重";
+    public static final String newbornAdmisWeight = "新生儿入院体重";
     public static final String birth_address = "出生地";
     public static final String native_place = "籍贯";
     public static final String nation = "民族";
@@ -180,7 +180,7 @@ public class Content {
     public static final String outHouse = "出院病房";
     public static final String actualStay = "实际住院天数";//病案首页用
     public static final String drugAllergy = "药物过敏";
-    public static final String allergy_drug = "过敏药物";
+    public static final String allergyDrug = "过敏药物";
     public static final String deadAutopsy = "死亡患者尸检";
     public static final String bloodType="血型";
     public static final String rhFactor="Rh";
@@ -261,6 +261,7 @@ public class Content {
             "yyyy年M月d日H时mm分",
             "yyyy年M月d日HH时m分",
             "yyyy年M月d日H时m分",
+            "yyyy-MM-ddHH:mm:ss",
             "yyyy-MM-ddHH:mm",
             "yyyy-MM-ddHH:m",
             "yyyy-MM-ddH:mm",

+ 13 - 0
trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtil.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.trans.changx.util;
 
 import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.FileUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.dom4j.Document;
 import org.dom4j.DocumentHelper;
@@ -90,4 +91,16 @@ public class CxXmlUtil {
         return flag;
     }
 
+
+    public static void main(String[] args) {
+        try {
+            String context = FileUtil.fileRead("C:\\Users\\dell\\Desktop\\调试\\test1.txt");
+            Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent/Region", context);
+            for (String key : sourceMap.keySet()) {
+                System.out.println("\"" + key + "=\",");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 153 - 0
trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtilTemp.java

@@ -0,0 +1,153 @@
+package com.lantone.qc.trans.changx.util;
+
+import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.FileUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: xml解析工具
+ * @author: rengb
+ * @time: 2020/3/28 14:23
+ */
+public class CxXmlUtilTemp {
+
+    public static String cutXml(String xml) {
+        try {
+            Document doc = DocumentHelper.parseText(xml);
+            return doc.getRootElement().element("DocObjContent").asXML();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static Map<String, String> beHospitalizedXmlToMap(String xml) {
+        return beHospitalizedXmlToMap(xml, "");
+    }
+
+    public static Map<String, String> beHospitalizedXmlToMap(String xml, String modelName) {
+        Map<String, String> retMap = Maps.newLinkedHashMap();
+        try {
+            String helpTip, contentText;
+            Element contentTextElement;
+            Document doc = DocumentHelper.parseText(xml);
+            Element rootElement = doc.getRootElement().element("DocObjContent");
+
+            if (modelName.equals("首次病程录") || modelName.equals("查房记录") || modelName.equals("会诊记录") || modelName.equals("输血记录")
+                    || modelName.equals("术前讨论小结") || modelName.equals("阶段小结") || modelName.equals("术后首次谈话及病程录")
+                    || modelName.equals("转出记录") || modelName.equals("输血后效果评价") || modelName.equals("输血后效果评价") || modelName.equals("危急值记录")) {
+                if (rootElement.element("Region") != null && rootElement.element("Region").element("Content_Text") != null) {
+                    retMap.put("内容", rootElement.element("Region").element("Content_Text").getText());
+                    return retMap;
+                }
+            }
+
+            List<Element> sectionElements = rootElement.elements("Section");
+            Map<String, String> sectionMap = Maps.newLinkedHashMap();
+            for (Element sectionElement : sectionElements) {
+                helpTip = sectionElement.attributeValue("HelpTip");
+                if (StringUtil.isBlank(helpTip)) {
+                    continue;
+                }
+                contentTextElement = sectionElement.element("Content_Text");
+                if (contentTextElement == null) {
+                    contentText = sectionElement.getStringValue().trim();
+                } else {
+                    contentText = contentTextElement.getTextTrim();
+                }
+                sectionMap.put(helpTip, contentText);
+            }
+
+            List<Element> newCtrlElements = rootElement.elements("NewCtrl");
+            Map<String, String> newCtrlMap = Maps.newLinkedHashMap();
+            for (Element newCtrlElement : newCtrlElements) {
+                helpTip = newCtrlElement.attributeValue("HelpTip");
+                if (StringUtil.isBlank(helpTip)) {
+                    continue;
+                }
+                contentTextElement = newCtrlElement.element("Content_Text");
+                if (contentTextElement == null) {
+                    contentText = newCtrlElement.getStringValue().trim();
+                } else {
+                    contentText = contentTextElement.getTextTrim();
+                }
+                newCtrlMap.put(helpTip, contentText);
+            }
+            retMap.putAll(newCtrlMap);
+            retMap.putAll(sectionMap);
+
+
+//            retMap.put("姓名", newCtrlMap.get("姓名"));
+//            retMap.put("性别", newCtrlMap.get("性别"));
+//            retMap.put("年龄", newCtrlMap.get("年龄"));
+//            retMap.put("民族", newCtrlMap.get("民族"));
+//            retMap.put("职业", newCtrlMap.get("职业"));
+//            retMap.put("出生地", newCtrlMap.get("出生地"));
+//            retMap.put("婚姻", newCtrlMap.get("婚姻状况"));
+//            retMap.put("联系地址", "");
+//            retMap.put("病史陈述者", newCtrlMap.get("供史者"));
+//            retMap.put("出生日期", newCtrlMap.get("出生日期"));
+//            retMap.put("户口地址", newCtrlMap.get("户口地址"));
+//            retMap.put("电话", newCtrlMap.get("联系电话"));
+//            retMap.put("入院日期", newCtrlMap.get("入院日期"));
+//            retMap.put("记录日期", newCtrlMap.get("记录日期"));
+//            retMap.put("辅助检查", newCtrlMap.get("辅助检查"));
+//            retMap.put("初步诊断", newCtrlMap.get("初步诊断"));
+//            retMap.put("修正诊断", newCtrlMap.get("修正诊断"));
+//            retMap.put("补充诊断", newCtrlMap.get("补充诊断"));
+//            retMap.put("主诉", newCtrlMap.get("主诉"));
+//            retMap.put("现病史", newCtrlMap.get("现病史"));
+//
+//            retMap.put("既往史", sectionMap.get("既往史"));
+//            retMap.put("个人史", sectionMap.get("个人史"));
+//            retMap.put("婚育史", sectionMap.get("婚育史:"));
+//            retMap.put("月经史", sectionMap.get("月经史"));
+//            retMap.put("家族史", sectionMap.get("家族史"));
+//            retMap.put("专科体格检查", sectionMap.get("体格检查"));
+//
+//            String tgjc = sectionMap.get("一般情况") + "。"
+//                    + sectionMap.get("皮肤情况") + "。"
+//                    + newCtrlMap.get("淋巴") + "。"
+//                    + sectionMap.get("头部检查") + "。"
+//                    + sectionMap.get("颈部") + "。"
+//                    + sectionMap.get("胸部检查") + "。"
+//                    + sectionMap.get("肺部检查") + "。"
+//                    + sectionMap.get("心脏检查") + "。"
+//                    + newCtrlMap.get("血管") + "。"
+//                    + sectionMap.get("腹部检查") + "。"
+//                    + newCtrlMap.get("外生殖器") + "。"
+//                    + newCtrlMap.get("直肠肛门") + "。"
+//                    + sectionMap.get("四肢脊柱检查") + "。"
+//                    + sectionMap.get("神经系统检查") + "。"
+//                    + newCtrlMap.get("其他说明") + "。";
+//            retMap.put("体格检查", tgjc);
+        } catch (Exception e) {
+        }
+        return retMap;
+    }
+
+    public static Map<String, String> firstLevelNodeValue(String a, String x) {
+        return null;
+    }
+
+    public static String getTextByNodePath(String a, String x) {
+        return null;
+    }
+
+    public static void main(String[] args) {
+        String msg = FileUtil.fileRead("C:\\Users\\RGB\\Desktop\\调试\\入院记录.txt");
+        Map<String, String> map = beHospitalizedXmlToMap(msg);
+        map.keySet().forEach(key -> {
+            System.out.println(key + "---" + map.get(key));
+        });
+    }
+
+}