Browse Source

Merge remote-tracking branch 'origin/hb/beilun_20210816' into hb/beilun_20210816

zhanghang 3 years ago
parent
commit
e83125d02d

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/BeilunDocTrans.java

@@ -128,6 +128,10 @@ public class BeilunDocTrans extends DocTrans {
                     BeilunInformedConsentDocTrans informedConsentDocTrans = new BeilunInformedConsentDocTrans();
                     inputInfo.setInformedConsentDoc(informedConsentDocTrans.extract(i));
                 }
+                if (i.getTitle().equals("有创操作")) {
+                    BeilunInvasiveOperationDocTrans invasiveOperationDocTrans = new BeilunInvasiveOperationDocTrans();
+                    inputInfo.setInvasiveOperationDocs(invasiveOperationDocTrans.extract(i));
+                }
                 /*******************************VTE评分 trans解析*****************************************/
                 if (i.getTitle().equals("VTE评分")) {
                     BeiLunVTEGradeDocTrans vteGradeDocTrans = new BeiLunVTEGradeDocTrans();

+ 75 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/BeilunInvasiveOperationDocTrans.java

@@ -0,0 +1,75 @@
+package com.lantone.qc.trans.beilun;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.InvasiveOperationDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.beilun.util.BeiLunHtmlAnalysis;
+import com.lantone.qc.trans.beilun.util.BeiLunInvasiveOperationHtmlAnalysis;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 有创操作
+ * @author: cy
+ * @time: 2021/8/27 16:12
+ */
+@Slf4j
+public class BeilunInvasiveOperationDocTrans extends ModelDocTrans {
+    @Override
+    public List<InvasiveOperationDoc> extract(MedrecVo medrecVo) {
+        List<InvasiveOperationDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            retList.add(getInvasiveOperationDoc(contentMap));
+        });
+        return retList;
+
+    }
+
+    private InvasiveOperationDoc getInvasiveOperationDoc(Map<String, Object> contentMap) {
+        InvasiveOperationDoc invasiveOperationDoc = new InvasiveOperationDoc();
+        if (MapUtils.isEmpty(contentMap)) {
+            return invasiveOperationDoc;
+        }
+        if(contentMap.get("htmlText") == null && contentMap.get("xmlText") != null){
+            contentMap.put("xmlText",contentMap.get("xmlText"));
+        }
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                return invasiveOperationDoc;
+            }
+            try {
+                String content = contentMap.get("xmlText").toString();
+                Map<String, String> structureMap = null;
+                if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+                    structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+                } else {
+                    String recTitle = contentMap.get("recTitle").toString();
+                    String recTypeId = contentMap.get("recTypeId").toString();
+                    BeiLunHtmlAnalysis beiLunHtmlAnalysis = new BeiLunInvasiveOperationHtmlAnalysis();
+                    Map<String, String> sourceMap = beiLunHtmlAnalysis.analysis(content, recTitle, recTypeId);
+                    if (MapUtils.isNotEmpty(sourceMap)) {
+                        structureMap.put("记录编号", contentMap.get("recId").toString());
+                        structureMap.put("标题", recTitle);
+                        structureMap.put("病历号", contentMap.get("behospitalCode") == null ? null : contentMap.get("behospitalCode").toString());
+                    }
+                }
+                if (MapUtils.isNotEmpty(structureMap)) {
+                    invasiveOperationDoc.setStructureMap(structureMap);
+                }
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+            }
+
+        return invasiveOperationDoc;
+    }
+
+
+
+}

+ 102 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunInvasiveOperationHtmlAnalysis.java

@@ -0,0 +1,102 @@
+package com.lantone.qc.trans.beilun.util;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 有创操作html解析
+ * @author: cy
+ * @time: 2021/8/27 16:43
+ */
+@Slf4j
+public class BeiLunInvasiveOperationHtmlAnalysis implements BeiLunHtmlAnalysis {
+
+    private String modeId = "59";
+
+    @Override
+    public Map<String, String> analysis(String... args) {
+        Map<String, String> structureMap = Maps.newLinkedHashMap();
+        try {
+            List<String> titles = Lists.newArrayList(
+                    "操作时间",
+                    "操作医生",
+                    "麻醉方法",
+                    "操作名称",
+                    "操作简要经过(包括术中有无并发症及具体描述和处理)",
+                    "标本送检",
+                    "术后注意事项",
+                    "记录者签名");
+            String html = args[0];
+            String recTitle = args[1];
+            String recTypeId = args[2];
+            Document doc = Jsoup.parse(html);
+            String htmlContent = BeiLunHtmlAnalysisUtil.blockDivToStr(doc.selectFirst("body").child(0), false);
+                CommonAnalysisUtil.html2StructureMap(titles, htmlContent, structureMap);
+            if (MapUtils.isNotEmpty(structureMap)) {
+                structureMap = OrdinaryAssistant.mapKeyContrast(structureMap, keyContrasts);
+            }
+            String cases = getKeyCut(structureMap.get("术后注意"));
+            if(StringUtils.isNotBlank(cases)){
+                structureMap.put("术后注意",cases);
+            }
+            structureMap = preSolve(htmlContent, structureMap);
+            BeiLunHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, structureMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return structureMap;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "操作简要经过(包括术中有无并发症及具体描述和处理)=操作步骤",
+            "术后注意事项=术后注意"
+    );
+
+    Map<String, String>preSolve(String content,Map<String, String>structureMap){
+        String rex = "[\\s\\S]*[(?=无)|(?=有)][^,;,;。]{0,3}(?=不适)[\\s\\S]*";
+        Pattern p = Pattern.compile(rex);
+        Matcher m = p.matcher(content);
+        String result = "";
+        while (m.find()) {
+            result = m.group().trim();
+        }
+        if(StringUtils.isNotBlank(result)){
+            structureMap.put("有无记录不良反应","true");
+        }else{
+            structureMap.put("有无记录不良反应","false");
+        }
+        if(structureMap.containsKey("术后注意") && structureMap.get("术后注意").matches(rex)){
+            structureMap.put("有无记录不良反应","false");
+}
+
+        return structureMap;
+    };
+
+    String getKeyCut(String key){
+        if(StringUtils.isBlank(key)){
+            return key;
+        }
+        for (String str : keyCut) {
+            if(key.contains(str)){
+                key = key.substring(0, key.indexOf(str));
+            }
+        }
+        return key;
+    }
+    private List<String> keyCut = Lists.newArrayList(
+            "记录者签名"
+    );
+
+}

+ 5 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouInvasiveOperationDocTrans.java

@@ -49,7 +49,8 @@ public class TaiZhouInvasiveOperationDocTrans extends ModelDocTrans {
         return invasiveOperationDoc;
     }
     Map<String, String>preSolve(String content,Map<String, String>structureMap){
-            Pattern p = Pattern.compile("[\\s\\S]*[(?=无)|(?=有)][^,;,;。]{0,3}(?=不适)[\\s\\S]*");
+        String rex = "[\\s\\S]*[(?=无)|(?=有)][^,;,;。]{0,3}(?=不适)[\\s\\S]*";
+            Pattern p = Pattern.compile(rex);
             Matcher m = p.matcher(content);
             String result = "";
             while (m.find()) {
@@ -60,6 +61,9 @@ public class TaiZhouInvasiveOperationDocTrans extends ModelDocTrans {
       }else{
           structureMap.put("有无记录不良反应","false");
       }
+        if(structureMap.containsKey("术后注意") && structureMap.get("术后注意").matches(rex)){
+            structureMap.put("有无记录不良反应","false");
+        }
 
         if(structureMap.containsKey("术前准备") && null != structureMap.get("术前准备")){
             String str = structureMap.get("术前准备");