Jelajahi Sumber

1.修改规则判断部分代码

hujing 5 tahun lalu
induk
melakukan
4d3c414d77

+ 9 - 1
common-push/src/main/java/org/diagbot/common/push/bean/Rule.java

@@ -38,7 +38,7 @@ public class Rule {
     //提醒信息
     private String remind = "";
     //提醒信息
-
+    private String originText = "";
 
     public String getSet_name() {
         return set_name;
@@ -143,4 +143,12 @@ public class Rule {
     public void setRemind(String remind) {
         this.remind = remind;
     }
+
+    public String getOriginText() {
+        return originText;
+    }
+
+    public void setOriginText(String originText) {
+        this.originText = originText;
+    }
 }

+ 5 - 5
common-push/src/main/java/org/diagbot/common/push/bean/SearchData.java

@@ -55,7 +55,7 @@ public class SearchData {
     //阴性 页面录入数据需要对结果过滤的集合
     private Map<String, Map<String, String>> filters = new HashMap<>(10, 0.8f);
     //满足规则的ID集合
-    private Map<String, List<Long>> ruleIds = new HashMap<>();
+    private Map<String, List<Rule>> rules = new HashMap<>();
 
     public Integer getDisType() {
         return disType;
@@ -295,11 +295,11 @@ public class SearchData {
         this.otherOrder = otherOrder;
     }
 
-    public Map<String, List<Long>> getRuleIds() {
-        return ruleIds;
+    public Map<String, List<Rule>> getRules() {
+        return rules;
     }
 
-    public void setRuleIds(Map<String, List<Long>> ruleIds) {
-        this.ruleIds = ruleIds;
+    public void setRules(Map<String, List<Rule>> rules) {
+        this.rules = rules;
     }
 }

+ 48 - 47
common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java

@@ -3,12 +3,15 @@ package org.diagbot.common.push.filter.rule;
 
 import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.Rule;
 import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
 import org.diagbot.common.push.filter.pretreat.*;
 import org.diagbot.pub.Constants;
 import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -16,31 +19,34 @@ public class PretreatmentRule {
     public void rule(SearchData searchData) throws java.io.IOException {
         //症状数据
         if (!StringUtils.isEmpty(searchData.getSymptom())) {
-            searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom"));
+            searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom", searchData));
         }
         //体征数据
         if (!StringUtils.isEmpty(searchData.getVital())) {
-            searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), "vital"));
+            searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), "vital", searchData));
         }
         //lis结构化信息
         if (searchData.getLisArr() != null && searchData.getLisArr().size() > 0) {
-            searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis"));
+            searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis", searchData));
         } else if (!StringUtils.isEmpty(searchData.getLis())) {
-            searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis"));
+            searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis", searchData));
         }
         //pacs数据
         if (!StringUtils.isEmpty(searchData.getPacs())) {
-            searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs"));
+            searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs", searchData));
         }
     }
 
-    private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType) throws java.io.IOException {
+    private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType, SearchData searchData) throws java.io.IOException {
         List<PreResult> preResultList = pretreatment.analyze(content);
-        return add2PreResultList(preResultList, content, ruleType);
+        return add2PreResultList(preResultList, content, ruleType, searchData);
     }
 
-    private String add2PreResultList(List<PreResult> preResultList, String content, String ruleType) throws java.io.IOException {
+    private String add2PreResultList(List<PreResult> preResultList, String content, String ruleType, SearchData searchData) throws java.io.IOException {
         Map<String, List<Rule>> kl_rule_filter_map = ApplicationCacheUtil.getKl_rule_filter_map();
+        //符合条件的规则
+        Map<String, List<Rule>> accord_rule_map = new HashMap<>();
+        List<Rule> accord_rules = null;
         if (preResultList != null) {
             for (PreResult result : preResultList) {
                 //规则库中匹配
@@ -50,15 +56,31 @@ public class PretreatmentRule {
                         continue;
                     }
                     for (Rule rule : rules) {
-                        if (Constants.COMMON_STRING_1.equals(rule.getSet_status())) {   //需要匹配大类
+                        if (!Constants.COMMON_STRING_1.equals(rule.getSet_name_check())) {
                             if (StringUtils.isEmpty(rule.getSet_name()) || !result.getName().equals(rule.getSet_name())) {
                                 continue;
                             }
-                        }
-                        content = conceptConvert(result, rule, content);
-                        //危急值提醒
-                        if (Constants.COMMON_STRING_1.equals(rule.getType_value())) {
-                            conceptCrisis(result, rule, allCrisisDetailList);
+                            content = conceptConvert(result, rule, content);
+                            rule.setOriginText(result.getDetailName() + ":" + result.getValue() + result.getUnits());
+                            if (accord_rule_map.get(ruleType) == null) {
+                                accord_rules = new ArrayList<>();
+                            } else {
+                                accord_rules = accord_rule_map.get(ruleType);
+                            }
+                            accord_rules.add(rule);
+                            accord_rule_map.put(ruleType, accord_rules);
+                            searchData.setRules(accord_rule_map);
+                        } else {
+                            content = conceptConvert(result, rule, content);
+                            rule.setOriginText(result.getDetailName() + ":" + result.getValue() + result.getUnits());
+                            if (accord_rule_map.get(ruleType) == null) {
+                                accord_rules = new ArrayList<>();
+                            } else {
+                                accord_rules = accord_rule_map.get(ruleType);
+                            }
+                            accord_rules.add(rule);
+                            accord_rule_map.put(ruleType, accord_rules);
+                            searchData.setRules(accord_rule_map);
                         }
                     }
                 }
@@ -69,42 +91,20 @@ public class PretreatmentRule {
     }
 
     private String conceptConvert(PreResult result, Rule rule, String content) {
-        //标准值最优先匹配 暂时忽略单位
-        if (compareEqual(result.getValue(), rule.getSet_value())) {
-            content = content + rule.getSet_concept_text()==null?"":rule.getSet_concept_text();
-        }
-        if (compareMin(result.getValue(), rule.getMin_value())) {
-            content = content + rule.getMin_concept_text()==null?"":rule.getMin_concept_text();
-        }
-        if (compareMax(result.getValue(), rule.getMax_value())) {
-            content = content + rule.getMax_concept_text()==null?"":rule.getMax_concept_text();
+        //标准值最优先匹配
+        if (compareEqual(result.getValue(), rule.getEq_value())) {
+            content = content + rule.getRemind() == null ? "" : rule.getRemind();
+        } else if (compareMin(result.getValue(), rule.getMin_value()) && compareMax(result.getValue(), rule.getMax_value())
+                && result.getUnits().equals(rule.getMin_operator()) && result.getUnits().equals(rule.getMax_operator())) {
+            content = content + rule.getRemind() == null ? "" : rule.getRemind();
+        } else if (compareMin(result.getValue(), rule.getMin_value()) && result.getUnits().equals(rule.getMin_operator())) {
+            content = content + rule.getRemind() == null ? "" : rule.getRemind();
+        } else if (compareMax(result.getValue(), rule.getMax_value()) && result.getUnits().equals(rule.getMin_operator())) {
+            content = content + rule.getRemind() == null ? "" : rule.getRemind();
         }
         return content;
     }
 
-    private void conceptCrisis(PreResult result, Rule rule, List<CrisisDetail> allCrisisDetailList) {
-        boolean crisis = false;
-        CrisisDetail crisisDetail = new CrisisDetail();
-        crisisDetail.setOriginText(result.getDetailName() + " : " + result.getValue() + result.getUnits());
-        if (compareEqual(result.getValue(), rule.getSet_value())) {
-            crisisDetail.setStandardText(result.getDetailName() + " : " + rule.getSet_value() + rule.getUnit());
-            crisisDetail.setRemindText(rule.getSetRemind());
-            crisis = true;
-        }
-        if (compareMin(result.getValue(), rule.getMin_value())) {
-            crisisDetail.setStandardText(result.getDetailName() + " <= " + rule.getMin_value() + rule.getUnit());
-            crisisDetail.setRemindText(rule.getMinRemind());
-            crisis = true;
-        }
-        if (compareMax(result.getValue(), rule.getMax_value())) {
-            crisisDetail.setStandardText(result.getDetailName() + " >= " + rule.getMax_value() + rule.getUnit());
-            crisisDetail.setRemindText(rule.getMaxRemind());
-            crisis = true;
-        }
-        if (crisis) {
-            allCrisisDetailList.add(crisisDetail);
-        }
-    }
 
     private boolean compareEqual(String c1, String c2) {
         if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)
@@ -129,7 +129,8 @@ public class PretreatmentRule {
         if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)) {
             try {
                 return Double.valueOf(c1) > Double.valueOf(c2);
-            } catch (Exception e) {}
+            } catch (Exception e) {
+            }
         }
         return false;
     }