Browse Source

1、修改規則邏輯實現

louhr 5 years atrás
parent
commit
0e4e2b6557

+ 19 - 10
common-push/src/main/java/org/diagbot/common/push/bean/RuleApp.java

@@ -6,24 +6,33 @@ package org.diagbot.common.push.bean;
  * @Date: 2019/9/3 13:21
  */
 public class RuleApp {
-    private String rule_id;
-    private String type_id;
+    private String id;
+    private String ruleIds;
+    private String typeId;
     private String remind;
 
-    public String getRule_id() {
-        return rule_id;
+    public String getId() {
+        return id;
     }
 
-    public void setRule_id(String rule_id) {
-        this.rule_id = rule_id;
+    public void setId(String id) {
+        this.id = id;
     }
 
-    public String getType_id() {
-        return type_id;
+    public String getRuleIds() {
+        return ruleIds;
     }
 
-    public void setType_id(String type_id) {
-        this.type_id = type_id;
+    public void setRuleIds(String ruleIds) {
+        this.ruleIds = ruleIds;
+    }
+
+    public String getTypeId() {
+        return typeId;
+    }
+
+    public void setTypeId(String typeId) {
+        this.typeId = typeId;
     }
 
     public String getRemind() {

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

@@ -24,6 +24,7 @@ public class SearchData {
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     protected String sysCode;
     private List<PreResult> lisArr = new ArrayList<>();
+    protected String normal  = "";
     protected String chief  = "";
     protected String symptom = "";
     protected String vital = "";
@@ -159,6 +160,14 @@ public class SearchData {
         this.inputs = inputs;
     }
 
+    public String getNormal() {
+        return normal;
+    }
+
+    public void setNormal(String normal) {
+        this.normal = normal;
+    }
+
     public String getChief() {
         return chief;
     }

+ 7 - 6
common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java

@@ -103,7 +103,7 @@ public class ApplicationCacheUtil {
 
         List<Rule> rules = null;
         for (String line : fileContents) {
-            String[] content = line.split("\\|");
+            String[] content = line.split("\\|", -1);
             Rule rule = new Rule();
             if (content.length == 12) {
                 rule.setId(content[0] == null ? "" : content[0]);
@@ -145,11 +145,12 @@ public class ApplicationCacheUtil {
         for (String line : fileContents) {
             String[] content = line.split("\\|");
             RuleApp ruleApp = new RuleApp();
-            if (content.length == 3) {
-                ruleApp.setRule_id(content[0] == null ? "" : content[0]);
-                ruleApp.setType_id(content[1] == null ? "" : content[1]);
-                ruleApp.setRemind(content[2] == null ? "" : content[2]);
-                kl_rule_app_filter_map.put(ruleApp.getRule_id(), ruleApp);
+            if (content.length == 4) {
+                ruleApp.setId(content[0] == null ? "" : content[0]);
+                ruleApp.setRuleIds(content[1] == null ? "" : content[1]);
+                ruleApp.setTypeId(content[2] == null ? "" : content[2]);
+                ruleApp.setRemind(content[3] == null ? "" : content[3]);
+                kl_rule_app_filter_map.put(ruleApp.getId(), ruleApp);
             }
         }
     }

+ 5 - 3
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -73,7 +73,7 @@ public class CacheFileManager {
         try {
             EncrypDES encrypDES = new EncrypDES();
             //所有词典库 不能用concat_group 大小写不区分
-            String sql = "select l_1.name l_1_name, l_1.type_id type_id, l_2.name l_2_name, l_1.concept_id from kl_library_info l_1\n" +
+            String sql = "select l_1.name l_1_name, l_1.type_id type_id, l_2.name l_2_name, kc.lib_name from kl_library_info l_1\n" +
                     "                    left join kl_library_info l_2 on l_1.concept_id = l_2.concept_id and l_2.is_concept = 1\n" +
                     "left join kl_concept kc on l_1.concept_id = kc.id\n" +
                     "where kc.is_deleted = 'N' ";
@@ -369,7 +369,7 @@ public class CacheFileManager {
             }
             fw.close();
 
-            sql = "SELECT rule_id, type_id, remind FROM kl_rule_app";
+            sql = "SELECT id, rule_id, type_id, remind FROM kl_rule_app";
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             fw = new FileWriter(path + "bigdata_rule_app_filter.dict");
@@ -377,10 +377,12 @@ public class CacheFileManager {
                 r1 = String.valueOf(rs.getInt(1));
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
+                r4 = rs.getString(4);
                 r1 = StringUtils.isEmpty(r1) ? "" : r1;
                 r2 = StringUtils.isEmpty(r2) ? "" : r2;
                 r3 = StringUtils.isEmpty(r3) ? "" : r3;
-                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
+                r4 = StringUtils.isEmpty(r4) ? "" : r4;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4));
                 fw.write("\n");
             }
             fw.close();

+ 1 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/Pretreatment.java

@@ -60,6 +60,7 @@ public abstract class Pretreatment {
         result.setValue(String.valueOf(value));
         result.setUnits(lexeme.getText());
         result.setDetailName(text);
+        result.setUniqueName(text);
         return result;
     }
 

+ 15 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentLis.java

@@ -6,9 +6,12 @@ import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NlpUtil;
 
+import java.lang.reflect.Array;
 import java.util.List;
 
 public class PretreatmentLis extends Pretreatment {
+    private String join_symbols = ";:;:";
+
     public List<PreResult> analyze(String content) throws java.io.IOException{
         return super.analyzeDefault(content);
     }
@@ -20,8 +23,18 @@ public class PretreatmentLis extends Pretreatment {
         //继续往前找化验明细项
         if (cursor > 0) cursor--;
         Lexeme leftLexeme = lexemes.get(cursor);
+        if (join_symbols.contains(leftLexeme.getText())) {
+            if (cursor > 0) {
+                cursor--;
+                leftLexeme = lexemes.get(cursor);
+            } else {
+                return null;
+            }
+        }
         if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.LIS_NAME})) {
             result.setDetailName(NlpUtil.concept(leftLexeme, NegativeEnum.LIS_NAME));
+        } else if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.PUB_NAME})) {
+            result.setUniqueName(NlpUtil.concept(leftLexeme, NegativeEnum.PUB_NAME));
         } else {
             return null;
         }
@@ -35,6 +48,8 @@ public class PretreatmentLis extends Pretreatment {
             }
             position--;
         }
+        result.setValue(String.valueOf(value));
+        result.setUnits(lexeme.getText());
         return result;
     }
 

+ 46 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentNormal.java

@@ -0,0 +1,46 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.List;
+
+public class PretreatmentNormal extends Pretreatment {
+    public List<PreResult> analyze(String content) throws java.io.IOException{
+        List<PreResult> preResults = super.analyzeDefault(content);
+
+        LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
+        for (int i = 0; i < lexemes.size(); i++) {
+            Lexeme l = lexemes.get(i);
+            if (l.getText().equals("性别") && i < lexemes.size() - 1) {
+                Lexeme afterLexeme = lexemes.get(i + 1);
+                if ("男性".equals(afterLexeme.getText()) || "女性".equals(afterLexeme.getText())) {
+                    PreResult result = new PreResult();
+                    result.setUniqueName(l.getText());
+                    result.setDetailName(l.getText());
+                    result.setValue(afterLexeme.getText());
+                    preResults.add(result);
+                    return preResults;
+                }
+            }
+        }
+        return preResults;
+    }
+
+    public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return super.createDefaultPreResult(lexemes, lexeme, index);
+    }
+
+    public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        if (cursor > 0) cursor--;
+        Lexeme leftLexeme = lexemes.get(cursor);
+        if (leftLexeme.getText().equals("年龄")) {
+            return leftLexeme.getText();
+        }
+        return null;
+    }
+}

+ 1 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentPacs.java

@@ -28,6 +28,7 @@ public class PretreatmentPacs extends Pretreatment {
                         PreResult result = new PreResult();
                         result.setValue(NlpUtil.concept(l, NegativeEnum.PACS_RESULT));
                         result.setDetailName(NlpUtil.concept(leftLexeme, NegativeEnum.PACS_NAME));
+                        result.setUniqueName(NlpUtil.concept(leftLexeme, NegativeEnum.PACS_NAME));
                         preResultList.add(result);
                         break;
                     }

+ 49 - 26
common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java

@@ -18,6 +18,10 @@ import java.util.Map;
 
 public class PretreatmentRule {
     public void rule(SearchData searchData) throws java.io.IOException {
+        //患者基本信息 性别 年龄
+        if (!StringUtils.isEmpty(searchData.getNormal())) {
+            searchData.setNormal(add2PreResultList(new PretreatmentNormal(), searchData.getNormal(), "normal", searchData));
+        }
         //症状数据
         if (!StringUtils.isEmpty(searchData.getSymptom())) {
             searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom", searchData));
@@ -53,7 +57,7 @@ public class PretreatmentRule {
     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<>();
+        Map<String, List<Rule>> accord_rule_map = searchData.getRules();
         List<Rule> accord_rules = null;
         if (preResultList != null) {
             for (PreResult result : preResultList) {
@@ -64,16 +68,20 @@ public class PretreatmentRule {
                         continue;
                     }
                     for (Rule rule : rules) {
-                        content = conceptConvert(result, rule, content);
-                        rule.setOriginText(result.getUniqueName() + ":" + result.getValue() + result.getUnits());
-                        if (accord_rule_map.get(ruleType) == null) {
-                            accord_rules = new ArrayList<>();
-                        } else {
-                            accord_rules = accord_rule_map.get(ruleType);
+                        boolean isSuit = suitRule(result, rule, content);
+                        if (isSuit) {
+                            rule.setOriginText(result.getUniqueName() + ":" + 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);
+
+                            content = content + rule.getRemind() == null ? "" : rule.getRemind();
                         }
-                        accord_rules.add(rule);
-                        accord_rule_map.put(ruleType, accord_rules);
-                        searchData.setRules(accord_rule_map);
                     }
                 }
             }
@@ -82,23 +90,39 @@ public class PretreatmentRule {
         return content;
     }
 
-    private String conceptConvert(PreResult result, Rule rule, String content) {
+    private boolean suitRule(PreResult result, Rule rule, String content) {
         //标准值最优先匹配
-        if (compareEqual(result.getValue(), rule.getEq_value())) {
-            content = content + rule.getRemind() == null ? "" : rule.getRemind();
-        } else if (compareMin(result.getValue(), rule.getMax_operator(), rule.getMax_operator()) //比最大值小
-                && compareMax(result.getValue(), rule.getMin_operator(), rule.getMin_operator()) //比最小值大
-                && 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(), rule.getMin_operator())   //比最小值小
-                && result.getUnits().equals(rule.getMin_operator())) {
-            content = content + rule.getRemind() == null ? "" : rule.getRemind();
-        } else if (compareMax(result.getValue(), rule.getMax_value(), rule.getMax_operator())   //比最大值大
-                && result.getUnits().equals(rule.getMin_operator())) {
-            content = content + rule.getRemind() == null ? "" : rule.getRemind();
+        if (org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getEq_value())) {
+            if (compareEqual(result.getValue(), rule.getEq_value())) {
+                return true;
+            } else {
+                return false;
+            }
+        } else if (org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMax_value()) && org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMin_value())) {
+            if (compareMin(result.getValue(), rule.getMax_value(), rule.getMax_operator()) //比最大值小
+                    && compareMax(result.getValue(), rule.getMin_value(), rule.getMin_operator()) //比最小值大
+                    && result.getUnits().equals(rule.getMin_unit())
+                    && result.getUnits().equals(rule.getMax_unit())) {
+                return true;
+            } else {
+                return false;
+            }
+        } else if (org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMin_value())) {
+            if (compareMin(result.getValue(), rule.getMin_value(), rule.getMin_operator())   //比最小值小
+                    && result.getUnits().equals(rule.getMin_unit())) {
+                return true;
+            } else {
+                return false;
+            }
+        } else if(org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMax_value()))  {
+            if (compareMax(result.getValue(), rule.getMax_value(), rule.getMax_operator())   //比最大值大
+                    && result.getUnits().equals(rule.getMin_unit())) {
+                return true;
+            } else {
+                return false;
+            }
         }
-        return content;
+        return false;
     }
 
 
@@ -119,7 +143,6 @@ public class PretreatmentRule {
                     return Double.valueOf(c1) < Double.valueOf(c2);
                 }
             } catch (Exception e) {
-                e.printStackTrace();
             }
         }
         return false;

+ 16 - 8
common-push/src/main/java/org/diagbot/common/push/work/ParamsDataProxy.java

@@ -43,31 +43,39 @@ public class ParamsDataProxy {
             { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS }
     };
 
-    public void createSearchData(SearchData searchData) throws Exception {
-        //消除空格
-        if (searchData.getSymptom() != null) {
-            searchData.setSymptom(searchData.getSymptom().trim());
-        }
-        if (searchData.getDiag() != null) {
-            searchData.setDiag(searchData.getDiag().trim());
-        }
+    public void createNormalInfo(SearchData searchData) throws Exception {
         //计算年龄区间
         if (searchData.getAge() > 0) {
             searchData.setAge_start(searchData.getAge() - 5);
             searchData.setAge_end(searchData.getAge() + 5);
+
+            searchData.setNormal("年龄" + searchData.getAge() + "岁");
         }
         //修改性别代码
         if (!StringUtils.isEmpty(searchData.getSex())) {
             if ("M".equals(searchData.getSex())) {
                 searchData.setSex("1");
+                searchData.setNormal(searchData.getNormal() + "性别男性");
             } else if ("F".equals(searchData.getSex())) {
                 searchData.setSex("2");
+                searchData.setNormal(searchData.getNormal() + "性别女性");
             } else {
                 searchData.setSex("3");
+                searchData.setNormal(searchData.getNormal() + "性别其他");
             }
         } else {
             searchData.setSex("3");
         }
+    }
+
+    public void createSearchData(SearchData searchData) throws Exception {
+        //消除空格
+        if (searchData.getSymptom() != null) {
+            searchData.setSymptom(searchData.getSymptom().trim());
+        }
+        if (searchData.getDiag() != null) {
+            searchData.setDiag(searchData.getDiag().trim());
+        }
         //默认查询门诊数据
         if (StringUtils.isEmpty(searchData.getResourceType())) {
             searchData.setResourceType(PushConstants.resource_type_o);

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

@@ -12,7 +12,7 @@ public enum NegativeEnum {
     SYMPTOM_PERFORMANCE("26"), NUMBER_QUANTIFIER("27"), DIGITS("28"),
     OTHER("44"),
     VITAL_INDEX("33"), VITAL_INDEX_VALUE("34"), VITAL_RESULT("35"),
-    ADDRESS("36"), PERSON("38"), PERSON_FEATURE_DESC("39"),
+    ADDRESS("36"), PERSON("38"), PERSON_FEATURE_DESC("39"), PUB_NAME("46"),
     RETURN_VISIT("68"), DIAG_STAND("70");
     private String value;
 
@@ -147,6 +147,9 @@ public enum NegativeEnum {
             case "44":
                 negativeEnum = org.diagbot.nlp.util.NegativeEnum.OTHER;
                 break;
+            case "46":
+                negativeEnum = NegativeEnum.PUB_NAME;
+                break;
             case "68":
                 negativeEnum = NegativeEnum.RETURN_VISIT;
                 break;

+ 5 - 1
push-web/src/main/java/org/diagbot/push/controller/AlgorithmController.java

@@ -11,6 +11,7 @@ import org.diagbot.common.push.bean.neo4j.*;
 import org.diagbot.common.push.cache.CacheUtil;
 import org.diagbot.common.push.filter.ClassifyDiag;
 import org.diagbot.common.push.filter.rule.PretreatmentRule;
+import org.diagbot.common.push.work.ParamsDataProxy;
 import org.diagbot.graphWeb.work.GraphCalculate;
 import org.diagbot.graphWeb.work.LisPacsCalculate;
 import org.diagbot.nlp.util.Constants;
@@ -122,7 +123,9 @@ public class AlgorithmController extends BaseController {
         ResponseData responseData = new ResponseData();
         logger.info("开始推送服务......");
         Response<ResponseData> response = new Response();
-
+        //一些基本信息预处理 如年龄 性别
+        ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
+        paramsDataProxy.createNormalInfo(searchData);
         //数据预处理
         PretreatmentRule pretreatmentRule = new PretreatmentRule();
         pretreatmentRule.rule(searchData);
@@ -167,6 +170,7 @@ public class AlgorithmController extends BaseController {
         Map<String, List<CrisisDetail>> crisisDetails = responseData.getCrisisDetails();
         List<MedicalIndication> crisisDetailsList = this.getCrisisDetails(crisisDetails);
         List<MedicalIndication> medicalIndications = graphResponseData.getMedicalIndications();
+        if (medicalIndications == null) medicalIndications = new ArrayList<>();
         medicalIndications.addAll(crisisDetailsList);
         if (medicalIndications != null && medicalIndications.size() > 0) {
             logger.info("指标推送!!!!!!!!!");

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

@@ -17,75 +17,52 @@ import java.util.Set;
  * Created by louhr on 2019/9/2.
  */
 public class CrisisApplication {
-    private static String[] itemTypes = { "symptom", "vital", "lis", "pacs" };
-
     public Map<String, List<CrisisDetail>> crisisContent(SearchData searchData) {
-        //<"symptom",[CrisisDetail1,CrisisDetail2]>
-        //<"vital",[CrisisDetail1,CrisisDetail2]>
+        Map<String, List<Rule>> rules = searchData.getRules();
+        if (rules == null) {
+            return new HashMap<String, List<CrisisDetail>>();
+        }
+        Map<String, RuleApp> ruleApps = ApplicationCacheUtil.getKl_rule_app_filter_map();
+
         Map<String, List<CrisisDetail>> crisisMap = new HashMap<>();
         List<CrisisDetail> crisisList = null;
-        Map<String, RuleApp> ruleApps = ApplicationCacheUtil.getKl_rule_app_filter_map();
-        Map<String, List<Rule>> rules = searchData.getRules();
-        Set<String> ruleAppKeys = ruleApps.keySet();
-        for (String itemType : itemTypes) {
-            List<Rule> detailRules = rules.get(itemType);
-            for (String ruleAppKey : ruleAppKeys) {
-                boolean isRuleAppEnd = false;
-                if (ruleAppKey.contains(",")) {
-                    String[] ruleAppKeysSplit = ruleAppKey.split(",");
-                    int ruleAppKeySum = 0;
-                    for (String ruleAppKeySplit : ruleAppKeysSplit) {
-                        String standardText = "";
-                        String originText = "";
-                        for (Rule rule : detailRules) {
-                            if (ruleAppKeySplit.equals(rule.getId())) {
-                                ruleAppKeySum++;
-                                standardText += ";" + rule.getPub_name();
-                                originText += ";" + rule.getOriginText();
-                                break;
-                            }
-                            if (ruleAppKeySum == ruleAppKeysSplit.length) {
-                                if (!StringUtils.isEmpty(ruleApps.get(ruleAppKey).getType_id())
-                                        && "0".equals(ruleApps.get(ruleAppKey).getType_id())) {
-                                    CrisisDetail crisisDetail = new CrisisDetail();
-                                    crisisDetail.setRemindText(ruleApps.get(ruleAppKey).getRemind());
-                                    crisisDetail.setStandardText(standardText);
-                                    crisisDetail.setOriginText(originText);
-                                    if (crisisMap.get(itemType) == null) {
-                                        crisisList = new ArrayList<>();
-                                    } else {
-                                        crisisList = crisisMap.get(itemType);
-                                    }
-                                    crisisList.add(crisisDetail);
-                                    crisisMap.put(itemType, crisisList);
-                                    isRuleAppEnd = true;
-                                }
-                            }
-                        }
-                    }
-                } else {
-                    for (Rule rule : detailRules) {
-                        if (ruleApps.containsKey(rule.getId())) {
-                            if (!StringUtils.isEmpty(ruleApps.get(ruleAppKey).getType_id())
-                                    && "0".equals(ruleApps.get(rule.getId()).getType_id())) {
-                                CrisisDetail crisisDetail = new CrisisDetail();
-                                crisisDetail.setRemindText(ruleApps.get(rule.getId()).getRemind());
-                                crisisDetail.setStandardText(rule.getPub_name());
-                                crisisDetail.setOriginText(rule.getOriginText());
-                                if (crisisMap.get(itemType) == null) {
-                                    crisisList = new ArrayList<>();
-                                } else {
-                                    crisisList = crisisMap.get(itemType);
-                                }
-                                crisisList.add(crisisDetail);
-                                crisisMap.put(itemType, crisisList);
-                            }
+        for (Map.Entry<String, RuleApp> app : ruleApps.entrySet()) {
+            if (StringUtils.isEmpty(app.getValue().getRuleIds())) {
+                continue;
+            }
+            String[] ruleIds = app.getValue().getRuleIds().split(",");
+            String standardText = "", originText = "";
+            boolean allRuleIdsSuit = true;
+            for (String ruleId : ruleIds) {
+                boolean isFindRule = false;
+                for (Map.Entry<String, List<Rule>> suitRules : rules.entrySet()) {
+                    for (Rule suitRule : suitRules.getValue()) {
+                        if (ruleId.equals(suitRule.getId())) {
+                            isFindRule = true;
+                            standardText += suitRule.getPub_name() + ";";
+                            originText += suitRule.getOriginText() + ";";
+                            break;
                         }
                     }
                 }
-                if (isRuleAppEnd) {
-                    continue;
+                if (!isFindRule) {
+                    allRuleIdsSuit = false;
+                    break;
+                }
+            }
+            //所有规则都满足
+            if (allRuleIdsSuit) {
+                CrisisDetail crisisDetail = new CrisisDetail();
+                crisisDetail.setOriginText(originText);
+                crisisDetail.setStandardText(standardText);
+                crisisDetail.setRemindText(app.getValue().getRemind());
+
+                crisisList = crisisMap.get(app.getKey());
+                if (crisisList == null) {
+                    crisisList = new ArrayList<>();
                 }
+                crisisList.add(crisisDetail);
+                crisisMap.put(app.getKey(), crisisList);
             }
         }
         return crisisMap;