浏览代码

危急值处理添加对出现多个高血压等级情况做处理(保留等级最高)

hujing 5 年之前
父节点
当前提交
3439bba801

+ 1 - 1
nlp/src/main/java/org/diagbot/nlp/util/Constants.java

@@ -75,5 +75,5 @@ public class Constants {
     public final static String word_property_degree_quan = "43";
     public final static String word_property_other = "44";
 
-
+    public final static String app_rule_type_id = "6";
 }

+ 39 - 1
rule/src/main/java/org/diagbot/rule/crisis/CrisisApplication.java

@@ -9,12 +9,16 @@ import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static org.diagbot.nlp.util.Constants.app_rule_type_id;
+
 /**
  * Created by louhr on 2019/9/2.
  */
@@ -47,7 +51,8 @@ public class CrisisApplication {
             String[] fieldRuleIds = app.getValue().getRuleIds().split("\\^");
             for (String fieldRuleId : fieldRuleIds) {
                 String[] ruleIds = fieldRuleId.split(",");
-                String standardText = "", originText = "", remind = "";;
+                String standardText = "", originText = "", remind = "";
+                ;
                 boolean allRuleIdsSuit = true;
                 for (String ruleId : ruleIds) {
                     boolean isFindRule = false;
@@ -93,6 +98,7 @@ public class CrisisApplication {
             }
             //所有规则都满足
             if (hasAppSuit) {
+
                 CrisisDetail crisisDetail = new CrisisDetail();
                 crisisDetail.setOriginText(appOriginText);
                 crisisDetail.setRemindText(app.getValue().getRemind().replace("${remind}", appRemindVar));
@@ -115,9 +121,41 @@ public class CrisisApplication {
                 crisisMap.put(key, crisisList);
             }
         }
+        //针对同时出现"血压:高血压1级"、"血压:高血压3级"...只取等级高的
+        procHypertension(crisisMap);
         return crisisMap;
     }
 
+    private void procHypertension(Map<String, List<CrisisDetail>> crisisMap) {
+        List<CrisisDetail> crisisDetails = crisisMap.get(key);
+        if (crisisDetails == null || crisisDetails.size() == 0) {
+            return;
+        }
+        List<String> hypertensionRule = new ArrayList<>();
+        for (CrisisDetail crisisDetail : crisisDetails) {
+            if (crisisDetail.getRemindText().contains("血压:高血压")
+                    && crisisDetail.getTypeId().equals(app_rule_type_id)) {
+                hypertensionRule.add(crisisDetail.getRemindText());
+            }
+        }
+        if (hypertensionRule.size() == 0) {
+            return;
+        }
+        Collections.sort(hypertensionRule); //高血压等级从小到大排序
+        //保留高血压等级最大的值,其他的删除
+        for (int i = 0; i < hypertensionRule.size() - 1; i++) {
+            for (int j = 0; j < crisisDetails.size(); j++) {
+                if (hypertensionRule.get(i).equals(crisisDetails.get(j).getRemindText())) {
+                    crisisDetails.remove(j);
+                    //删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。
+                    //要删除的元素往前面移动了,而你的i保存的值依旧往后走,所以如果让i不往后走,往前走一个,
+                    //即可删除本来排在第二个位置的元素现在排在了第一个位置上的元素。
+                    j--;
+                }
+            }
+        }
+    }
+
     private List<String> getAllRuleId(Map<String, RuleApp> ruleApps) {
         Set<String> typeIdSet = new HashSet<>();
         for (Map.Entry<String, RuleApp> ruleAppEntry : ruleApps.entrySet()) {