Преглед на файлове

新增ADL评分和VTE评分html解析、以及相关规则

easi преди 4 години
родител
ревизия
330946b878
променени са 21 файла, в които са добавени 462 реда и са изтрити 5 реда
  1. 8 1
      kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java
  2. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/QCCatalogue.java
  3. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH03093.java
  4. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH03095.java
  5. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/firstcourserecord/FIRC03094.java
  6. 21 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/operationdiscussion/OPE0369.java
  7. 20 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/preoperativediscussion/PRE0328.java
  8. 19 1
      kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java
  9. 1 1
      kernel/src/main/resources/bootstrap.yml
  10. 3 0
      public/src/main/java/com/lantone/qc/pub/Content.java
  11. 4 0
      public/src/main/java/com/lantone/qc/pub/model/InputInfo.java
  12. 16 0
      public/src/main/java/com/lantone/qc/pub/model/doc/ADLGradeDoc.java
  13. 15 0
      public/src/main/java/com/lantone/qc/pub/model/doc/VTEGradeDoc.java
  14. 1 0
      trans/src/main/java/com/lantone/qc/trans/TransDispatch.java
  15. 52 0
      trans/src/main/java/com/lantone/qc/trans/beilun/BeiLunADLGradeDocTrans.java
  16. 55 0
      trans/src/main/java/com/lantone/qc/trans/beilun/BeiLunVTEGradeDocTrans.java
  17. 10 0
      trans/src/main/java/com/lantone/qc/trans/beilun/BeilunDocTrans.java
  18. 43 0
      trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunADLGradeHtmlAnalysis.java
  19. 4 0
      trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunBeHospitalizedHtmlAnalysis.java
  20. 41 0
      trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunVTEGradeHtmlAnalysis.java
  21. 23 0
      trans/src/main/java/com/lantone/qc/trans/comsis/ModelDocGenerate.java

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

@@ -35,17 +35,22 @@ public class QCAnalysis {
     @Autowired
     SimilarityServiceClient similarityServiceClient;
 
+    //质控分析接口
     public OutputInfo anlysis(QueryVo queryVo) throws AIException, CatalogueException, Exception {
-        log.error("json:"+ FastJsonUtils.getBeanToJson(queryVo));
+        //1.创建两个ThreadLocal存储数据
         specialStorageUtil.getHospitalIdThreadLocal().set(queryVo.getHospitalId());
         specialStorageUtil.getBehospitalInfoThreadLocal().set(queryVo.getBehospitalInfo());
+        //2.创建输出结果集
         OutputInfo outputInfo = new OutputInfo();
         long t1 = System.currentTimeMillis();
+        //3.得到质控病历录入对象
         InputInfo inputInfo = TransDispatch.trans(queryVo);
         long t2 = System.currentTimeMillis();
+        //4.设置质控病历录入对象缓存、
         inputInfo.setUseCrfCache(queryVo.isUseCrfCache());
         inputInfo.setInputCatalogueMap(queryVo.getInputCatalogueMap());
         AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient, similarityServiceClient);
+        //5.质控录入数据过ai模型
         try {
             aiAnalyze.aiProcess(inputInfo);
         } catch (Exception e) {
@@ -54,6 +59,8 @@ public class QCAnalysis {
             throw new AIException("AI模型执行错误:" + e.getMessage());
         }
         long t3 = System.currentTimeMillis();
+        //6.遍历所有质控条目集合id,获取指定质控条目执行
+        log.error("json"+FastJsonUtils.getBeanToJson(inputInfo));
         for (Map.Entry<String, Map<String, String>> entry : inputInfo.getInputCatalogueMap().entrySet()) {
             if (CatalogueUtil.qcCatalogueMap.get(queryVo.getCid() + "." + entry.getKey()) == null) {
                 continue;

+ 2 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/QCCatalogue.java

@@ -19,7 +19,9 @@ import java.util.Map;
 @Slf4j
 public class QCCatalogue {
 
+    //质控状态 0成功 -1失败 -2?
     protected ThreadLocal<String> status = new ThreadLocal<String>();
+    //质控结果信息
     protected ThreadLocal<String> info = new ThreadLocal<String>();
     protected ThreadLocal<String> id = new ThreadLocal<String>();
     protected ThreadLocal<Map<Object, Object>> extData = new ThreadLocal<Map<Object, Object>>();

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH03093.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.beilun.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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.VTEGradeDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName : BEH03095
+ * @Description : 入院记录的VTE评分时间早于VTE评分表生成时间
+ * @Author : sxl
+ * @Date: 2021-03-10 10:08
+ */
+@Component
+public class BEH03093 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //1.判断是否有VTE评分
+        VTEGradeDoc vteGradeDoc = inputInfo.getVteGradeDoc();
+        if(vteGradeDoc!= null&& StringUtil.isNotBlank(vteGradeDoc.getStructureMap().get("评估日期")))
+        {
+            //2.获取入院记录时间
+            BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+            if(beHospitalizedDoc!=null&&StringUtil.isNotBlank(beHospitalizedDoc.getStructureMap().get("入院日期")))
+            {
+                String beHospitalizeTime =  beHospitalizedDoc.getStructureMap().get("入院日期");
+                //3.获取vte评分时间
+                String vteGradeTime = vteGradeDoc.getStructureMap().get("评估日期");
+                if(CatalogueUtil.compareDate(beHospitalizeTime, vteGradeTime,1))
+                {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH03095.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.beilun.behospitalized;
+
+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 com.lantone.qc.pub.model.doc.ADLGradeDoc;
+import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName : BEH03095
+ * @Description : ADL评分未在病程记录之前完成
+ * @Author : sxl
+ * @Date: 2021-03-10 10:08
+ */
+@Component
+public class BEH03095 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //1.判断是否有adl评分
+        ADLGradeDoc adlGradeDoc = inputInfo.getAdlGradeDoc();
+        if(adlGradeDoc!= null&& StringUtil.isNotBlank(adlGradeDoc.getStructureMap().get(Content.adl_grade_time)))
+        {
+            //2.获取首次病程记录时间
+            FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
+            if(firstCourseRecordDoc!=null&&StringUtil.isNotBlank(firstCourseRecordDoc.getStructureMap().get("病历日期")))
+            {
+                String firstCourseRecorTime =  firstCourseRecordDoc.getStructureMap().get("病历日期");
+                //3.获取adl评分时间
+                String adlGradeTime = adlGradeDoc.getStructureMap().get(Content.adl_grade_time);
+                if(CatalogueUtil.compareDate(firstCourseRecorTime, adlGradeTime,1))
+                {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/firstcourserecord/FIRC03094.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.beilun.firstcourserecord;
+
+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.FirstCourseRecordDoc;
+import com.lantone.qc.pub.model.doc.VTEGradeDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName : FIRC03094
+ * @Description : 首次病程记录的VTE评分时间早于VTE评分表生成时间
+ * @Author : sxl
+ * @Date: 2021-03-10 10:08
+ */
+@Component
+public class FIRC03094 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //1.判断是否有VTE评分
+        VTEGradeDoc vteGradeDoc = inputInfo.getVteGradeDoc();
+        if(vteGradeDoc!= null&& StringUtil.isNotBlank(vteGradeDoc.getStructureMap().get("评估日期")))
+        {
+            //2.获取首次病程记录时间
+            FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
+            if(firstCourseRecordDoc!=null&&StringUtil.isNotBlank(firstCourseRecordDoc.getStructureMap().get("病历日期")))
+            {
+                String firstCourseRecorTime =  firstCourseRecordDoc.getStructureMap().get("病历日期");
+                //3.获取vte评分时间
+                String vteGradeTime = vteGradeDoc.getStructureMap().get("评估日期");
+                if(CatalogueUtil.compareDate(firstCourseRecorTime, vteGradeTime,1))
+                {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 21 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/operationdiscussion/OPE0369.java

@@ -1,9 +1,11 @@
 package com.lantone.qc.kernel.catalogue.beilun.operationdiscussion;
 
+import com.alibaba.druid.support.json.JSONUtils;
 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.FirstPageRecordDoc;
 import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
@@ -17,7 +19,7 @@ import java.text.ParseException;
 import java.util.*;
 
 /**
- * @Description: 手术患者缺术前主刀医师查房记录
+ * @Description: 主刀医师术前查房未在术前24小时内完成
  * @author: WANGSY
  * @time: 2020/11/11 11:22
  */
@@ -28,7 +30,9 @@ public class OPE0369 extends QCCatalogue {
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
         if (outputInfo.getResult() != null) {
+            //1.获取查房记录
             Map<String, Object> thr03090 = outputInfo.getResult().get("THR03090");
+            //2.如果查房记录不为空且大于零且状态是-1(查房记录报错)
             if (thr03090 != null && thr03090.size() > 0 && thr03090.get("status").equals("-1")) {
                 return;
             }
@@ -43,6 +47,9 @@ public class OPE0369 extends QCCatalogue {
                 return;
             }
         }
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        System.out.println(JSONUtils.toJSONString(firstPageRecordDoc));
+        String behospitalWay = firstPageRecordDoc.getStructureMap().get("入院途径");
         //先判断是否有手术记录
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         if (operationDocs == null || operationDocs.size() == 0) {
@@ -60,7 +67,7 @@ public class OPE0369 extends QCCatalogue {
                 return;
             }
             String operationStartDate = "";
-            List<Date> operDateList = new ArrayList<>();
+            List<Date> operDateList = new ArrayList<>(); //手术时间
             for (OperationDoc operationDoc : operationDocs) {
                 if (operationDoc.getOperationRecordDoc() != null) {
                     Map<String, String> operationDocStructureMap = operationDoc.getOperationRecordDoc().getStructureMap();
@@ -75,6 +82,16 @@ public class OPE0369 extends QCCatalogue {
                                 Long.valueOf(30))) {
                             continue;
                         }
+
+                        //急诊手术处理【入院途径:急诊,且第一次手术时间和入院时间相差1小时】
+                        if(StringUtil.isNotBlank(behospitalWay)&&"急诊".equals(behospitalWay)
+                        &&!CatalogueUtil.compareTime(
+                                StringUtil.parseDateTime(admisTime),
+                                StringUtil.parseDateTime(operationStartDate),
+                                Long.valueOf(60)))
+                        {
+                            continue;
+                        }
                         operDateList.add(StringUtil.parseDateTime(operationStartDate));
                     } else {//取不到手术时间
                         return;
@@ -134,10 +151,12 @@ public class OPE0369 extends QCCatalogue {
         List<Map<String, Date>> operationDateList = new ArrayList<>();
         Map<String, Date> operationDate = null;
         for (OperationDoc operationDoc : operationDocs) {
+            //获取手术记录对象
             OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
             if (operationRecordDoc == null) {
                 continue;
             }
+            //获取手术记录文档
             Map<String, String> structureMap = operationRecordDoc.getStructureMap();
             String operationStartDateStr = structureMap.get("手术开始时间");
             if (StringUtil.isNotBlank(operationStartDateStr) && !operationStartDateStr.contains("年月日")) {

+ 20 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/preoperativediscussion/PRE0328.java

@@ -5,10 +5,13 @@ 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.FirstPageRecordDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.FastJsonUtils;
 import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.beilun.BeiLunFirstPageRecordDocTrans;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
@@ -28,6 +31,9 @@ public class PRE0328 extends QCCatalogue {
          * 1:如果急诊手术【入院时间-手术开始时间小于30分钟】则可不用写术前小结。
          * 2:如果入院时间-手术开始时间小于30分钟,则术前讨论、术前小结次数+1。
          * 3:如果手术记录次数(第一次手术的日期内有其他手术不算次数) 大于 术前讨论、术前小结次数,则出错
+         * 4:患者从抢救/急救室转手术室,到手术开始时间不超过30分钟不用写术前讨论
+         * 5、判断是否是急诊手术;[判断入院途径:急诊、入院时间和手术时间接近这种情况不用术前讨论]
+         * 6、获取急诊手术申请标识,从哪取值需要和院方及his讨论。
          */
         status.set("0");
         List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
@@ -36,6 +42,9 @@ public class PRE0328 extends QCCatalogue {
             return;
         }
         boolean emergencyOperation = false;
+
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        String behospitalWay = firstPageRecordDoc.getStructureMap().get("入院途径");
         if (inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String admisTime = beHospitalStructureMap.get("入院日期");
@@ -53,6 +62,17 @@ public class PRE0328 extends QCCatalogue {
                         Long.valueOf(30))) {//入院到手术未超过30分钟,则可不用写术前小结
                     emergencyOperation = true;
                 }
+
+                //判断是否是急诊手术;[判断入院途径:急诊,这种情况不用术前讨论]
+                if(StringUtil.isNotBlank(behospitalWay)&&"急诊".equals(behospitalWay)
+                        &&!CatalogueUtil.compareTime(
+                        StringUtil.parseDateTime(admisTime),
+                        StringUtil.parseDateTime(startTime),
+                        Long.valueOf(60)))
+                {
+                    emergencyOperation = true;
+
+                }
             }
         }
 

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

@@ -31,11 +31,18 @@ import java.util.regex.Pattern;
 @Getter
 @Setter
 public class CatalogueUtil {
+    //初始化加载的所有的质控条目分析对象
     public static Map<String, QCCatalogue> qcCatalogueMap = new HashMap<>();
     public static Map<Integer, String> intMapString =
             ImmutableMap.<Integer, String>builder().put(1, "一").put(2, "二").put(3, "三").put(4, "四").put(5, "五")
                     .put(6, "六").put(7, "七").put(8, "八").put(9, "九").put(0, "零").build();
 
+    /**
+     * 去除特殊字符,判断字符串否未空
+     *
+     * @param content
+     * @return
+     */
     public static boolean isEmpty(String content) {
         return StringUtil.isBlank(removeSpecialChar(content));
     }
@@ -350,7 +357,12 @@ public class CatalogueUtil {
         }
         return false;
     }
-
+    /**
+     * 将阿拉伯数字字符串变成汉字字符串
+     *
+     * @param content
+     * @return
+     */
     public static String int2ChineseNum(String content) {
         StringBuffer sb = new StringBuffer();
         char[] contentArr = content.toCharArray();
@@ -601,4 +613,10 @@ public class CatalogueUtil {
         return "";
     }
 
+
+    public static void main(String args[])
+    {
+
+    }
+
 }

+ 1 - 1
kernel/src/main/resources/bootstrap.yml

@@ -12,7 +12,7 @@ spring:
       charset: UTF-8
       enabled: true
   profiles:
-    active: local
+    active: debug
 
 qc:
   hospital_id: 4,5,6,7

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

@@ -315,4 +315,7 @@ public class Content {
             "yyyy-MM-dd'T'HH:mm:ss",
             "yyyy-MM-ddTHH:mm:ss",
     };
+
+    public static final String adl_grade_time = "日期";//ADL评分时间
+
 }

+ 4 - 0
public/src/main/java/com/lantone/qc/pub/model/InputInfo.java

@@ -97,6 +97,10 @@ public class InputInfo {
     private List<DailyCourseRecordDoc> dailyCourseRecordDocs = Lists.newArrayList();
     //住院病历信息
     private MedicalRecordInfoDoc medicalRecordInfoDoc;
+    //VTE评分
+    private VTEGradeDoc vteGradeDoc;
+    //ADL评分
+    private ADLGradeDoc adlGradeDoc;
     private boolean useCrfCache;
 
     //新增记录

+ 16 - 0
public/src/main/java/com/lantone/qc/pub/model/doc/ADLGradeDoc.java

@@ -0,0 +1,16 @@
+package com.lantone.qc.pub.model.doc;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName: ADLGradeDoc
+ * @Description: ADL评分信息
+ * @Author songxl
+ * @Date 2021/3/9
+ * @Version 1.0
+ */
+@Getter
+@Setter
+public class ADLGradeDoc extends ModelDoc {
+}

+ 15 - 0
public/src/main/java/com/lantone/qc/pub/model/doc/VTEGradeDoc.java

@@ -0,0 +1,15 @@
+package com.lantone.qc.pub.model.doc;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : VTEGradeDoc
+ * @Description : VTE评分信息
+ * @Author : sxl
+ * @Date: 2021-03-09 15:00
+ */
+@Getter
+@Setter
+public class VTEGradeDoc extends ModelDoc {
+}

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

@@ -19,6 +19,7 @@ public class TransDispatch {
 
     public static InputInfo trans(QueryVo queryVo) {
         try {
+//            com.lantone.qc.trans.beilun.BeilunDocTrans
             String classPath = "com.lantone.qc.trans."
                     + queryVo.getCid()
                     + "."

+ 52 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/BeiLunADLGradeDocTrans.java

@@ -0,0 +1,52 @@
+package com.lantone.qc.trans.beilun;
+
+import com.lantone.qc.pub.model.doc.ADLGradeDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.beilun.util.BeiLunADLGradeHtmlAnalysis;
+import com.lantone.qc.trans.comsis.ModelDocGenerate;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName: BeiLunADLGradeDocTrans
+ * @Description: ADL评分
+ * @Author songxl
+ * @Date 2021/3/9
+ * @Version 1.0
+ */
+@Slf4j
+public class BeiLunADLGradeDocTrans extends ModelDocTrans {
+    @Override
+    public ADLGradeDoc extract(MedrecVo medrecVo) {
+        ADLGradeDoc adlGradeDoc = null;
+        try {
+            Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+            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();
+                BeiLunADLGradeHtmlAnalysis adlGradeHtmlAnalysis = new BeiLunADLGradeHtmlAnalysis();
+                Map<String, String> sourceMap = adlGradeHtmlAnalysis.analysis(content, recTitle, recTypeId);
+                if (MapUtils.isNotEmpty(sourceMap)) {
+                    structureMap.putAll(sourceMap);
+                }
+            }
+            if (MapUtils.isNotEmpty(structureMap)) {
+                              ModelDocGenerate.beHospitalizedDocGen(structureMap);
+                adlGradeDoc = ModelDocGenerate.adlGradeDocGen(structureMap);
+                adlGradeDoc.setPageData((Map) structureMap);
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return adlGradeDoc;
+    }
+}

+ 55 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/BeiLunVTEGradeDocTrans.java

@@ -0,0 +1,55 @@
+package com.lantone.qc.trans.beilun;
+
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.VTEGradeDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.beilun.util.BeiLunBeHospitalizedHtmlAnalysis;
+import com.lantone.qc.trans.beilun.util.BeiLunHtmlAnalysis;
+import com.lantone.qc.trans.beilun.util.BeiLunVTEGradeHtmlAnalysis;
+import com.lantone.qc.trans.comsis.ModelDocGenerate;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName: BeiLunVTEGradeDocTrans
+ * @Description: VTE评分
+ * @Author songxl
+ * @Date 2021/3/9
+ * @Version 1.0
+ */
+@Slf4j
+public class BeiLunVTEGradeDocTrans extends ModelDocTrans {
+    @Override
+    public VTEGradeDoc extract(MedrecVo medrecVo) {
+        VTEGradeDoc vteGradeDoc = null;
+        try {
+            Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
+            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();
+                BeiLunVTEGradeHtmlAnalysis vteGradeHtmlAnalysis = new BeiLunVTEGradeHtmlAnalysis();
+                Map<String, String> sourceMap = vteGradeHtmlAnalysis.analysis(content, recTitle, recTypeId);
+                if (MapUtils.isNotEmpty(sourceMap)) {
+                    structureMap.putAll(sourceMap);
+                }
+            }
+            if (MapUtils.isNotEmpty(structureMap)) {
+                              ModelDocGenerate.beHospitalizedDocGen(structureMap);
+                vteGradeDoc = ModelDocGenerate.vteGradeDocGen(structureMap);
+                vteGradeDoc.setPageData((Map) structureMap);
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return vteGradeDoc;
+    }
+}

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

@@ -120,6 +120,16 @@ public class BeilunDocTrans extends DocTrans {
                     BeiLunOutDepDocTrans outDepDocTrans = new BeiLunOutDepDocTrans();
                     inputInfo.setBeHospitalizedDoc(outDepDocTrans.extract(i));
                 }
+                /*******************************VTE评分 trans解析*****************************************/
+                if (i.getTitle().equals("VTE评分")) {
+                    BeiLunVTEGradeDocTrans vteGradeDocTrans = new BeiLunVTEGradeDocTrans();
+                    inputInfo.setVteGradeDoc(vteGradeDocTrans.extract(i));
+                }
+                /*******************************ADL评分 trans解析*****************************************/
+                if (i.getTitle().equals("ADL评分")) {
+                    BeiLunADLGradeDocTrans adlGradeDocTrans = new BeiLunADLGradeDocTrans();
+                    inputInfo.setAdlGradeDoc(adlGradeDocTrans.extract(i));
+                }
             }
         }
         pageDataHandle(inputInfo);

+ 43 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunADLGradeHtmlAnalysis.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.trans.beilun.util;
+
+import com.google.common.collect.Maps;
+import com.lantone.qc.pub.Content;
+import lombok.extern.slf4j.Slf4j;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.util.Map;
+
+/**
+ * @ClassName: BeiLunADLGradeHtmlAnalysis
+ * @Description: ADL评分HTML解析
+ * @Author songxl
+ * @Date 2021/3/9
+ * @Version 1.0
+ */
+@Slf4j
+public class BeiLunADLGradeHtmlAnalysis implements BeiLunHtmlAnalysis{
+    private String modeId = "0";//模块id待定
+    @Override
+    public Map<String, String> analysis(String... args) {
+        Map<String, String> map = Maps.newLinkedHashMap();
+        try {
+            String html = args[0];
+            String recTitle = args[1];
+            String recTypeId = args[2];
+
+            Document doc = Jsoup.parse(html);
+            //评估日期
+            Elements spanES = doc.getElementById("table2").nextElementSiblings().get(1).getElementsByTag("span");
+            System.out.println(spanES.text());
+            String time = spanES.text().split(Content.adl_grade_time)[1]
+                    .replaceAll(":","").trim();
+            map.put(Content.adl_grade_time,time);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return map;
+    }
+}

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

@@ -8,7 +8,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
 
+import java.awt.*;
+import java.io.File;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 

+ 41 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunVTEGradeHtmlAnalysis.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.trans.beilun.util;
+
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+
+import java.util.Map;
+
+/**
+ * @ClassName: BeiLunVTEGradeHtmlAnalysis
+ * @Description: VTE评分HTML解析
+ * @Author songxl
+ * @Date 2021/3/9
+ * @Version 1.0
+ */
+@Slf4j
+public class BeiLunVTEGradeHtmlAnalysis implements BeiLunHtmlAnalysis{
+    private String modeId = "0";//模块id待定
+    @Override
+    public Map<String, String> analysis(String... args) {
+        Map<String, String> map = Maps.newLinkedHashMap();
+        try {
+            String html = args[0];
+            String recTitle = args[1];
+            String recTypeId = args[2];
+
+            Document doc = Jsoup.parse(html);
+            //评估日期
+            Element valuationName = doc.getElementById("table4").getElementsByTag("tr").get(2)
+                    .getElementsByTag("span").get(0);
+            Element valuationTime = doc.getElementById("table4").getElementsByTag("tr").get(2)
+                    .getElementsByTag("span").get(1);
+            map.put(valuationName.text().replaceAll(":",""),valuationTime.text());
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return map;
+    }
+}

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

@@ -453,6 +453,28 @@ public class ModelDocGenerate {
         threeLevelWardDoc.setStructureMap(structureMap);
         return threeLevelWardDoc;
     }
+    /**
+     * VTE评分
+     *
+     * @param structureMap
+     * @return
+     */
+    public static VTEGradeDoc vteGradeDocGen(Map<String, String> structureMap) {
+        VTEGradeDoc vteGradeDoc = new VTEGradeDoc();
+        vteGradeDoc.setStructureMap(structureMap);
+        return vteGradeDoc;
+    }
+    /**
+     * ADL评分
+     *
+     * @param structureMap
+     * @return
+     */
+    public static ADLGradeDoc adlGradeDocGen(Map<String, String> structureMap) {
+        ADLGradeDoc adlGradeDoc = new ADLGradeDoc();
+        adlGradeDoc.setStructureMap(structureMap);
+        return adlGradeDoc;
+    }
 
     /**
      * 拼接结构化数据
@@ -467,4 +489,5 @@ public class ModelDocGenerate {
         return textJoin;
     }
 
+
 }