Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

wangyu před 5 roky
rodič
revize
3e6e76cd2a

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

@@ -23,7 +23,8 @@ public class FIRP0187 extends QCCatalogue {
             Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
             String outWay = firstpageStructureMap.get(Content.outWay).toString();
             String deadAutopsy = firstpageStructureMap.get(Content.deadAutopsy).toString();
-            if (!CatalogueUtil.isEmpty(outWay) && !outWay.contains("死亡") && !CatalogueUtil.isEmpty(deadAutopsy)){
+            if (!CatalogueUtil.isEmpty(outWay) && !outWay.contains("死亡")
+                    && !CatalogueUtil.isEmpty(deadAutopsy) && !deadAutopsy.trim().equals("-")){
                 status.set("-1");
             }
         }

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

@@ -211,6 +211,15 @@ public class QCTestController {
                     }
                     medrec.add(medrecVo);
                     details = new ArrayList<>();
+                } else if (!label.equals(String.valueOf(r3)) && StringUtils.isNotEmpty(label) && (label.equals("会诊记录") || label.equals("会诊申请单") || label.equals("会诊结果单"))) {
+                    MedrecVo medrecVo = createLevelMedrecVo(medrec, details, "会诊", label);
+                    medrec.add(medrecVo);
+                    details = new ArrayList<>();
+                }  else if (!label.equals(String.valueOf(r3)) && StringUtils.isNotEmpty(label)
+                        && (label.equals("术后首次病程及谈话记录") || label.equals("手术记录") || label.equals("术前讨论、术前小结") || label.equals("手术知情同意书") || label.equals("手术安全核查表"))) {
+                    MedrecVo medrecVo = createLevelMedrecVo(medrec, details, "手术", label);
+                    medrec.add(medrecVo);
+                    details = new ArrayList<>();
                 } else if (!label.equals(String.valueOf(r3)) && StringUtils.isNotEmpty(label)) {
                     MedrecVo medrecVo = new MedrecVo();
                     medrecVo.setTitle(label);
@@ -247,6 +256,30 @@ public class QCTestController {
         }
         return queryVoMap;
     }
+
+    private MedrecVo createLevelMedrecVo(List<MedrecVo> medrec, List<String> details, String label, String level_1) {
+        MedrecVo medrecVo = null;
+        for (MedrecVo mv : medrec) {
+            if (label.equals(mv.getTitle())) {
+                medrecVo = mv;
+                medrec.remove(mv);
+            }
+        }
+        Map<String, List<String>> m = null;
+        if (medrecVo == null) {
+            m = new HashMap<>();
+            medrecVo = new MedrecVo();
+            medrecVo.setTitle(label);
+        } else {
+            m = (Map) medrecVo.getContent().get("content");
+        }
+        m.put(level_1, details);
+        Map<String, Object> cur = new HashMap<>();
+        cur.put("content", m);
+        medrecVo.setContent(cur);
+        return medrecVo;
+    }
+
     public int number(List<String> labels,String lab){
         int initNume = 0;
         if(labels != null && labels.size()>0){

+ 13 - 0
public/src/main/java/com/lantone/qc/pub/util/MapUtil.java

@@ -210,6 +210,19 @@ public class MapUtil {
         System.out.println("***************打印map内容结束******************");
     }
 
+    /**
+     * 打印key=value结构
+     *
+     * @param map
+     */
+    public static void console(Map<String, String> map, String title) {
+        System.out.println("***************打印【" + title + "】内容开始******************");
+        for (String key : map.keySet()) {
+            System.out.println(key + "=" + map.get(key));
+        }
+        System.out.println("***************打印【" + title + "】内容结束******************");
+    }
+
     public static void main(String[] args) {
         Map<String, String> dataMap = new HashMap<>();
         dataMap.put("主诉","主诉");

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

@@ -41,7 +41,6 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         BeHospitalizedDoc beHospitalizedDoc = beHospitalizedDocGen(structureMap); // 不走共用
-        beHospitalizedDoc.setText(content);
         beHospitalizedDoc.setPageData((Map)sourceMap);
         return beHospitalizedDoc;
     }

+ 0 - 3
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouConsultationDocTrans.java

@@ -90,7 +90,6 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
 
         ConsultationRecordDoc consultationRecordDoc = new ConsultationRecordDoc();
         consultationRecordDoc.setStructureMap(structureMap);
-        consultationRecordDoc.setText(content);
         consultationRecordDoc.setPageData((Map)sourceMap);
         return consultationRecordDoc;
     }
@@ -130,7 +129,6 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
 
         ConsultationResultsDoc consultationResultsDoc = new ConsultationResultsDoc();
         consultationResultsDoc.setStructureMap(structureMap);
-        consultationResultsDoc.setText(content);
         consultationResultsDoc.setPageData((Map)sourceMap);
         return consultationResultsDoc;
     }
@@ -168,7 +166,6 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
 
         ConsultationApplicationDoc consultationApplicationDoc = new ConsultationApplicationDoc();
         consultationApplicationDoc.setStructureMap(structureMap);
-        consultationApplicationDoc.setText(content);
         consultationApplicationDoc.setPageData((Map)sourceMap);
 
         return consultationApplicationDoc;

+ 0 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstCourseRecordDocTrans.java

@@ -64,7 +64,6 @@ public class TaiZhouFirstCourseRecordDocTrans extends ModelDocTrans {
 
         // 诊疗计划
         FirstCourseRecordDoc firstCourseRecordDoc = new FirstCourseRecordDoc();
-        firstCourseRecordDoc.setText(content);
         firstCourseRecordDoc.setStructureMap(structureMap);
         firstCourseRecordDoc.setPageData((Map)sourceMap);
         return firstCourseRecordDoc;

+ 0 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouLeaveHospitalDocTrans.java

@@ -25,7 +25,6 @@ public class TaiZhouLeaveHospitalDocTrans extends ModelDocTrans {
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
         LeaveHospitalDoc leaveHospitalDoc = new LeaveHospitalDoc();
         leaveHospitalDoc.setStructureMap(structureMap);
-        leaveHospitalDoc.setText(content);
         leaveHospitalDoc.setPageData((Map)sourceMap);
         return leaveHospitalDoc;
     }

+ 118 - 7
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java

@@ -5,7 +5,9 @@ import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationInformedConsentDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationSafetyChecklistDoc;
 import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.ListUtil;
@@ -43,11 +45,15 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
         Map<String, OperationDiscussionDoc> operationDiscussionDocMap = getOperationDiscussionDocMap(contentMap.get("术后首次病程及谈话记录"));
         Map<String, OperationRecordDoc> operationRecordDocMap = getOperationRecordDocMap(contentMap.get("手术记录"));
         Map<String, PreoperativeDiscussionDoc> preoperativeDiscussionDocMap = getPreoperativeDiscussionDocMap(contentMap.get("术前讨论、术前小结"));
+        Map<String, OperationInformedConsentDoc> operationInformedConsentDocMap = getOperationInformedConsentDocMap(contentMap.get("手术知情同意书"));
+        Map<String, OperationSafetyChecklistDoc> operationSafetyChecklistDocMap = getOperationSafetyChecklistDocMap(contentMap.get("手术安全核查表"));
 
         Set<String> operationNameSet = Sets.newHashSet();
         operationNameSet.addAll(operationDiscussionDocMap.keySet());
         operationNameSet.addAll(operationRecordDocMap.keySet());
         operationNameSet.addAll(preoperativeDiscussionDocMap.keySet());
+        operationNameSet.addAll(operationInformedConsentDocMap.keySet());
+        operationNameSet.addAll(operationSafetyChecklistDocMap.keySet());
 
         operationNameSet.forEach(operationName -> {
             OperationDoc operationDoc = new OperationDoc();
@@ -55,9 +61,10 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
             operationDoc.setOperationDiscussionDoc(operationDiscussionDocMap.get(operationName));
             operationDoc.setOperationRecordDoc(operationRecordDocMap.get(operationName));
             operationDoc.setPreoperativeDiscussionDoc(preoperativeDiscussionDocMap.get(operationName));
+            operationDoc.setOperationInformedConsentDoc(operationInformedConsentDocMap.get(operationName));
+            operationDoc.setOperationSafetyChecklistDoc(operationSafetyChecklistDocMap.get(operationName));
             retList.add(operationDoc);
         });
-
         return retList;
     }
 
@@ -84,10 +91,12 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationDiscussionDoc getOperationDiscussionDoc(String content) {
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), operationDiscussion_keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationDiscussion_keyContrasts);
 
         OperationDiscussionDoc operationDiscussionDoc = new OperationDiscussionDoc();
         operationDiscussionDoc.setStructureMap(structureMap);
+        operationDiscussionDoc.setPageData((Map)sourceMap);
 
         return operationDiscussionDoc;
     }
@@ -117,15 +126,24 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationRecordDoc getOperationRecordDoc(String content) {
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), operationRecord_keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationRecord_keyContrasts);
 
         OperationRecordDoc operationRecordDoc = new OperationRecordDoc();
         operationRecordDoc.setStructureMap(structureMap);
-
+        operationRecordDoc.setPageData((Map)sourceMap);
+//        MapUtil.console(structureMap, "手术记录");
         return operationRecordDoc;
     }
 
-    private List<String> operationRecord_keyContrasts = Lists.newArrayList();
+    // 手术记录
+    private List<String> operationRecord_keyContrasts = Lists.newArrayList(
+            "手术名称=手术名称",
+            "麻醉方式=麻醉方式",
+            "术前诊断=术前诊断",
+            "术后诊断=术后诊断",
+            "手术经过=手术经过"
+            );
 
 
     /**********************************************术前讨论、术前小结****************************************************/
@@ -150,14 +168,107 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     }
 
     private PreoperativeDiscussionDoc getPreoperativeDiscussionDoc(String content) {
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(TzXmlUtil.getXmlToMapForTZ(content), preoperativeDiscussion_keyContrasts);
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts);
 
         PreoperativeDiscussionDoc preoperativeDiscussionDoc = new PreoperativeDiscussionDoc();
         preoperativeDiscussionDoc.setStructureMap(structureMap);
-
+        preoperativeDiscussionDoc.setPageData((Map)sourceMap);
+//        MapUtil.console(structureMap, "术前讨论、术前小结");
         return preoperativeDiscussionDoc;
     }
 
     private List<String> preoperativeDiscussion_keyContrasts = Lists.newArrayList();
 
+    /**********************************************手术知情同意书****************************************************/
+    private Map<String, OperationInformedConsentDoc> getOperationInformedConsentDocMap(List<String> contents) {
+        Map<String, OperationInformedConsentDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            operationName = index + "";
+            OperationInformedConsentDoc operationInformedConsentDoc = getOperationInformedConsentDoc(content);
+            operationInformedConsentDoc.setOperationName(operationName);
+            retMap.put(operationName, operationInformedConsentDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationInformedConsentDoc getOperationInformedConsentDoc(String content) {
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationInformedConsent_keyContrasts);
+
+        OperationInformedConsentDoc operationInformedConsentDoc = new OperationInformedConsentDoc();
+        operationInformedConsentDoc.setStructureMap(structureMap);
+        operationInformedConsentDoc.setPageData((Map) structureMap);
+//        MapUtil.console(structureMap, "手术知情同意书");
+        return operationInformedConsentDoc;
+    }
+
+    private List<String> operationInformedConsent_keyContrasts = Lists.newArrayList(
+            "姓名++++患者姓名=姓名",
+            "性别=",
+            "病区++++病区名称=病区",
+            "床号=",
+            "病案号++++住院号=病案号",
+            "手术医生=",
+            "目前诊断=",
+            "手术名称=",
+            "手术指征=",
+            "风险及并发症=",
+            "++++保守治疗=保守治疗",
+            "++++其他手术=其他手术",
+            "签名++++=签名",
+            "签名时间=签名时间"
+    );
+
+
+    /**********************************************手术安全核查表****************************************************/
+    private Map<String, OperationSafetyChecklistDoc> getOperationSafetyChecklistDocMap(List<String> contents) {
+        Map<String, OperationSafetyChecklistDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            operationName = index + "";
+            OperationSafetyChecklistDoc operationSafetyChecklistDoc = getOperationSafetyChecklistDoc(content);
+            operationSafetyChecklistDoc.setOperationName(operationName);
+            retMap.put(operationName, operationSafetyChecklistDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationSafetyChecklistDoc getOperationSafetyChecklistDoc(String content) {
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content); // xml原始数据给华卓
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, operationSafetyChecklist_keyContrasts);
+
+        OperationSafetyChecklistDoc operationSafetyChecklistDoc = new OperationSafetyChecklistDoc();
+        operationSafetyChecklistDoc.setStructureMap(structureMap);
+        operationSafetyChecklistDoc.setPageData((Map) sourceMap);
+
+        return operationSafetyChecklistDoc;
+    }
+
+    private List<String> operationSafetyChecklist_keyContrasts = Lists.newArrayList(
+            "姓名++++患者姓名=姓名",
+            "性别",
+            "病区",
+            "床号",
+            "病案号++++住院号=病案号",
+            "签名++++=签名"
+    );
+
 }

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

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

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

@@ -11,8 +11,12 @@ 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;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @Description: xml解析工具
@@ -46,6 +50,81 @@ public class TzXmlUtil {
     }
 
 
+    /**
+     *  getText()获取当前节点的文本内容,getStringValue()获取所有子节点拼接后的文本内容
+     *  需要转义
+     *
+     * @param xml
+     * @return
+     */
+
+    public static Map<String, String> getXmlToMapForTZWithReplace(String xml) {
+        Map<String, Object> res = getReplace(xml);
+        String contentReplace = (String)res.get("content");
+        Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(contentReplace);
+        Map<String, String> map = (Map)res.get("replaceMap");
+
+        for (String key : sourceMap.keySet()) {
+            String value = sourceMap.get(key);
+            if (StringUtil.isNotBlank(value)) {
+                for (String key2 : map.keySet()) {
+                    value = value.replaceAll(key2, map.get(key2));
+                    sourceMap.put(key, value);
+                }
+            }
+        }
+        return sourceMap;
+    }
+
+
+    /**
+     *
+     * @param content
+     * @return
+     */
+    public static Map<String, Object> getReplace(String content) {
+        Map<String, Object> res = new HashMap<>();
+        List<String> cutWord = new ArrayList<>();
+        List<String> res1 = new ArrayList<>(); // 包含/的标签</name>
+        List<String> res2 = new ArrayList<>();  // 不包含/的标签<name>
+        List<String> convertEle = new ArrayList<>();
+        Map<String, String> replaceMap = new HashMap<>();
+
+        String pattern = "<.*?>";
+        // 按指定模式在字符串查找
+
+        // 创建 Pattern 对象
+        Pattern r = Pattern.compile(pattern);
+
+        // 现在创建 matcher 对象
+        Matcher m = r.matcher(content);
+        while(m.find()) {
+            String msg = m.group();
+            if (!msg.contains("=")) {
+                cutWord.add(msg);
+            }
+        }
+        // 分离<name> </name>这样的标签
+        for (String str : cutWord) {
+            if (str.contains("/")) {
+                res1.add(str.replaceAll("/", ""));
+            } else {
+                res2.add(str);
+            }
+        }
+
+        // 如果未找到匹配的标签,就表示是内容,先转义 < ,并记录到map中
+        for (String key : res2) {
+            if (!res1.contains(key)) {
+                replaceMap.put("#####" + key.substring(1), key);
+                content = content.replaceAll(key, "#####" + key.substring(1));
+            }
+        }
+        res.put("content", content);
+        res.put("replaceMap", replaceMap);
+        return res;
+    }
+
     /**
      * 测试入口
      * @param args