Forráskód Böngészése

恩泽:输血记录crf模型逻辑增加

wangsy 4 éve
szülő
commit
a893236fe1

+ 86 - 0
structure-center/src/main/java/com/lantone/structure/ai/ClinicalbloodAI.java

@@ -0,0 +1,86 @@
+package com.lantone.structure.ai;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.lantone.common.util.CatalogueUtil;
+import com.lantone.common.util.StringUtil;
+import com.lantone.structure.ai.process.EntityProcessBlood;
+import com.lantone.structure.model.Content;
+import com.lantone.structure.model.InputInfo;
+import com.lantone.structure.client.CRFServiceClient;
+import com.lantone.structure.model.doc.ClinicalBloodDoc;
+import com.lantone.structure.model.label.ClinicalBloodLabel;
+
+import java.util.*;
+
+/**
+ * @ClassName : ClinicalbloodAI
+ * @Description : 输血记录
+ * @Author : wsy
+ * @Date: 2021-01-19 17:16
+ */
+public class ClinicalbloodAI extends ModelAI {
+
+    public static List<String> medicalTextType = Arrays.asList("Taizhou_blood_record");
+    public static String entityRelationObject = "entity_relation_object";
+    public static String outputs = "outputs";
+    public static String content = "content";
+    public static List<String> mapKey = Lists.newArrayList("病历内容");
+
+    public void medrec(InputInfo inputInfo, CRFServiceClient crfServiceClient) {
+        JSONArray crfContent = new JSONArray();
+        List<ClinicalBloodDoc> resultsDocs = inputInfo.getClinicalBloodDocs();
+        for (int i = 0; i < resultsDocs.size(); i++) {
+            Map<String, String> structureMap = resultsDocs.get(i).getStructureMap();
+            String content = CatalogueUtil.structureMapJoin(structureMap, mapKey);
+            putContent(crfContent, medicalTextType.get(0), content, Content.bloodRecord);
+        }
+
+        JSONObject midData = loadAI(crfContent, crfServiceClient);//crf返回数据
+
+        for (int i = 0; i < resultsDocs.size(); i++) {
+            if (midData.get(Content.bloodRecord) == null) {
+                continue;
+            }
+            ClinicalBloodDoc resultsDoc = resultsDocs.get(i);
+            ClinicalBloodLabel clinicalBloodLabel = putBloodRecordCrfData(midData.getJSONObject(Content.bloodRecord), inputInfo);
+            if (clinicalBloodLabel != null) {
+                resultsDoc.setClinicalBloodLabel(clinicalBloodLabel);
+            }
+        }
+    }
+
+
+    /**
+     * 处理输血记录
+     *
+     * @param jsonObject
+     */
+    public ClinicalBloodLabel putBloodRecordCrfData(JSONObject jsonObject, InputInfo inputInfo) {
+        ClinicalBloodLabel clinicalBloodLabel = new ClinicalBloodLabel();
+        if (jsonObject == null) {
+            return clinicalBloodLabel;
+        }
+        JSONObject aiOut = jsonObject.getJSONObject(entityRelationObject).getJSONObject(BeHospitalizedAI.outputs);
+        if (aiOut == null) {
+            return clinicalBloodLabel;
+        }
+        EntityProcessBlood entityProcessBlood = new EntityProcessBlood();
+        clinicalBloodLabel = entityProcessBlood.extractEntity(aiOut);
+        return clinicalBloodLabel;
+    }
+
+    protected void putContent(JSONArray crfContent, String medicalTextType, String text, String sign) {
+        String move_text = CatalogueUtil.removeSpecialChar(text);
+        if (StringUtil.isEmpty(move_text)) {
+            return;
+        }
+        JSONObject detailContent = new JSONObject();
+        detailContent.put("medical_text_type", medicalTextType);
+        detailContent.put("content", move_text);
+        detailContent.put("detail_title", sign);
+        detailContent.put("originalText", text);
+        crfContent.add(detailContent);
+    }
+}

+ 2 - 1
structure-center/src/main/java/com/lantone/structure/ai/ModelAI.java

@@ -35,7 +35,7 @@ public class ModelAI {
     protected JSONObject loadAI(JSONArray crfContent, CRFServiceClient crfServiceClient) {
         JSONArray data = null;
         String classname = this.getClass().getName();
-        if (data == null) {
+        if (data == null || data.size() == 0) {
             //存储CRF完整所需结构数据
             CRFVo crfVo = new CRFVo();
             crfVo.setData(crfContent);
@@ -49,6 +49,7 @@ public class ModelAI {
         return midData;
     }
 
+
     protected JSONObject loadEntity(JSONObject jsonObject, String entityRelationObject, String outputs, String content) {
         if (jsonObject == null) {
             return new JSONObject();

+ 6 - 1
structure-center/src/main/java/com/lantone/structure/ai/model/EntityEnum.java

@@ -30,7 +30,12 @@ public enum EntityEnum {
     BETTER_FINDING("好转表现"), OUTCOME_TO_BETTER("转归情况-好转"), OUTCOME_CURE("转归情况-治愈"), POSITIVE_FINDING("阳性表现"),
     INSPECTION_ITEMS("检查项目"), DISCHARGE_MODE("出院方式"), LABORATORY_PACKAGE("实验室检查套餐"), LABORATORY_RESULTS("实验室检查结果"),
     AUXILIARY_EXAMINATION_RESULTS("辅检结果"), CONSUMPTION("用量-查房"), USAGE_WARD_ROUND("用法"), STOP("停用"),
-    REASONS_FOR_ANTIBIOTIC("抗生素使用原因"),CHECK_TIME("检查时间");
+    REASONS_FOR_ANTIBIOTIC("抗生素使用原因"), CHECK_TIME("检查时间"), INDICA_BLOOD("输血指征"), TYPE_BLOOD("输血类型"), AMOUNT_BLOOD("输血量"),
+    REASON_BLOOD("输血原因"), MEASURE_BLOOD("输血量计量单位"), START_TIME_BLOOD("输血开始时间"), END_TIME_BLOOD("输血结束时间"),
+    RESPONSE_TYPE_BLOOD("输血反应类型"), FREQUENCY_BLOOD("输血次数"), NEGATIVE_BLOOD("否认"), DRUG_NAME("药品"),DIAGNOSIS_NAME("疾病诊断名称"),
+    CONDITION("抢救病情"), OPERATION_OF_NAME("手术及操作名称"), OPERATION_OF_POSITION_NAME("手术及操作目标部位名称"), OPERATION_METHOD("操作方法"),
+    OPERATION_COUNT("操作次数"), AUXILIARY_TEST("辅检名称"), AUXILIARY_RESULT("辅检结果"),AUXILIARY_QUANTITATIVE("辅检定量结果"), SALVAGE_DRUG("抢救药品"),
+    INTERVENTION("介入物名称");
 
     private String value;
 

+ 4 - 0
structure-center/src/main/java/com/lantone/structure/model/Content.java

@@ -251,6 +251,10 @@ public class Content {
 
     public static final String timestamp = "timestamp";
 
+    public static final String bloodRecord = "输血记录";
+    public static final String stagesSummary = "阶段小结";
+    public static final String rescue = "抢救记录";
+
     public static String[] dateFormats = {
             "yyyy年MM月dd日HH时mm分",
             "yyyy年MM月dd日HH:mm",

+ 2 - 0
structure-center/src/main/java/com/lantone/structure/model/doc/ClinicalBloodDoc.java

@@ -1,5 +1,6 @@
 package com.lantone.structure.model.doc;
 
+import com.lantone.structure.model.label.ClinicalBloodLabel;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -12,4 +13,5 @@ import lombok.Setter;
 @Getter
 @Setter
 public class ClinicalBloodDoc extends ModelDoc {
+    private ClinicalBloodLabel clinicalBloodLabel;
 }

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/Amount.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : Amount
+ * @Description : 输血量
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class Amount extends General {
+    private MeasurementUnit measurementUnit;//输血量计量单位
+}

+ 21 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/Blood.java

@@ -0,0 +1,21 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 输血记录
+ */
+@Setter
+@Getter
+public class Blood extends General {
+    private Indication indication; //输血指征
+    private Type type;//输血类型
+    private Reason reason;//输血原因
+    private StartTime startTime;//输血开始时间
+    private EndTime endTime;//输血结束时间
+    private List<ResponseType> responseType;//输血反应类型
+    private Frequency frequency; //输血次数
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/EndTime.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : EndTime
+ * @Description : 输血结束时间
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class EndTime extends General {
+    
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/Indication.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : Indication
+ * @Description : 输血指征
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class Indication extends General {
+    
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/MeasurementUnit.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : MeasurementUnit
+ * @Description : 输血量计量单位
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class MeasurementUnit extends General {
+    
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/Reason.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : Reason
+ * @Description : 输血原因
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class Reason extends General {
+    
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/ResponseType.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : ResponseType
+ * @Description : 输血反应类型
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class ResponseType extends General {
+    private Negative negative;//否认 deny
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/StartTime.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : StartTime
+ * @Description : 输血开始时间
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class StartTime extends General {
+    
+}

+ 16 - 0
structure-center/src/main/java/com/lantone/structure/model/entity/Type.java

@@ -0,0 +1,16 @@
+package com.lantone.structure.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : Type
+ * @Description : 输血类型
+ * @Author : wsy
+ * @Date: 2021-01-20 10:09
+ */
+@Setter
+@Getter
+public class Type extends General {
+    private Amount amount;//输血量
+}

+ 25 - 0
structure-center/src/main/java/com/lantone/structure/model/label/ClinicalBloodLabel.java

@@ -0,0 +1,25 @@
+package com.lantone.structure.model.label;
+
+import com.lantone.structure.model.entity.Blood;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName : ClinicalBloodLabel
+ * @Description :
+ * @Author : wsy
+ * @Date: 2021-01-20 9:51
+ */
+@Getter
+@Setter
+public class ClinicalBloodLabel {
+    //输血记录
+    private List<Blood> blood = new ArrayList<>();
+
+    public <T> void add(List<T> list, T obj) {
+        list.add(obj);
+    }
+}