Quellcode durchsuchen

添加多条件高危手术的判断方法

MarkHuang vor 4 Jahren
Ursprung
Commit
c63677810d

+ 6 - 0
src/main/java/com/diagbot/entity/node/YiBaoOperationName.java

@@ -19,6 +19,12 @@ public class YiBaoOperationName extends BaseNode  {
 	@Property(name = "手术级别")
 	private String opgrade;
 
+	@Property(name = "拼音编码")
+	private String pycode;
+
+	@Property(name = "高危条件")
+	private String highriskcond;
+
 	@Relationship(type = "医保手术和操作名称相关国临ICD-9-CM3代码", direction = Relationship.OUTGOING)
 	private Set<GuoLinICD_9_CM3Code> guolinicd_9_cm3codes = new HashSet<>();
 

+ 1 - 1
src/main/java/com/diagbot/facade/HighRiskFacade.java

@@ -35,7 +35,7 @@ public class HighRiskFacade {
     public void highRiskFac(IndicationPushVO indicationPushVO, WordCrfDTO wordCrfDTO, IndicationDTO res) {
         // 高风险图谱接口调用
         HighRiskNeoVO highRiskNeoVO = fillHighRiskNeo(wordCrfDTO);
-        List<HighRiskNeoDTO> highRiskNeoDTOList = neoFacade.getHighRiskNeo(highRiskNeoVO);
+        List<HighRiskNeoDTO> highRiskNeoDTOList = neoFacade.getHighRiskNeo(wordCrfDTO);
         // 规则处理
         // TODO 测试数据开始
         // HighRiskNeoDTO highRiskNeoDTO = new HighRiskNeoDTO();

+ 8 - 7
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -1,6 +1,7 @@
 package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSONArray;
+import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.client.ChiefPresentSimilarityServiceClient;
 import com.diagbot.client.StandConvertServiceClient;
@@ -404,14 +405,14 @@ public class NeoFacade {
     /**
      * 处理高危项目图谱数据
      *
-     * @param highRiskNeoVO
+     * @param wordCrfDTO
      * @return
      */
-    public List<HighRiskNeoDTO> getHighRiskNeo(HighRiskNeoVO highRiskNeoVO) {
+    public List<HighRiskNeoDTO> getHighRiskNeo(WordCrfDTO wordCrfDTO) {
         List<HighRiskNeoDTO> highRiskNeoDTOS = new ArrayList<>();
 
-        highRiskNeoDTOS.addAll(getHighRiskDrugList(highRiskNeoVO.getDrugList()));
-        highRiskNeoDTOS.addAll(getHighRiskOperationList(highRiskNeoVO.getOperationList()));
+        highRiskNeoDTOS.addAll(getHighRiskDrugList(wordCrfDTO.getDrugOrder()));
+        highRiskNeoDTOS.addAll(getHighRiskOperationList(wordCrfDTO));
         return highRiskNeoDTOS;
     }
 
@@ -704,12 +705,12 @@ public class NeoFacade {
     /**
      * 处理高危手术和操作数据
      *
-     * @param operations
+     * @param wordCrfDTO
      * @return
      */
-    public List<HighRiskNeoDTO> getHighRiskOperationList(Map<String, String> operations) {
+    public List<HighRiskNeoDTO> getHighRiskOperationList(WordCrfDTO wordCrfDTO) {
         YiBaoOperationNameNode yiBaoOperationNode = new YiBaoOperationNameNode();
-        List<HighRiskNeoDTO> highRiskNeoDTOS = yiBaoOperationNode.getHighRiskOperation(operations, yiBaoOperationRepository);
+        List<HighRiskNeoDTO> highRiskNeoDTOS = yiBaoOperationNode.getHighRiskOperation(wordCrfDTO, yiBaoOperationRepository);
 
         return highRiskNeoDTOS;
     }

+ 85 - 10
src/main/java/com/diagbot/repository/YiBaoOperationNameNode.java

@@ -1,16 +1,15 @@
 package com.diagbot.repository;
 
 
-import com.diagbot.dto.BillNeoDTO;
-import com.diagbot.dto.HighRiskNeoDTO;
-import com.diagbot.dto.OperationBillNeoDTO;
-import com.diagbot.dto.OperationInfoDTO;
+import com.alibaba.fastjson.JSONObject;
+import com.diagbot.biz.push.entity.Item;
+import com.diagbot.dto.*;
 import com.diagbot.entity.node.*;
+import com.diagbot.model.label.VitalLabel;
+import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 
-import javax.xml.soap.Node;
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -176,16 +175,17 @@ public class YiBaoOperationNameNode {
     /**
      * 获取高危手术和操作数据
      */
-    public List<HighRiskNeoDTO> getHighRiskOperation(Map<String, String> opsterm, YiBaoOperationNameRepository operationRepository) {
+    public List<HighRiskNeoDTO> getHighRiskOperation(WordCrfDTO wordCrfDTO, YiBaoOperationNameRepository operationRepository) {
         List<HighRiskNeoDTO> highRiskNeoDTOS = new ArrayList<>();
         HighRiskNeoDTO highRiskNeoDTO;
-        String opname, opgrade;
+        String term, opname, opgrade;
         YiBaoOperationName operation;
 
-        for (String term : opsterm.keySet()) {
+        for (Item item : wordCrfDTO.getOperationOrder()) {
             highRiskNeoDTO = new HighRiskNeoDTO();
 
-            opname = opsterm.get(term).trim();
+            term = item.getName().trim();
+            opname = item.getUniqueName().trim();
             highRiskNeoDTO.setName(term);
             highRiskNeoDTO.setStandname(opname);
 
@@ -201,6 +201,12 @@ public class YiBaoOperationNameNode {
                         highRiskNeoDTO.setType(Constants.shoushu);
                         highRiskNeoDTOS.add(highRiskNeoDTO);
                     }
+                    else if (opgrade.equals("2")) {
+                        highRiskNeoDTO = isHighRisk(wordCrfDTO, operation, highRiskNeoDTO);
+                        if (null != highRiskNeoDTO) {
+                            highRiskNeoDTOS.add(highRiskNeoDTO);
+                        }
+                    }
                 }
             }
         }
@@ -208,4 +214,73 @@ public class YiBaoOperationNameNode {
         return highRiskNeoDTOS;
     }
 
+
+    public HighRiskNeoDTO isHighRisk(WordCrfDTO wordCrfDTO, YiBaoOperationName operation, HighRiskNeoDTO highRiskNeoDTO) {
+
+        NodeNeoDTO nodeNeoDTO;
+        Boolean match;
+        Map<String, Object> res;
+
+        try {
+            String cond = operation.getHighriskcond();
+            JSONObject jobj = JSONObject.parseObject(cond);
+            // 判断年龄
+            JSONObject ageobj = jobj.getJSONObject("年龄");
+            int age = wordCrfDTO.getAge();
+
+            nodeNeoDTO = NeoUtil.jsontoNodeNeoDTO("年龄", ageobj);
+            match = CoreUtil.compareNum(nodeNeoDTO, age);
+            if (match) {
+                highRiskNeoDTO.getFactor().add(nodeNeoDTO);
+            }
+            // 判断生命体征和查体
+            VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
+            JSONObject vitalobj = jobj.getJSONObject("生命体征及查体");
+            for (String key : vitalobj.keySet()) {
+                nodeNeoDTO = NeoUtil.jsontoNodeNeoDTO(key, vitalobj.getJSONObject(key));
+                res = CoreUtil.compareVital(nodeNeoDTO, vitalLabel);
+
+                if ((Boolean)res.get("flag")) {
+                    highRiskNeoDTO.getFactor().add(nodeNeoDTO);
+                }
+            }
+
+            // 判断合并疾病
+            List<Item> diags = wordCrfDTO.getDiag();
+            JSONObject diagobj = jobj.getJSONObject("合并疾病");
+            for (String key : diagobj.keySet()) {
+                nodeNeoDTO = NeoUtil.jsontoNodeNeoDTO(key, diagobj.getJSONObject(key));
+                match = CoreUtil.compareNameWithNodeNeoDTO(nodeNeoDTO, diags);
+                if (match) {
+                    highRiskNeoDTO.getFactor().add(nodeNeoDTO);
+                }
+            }
+
+            // 判断化验结果
+            List<com.diagbot.biz.push.entity.Lis> lislist = wordCrfDTO.getLis();
+            JSONObject lisobj = jobj.getJSONObject("化验结果");
+            for (String key : lisobj.keySet()) {
+                nodeNeoDTO = NeoUtil.jsontoNodeNeoDTO(key, lisobj.getJSONObject(key));
+                for (com.diagbot.biz.push.entity.Lis lis : lislist) {
+                    res = CoreUtil.compareLis(nodeNeoDTO, lis);
+
+                    if ((Boolean)res.get("flag")) {
+                        highRiskNeoDTO.getFactor().add(nodeNeoDTO);
+                    }
+                }
+            }
+
+            // 判断辅检结果
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        finally {
+            return highRiskNeoDTO;
+        }
+
+    }
+
+
+
 }

+ 32 - 0
src/main/java/com/diagbot/util/NeoUtil.java

@@ -1,5 +1,6 @@
 package com.diagbot.util;
 
+import com.alibaba.fastjson.JSONObject;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.PushBaseDTO;
 import com.diagbot.repository.Constants;
@@ -72,4 +73,35 @@ public class NeoUtil {
 
         return bd;
     }
+
+    public static NodeNeoDTO jsontoNodeNeoDTO(String name, JSONObject jobj) {
+
+        NodeNeoDTO nodeNeoDTO = null;
+        try {
+            nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(name);
+            for (String key : jobj.keySet()) {
+                switch (key) {
+                    case "最大值":
+                        nodeNeoDTO.setMax(new BigDecimal(jobj.getString(key)));
+                        break;
+                    case "最小值":
+                        nodeNeoDTO.setMin(new BigDecimal(jobj.getString(key)));
+                        break;
+                    case "单位":
+                        nodeNeoDTO.setUnit(jobj.getString(key));
+                        break;
+                    case "范围":
+                        nodeNeoDTO.setValType(jobj.getIntValue(key));
+                        break;
+                }
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        finally {
+            return nodeNeoDTO;
+        }
+    }
 }