Browse Source

Merge remote-tracking branch 'origin/dev-changx-location' into dev-changx-location

wangyu 5 years ago
parent
commit
18b8e53f53
44 changed files with 103356 additions and 3076 deletions
  1. 8 11
      kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java
  2. 109 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0738.java
  3. 33 15
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0280.java
  4. 33 29
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0281.java
  5. 30 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0528.java
  6. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0737.java
  7. 63 12
      kernel/src/main/java/com/lantone/qc/kernel/util/CacheUtil.java
  8. 18 1
      kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCController.java
  9. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCTestController.java
  10. 3 0
      kernel/src/main/resources/application.yml
  11. 84 0
      kernel/src/main/resources/cache/1/concept_clinic_bodypart_properties.dict
  12. 49448 0
      kernel/src/main/resources/cache/1/concept_diag_properties.dict
  13. 49448 0
      kernel/src/main/resources/cache/1/hospital_diag_info.dict
  14. 1443 0
      kernel/src/main/resources/cache/1/hospital_doctor_info.dict
  15. 2402 2402
      kernel/src/main/resources/cache/3/hospital_doctor_info.dict
  16. 1 0
      kernel/src/main/resources/cache/3/module_mapping.json
  17. 2 0
      public/src/main/java/com/lantone/qc/pub/Content.java
  18. 13 0
      public/src/main/java/com/lantone/qc/pub/exception/AIException.java
  19. 13 0
      public/src/main/java/com/lantone/qc/pub/exception/CatalogueException.java
  20. 13 0
      public/src/main/java/com/lantone/qc/pub/exception/TransException.java
  21. 0 292
      public/src/main/java/com/lantone/qc/pub/model/keys/StructTypeStandardKeys.java
  22. 4 4
      trans/src/main/java/com/lantone/qc/trans/comsis/ModelDocGenerate.java
  23. 45 0
      trans/src/main/java/com/lantone/qc/trans/comsis/ModuleMappingUtil.java
  24. 4 0
      trans/src/main/java/com/lantone/qc/trans/comsis/OrdinaryAssistant.java
  25. 2 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouBeHospitalizedDocTrans.java
  26. 5 2
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicBloodEffectDocTrans.java
  27. 2 2
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicalBloodDocTrans.java
  28. 20 24
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouConsultationDocTrans.java
  29. 2 12
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCrisisValueReportDocTrans.java
  30. 2 27
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCriticallyIllNoticeDocTrans.java
  31. 5 39
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java
  32. 4 34
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java
  33. 4 3
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDifficultCaseDiscussDocTrans.java
  34. 3 5
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstCourseRecordDocTrans.java
  35. 5 13
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouLeaveHospitalDocTrans.java
  36. 13 25
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java
  37. 3 2
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouPathologyShipDocTrans.java
  38. 4 3
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouRescueDocTrans.java
  39. 5 29
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouSeriouslyIllNoticeDocTrans.java
  40. 5 46
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouStagesSummaryDocTrans.java
  41. 13 26
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouThreeLevelWardDocTrans.java
  42. 4 7
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouTransferRecordDocTrans.java
  43. 2 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaizhouDocTrans.java
  44. 1 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/util/TzXmlUtil.java

+ 8 - 11
kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java

@@ -5,7 +5,8 @@ import com.lantone.qc.kernel.client.CRFServiceClient;
 import com.lantone.qc.kernel.client.SimilarityServiceClient;
 import com.lantone.qc.kernel.structure.ai.AIAnalyze;
 import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.kernel.util.RedisUtil;
+import com.lantone.qc.pub.exception.AIException;
+import com.lantone.qc.pub.exception.CatalogueException;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.vo.QueryVo;
@@ -13,7 +14,6 @@ import com.lantone.qc.trans.TransDispatch;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -30,18 +30,15 @@ public class QCAnalysis {
     @Autowired
     SimilarityServiceClient similarityServiceClient;
 
-    @Autowired
-    private RedisUtil redisUtil;
-
-    public OutputInfo anlysis(QueryVo queryVo) {
+    public OutputInfo anlysis(QueryVo queryVo) throws AIException, CatalogueException, Exception {
         OutputInfo outputInfo = new OutputInfo();
         InputInfo inputInfo = TransDispatch.trans(queryVo);
         inputInfo.setInputCatalogueMap(queryVo.getInputCatalogueMap());
         AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient, similarityServiceClient);
-        try{
+        try {
             aiAnalyze.aiProcess(inputInfo);
-        }catch (Exception e){
-            e.printStackTrace();
+        } catch (Exception e) {
+            throw new AIException("AI模型执行错误:" + e.getMessage());
         }
         for (Map.Entry<String, Map<String, String>> entry : inputInfo.getInputCatalogueMap().entrySet()) {
             if (CatalogueUtil.qcCatalogueMap.get(entry.getKey()) == null) {
@@ -52,9 +49,9 @@ public class QCAnalysis {
         outputInfo.setPageData(inputInfo.getPageData());
         Map<String, Map<String, String>> result = outputInfo.getResult();
         Map<String, Map<String, String>> resultNew = Maps.newHashMap();
-        result.keySet().forEach(key->{
+        result.keySet().forEach(key -> {
             if (result.get(key).get("status").equals("-1")) {
-                resultNew.put(key,result.get(key));
+                resultNew.put(key, result.get(key));
             }
         });
         outputInfo.setResult(resultNew);

+ 109 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0738.java

@@ -0,0 +1,109 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+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.entity.Diag;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : BEH0738
+ * @Description: 患者病情前后描述不一致
+ * @author: 胡敬
+ * @time: 2020-05-08 16:45
+ */
+@Component
+public class BEH0738 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        List<Diag> presentDiags = null;
+        List<Diag> pastDiags = null;
+        List<Diag> initialDiags = null;
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        if (presentLabel != null) {
+            presentDiags = presentLabel.getDiags();
+        }
+        if (pastLabel != null) {
+            pastDiags = pastLabel.getDiags();
+        }
+        if (initialDiagLabel != null) {
+            initialDiags = initialDiagLabel.getDiags();
+        }
+
+        if (presentDiags != null && pastDiags != null){
+            if (checkDiagDiff(presentDiags,pastDiags)){
+                status.set("-1");
+                return;
+            }
+        }
+
+        if (presentDiags != null && initialDiags != null){
+            if (checkDiagDiff(presentDiags,initialDiags)){
+                status.set("-1");
+                return;
+            }
+        }
+
+        if (pastDiags != null && initialDiags != null){
+            if (checkDiagDiff(pastDiags,initialDiags)){
+                status.set("-1");
+            }
+        }
+    }
+
+    /**
+     * 检查两个Diag列表是否前后描述不一致
+     * @param firstDiags
+     * @param secondDiags
+     * @return
+     */
+    private boolean checkDiagDiff(List<Diag> firstDiags, List<Diag> secondDiags) {
+        String firstDiagName = null, secondDiagName = null;
+        for (Diag firstDiag : firstDiags) {
+            firstDiagName = firstDiag.getHospitalDiagName();
+            if (StringUtil.isBlank(firstDiagName)) {
+                continue;
+            }
+            for (Diag secondDiag : secondDiags) {
+                secondDiagName = secondDiag.getHospitalDiagName();
+                if (StringUtil.isBlank(secondDiagName)) {
+                    continue;
+                }
+                if (firstDiagName.equals(secondDiagName)) {
+                    boolean checkNeg = checkNeg(firstDiag, secondDiag);
+                    if (!checkNeg) {
+                        //如果两个Diag一个为否定,一个不为否定,返回true
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean checkNeg(Diag firstDiag, Diag secondDiag) {
+        if (firstDiag.getNegative() == null && secondDiag.getNegative() == null) {
+            return true;
+        } else {
+            return firstDiag.getNegative() != null && secondDiag.getNegative() != null;
+        }
+    }
+
+
+}

+ 33 - 15
kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0280.java

@@ -4,11 +4,14 @@ 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;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -23,30 +26,45 @@ import java.util.Map;
 public class CON0280 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getConsultationDocs() == null) {
+        if (inputInfo.getConsultationDocs() == null || inputInfo.getDoctorAdviceDocs().size() == 0) {
             return;
         }
         List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        //医嘱按照医嘱开始时间排序
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        Collections.sort(doctorAdviceDocs, new Comparator<DoctorAdviceDoc>() {
+            public int compare(DoctorAdviceDoc o1, DoctorAdviceDoc o2) {
+                return o1.getStructureMap().get("医嘱开始时间")
+                        .compareTo(o2.getStructureMap().get("医嘱开始时间"));
+            }
+        });
         for (ConsultationDoc consultationDoc : consultationDocs) {
             ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
             if (consultationResultsDoc == null) {
                 continue;
             }
-            Map<String, String> structureMap = consultationResultsDoc.getStructureMap();
-            String applicationDateStr = structureMap.get("会诊申请日期");
-            String arrivalDateStr = structureMap.get("会诊到达时间");
-            if (StringUtil.isBlank(applicationDateStr) || StringUtil.isBlank(arrivalDateStr)) {
-                continue;
-            }
-            Date applicationDate = StringUtil.parseDateTime(applicationDateStr);
-            Date arrivalDate = StringUtil.parseDateTime(arrivalDateStr);
-            if (applicationDate == null || arrivalDate == null) {
-                continue;
-            }
-            if (CatalogueUtil.compareTime(applicationDate, arrivalDate, (long) (24 * 60))) {
-                status.set("-1");
-                return;
+            Map<String, String> conStructureMap = consultationResultsDoc.getStructureMap();
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {//循环取最近一条医嘱和会诊申请单中的急会诊比较
+                Map<String, String> docStructureMap = doctorAdviceDoc.getStructureMap();
+                if (docStructureMap.get("医嘱项目名称") != null && docStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    String applicationDateStr = docStructureMap.get("医嘱开始时间");
+                    String arrivalDateStr = conStructureMap.get("会诊时间");
+                    if (StringUtil.isBlank(applicationDateStr) || StringUtil.isBlank(arrivalDateStr)) {
+                        continue;
+                    }
+                    Date applicationDate = StringUtil.parseDateTime(applicationDateStr);
+                    Date arrivalDate = StringUtil.parseDateTime(arrivalDateStr);
+                    if (applicationDate == null || arrivalDate == null) {
+                        continue;
+                    }
+                    if (CatalogueUtil.compareTime(applicationDate, arrivalDate, (long) (24 * 60))) {
+                        status.set("-1");
+                        return;
+                    }
+                }
             }
+            //            String applicationDateStr = structureMap.get("会诊申请日期");
+            //            String arrivalDateStr = structureMap.get("会诊到达时间");
         }
     }
 }

+ 33 - 29
kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0281.java

@@ -6,13 +6,15 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
-import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
-import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationRecordDoc;
 import com.lantone.qc.pub.util.StringUtil;
-import org.apache.http.client.utils.DateUtils;
 import org.springframework.stereotype.Component;
 
-import java.util.*;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : CON0281
@@ -24,7 +26,6 @@ import java.util.*;
 public class CON0281 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        DateUtil dateUtil = new DateUtil();
         if (inputInfo.getConsultationDocs() == null) {
             return;
         }
@@ -32,37 +33,40 @@ public class CON0281 extends QCCatalogue {
         List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
         //医嘱按照医嘱开始时间排序
         List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-        Collections.sort(doctorAdviceDocs, new Comparator<DoctorAdviceDoc>(){
-            public int compare (DoctorAdviceDoc o1, DoctorAdviceDoc o2){
+        Collections.sort(doctorAdviceDocs, new Comparator<DoctorAdviceDoc>() {
+            public int compare(DoctorAdviceDoc o1, DoctorAdviceDoc o2) {
                 return o1.getStructureMap().get("医嘱开始时间")
                         .compareTo(o2.getStructureMap().get("医嘱开始时间"));
             }
         });
-        StringBuffer stringBuffer = new StringBuffer();
-        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {//循环取最近一条医嘱和会诊申请单中的急会诊比较
-            for (ConsultationDoc consultationDoc : consultationDocs) {
-                if(consultationDoc.getConsultationRecordDoc() == null || doctorAdviceDocs == null){
-                    continue;
-                }
-                if(doctorAdviceDoc.getStructureMap().get("医嘱项目名称") != null && doctorAdviceDoc.getStructureMap().get("医嘱项目名称").contains("会诊")){
-                    if(consultationDoc.getConsultationResultsDoc().getStructureMap().get("会诊分类") == null && consultationDoc.getConsultationResultsDoc().getStructureMap().get("会诊分类").contains("急会诊")){
-                        if(dateUtil.getDistanceTime3(dateUtil.parseDate(doctorAdviceDoc.getStructureMap().get("医嘱开始时间"),DateUtil.DATE_TIME_FORMAT)
-                                ,dateUtil.parseDate(consultationDoc.getConsultationResultsDoc().getStructureMap().get("会诊时间"),DateUtil.DATE_TIME_FORMAT)) > 10){//如果医嘱中的日期和会诊结果中的日期大于十分钟
-                            status.set("-1");
-                        }else {
-                            stringBuffer.append(doctorAdviceDoc.getStructureMap().get("医嘱项目名称")
-                                    +":"
-                                    +doctorAdviceDoc.getStructureMap().get("医嘱开始时间")
-                                    +"会诊时间:"
-                                    +consultationDoc.getConsultationResultsDoc().getStructureMap().get("会诊时间"));
-                            continue;
-                        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationRecordDoc consultationRecordDoc = consultationDoc.getConsultationRecordDoc();
+            if (consultationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> conStructureMap = consultationRecordDoc.getStructureMap();
+            if (conStructureMap.get("会诊分类") == null || !conStructureMap.get("会诊分类").contains("急会诊")) {
+                continue;
+            }
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {//循环取最近一条医嘱和会诊申请单中的急会诊比较
+                Map<String, String> docStructureMap = doctorAdviceDoc.getStructureMap();
+                if (docStructureMap.get("医嘱项目名称") != null && docStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    String applicationDateStr = docStructureMap.get("医嘱开始时间");
+                    String arrivalDateStr = conStructureMap.get("会诊时间");
+                    if (StringUtil.isBlank(applicationDateStr) || StringUtil.isBlank(arrivalDateStr)) {
+                        continue;
+                    }
+                    Date applicationDate = StringUtil.parseDateTime(applicationDateStr);//医嘱开始时间
+                    Date arrivalDate = StringUtil.parseDateTime(arrivalDateStr);//会诊时间
+                    if (applicationDate == null || arrivalDate == null) {
+                        continue;
+                    }
+                    if (CatalogueUtil.compareTime(applicationDate, arrivalDate, 10L)) {
+                        status.set("-1");
+                        return;
                     }
                 }
-
             }
         }
-        info.set(stringBuffer.toString());
-
     }
 }

+ 30 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0528.java

@@ -3,12 +3,14 @@ package com.lantone.qc.kernel.catalogue.consultation;
 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.DoctorAdviceDoc;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationRecordDoc;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : CON0528
@@ -22,15 +24,36 @@ public class CON0528 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
         List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
-        if (consultationDocs.size() > 0) {
-            for (ConsultationDoc consulation : consultationDocs) {
-                ConsultationRecordDoc consultationRecordDoc = consulation.getConsultationRecordDoc();
-                if (consultationRecordDoc == null) {
-                    status.set("-1");
-                    break;
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (doctorAdviceDocs.size() == 0) {
+            return;
+        }
+        boolean findConsultation = false, findConsultationRemove = false;
+        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+            Map<String, String> doctStructureMap = doctorAdviceDoc.getStructureMap();
+            if (doctStructureMap.get("医嘱项目名称") != null) {
+                if (doctStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    findConsultation = true;
+                }
+                if (doctStructureMap.get("医嘱项目名称").contains("会诊")
+                        && doctStructureMap.get("医嘱项目名称").contains("取消")) {
+                    findConsultationRemove = true;
                 }
             }
         }
-
+        //医嘱有会诊但没有取消会诊
+        if (findConsultation && !findConsultationRemove) {
+            if (consultationDocs.size() > 0) {
+                for (ConsultationDoc consulation : consultationDocs) {
+                    ConsultationRecordDoc consultationRecordDoc = consulation.getConsultationRecordDoc();
+                    if (consultationRecordDoc == null) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        } else {
+            status.set("0");
+        }
     }
 }

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0737.java

@@ -0,0 +1,33 @@
+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 : FIRP0737
+ * @Description : 邮编信息错误
+ * @Author : 胡敬
+ * @Date: 2020-05-08 16:00
+ */
+@Component
+public class FIRP0737 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 zipcode = firstpageStructureMap.get(Content.current_address_zipcode);
+            if (!CatalogueUtil.isEmpty(zipcode)) {
+                String regex = "^\\d{6}$";
+                if (!zipcode.matches(regex)) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+}

+ 63 - 12
kernel/src/main/java/com/lantone/qc/kernel/util/CacheUtil.java

@@ -1,21 +1,32 @@
 package com.lantone.qc.kernel.util;
 
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.lantone.qc.nlp.participle.cfg.Configuration;
 import com.lantone.qc.nlp.participle.cfg.DefaultConfig;
-import com.lantone.qc.security.util.EncrypDES;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.FileUtil;
+import com.lantone.qc.trans.comsis.ModuleMappingUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ResourceUtils;
 
+import java.io.FileNotFoundException;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @ClassName : CacheUtil
@@ -29,8 +40,12 @@ public class CacheUtil implements ApplicationRunner {
     @Autowired
     private RedisUtil redisUtil;
 
+    @Value("${qc.hospital_id}")
+    private String hospitalId;
+
     public void run(ApplicationArguments var1) {
         try {
+            this.loadModuleMappingInfo();//加载页面模板映射信息
             this.putConceptDiagPropertyMap();//疾病相关信息放入缓存 包括疾病是否是慢病、传染病、常见症状、同义词
             this.putHospitalDiagMap();//医院疾病信息
             this.putHospitalDiagHuaZMap();//医院华卓映射
@@ -42,13 +57,45 @@ public class CacheUtil implements ApplicationRunner {
         }
     }
 
+    /**
+     * 加载页面模板映射信息
+     */
+    private void loadModuleMappingInfo() {
+        List<String> xmlDataTypeHospitalIds = Lists.newArrayList("1", "3");
+        try {
+            String path = ResourceUtils.getURL("classpath:").getPath() + "cache/" + hospitalId + "/module_mapping.json";
+            String mappingMsg = FileUtil.fileRead(path);
+            if (xmlDataTypeHospitalIds.contains(hospitalId)) {
+                Map<String, Long> mapKeysModuleInfoIdMap = (Map) FastJsonUtils.getJsonToMap(mappingMsg);
+                Map<Set<String>, String> xmlDataTypeModuleInfo = Maps.newHashMap();
+
+                for (Map.Entry<String, Long> entry : mapKeysModuleInfoIdMap.entrySet()) {
+                    List<String> list = Arrays.asList(entry.getKey().split(","));
+                    list.sort(new Comparator<String>() {
+                        @Override
+                        public int compare(String arg0, String arg1) {
+                            return arg0.compareTo(arg1);//这是顺序
+                        }
+                    });
+                    xmlDataTypeModuleInfo.put(Sets.newLinkedHashSet(list), entry.getValue() + "");
+                }
+//                mapKeysModuleInfoIdMap.keySet().forEach(mapKeys -> {
+//                    xmlDataTypeModuleInfo.put(Sets.newLinkedHashSet(Arrays.asList(mapKeys.split(","))), mapKeysModuleInfoIdMap.get(mapKeys) + "");
+//                });
+                ModuleMappingUtil.xmlDataTypeModuleInfo = xmlDataTypeModuleInfo;
+            }
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
      * 疾病相关信息放入缓存
      * 包括疾病是否是慢病、传染病、常见症状、同义词
      */
     public void putConceptDiagPropertyMap() throws Exception {
         Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/concept_diag_properties.dict");
+        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/concept_diag_properties.dict");
 
         Map<String, Map<String, Object>> diagMap = new HashMap<>();
         for (String line : lines) {
@@ -57,14 +104,16 @@ public class CacheUtil implements ApplicationRunner {
                 List<String> synonymsList = new ArrayList<>();
                 List<String> symptomsList = new ArrayList<>();
                 if (StringUtils.isNotEmpty(line_arr[3])) {
+                    line_arr[3] = line_arr[3].trim();
                     synonymsList = java.util.Arrays.asList(line_arr[3].split(","));
                 }
                 if (StringUtils.isNotEmpty(line_arr[4])) {
+                    line_arr[4] = line_arr[4].trim();
                     symptomsList = java.util.Arrays.asList(line_arr[4].split(","));
                 }
                 Map<String, Object> map = new HashMap<>();
-                map.put("infectious", line_arr[2]);
-                map.put("chronic", line_arr[1]);
+                map.put("infectious", line_arr[2].trim());
+                map.put("chronic", line_arr[1].trim());
                 map.put("synonyms", synonymsList);
                 map.put("symptoms", symptomsList);
                 diagMap.put(line_arr[0], map);
@@ -75,11 +124,12 @@ public class CacheUtil implements ApplicationRunner {
 
     /**
      * 医院医生信息
+     *
      * @throws Exception
      */
     public void putHospitalDoctorInfoMap() throws Exception {
         Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/hospital_doctor_info.dict");
+        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_doctor_info.dict");
 
         Map<String, Map<String, Object>> hospitalDoctorMap = new HashMap<>();
         for (String line : lines) {
@@ -101,11 +151,11 @@ public class CacheUtil implements ApplicationRunner {
      */
     public void putHospitalDiagMap() throws Exception {
         Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/hospital_diag_info.dict");
+        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
         Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
         for (String line : lines) {
             Map<String, String> detail = new HashMap<>();
-            detail.put("name", line);
+            detail.put("name", line.trim());
             detail.put("icd10", "A001");
             hospitalDiagMap.put(line, detail);
         }
@@ -117,11 +167,11 @@ public class CacheUtil implements ApplicationRunner {
      */
     public void putHospitalDiagHuaZMap() throws Exception {
         Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/hospital_diag_info.dict");
+        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
         Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
         for (String line : lines) {
             Map<String, String> detail = new HashMap<>();
-            detail.put("name", line);
+            detail.put("name", line.trim());
             detail.put("icd10", "A001");
             hospitalDiagMap.put(line, detail);
         }
@@ -133,22 +183,23 @@ public class CacheUtil implements ApplicationRunner {
      */
     public void putLantoneDiagHuaZMap() throws Exception {
         Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/hospital_diag_info.dict");
+        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
         Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
         for (String line : lines) {
             Map<String, String> detail = new HashMap<>();
-            detail.put("name", line);
+            detail.put("name", line.trim());
             detail.put("icd10", "A001");
             hospitalDiagMap.put(line, detail);
         }
         redisUtil.setJsonStringValue(KernelConstants.LANTONE_DIAG_HUAZ_MAP, hospitalDiagMap);
     }
+
     /**
      * 症状需要部位描述词典放入redis缓存
      */
     public void putClinicBodyPartMap() throws Exception {
         Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/concept_clinic_bodypart_properties.dict");
+        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/concept_clinic_bodypart_properties.dict");
         List<String> clinicBodyPartList = new ArrayList<>();
         for (String line : lines) {
             clinicBodyPartList.add(line);

+ 18 - 1
kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCController.java

@@ -1,6 +1,9 @@
 package com.lantone.qc.kernel.web.controller;
 
 import com.lantone.qc.kernel.analysis.QCAnalysis;
+import com.lantone.qc.pub.exception.AIException;
+import com.lantone.qc.pub.exception.CatalogueException;
+import com.lantone.qc.pub.exception.TransException;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.vo.QueryVo;
 import com.lantone.qc.pub.res.Response;
@@ -30,7 +33,21 @@ public class QCController {
     @PostMapping("rec")
     public Response<OutputInfo> extract(@RequestBody QueryVo queryVo) {
         Response response = new Response();
-        response.setData(qCAnalysis.anlysis(queryVo));
+        try {
+            response.setData(qCAnalysis.anlysis(queryVo));
+        } catch (AIException aie) {
+            response.setRet(-1);
+            response.setMsg(aie.getMessage());
+        } catch (TransException trae) {
+            response.setRet(-2);
+            response.setMsg(trae.getMessage());
+        } catch (CatalogueException ce) {
+            response.setRet(-3);
+            response.setMsg(ce.getMessage());
+        } catch (Exception e) {
+            response.setRet(-9);
+            response.setMsg("质控出错:" + e.getMessage());
+        }
         return response;
     }
 

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

@@ -47,7 +47,7 @@ public class QCTestController {
 
     @ApiOperation(value = "质控测试接口,无需token信息", notes = "")
     @PostMapping("qc_test")
-    public Response<OutputInfo> qc(String cid, String caseNumber, String hospitalId) {
+    public Response<OutputInfo> qc(String cid, String caseNumber, String hospitalId) throws Exception {
         Response response = new Response();
         if (StringUtils.isEmpty(hospitalId)) {
             response.setData("未填写医院流水号(hospitalId)......");
@@ -101,7 +101,7 @@ public class QCTestController {
 
     @ApiOperation(value = "质控单个病历测试,无需token信息", notes = "")
     @PostMapping("qc_test_single")
-    public Response<OutputInfo> qc_test_single(String cid, String caseNumber, String hospitalId) {
+    public Response<OutputInfo> qc_test_single(String cid, String caseNumber, String hospitalId) throws Exception {
         Response response = new Response();
         if (StringUtils.isEmpty(hospitalId)) {
             response.setData("未填写医院流水号(hospitalId)......");

+ 3 - 0
kernel/src/main/resources/application.yml

@@ -24,6 +24,9 @@ spring:
         max-wait: -1ms
         max-idle: 8
 
+qc:
+  hospital_id: 3
+
 CRF:
   url: http://192.168.3.150:3456/api/mr_info_ex/entity_predict
 

+ 84 - 0
kernel/src/main/resources/cache/1/concept_clinic_bodypart_properties.dict

@@ -0,0 +1,84 @@
+sjwPlFuzwYtdGy/Xru8l0w==
+sjwPlFuzwYuOwjk+wlafMb496h/s94Lp
+GaEOqMDeIR/A3JPjaU/OYQ==
+KUZ84E/l6BtIxYdpVp2d2udw4JKVz6fxOAPHyqzXUMY=
+ClvKDL868eyBa0I3oBBXTiLG5UIUjigm
+cpVuhYfN0VLL15lmAanTHLudBba0KZdGSmARnfpRl/s=
+tgLfZiBNXVfe46uqWooJfQ==
++elokrz+5ZZ4nftSAgjXeP9VC/9mRBPm
+u18AKL/dfo8=
+FXYCcRyAS3o=
+1y8RNUzpzDDA3JPjaU/OYQ==
+GDAzhKkwugqOwjk+wlafMb496h/s94Lp
+vVsbjXwCHtKFIWuMj59JFg==
+S00FGSMpzFYRJHHOrCiJIw==
+LQ4RQ5c6TvEfVJH7s8MZNQ==
+KkqtLy22gBtRq6Y4vkNXyQ==
+FpNKk6eB+A78k09Y7waUfQ==
+55LO8f+DGuqsZzaaPHDG7A==
+anCWsr9KEAcfVJH7s8MZNQ==
+Ms4itbwo4woHjnX6dZF4Ew==
+eE2lKBuqkGwbZW204O8pbL496h/s94Lp
+KPTiLOQlvfcHjnX6dZF4Ew==
+EHYxrOGlbsJINCuQrfA+Qw==
+IoIoNIGjGAkfVJH7s8MZNQ==
+TkKCqeWSukdcNzQgT7Qg/y/95Ux1UGf/
+5sS2G/r6ssUfVJH7s8MZNQ==
+Fz6WuGDyOlM=
+6BJE0DCYV4PN7oAmfhVFQqHIcEkBIHl+SmARnfpRl/s=
+ClvKDL868ewfVJH7s8MZNQ==
+IoIoNIGjGAmt+3FIqYSLwA==
+qjVzhjIuUT4fVJH7s8MZNQ==
+fAvCqq32iRGYkjXG21GhdA==
+Qz54IR1t0pxhD8mu55a07QB9XVjkemQO
+VDAaAfFpalOc8iRXg5Txmg==
+v2wP8zYN7yUfVJH7s8MZNQ==
+2O+0+BuTK7hnAFNeF32DwQ==
+LRQ8TiPskP8=
+MHWWVpSYUhZp84i3DCFu/g==
+4a+BNcRWzuwuxVbFLjJEww==
+yWJqJiL6qWQskpnR2QjFRA==
+LkBZ8uh2sivD7O64F4fyYD26Q3FauFTq
+vU9OSQNfzsdHGRV53JQHXTZxIOEr6XT/
+Z0A2kuK86msFZwSJa38bOw==
+qglFhT75KVY=
+J47wTSKVIotrynAbi7Nl7g==
+PSCtbA3GBCLqcUHlnbz5ig==
+pGzYL5VYctXxzUrAtKDMFg==
+J47wTSKVIotWP8N6Zu8teQ==
+hnOhzeqPs7c=
+FpNKk6eB+A60ivUVDCQonmb0NA6xAPvZ
+6eB67p+u3VA=
+38rBhrBd2ZA=
+WlxWJO1bvWM=
+/UTzDiOxLWpNfh/SNay22g==
+PLBt3Oha1AAOSE8k2YZYMw==
+cA6kPjEpsoKKXDwNc4sbZv9VC/9mRBPm
+ubvY7WEHsf0HjnX6dZF4Ew==
+NI9su0Z8kvY=
+z5dpaPXQysM+03JbZpPE8K74oEbqwDfN
+e7OvqkV6Qx5DhU/YuJZA4A==
+vnSKQ0o1HZO5fhcvExqbXw==
+5j32mrEC41Q=
+teXiWF5i95089VmH6nOntT26Q3FauFTq
+C5DNXPfJ3MsXUKrj9yaJVQ==
+aBDrcQGdFjgXTO+Ia0kzAA==
+EyuDTtt1Nh1c5OTNuAf37Q==
+0NhZqdATkZ4=
+1IKx7GtShHg=
+h/OwYNYyciw=
+kGg6y+QB2f8=
+et0S9LyTiS4MhEBuylTk2g==
+goFZ0v8zcPc=
+cA6kPjEpsoJc5OTNuAf37Q==
+BZNVMNz30Z00iPLsFnfW9Q==
+FUNtEl6WjOUfVJH7s8MZNQ==
+1boew8BvzsDzIpTnzy5Qnw==
+/CIzubCbNzzkzFf+CBlT64JiFWxfW6DV
+teXiWF5i953EeSAoaVSW+wBBqlZ1ciHqSmARnfpRl/s=
+CTNjqF5g7EIfVJH7s8MZNQ==
+OOQuqjL/h5M16D9aZjbrRw==
+ZfWBQ/To1p1p84i3DCFu/g==
+Q449MTqnm/c=
+xmHl5DY7FyM=
+hV3gMCbT8x+fXEA0j/uq7Q==

File diff suppressed because it is too large
+ 49448 - 0
kernel/src/main/resources/cache/1/concept_diag_properties.dict


File diff suppressed because it is too large
+ 49448 - 0
kernel/src/main/resources/cache/1/hospital_diag_info.dict


File diff suppressed because it is too large
+ 1443 - 0
kernel/src/main/resources/cache/1/hospital_doctor_info.dict


File diff suppressed because it is too large
+ 2402 - 2402
kernel/src/main/resources/cache/3/hospital_doctor_info.dict


File diff suppressed because it is too large
+ 1 - 0
kernel/src/main/resources/cache/3/module_mapping.json


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

@@ -251,6 +251,7 @@ public class Content {
 
     public static String[] dateFormats = {
             "yyyy年MM月dd日HH时mm分",
+            "yyyy年MM月dd日HH:mm",
             "yyyy年MM月dd日H时mm分",
             "yyyy年MM月dd日HH时m分",
             "yyyy年MM月dd日H时m分",
@@ -306,5 +307,6 @@ public class Content {
             "yyyy.MM.dd",
             "yyyy-MM-ddHH:mm:ss.000",
             "yyyyMMddHH:mm",
+            "yyyy-MM-dd'T'HH:mm:ss",
     };
 }

+ 13 - 0
public/src/main/java/com/lantone/qc/pub/exception/AIException.java

@@ -0,0 +1,13 @@
+package com.lantone.qc.pub.exception;
+
+/**
+ * @ClassName : AIException
+ * @Description : 算法类例外集中处理
+ * @Author : 楼辉荣
+ * @Date: 2020-04-28 13:43
+ */
+public class AIException extends Exception {
+    public AIException(String msg) {
+        super(msg);
+    }
+}

+ 13 - 0
public/src/main/java/com/lantone/qc/pub/exception/CatalogueException.java

@@ -0,0 +1,13 @@
+package com.lantone.qc.pub.exception;
+
+/**
+ * @ClassName : CatalogueException
+ * @Description : 条目执行例外
+ * @Author : 楼辉荣
+ * @Date: 2020-04-28 13:45
+ */
+public class CatalogueException extends Exception {
+    public CatalogueException(String msg) {
+        super(msg);
+    }
+}

+ 13 - 0
public/src/main/java/com/lantone/qc/pub/exception/TransException.java

@@ -0,0 +1,13 @@
+package com.lantone.qc.pub.exception;
+
+/**
+ * @ClassName : TransException
+ * @Description : 客户数据解析例外处理
+ * @Author : 楼辉荣
+ * @Date: 2020-04-28 14:02
+ */
+public class TransException extends Exception {
+    public TransException(String msg) {
+        super(msg);
+    }
+}

+ 0 - 292
public/src/main/java/com/lantone/qc/pub/model/keys/StructTypeStandardKeys.java

@@ -1,292 +0,0 @@
-package com.lantone.qc.pub.model.keys;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-/**
- * @Description: 各个模块标准key,各地公用
- * @author: rengb
- * @time: 2020/3/5 14:50
- */
-public class StructTypeStandardKeys {
-
-    //各大模块的标准title
-    private static final List<String> model_titles = Lists.newArrayList(
-            "会诊",
-            "手术",
-            "转科记录",
-            "入院记录",
-            "输血/血制品病程记录",
-            "危急值记录",
-            "病危通知书",
-            "死亡病例讨论记录",
-            "死亡记录",
-            "疑难病例讨论记录",
-            "医嘱信息",
-            "值班交接制度",
-            "首次病程录",
-            "病案首页",
-            "出院小结",
-            "分级护理制度",
-            "抢救记录",
-            "病重通知书",
-            "阶段小结",
-            "查房记录"
-    );
-
-
-    //会诊-会诊记录的标准key
-    public static final List<String> consultationRecord = Lists.newArrayList(
-            "会诊情况",
-            "记录时间",
-            "记录医师"
-    );
-    //会诊-会诊申请单的标准key
-    public static final List<String> consultationApplication = Lists.newArrayList();
-    //会诊-会诊结果单的标准key
-    public static final List<String> consultationResults = Lists.newArrayList();
-
-
-    //手术-术后首次病程及谈话记录的标准key
-    public static final List<String> operationDiscussion = Lists.newArrayList(
-            "记录时间",
-            "手术时间",
-            "麻醉方式",
-            "手术方式",
-            "术中诊断",
-            "手术简要经过",
-            "患者术后情况",
-            "术后处理措施",
-            "术后可能出现的并发症及预防措施",
-            "术后注意事项",
-            "谈话医师签字",
-            "患者签名",
-            "患者签名时间",
-            "被授权人/代理人签名",
-            "代理人签名时间"
-    );
-    //手术-手术记录的标准key
-    public static final List<String> operationRecord = Lists.newArrayList(
-            "手术名称",
-            "麻醉方式",
-            "术前诊断",
-            "术后诊断",
-            "手术经过"
-    );
-    //手术-术前讨论、术前小结的标准key
-    public static final List<String> preoperativeDiscussion = Lists.newArrayList(
-            "讨论时间",
-            "讨论方式",
-            "参加人员",
-            "简要病情",
-            "讨论结论",
-            "经治医师签名",
-            "经治医师签字时间",
-            "主刀医师签名",
-            "主刀医师签字时间",
-            "手术指征",
-            "麻醉方式",
-            "术前准备内容",
-            "术前术后注意事项",
-            "可能意外和防范措施",
-            "拟行术式"
-    );
-
-
-    //转科记录-转入的标准key
-    public static final List<String> transferInto = Lists.newArrayList();
-    //转科记录-转出的标准key
-    public static final List<String> transferOut = Lists.newArrayList();
-
-
-    //入院记录的标准key
-    public static final List<String> beHospitalized = Lists.newArrayList(
-            "姓名",
-            "性别",
-            "年龄",
-            "民族",
-            "职业",
-            "出生地",
-            "婚姻",
-            "联系地址",
-            "病史陈述者",
-            "出生日期",
-            "户口地址",
-            "电话",
-            "入院日期",
-            "记录日期",
-            "主诉",
-            "现病史",
-            "既往史",
-            "个人史",
-            "婚育史",
-            "月经史",
-            "家族史",
-            "体格检查",
-            "专科体格检查",
-            "辅助检查",
-            "初步诊断",
-            "修正诊断",
-            "医师签名",
-            "补充诊断"
-    );
-
-    //输血/血制品病程记录的标准key
-    public static final List<String> clinicalBlood = Lists.newArrayList(
-            "输注原因",
-            "输注时间",
-            "输注开始",
-            "输注结束",
-            "输注种类、血型、数量",
-            "输注过程",
-            "输注后效果评价",
-            "记录医师",
-            "记录时间"
-    );
-
-    //危急值记录的标准key
-    public static final List<String> crisisValueReport = Lists.newArrayList(
-            "记录时间",
-            "记录医师",
-            "患者临床诊断",
-            "危急值记录内容",
-            "报告部门",
-            "报告人姓名",
-            "报告时间",
-            "接收人姓名",
-            "接收时间",
-            "病情分析及处理",
-            "医生签名",
-            "医生签名时间"
-    );
-
-    //病危通知书的标准key
-    public static final List<String> criticallyIllNotice = Lists.newArrayList();
-
-    //死亡病例讨论记录的标准key
-    public static final List<String> deathCaseDiscuss = Lists.newArrayList(
-            "记录时间",
-            "记录医师",
-            "入院时间",
-            "死亡时间",
-            "出院时间",
-            "入院诊断",
-            "死亡诊断",
-            "讨论时间",
-            "讨论地点",
-            "参加讨论人员",
-            "讨论主持人",
-            "讨论内容",
-            "死亡原因",
-            "结论"
-    );
-
-    //死亡记录的标准key
-    public static final List<String> deathRecord = Lists.newArrayList(
-            "姓名",
-            "性别",
-            "科别",
-            "床号",
-            "病案号",
-            "年龄",
-            "入院时间",
-            "死亡时间",
-            "入院情况",
-            "发病经过",
-            "入院诊断",
-            "诊疗经过",
-            "死亡原因",
-            "死亡诊断",
-            "记录医师",
-            "记录时间"
-    );
-
-    //疑难病例讨论记录的标准key
-    public static final List<String> difficultCaseDiscuss = Lists.newArrayList(
-            "记录时间",
-            "记录医师",
-            "入院时间",
-            "入院诊断",
-            "讨论时间",
-            "讨论地点",
-            "讨论目的",
-            "主持人",
-            "参加讨论者",
-            "讨论内容",
-            "结论"
-    );
-
-    //医嘱信息的标准key
-    public static final List<String> doctorAdvice = Lists.newArrayList();
-
-    //值班交接制度的标准key
-    public static final List<String> dutyShiftSystem = Lists.newArrayList(
-            "记录时间",
-            "记录医师"
-    );
-
-    //首次病程录的标准key
-    public static final List<String> firstCourseRecord = Lists.newArrayList(
-            "病例特点",
-            "初步诊断",
-            "诊断依据",
-            "鉴别诊断",
-            "诊疗计划",
-            "记录医师",
-            "记录时间"
-    );
-
-    //病案首页
-    public static final List<String> FirstPageRecord = Lists.newArrayList();
-
-    //出院小结的标准key
-    public static final List<String> leaveHospital = Lists.newArrayList(
-            "姓名",
-            "性别",
-            "年龄",
-            "床号",
-            "入院时间",
-            "出院时间",
-            "入院诊断",
-            "出院诊断",
-            "住院天数",
-            "入院情况",
-            "诊治经过",
-            "出院情况",
-            "出院医嘱",
-            "健康教育",
-            "随访计划",
-            "温馨提示",
-            "医师签名",
-            "签名时间"
-    );
-
-    //分级护理制度的标准key
-    public static final List<String> nursingSystem = Lists.newArrayList();
-
-    //抢救记录的标准key
-    public static final List<String> rescue = Lists.newArrayList(
-            "抢救时间",
-            "记录时间",
-            "记录医师",
-            "抢救过程",
-            "参与人员"
-    );
-
-    //病重通知书的标准key
-    public static final List<String> seriouslyIllNotice = Lists.newArrayList();
-
-    //阶段小结的标准key
-    public static final List<String> stagesSummary = Lists.newArrayList();
-
-    //查房记录的标准key
-    public static final List<String> threeLevelWard = Lists.newArrayList(
-            "查房标题",
-            "病情记录",
-            "查房日期",
-            "记录时间",
-            "记录医师"
-    );
-
-}

+ 4 - 4
trans/src/main/java/com/lantone/qc/trans/comsis/ModelDocGenerate.java

@@ -343,22 +343,22 @@ public class ModelDocGenerate {
         DiagLabel initialDiagLabel = new DiagLabel();
         initialDiagLabel.setText(structureMap.get("初步诊断"));
         firstCourseRecordDoc.setInitialDiagLabel(initialDiagLabel);
-        structureMap.remove("初步诊断");
+//        structureMap.remove("初步诊断");
 
         CaseCharacteristicLabel caseCharacteristicLabel = new CaseCharacteristicLabel();
         caseCharacteristicLabel.setText(structureMap.get("病例特点"));
         firstCourseRecordDoc.setCaseCharacteristicLabel(caseCharacteristicLabel);
-        structureMap.remove("病例特点");
+//        structureMap.remove("病例特点");
 
         DiagnosisLabel diagnosisLabel = new DiagnosisLabel();
         diagnosisLabel.setText(structureMap.get("诊断依据"));
         firstCourseRecordDoc.setDiagnosisLabel(diagnosisLabel);
-        structureMap.remove("诊断依据");
+//        structureMap.remove("诊断依据");
 
         DiagLabel differentialDiagLabel = new DiagLabel();
         differentialDiagLabel.setText(structureMap.get("鉴别诊断"));
         firstCourseRecordDoc.setDifferentialDiagLabel(differentialDiagLabel);
-        structureMap.remove("鉴别诊断");
+//        structureMap.remove("鉴别诊断");
 
         TreatPlanLabel treatPlanLabel = new TreatPlanLabel();
         treatPlanLabel.setText(structureMap.get("诊疗计划"));

+ 45 - 0
trans/src/main/java/com/lantone/qc/trans/comsis/ModuleMappingUtil.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.trans.comsis;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import org.apache.commons.collections.MapUtils;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 页面模板映射工具类
+ * @author: rengb
+ * @time: 2020/4/30 10:03
+ */
+public class ModuleMappingUtil {
+
+    public static Map<Set<String>, String> xmlDataTypeModuleInfo = Maps.newLinkedHashMap();
+
+    public static String getXmlDataTypeModuleId(Map<String, String> sourceMap) {
+        if (MapUtils.isEmpty(sourceMap)) {
+            return null;
+        }
+        Set<String> set = sourceMap.keySet();
+        List list = new ArrayList(set);
+        list.sort(new Comparator<String>() {
+            @Override
+            public int compare(String arg0, String arg1) {
+                return arg0.compareTo(arg1);//这是顺序
+            }
+        });
+        set = Sets.newLinkedHashSet(list);
+        //                if (set.size() == 335) {
+        //                    System.out.println(" ");
+        //                    for (Map.Entry<Set<String>, String> entry : xmlDataTypeModuleInfo.entrySet()) {
+        //                        System.out.println(StringUtils.join(entry.getKey(), ","));
+        //                    }
+        //                    System.out.println(StringUtils.join(set, ","));
+        //                }
+        return xmlDataTypeModuleInfo.get(set);
+    }
+
+}

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/comsis/OrdinaryAssistant.java

@@ -18,6 +18,10 @@ public class OrdinaryAssistant {
 
     public static Map<String, String> mapKeyContrast(Map<String, String> sourceMap, List<String> keyContrasts) {
         Map<String, String> retMap = Maps.newHashMap();
+        String modeId = ModuleMappingUtil.getXmlDataTypeModuleId(sourceMap);
+        if (StringUtil.isNotBlank(modeId)) {
+            retMap.put("mode_id", modeId);
+        }
         Map<String, String> sourceMap_ = MapUtil.copyMap((Map) sourceMap);
         String[] arry = null;
         String sourceKey = null, targetKey;

+ 2 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouBeHospitalizedDocTrans.java

@@ -63,6 +63,7 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
             "信息来源=病史陈述者",
             "生日=出生日期",
             "病人出生日期=出生日期",
+            "新生儿出生日期=出生日期",
             "出生地址=户口地址",
             "本人电话=电话",
             "入院日期=入院日期",
@@ -80,6 +81,7 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
             "医生=医师签名",
             "补充诊断=补充诊断",
             "户口地址=联系地址",
+            "家属提供的信息可信吗=病史可靠性",
             "关系=病史陈述者"
             );
 

+ 5 - 2
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicBloodEffectDocTrans.java

@@ -17,6 +17,7 @@ import java.util.Map;
  * @Date: 2020-04-19 17:53
  */
 public class TaiZhouClinicBloodEffectDocTrans extends ModelDocTrans {
+
     @Override
     public List<ClinicBloodEffectDoc> extract(MedrecVo medrecVo) {
         List<ClinicBloodEffectDoc> retList = Lists.newArrayList();
@@ -29,13 +30,15 @@ public class TaiZhouClinicBloodEffectDocTrans extends ModelDocTrans {
 
     private ClinicBloodEffectDoc getClinicBloodEffectDoc(String content) {
         Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         ClinicBloodEffectDoc clinicBloodEffectDoc = new ClinicBloodEffectDoc();
         clinicBloodEffectDoc.setStructureMap(structureMap);
-        clinicBloodEffectDoc.setPageData((Map)sourceMap);
+        clinicBloodEffectDoc.setPageData((Map) structureMap);
+
         return clinicBloodEffectDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList();
+
 }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicalBloodDocTrans.java

@@ -33,14 +33,14 @@ public class TaiZhouClinicalBloodDocTrans extends ModelDocTrans {
 
         ClinicalBloodDoc clinicalBloodDoc = new ClinicalBloodDoc();
         clinicalBloodDoc.setStructureMap(structureMap);
-        clinicalBloodDoc.setPageData((Map) sourceMap);
+        clinicalBloodDoc.setPageData((Map) structureMap);
         return clinicalBloodDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
+            "开始时间=输注开始",
             "医生=记录医师",
             "结束时间=输注结束",
-            "开始时间=输注开始",
             "内容=输注后效果评价"
     );
 

+ 20 - 24
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouConsultationDocTrans.java

@@ -85,20 +85,20 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
     }
 
     private ConsultationRecordDoc getConsultationRecordDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, consultationRecord_keyContrasts);
 
         ConsultationRecordDoc consultationRecordDoc = new ConsultationRecordDoc();
         consultationRecordDoc.setStructureMap(structureMap);
-        consultationRecordDoc.setPageData((Map)sourceMap);
+        consultationRecordDoc.setPageData((Map) structureMap);
         return consultationRecordDoc;
     }
 
     // 会诊记录映射字段
     private List<String> consultationRecord_keyContrasts = Lists.newArrayList(
-            "会诊执行情况=会诊情况",
             "事件日期=记录时间",
-            "医生=记录医师"
+            "医生=记录医师",
+            "会诊执行情况=会诊情况"
     );
 
 
@@ -124,24 +124,23 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
     }
 
     private ConsultationResultsDoc getConsultationResultsDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, consultationResults_keyContrasts);
 
         ConsultationResultsDoc consultationResultsDoc = new ConsultationResultsDoc();
         consultationResultsDoc.setStructureMap(structureMap);
-        consultationResultsDoc.setPageData((Map)sourceMap);
+        consultationResultsDoc.setPageData((Map) structureMap);
         return consultationResultsDoc;
     }
 
     // 会诊结果映射字段
     private List<String> consultationResults_keyContrasts = Lists.newArrayList(
-        "事件日期1(会诊申请日期)=会诊申请日期",
-//        "病史描述=会诊到达时间",
-        "病史描述=病史回顾描述",
-        "会诊诊断=当前诊断",
-        "记录及建议=会诊意见",
-        "医生=医师签名",
-        "病历日期=会诊日期及时间"
+            "会诊诊断=当前诊断",
+            "事件日期1(会诊申请日期)=会诊申请日期",
+            "医生=医师签名",
+            "病史描述=病史回顾描述",
+            "病历日期=会诊日期及时间",
+            "记录及建议=会诊意见"
     );
 
 
@@ -167,30 +166,27 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
     }
 
     private ConsultationApplicationDoc getConsultationApplicationDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, consultationApplication_keyContrasts);
 
         ConsultationApplicationDoc consultationApplicationDoc = new ConsultationApplicationDoc();
         consultationApplicationDoc.setStructureMap(structureMap);
-        consultationApplicationDoc.setPageData((Map)sourceMap);
+        consultationApplicationDoc.setPageData((Map) structureMap);
 
         return consultationApplicationDoc;
     }
 
     // 会诊申请单映射字段
     private List<String> consultationApplication_keyContrasts = Lists.newArrayList(
-            "本人姓名=姓名",
-            "性别=性别",
-            "病区=病区",
-            "床号=床号",
-            "病历号=病案号",
+            "事件日期=会诊时间",
+            "会诊类别=会诊分类",
             "简要病情=简要病情及诊疗",
             "会诊理由和目的=申请理由目的",
+            "本人姓名=姓名",
+            "病历号=病案号",
             "会诊科室=受邀科室",
-            "会诊类别=会诊分类",
-            "事件日期=会诊时间",
-            "临床科室=会诊地点",
-            "申请医生=签名"
+            "申请医生=签名",
+            "临床科室=会诊地点"
     );
 
 }

+ 2 - 12
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCrisisValueReportDocTrans.java

@@ -33,21 +33,11 @@ public class TaiZhouCrisisValueReportDocTrans extends ModelDocTrans {
 
         CrisisValueReportDoc crisisValueReportDoc = new CrisisValueReportDoc();
         crisisValueReportDoc.setStructureMap(structureMap);
-        crisisValueReportDoc.setPageData((Map)sourceMap);
+        crisisValueReportDoc.setPageData((Map) structureMap);
 
         return crisisValueReportDoc;
     }
 
-    private List<String> keyContrasts = Lists.newArrayList(
-            "姓名=",
-            "病历号=",
-            "病历日期=",
-            "床号=",
-            "临床科室=",
-            "病人基本信息=",
-            "医生=",
-            "内容=",
-            "性别="
-    );
+    private List<String> keyContrasts = Lists.newArrayList();
 
 }

+ 2 - 27
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCriticallyIllNoticeDocTrans.java

@@ -33,36 +33,11 @@ public class TaiZhouCriticallyIllNoticeDocTrans extends ModelDocTrans {
 
         CriticallyIllNoticeDoc criticallyIllNoticeDoc = new CriticallyIllNoticeDoc();
         criticallyIllNoticeDoc.setStructureMap(structureMap);
-        criticallyIllNoticeDoc.setPageData((Map)sourceMap);
+        criticallyIllNoticeDoc.setPageData((Map) structureMap);
 
         return criticallyIllNoticeDoc;
     }
 
-    private List<String> keyContrasts = Lists.newArrayList(
-            "关系=",
-            "家属信息=",
-            "患者签字=",
-            "当前诊断=",
-            "床号=",
-            "审核人=",
-            "病人基本信息=",
-            "审核日期=",
-            "事件日期=",
-            "家属意见=",
-            "医生=",
-            "性别=",
-            "本人姓名=",
-            "病历号=",
-            "病历日期=",
-            "入院日期=",
-            "临床科室=",
-            "简要病情=",
-            "年龄单位=",
-            "事件基本信息=",
-            "审核=",
-            "病历状态=",
-            "年龄=",
-            "内容="
-    );
+    private List<String> keyContrasts = Lists.newArrayList();
 
 }

+ 5 - 39
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java

@@ -21,55 +21,21 @@ public class TaiZhouDeathCaseDiscussDocTrans extends ModelDocTrans {
     public DeathCaseDiscussDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
         Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         DeathCaseDiscussDoc deathCaseDiscussDoc = new DeathCaseDiscussDoc();
         deathCaseDiscussDoc.setStructureMap(structureMap);
-        deathCaseDiscussDoc.setPageData((Map)sourceMap);
+        deathCaseDiscussDoc.setPageData((Map) structureMap);
+
         return deathCaseDiscussDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
-            "审核人=",
-            "讨论地点=",
-            "事件日期=",
-            "医生=",
-            "专科检查=",
-            "参加人员及职称=",
-            "参加人员及职称(医生)=",
-            "简要病情=",
-            "事件基本信息=",
-            "职务=",
-            "血压=",
-            "影像学检查=",
-            "年龄=",
-            "讨论小结=",
-            "主诉=",
             "主持人=讨论主持人",
-            "当前诊断=",
-            "床号=",
-            "实验室检查=",
-            "病人基本信息=",
-            "死亡原因=",
-            "审核日期=",
-            "记录人=",
             "死亡日期=死亡时间",
-            "性别=",
-            "辅助检查结果=",
             "讨论意见=讨论内容",
-            "本人姓名=",
-            "病历号=",
-            "病历日期=",
-            "职称=",
-            "现病史-发病情况=入院情况",
-            "脉搏=",
-            "呼吸=",
-            "入院日期=",
-            "临床科室=",
-            "审核=",
-            "病历状态=",
-            "医生=记录医师",
-            "体温(耳)="
+            "现病史- 发病情况=入院情况",
+            "医生=记录医师"
     );
 
 }

+ 4 - 34
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java

@@ -21,50 +21,20 @@ public class TaiZhouDeathRecordDocTrans extends ModelDocTrans {
     public DeathRecordDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
         Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         DeathRecordDoc deathRecordDoc = new DeathRecordDoc();
         deathRecordDoc.setStructureMap(structureMap);
-        deathRecordDoc.setPageData((Map)sourceMap);
+        deathRecordDoc.setPageData((Map) structureMap);
+
         return deathRecordDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
-            "入院诊断=",
-            "审核人=",
-            "事件日期=",
-            "医生=",
-            "专科检查=",
-            "事件基本信息=",
-            "血压=",
-            "年龄=",
-            "影像学检查=",
-            "主诉=",
             "当前诊断=死亡诊断",
-            "床号=",
-            "病人基本信息=",
-            "实验室检查=",
-            "就诊次数=",
-            "死亡原因=",
-            "审核日期=",
-            "入院情况=",
             "死亡日期=死亡时间",
-            "辅助检查结果=",
-            "性别=",
-            "本人姓名=",
-            "病历号=",
             "初步诊断=入院诊断",
-            "病历日期=",
-            "现病史-发病情况=",
-            "呼吸=",
-            "入院日期=",
-            "脉搏=",
-            "临床科室=",
-            "诊治经过=诊疗经过",
-            "病历状态=",
-            "审核=",
-            "体温(耳)=",
-            "入院病情="
+            "诊治经过=诊疗经过"
     );
 
 }

+ 4 - 3
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDifficultCaseDiscussDocTrans.java

@@ -28,12 +28,13 @@ public class TaiZhouDifficultCaseDiscussDocTrans extends ModelDocTrans {
     }
 
     private DifficultCaseDiscussDoc getDifficultCaseDiscussDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         DifficultCaseDiscussDoc difficultCaseDiscussDoc = new DifficultCaseDiscussDoc();
         difficultCaseDiscussDoc.setStructureMap(structureMap);
-        difficultCaseDiscussDoc.setPageData((Map)sourceMap);
+        difficultCaseDiscussDoc.setPageData((Map) structureMap);
+
         return difficultCaseDiscussDoc;
     }
 

+ 3 - 5
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstCourseRecordDocTrans.java

@@ -38,7 +38,7 @@ public class TaiZhouFirstCourseRecordDocTrans extends ModelDocTrans {
                 "脉搏",
                 "体温",
                 "血压"
-            ))
+                ))
         );
         // 诊断依据=性别+年龄+主诉+现病史-发病情况+专科检查+实验室检查+影像学检查+辅助检查结果+呼吸+脉搏+体温+血压
         structureMap.put("诊断依据", MapUtil.getSelectString(structureMap, Arrays.asList(
@@ -65,15 +65,13 @@ public class TaiZhouFirstCourseRecordDocTrans extends ModelDocTrans {
 
         // 诊疗计划
         FirstCourseRecordDoc firstCourseRecordDoc = ModelDocGenerate.firstCourseRecordDocGen(structureMap);
-        firstCourseRecordDoc.setPageData((Map)sourceMap);
+        firstCourseRecordDoc.setPageData((Map) structureMap);
         return firstCourseRecordDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
-            "初步诊断=初步诊断",
-            "鉴别诊断=鉴别诊断",
             "医生=记录医师",
             "病历日期=记录时间"
-            );
+    );
 
 }

+ 5 - 13
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouLeaveHospitalDocTrans.java

@@ -21,33 +21,25 @@ public class TaiZhouLeaveHospitalDocTrans extends ModelDocTrans {
     public LeaveHospitalDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
 
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
         LeaveHospitalDoc leaveHospitalDoc = new LeaveHospitalDoc();
         leaveHospitalDoc.setStructureMap(structureMap);
-        leaveHospitalDoc.setPageData((Map)sourceMap);
+        leaveHospitalDoc.setPageData((Map) structureMap);
+
         return leaveHospitalDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
             "本人姓名=姓名",
-            "性别=性别",
-            "年龄=年龄",
-            "床号=床号",
             "入院日期=入院时间",
-            "出院时间=出院时间",
-            "入院诊断=入院诊断",
-            "出院诊断=出院诊断",
             "实际住院天数=住院天数",
-            "入院情况=入院情况",
-            "诊治经过=诊治经过",
             "出院时情况=出院情况",
-            "出院医嘱=出院医嘱",
-//            "注意事项=健康教育",
+            //            "注意事项=健康教育",
             "复诊时间=随访计划",
             "出院指导=健康教育",
             "医生=医师签名",
             "病历日期=签名时间"
-            );
+    );
 
 }

+ 13 - 25
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java

@@ -28,7 +28,7 @@ import java.util.Set;
 public class TaiZhouOperationDocTrans extends ModelDocTrans {
 
     /**
-     * 手术文档包含:术后首次病程及谈话记录;手术记录;术前讨论、术前小结
+     * 手术文档包含:术后首次病程及谈话记录;手术记录;术前讨论、术前小结;手术知情同意书;手术安全核查表
      *
      * @param medrecVo
      * @return
@@ -91,12 +91,12 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationDiscussionDoc getOperationDiscussionDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationDiscussion_keyContrasts);
 
         OperationDiscussionDoc operationDiscussionDoc = new OperationDiscussionDoc();
         operationDiscussionDoc.setStructureMap(structureMap);
-        operationDiscussionDoc.setPageData((Map)sourceMap);
+        operationDiscussionDoc.setPageData((Map) structureMap);
 
         return operationDiscussionDoc;
     }
@@ -126,26 +126,20 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationRecordDoc getOperationRecordDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationRecord_keyContrasts);
 
         OperationRecordDoc operationRecordDoc = new OperationRecordDoc();
         operationRecordDoc.setStructureMap(structureMap);
-        operationRecordDoc.setPageData((Map)sourceMap);
-//        MapUtil.console(structureMap, "手术记录");
+        operationRecordDoc.setPageData((Map) structureMap);
         return operationRecordDoc;
     }
 
     // 手术记录
     private List<String> operationRecord_keyContrasts = Lists.newArrayList(
-            "手术名称=手术名称",
-            "麻醉方式=麻醉方式",
-            "术前诊断=术前诊断",
-            "术后诊断=术后诊断",
-            "手术经过=手术经过",
             "结束时间=手术结束时间",
             "开始时间=手术开始时间"
-            );
+    );
 
 
     /**********************************************术前讨论、术前小结****************************************************/
@@ -170,28 +164,23 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private PreoperativeDiscussionDoc getPreoperativeDiscussionDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts);
 
         PreoperativeDiscussionDoc preoperativeDiscussionDoc = new PreoperativeDiscussionDoc();
         preoperativeDiscussionDoc.setStructureMap(structureMap);
-        preoperativeDiscussionDoc.setPageData((Map)sourceMap);
-//        MapUtil.console(structureMap, "术前讨论、术前小结");
+        preoperativeDiscussionDoc.setPageData((Map) structureMap);
         return preoperativeDiscussionDoc;
     }
 
     private List<String> preoperativeDiscussion_keyContrasts = Lists.newArrayList(
-            "讨论时间=讨论时间",
-            "讨论方式=讨论方式",
             "参加人员及职称=参加人员",
-            "简要病情=简要病情",
             "主刀医师=主刀医师签名",
-            "主刀医师签字时间=主刀医师签字时间",
-            "手术指征=手术指征",
-            "麻醉方式=麻醉方式",
             "术前准备=术前准备内容",
             "注意事项=术前术后注意事项",
+            "辅助检查结果=辅助检查",
             "术中、术后防范措施=可能意外和防范措施",
+            "现病史- 发病情况=发病经过",
             "拟施手术名称和方式=拟行术式"
     );
 
@@ -217,13 +206,12 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationInformedConsentDoc getOperationInformedConsentDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationInformedConsent_keyContrasts);
 
         OperationInformedConsentDoc operationInformedConsentDoc = new OperationInformedConsentDoc();
         operationInformedConsentDoc.setStructureMap(structureMap);
-        operationInformedConsentDoc.setPageData((Map) sourceMap);
-//        MapUtil.console(structureMap, "手术知情同意书");
+        operationInformedConsentDoc.setPageData((Map) structureMap);
         return operationInformedConsentDoc;
     }
 
@@ -272,7 +260,7 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
 
         OperationSafetyChecklistDoc operationSafetyChecklistDoc = new OperationSafetyChecklistDoc();
         operationSafetyChecklistDoc.setStructureMap(structureMap);
-        operationSafetyChecklistDoc.setPageData((Map) sourceMap);
+        operationSafetyChecklistDoc.setPageData((Map) structureMap);
 
         return operationSafetyChecklistDoc;
     }

+ 3 - 2
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouPathologyShipDocTrans.java

@@ -29,13 +29,14 @@ public class TaiZhouPathologyShipDocTrans extends ModelDocTrans {
 
     private PathologyShipDoc getPathologyShipDoc(String content) {
         Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         PathologyShipDoc pathologyShipDoc = new PathologyShipDoc();
         pathologyShipDoc.setStructureMap(structureMap);
-        pathologyShipDoc.setPageData((Map)sourceMap);
+        pathologyShipDoc.setPageData((Map) structureMap);
         return pathologyShipDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList("检验标本=送检标本名称");
+
 }

+ 4 - 3
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouRescueDocTrans.java

@@ -28,12 +28,13 @@ public class TaiZhouRescueDocTrans extends ModelDocTrans {
     }
 
     private RescueDoc getRescueDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         RescueDoc rescueDoc = new RescueDoc();
         rescueDoc.setStructureMap(structureMap);
-        rescueDoc.setPageData((Map)sourceMap);
+        rescueDoc.setPageData((Map) structureMap);
+
         return rescueDoc;
     }
 

+ 5 - 29
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouSeriouslyIllNoticeDocTrans.java

@@ -28,40 +28,16 @@ public class TaiZhouSeriouslyIllNoticeDocTrans extends ModelDocTrans {
     }
 
     private SeriouslyIllNoticeDoc getSeriouslyIllNoticeDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         SeriouslyIllNoticeDoc seriouslyIllNoticeDoc = new SeriouslyIllNoticeDoc();
         seriouslyIllNoticeDoc.setStructureMap(structureMap);
-        seriouslyIllNoticeDoc.setPageData((Map)sourceMap);
+        seriouslyIllNoticeDoc.setPageData((Map) structureMap);
+
         return seriouslyIllNoticeDoc;
     }
 
-    private List<String> keyContrasts = Lists.newArrayList(
-            "关系=",
-            "家属信息=",
-            "患者签字=",
-            "当前诊断=",
-            "床号=",
-            "审核人=",
-            "病人基本信息=",
-            "审核日期=",
-            "事件日期=",
-            "家属意见=",
-            "医生=",
-            "性别=",
-            "本人姓名=",
-            "病历号=",
-            "病历日期=",
-            "入院日期=",
-            "临床科室=",
-            "简要病情=",
-            "年龄单位=",
-            "事件基本信息=",
-            "审核=",
-            "病历状态=",
-            "年龄=",
-            "内容="
-    );
+    private List<String> keyContrasts = Lists.newArrayList();
 
 }

+ 5 - 46
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouStagesSummaryDocTrans.java

@@ -28,57 +28,16 @@ public class TaiZhouStagesSummaryDocTrans extends ModelDocTrans {
     }
 
     private StagesSummaryDoc getStagesSummaryDoc(String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         StagesSummaryDoc stagesSummaryDoc = new StagesSummaryDoc();
         stagesSummaryDoc.setStructureMap(structureMap);
-        stagesSummaryDoc.setPageData((Map)sourceMap);
+        stagesSummaryDoc.setPageData((Map) structureMap);
+        
         return stagesSummaryDoc;
     }
 
-    private List<String> keyContrasts = Lists.newArrayList(
-            "入院诊断=",
-            "审核人=",
-            "事件日期=",
-            "医生=",
-            "专科检查=",
-            "简要病情=",
-            "事件基本信息=",
-            "血压=",
-            "年龄=",
-            "影像学检查=",
-            "内容=",
-            "科主任=",
-            "治疗计划和措施=",
-            "主诉=",
-            "床号=",
-            "主任医生=",
-            "当前诊断=",
-            "病人基本信息=",
-            "实验室检查=",
-            "医疗组长=",
-            "就诊次数=",
-            "审核日期=",
-            "患者一般情况=",
-            "入院情况=",
-            "性别=",
-            "辅助检查结果=",
-            "本人姓名=",
-            "病历号=",
-            "初步诊断=",
-            "病历日期=",
-            "现病史-发病情况=",
-            "呼吸=",
-            "脉搏=",
-            "入院日期=",
-            "临床科室=",
-            "年龄单位=",
-            "诊治经过=",
-            "病历状态=",
-            "审核=",
-            "体温(耳)=",
-            "目前情况="
-    );
+    private List<String> keyContrasts = Lists.newArrayList();
 
 }

+ 13 - 26
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouThreeLevelWardDocTrans.java

@@ -10,7 +10,6 @@ import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
 import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.List;
@@ -37,7 +36,7 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
     }
 
     private void classifyThreeLevelWardDoc(ThreeLevelWardDoc result, String content) {
-        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZWithReplace(content); // xml原始数据给华卓
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         if (StringUtils.isEmpty(structureMap.get("查房日期"))) {
@@ -56,16 +55,16 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
         //总的查房记录 汇总
         ThreeLevelWardDoc allDoctorWradDoc = new ThreeLevelWardDoc();
         allDoctorWradDoc.setStructureMap(structureMap);
-        allDoctorWradDoc.setPageData((Map)sourceMap);
+        allDoctorWradDoc.setPageData((Map) structureMap);
         result.addAllDoctorWradDoc(allDoctorWradDoc);
 
         //主任医师查房
-        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(sourceMap, structureMap);
+        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(structureMap);
         if (directorDoctorWardDoc != null) {
-            result.addDirectorDoctorWardDoc(findDirectorDoctorWardDoc(sourceMap, structureMap));
+            result.addDirectorDoctorWardDoc(findDirectorDoctorWardDoc(structureMap));
         }
         //主治医师查房
-        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(sourceMap, structureMap);
+        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(structureMap);
         if (attendingDoctorWardDoc != null) {
             result.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
         }
@@ -73,58 +72,46 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
         if (directorDoctorWardDoc == null && attendingDoctorWardDoc == null) {
             GeneralDoctorWardDoc generalDoctorWardDoc = new GeneralDoctorWardDoc();
             generalDoctorWardDoc.setStructureMap(structureMap);
-            generalDoctorWardDoc.setPageData((Map)sourceMap);
+            generalDoctorWardDoc.setPageData((Map) structureMap);
             result.addGeneralDoctorWardDoc(generalDoctorWardDoc);
         }
     }
 
     /**
      * 主任医师查房
-     * @param sourceMap
+     *
      * @param structureMap
      */
-    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> sourceMap, Map<String, String> structureMap) {
+    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> structureMap) {
         String title = structureMap.get("查房标题");
         title = subTitle(title);    //标题有代字
 
         DirectorDoctorWardDoc directorDoctorWardDoc = null;
-        if (StringUtils.isNotEmpty(title) && title.contains("主任") ) {
+        if (StringUtils.isNotEmpty(title) && title.contains("主任")) {
             directorDoctorWardDoc = new DirectorDoctorWardDoc();
             directorDoctorWardDoc.setStructureMap(structureMap);
-            directorDoctorWardDoc.setPageData((Map)sourceMap);
+            directorDoctorWardDoc.setPageData((Map) structureMap);
         }
         return directorDoctorWardDoc;
     }
 
     /**
      * 主治医师查房
-     * @param sourceMap
+     *
      * @param structureMap
      */
-    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> sourceMap, Map<String, String> structureMap) {
+    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> structureMap) {
         String title = structureMap.get("查房标题");
         title = subTitle(title);    //标题有代字
         AttendingDoctorWardDoc attendingDoctorWardDoc = null;
         if (StringUtils.isNotEmpty(title) && title.contains("主治")) {
             attendingDoctorWardDoc = new AttendingDoctorWardDoc();
             attendingDoctorWardDoc.setStructureMap(structureMap);
-            attendingDoctorWardDoc.setPageData((Map)sourceMap);
+            attendingDoctorWardDoc.setPageData((Map) structureMap);
         }
         return attendingDoctorWardDoc;
     }
 
-    /**
-     * 普通医师查房
-     * @param threeLevelWardDoc
-     */
-    private GeneralDoctorWardDoc findGeneralDoctorWardDoc(ThreeLevelWardDoc threeLevelWardDoc) {
-        GeneralDoctorWardDoc generalDoctorWardDoc = new GeneralDoctorWardDoc();
-        generalDoctorWardDoc.setStructureMap(threeLevelWardDoc.getStructureMap());
-        generalDoctorWardDoc.setText(threeLevelWardDoc.getText());
-        generalDoctorWardDoc.setPageData(threeLevelWardDoc.getPageData());
-        return generalDoctorWardDoc;
-    }
-
     private List<String> keyContrasts = Lists.newArrayList(
             "事件日期=记录时间",
             "事件日期=查房日期",

+ 4 - 7
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouTransferRecordDocTrans.java

@@ -2,7 +2,6 @@ package com.lantone.qc.trans.taizhou;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
@@ -10,9 +9,7 @@ import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
-import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
-import com.lantone.qc.trans.comsis.Preproc;
 import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
 
 import java.util.ArrayList;
@@ -20,7 +17,6 @@ import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.TreeMap;
 
 /**
@@ -143,7 +139,8 @@ public class TaiZhouTransferRecordDocTrans extends ModelDocTrans {
         TransferIntoDoc transferIntoDoc = new TransferIntoDoc();
         transferIntoDoc.setText(content);
         transferIntoDoc.setStructureMap(structureMap);
-        transferIntoDoc.setPageData((Map)sourceMap);
+        transferIntoDoc.setPageData((Map) sourceMap);
+
         return transferIntoDoc;
     }
 
@@ -176,7 +173,7 @@ public class TaiZhouTransferRecordDocTrans extends ModelDocTrans {
         TransferRecordDoc transferAllDoc = new TransferRecordDoc();
         transferAllDoc.setText(content);
         transferAllDoc.setStructureMap(structureMap);
-        transferAllDoc.setPageData((Map)sourceMap);
+        transferAllDoc.setPageData((Map) sourceMap);
         return transferAllDoc;
     }
 
@@ -208,7 +205,7 @@ public class TaiZhouTransferRecordDocTrans extends ModelDocTrans {
         TransferOutDoc transferOutDoc = new TransferOutDoc();
         transferOutDoc.setText(content);
         transferOutDoc.setStructureMap(structureMap);
-        transferOutDoc.setPageData((Map)sourceMap);
+        transferOutDoc.setPageData((Map) sourceMap);
 
         return transferOutDoc;
     }

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaizhouDocTrans.java

@@ -200,7 +200,8 @@ public class TaizhouDocTrans extends DocTrans {
             inputInfo.getPageData().put("阶段小结", inputInfo.getStagesSummaryDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
         if (ListUtil.isNotEmpty(inputInfo.getThreeLevelWardDocs())) {
-            inputInfo.getPageData().put("查房记录", inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+            List<Map<String, Object>> pageDatas = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList());
+            inputInfo.getPageData().put("查房记录", pageDatas);
         }
         if (ListUtil.isNotEmpty(inputInfo.getPathologyShipDocs())) {
             inputInfo.getPageData().put("病理检验送检单", inputInfo.getPathologyShipDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/util/TzXmlUtil.java

@@ -44,7 +44,7 @@ public class TzXmlUtil {
                 if (StringUtil.isBlank(ename)) {
                     continue;
                 }
-                ename = StringUtil.removeBlank(ename);
+//                ename = StringUtil.removeBlank(ename);
                 setnomark = emrTermElement.attributeValue("setnomark");
                 setnomark = setnomark == null ? "" : setnomark;
                 text = emrTermElement.getStringValue().trim();