Browse Source

1.添加危急值提醒,Kl_rule_app做缓存

hujing 5 years ago
parent
commit
4e88fd4c69

+ 6 - 0
common-push/pom.xml

@@ -28,6 +28,12 @@
             <artifactId>nlp</artifactId>
             <artifactId>nlp</artifactId>
             <version>1.0.0</version>
             <version>1.0.0</version>
         </dependency>
         </dependency>
+
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>common-service</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

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

@@ -11,6 +11,7 @@ import lombok.Setter;
 @Getter
 @Getter
 @Setter
 @Setter
 public class Rule {
 public class Rule {
+    private String id = "";
     // 大类名称
     // 大类名称
     private String set_name = "";
     private String set_name = "";
     // 小类名称
     // 小类名称
@@ -40,6 +41,14 @@ public class Rule {
     //提醒信息
     //提醒信息
     private String originText = "";
     private String originText = "";
 
 
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
     public String getSet_name() {
     public String getSet_name() {
         return set_name;
         return set_name;
     }
     }

+ 36 - 0
common-push/src/main/java/org/diagbot/common/push/bean/RuleApp.java

@@ -0,0 +1,36 @@
+package org.diagbot.common.push.bean;
+
+/**
+ * @Description:
+ * @Author: HUJING
+ * @Date: 2019/9/3 13:21
+ */
+public class RuleApp {
+    private String rule_id;
+    private String type_id;
+    private String remind;
+
+    public String getRule_id() {
+        return rule_id;
+    }
+
+    public void setRule_id(String rule_id) {
+        this.rule_id = rule_id;
+    }
+
+    public String getType_id() {
+        return type_id;
+    }
+
+    public void setType_id(String type_id) {
+        this.type_id = type_id;
+    }
+
+    public String getRemind() {
+        return remind;
+    }
+
+    public void setRemind(String remind) {
+        this.remind = remind;
+    }
+}

+ 45 - 15
common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java

@@ -2,6 +2,7 @@ package org.diagbot.common.push.cache;
 
 
 import org.diagbot.common.push.bean.ResultMappingFilter;
 import org.diagbot.common.push.bean.ResultMappingFilter;
 import org.diagbot.common.push.bean.Rule;
 import org.diagbot.common.push.bean.Rule;
+import org.diagbot.common.push.bean.RuleApp;
 import org.diagbot.nlp.participle.cfg.Configuration;
 import org.diagbot.nlp.participle.cfg.Configuration;
 import org.diagbot.nlp.participle.cfg.DefaultConfig;
 import org.diagbot.nlp.participle.cfg.DefaultConfig;
 import org.diagbot.nlp.util.NlpCache;
 import org.diagbot.nlp.util.NlpCache;
@@ -21,6 +22,8 @@ public class ApplicationCacheUtil {
     public static Map<String, Map<String, ResultMappingFilter>> doc_result_mapping_filter_map = null;
     public static Map<String, Map<String, ResultMappingFilter>> doc_result_mapping_filter_map = null;
     // 规则
     // 规则
     public static Map<String, List<Rule>> kl_rule_filter_map = null;
     public static Map<String, List<Rule>> kl_rule_filter_map = null;
+    //危险值提醒
+    public static Map<String, RuleApp> kl_rule_app_filter_map = null;
 
 
     public static Map<String, Map<String, String>> getStandard_info_synonym_map() {
     public static Map<String, Map<String, String>> getStandard_info_synonym_map() {
         if (standard_info_synonym_map == null) {
         if (standard_info_synonym_map == null) {
@@ -99,23 +102,24 @@ public class ApplicationCacheUtil {
         List<String> fileContents = configuration.readFileContents("bigdata_rule_filter.dict");
         List<String> fileContents = configuration.readFileContents("bigdata_rule_filter.dict");
 
 
         List<Rule> rules = null;
         List<Rule> rules = null;
-        for (String line:fileContents) {
+        for (String line : fileContents) {
             String[] content = line.split("\\|");
             String[] content = line.split("\\|");
             Rule rule = new Rule();
             Rule rule = new Rule();
-            if (content.length == 13) {
-                rule.setIdx_name(content[0]==null?"":content[0]);
-                rule.setSet_name(content[1]==null?"":content[1]);
-                rule.setSet_name_check(content[2]==null?"":content[2]);
-                rule.setMin_operator(content[3]==null?"":content[3]);
-                rule.setMin_value(content[4]==null?"":content[4]);
-                rule.setMin_unit(content[5]==null?"":content[5]);
-                rule.setMax_operator(content[6]==null?"":content[6]);
-                rule.setMax_value(content[7]==null?"":content[7]);
-                rule.setMax_unit(content[8]==null?"":content[8]);
-                rule.setEq_operator(content[9]==null?"":content[9]);
-                rule.setEq_value(content[10]==null?"":content[10]);
-                rule.setEq_unit(content[11]==null?"":content[11]);
-                rule.setRemind(content[12]==null?"":content[12]);
+            if (content.length == 14) {
+                rule.setId(content[0] == null ? "" : content[0]);
+                rule.setIdx_name(content[1] == null ? "" : content[1]);
+                rule.setSet_name(content[2] == null ? "" : content[2]);
+                rule.setSet_name_check(content[3] == null ? "" : content[3]);
+                rule.setMin_operator(content[4] == null ? "" : content[4]);
+                rule.setMin_value(content[5] == null ? "" : content[5]);
+                rule.setMin_unit(content[6] == null ? "" : content[6]);
+                rule.setMax_operator(content[7] == null ? "" : content[7]);
+                rule.setMax_value(content[8] == null ? "" : content[8]);
+                rule.setMax_unit(content[9] == null ? "" : content[9]);
+                rule.setEq_operator(content[10] == null ? "" : content[10]);
+                rule.setEq_value(content[11] == null ? "" : content[11]);
+                rule.setEq_unit(content[12] == null ? "" : content[12]);
+                rule.setRemind(content[13] == null ? "" : content[13]);
                 if (kl_rule_filter_map.get(rule.getIdx_name()) == null) {
                 if (kl_rule_filter_map.get(rule.getIdx_name()) == null) {
                     rules = new ArrayList<>();
                     rules = new ArrayList<>();
                 } else {
                 } else {
@@ -126,4 +130,30 @@ public class ApplicationCacheUtil {
             }
             }
         }
         }
     }
     }
+
+    public static Map<String, RuleApp> getKl_rule_app_filter_map() {
+        if (kl_rule_app_filter_map == null) {
+            create_kl_rule_app_filter_map();
+        }
+        return kl_rule_app_filter_map;
+    }
+
+    public static void create_kl_rule_app_filter_map() {
+        kl_rule_app_filter_map = new HashMap<>();
+
+        Configuration configuration = new DefaultConfig();
+        List<String> fileContents = configuration.readFileContents("bigdata_rule_app_filter.dict");
+
+        RuleApp rules = new RuleApp();
+        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);
+            }
+        }
+    }
 }
 }

+ 43 - 24
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -191,11 +191,11 @@ public class CacheFileManager {
             st = conn.createStatement();
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             rs = st.executeQuery(sql);
             FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
             FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
-            String  r2 ,r3;
+            String r2, r3;
             while (rs.next()) {
             while (rs.next()) {
                 r2 = rs.getString(1);//疾病名称
                 r2 = rs.getString(1);//疾病名称
                 r3 = rs.getString(2);//疾病类别
                 r3 = rs.getString(2);//疾病类别
-                fw.write(encrypDES.encrytor(r2+ "|" + r3));
+                fw.write(encrypDES.encrytor(r2 + "|" + r3));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -213,7 +213,7 @@ public class CacheFileManager {
                 r2 = rs.getString(3);//sexType 1:男 2:女 3:都可以
                 r2 = rs.getString(3);//sexType 1:男 2:女 3:都可以
                 r3 = rs.getString(4);//min_age
                 r3 = rs.getString(4);//min_age
                 r4 = rs.getString(5);//max_age
                 r4 = rs.getString(5);//max_age
-                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3+ "|" + r4));
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -258,7 +258,7 @@ public class CacheFileManager {
                 r1 = rs.getString(1);
                 r1 = rs.getString(1);
                 r2 = rs.getString(2);
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r3 = rs.getString(3);
-                fw.write(encrypDES.encrytor(r1+ "|" + r2+ "|" + r3));
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -331,14 +331,14 @@ public class CacheFileManager {
             fw.close();
             fw.close();
 
 
             //规则过滤信息
             //规则过滤信息
-            sql = "SELECT idx_name, set_name, set_name_check, min_operator, min_value, min_unit, max_operator, max_value, " +
+            sql = "SELECT id, idx_name, set_name, set_name_check, min_operator, min_value, min_unit, max_operator, max_value, " +
                     "max_unit, eq_operator, eq_value, eq_unit, remind FROM kl_rule";
                     "max_unit, eq_operator, eq_value, eq_unit, remind FROM kl_rule";
             st = conn.createStatement();
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             rs = st.executeQuery(sql);
             fw = new FileWriter(path + "bigdata_rule_filter.dict");
             fw = new FileWriter(path + "bigdata_rule_filter.dict");
-            String r6, r7, r8, r9, r10, r11, r12, r13;
+            String r6, r7, r8, r9, r10, r11, r12, r13, r14;
             while (rs.next()) {
             while (rs.next()) {
-                r1 = rs.getString(1);
+                r1 = String.valueOf(rs.getInt(1));
                 r2 = rs.getString(2);
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r3 = rs.getString(3);
                 r4 = rs.getString(4);
                 r4 = rs.getString(4);
@@ -351,21 +351,40 @@ public class CacheFileManager {
                 r11 = rs.getString(11);
                 r11 = rs.getString(11);
                 r12 = rs.getString(12);
                 r12 = rs.getString(12);
                 r13 = rs.getString(13);
                 r13 = rs.getString(13);
-                r1 = StringUtils.isEmpty(r1)?"":r1;
-                r2 = StringUtils.isEmpty(r2)?"":r2;
-                r3 = StringUtils.isEmpty(r3)?"":r3;
-                r4 = StringUtils.isEmpty(r4)?"":r4;
-                r5 = StringUtils.isEmpty(r5)?"":r5;
-                r6 = StringUtils.isEmpty(r6)?"":r6;
-                r7 = StringUtils.isEmpty(r7)?"":r7;
-                r8 = StringUtils.isEmpty(r8)?"":r8;
-                r9 = StringUtils.isEmpty(r9)?"":r9;
-                r10 = StringUtils.isEmpty(r10)?"":r10;
-                r11 = StringUtils.isEmpty(r11)?"":r11;
-                r12 = StringUtils.isEmpty(r12)?"":r12;
-                r13 = StringUtils.isEmpty(r13)?"":r13;
-                fw.write(encrypDES.encrytor(r1+ "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
-                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11 + "|" + r12 + "|" + r13));
+                r14 = rs.getString(14);
+                r1 = StringUtils.isEmpty(r1) ? "" : r1;
+                r2 = StringUtils.isEmpty(r2) ? "" : r2;
+                r3 = StringUtils.isEmpty(r3) ? "" : r3;
+                r4 = StringUtils.isEmpty(r4) ? "" : r4;
+                r5 = StringUtils.isEmpty(r5) ? "" : r5;
+                r6 = StringUtils.isEmpty(r6) ? "" : r6;
+                r7 = StringUtils.isEmpty(r7) ? "" : r7;
+                r8 = StringUtils.isEmpty(r8) ? "" : r8;
+                r9 = StringUtils.isEmpty(r9) ? "" : r9;
+                r10 = StringUtils.isEmpty(r10) ? "" : r10;
+                r11 = StringUtils.isEmpty(r11) ? "" : r11;
+                r12 = StringUtils.isEmpty(r12) ? "" : r12;
+                r13 = StringUtils.isEmpty(r13) ? "" : r13;
+                r14 = StringUtils.isEmpty(r14) ? "" : r14;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
+                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11
+                        + "|" + r12 + "|" + r13 + "|" + r14));
+                fw.write("\n");
+            }
+            fw.close();
+
+            sql = "SELECT 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");
+            while (rs.next()) {
+                r1 = String.valueOf(rs.getInt(1));
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                r1 = StringUtils.isEmpty(r1) ? "" : r1;
+                r2 = StringUtils.isEmpty(r2) ? "" : r2;
+                r3 = StringUtils.isEmpty(r3) ? "" : r3;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -373,14 +392,14 @@ public class CacheFileManager {
             ioe.printStackTrace();
             ioe.printStackTrace();
         } catch (SQLException sqle) {
         } catch (SQLException sqle) {
             sqle.printStackTrace();
             sqle.printStackTrace();
-        }  catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         } finally {
         } finally {
             nlpJdbc.close(rs, st, conn);
             nlpJdbc.close(rs, st, conn);
         }
         }
     }
     }
 
 
-    private List<Map.Entry<String, String>> rsToMap(ResultSet rs, boolean isJoin) throws SQLException{
+    private List<Map.Entry<String, String>> rsToMap(ResultSet rs, boolean isJoin) throws SQLException {
         String r1 = "";
         String r1 = "";
         String r2 = "";
         String r2 = "";
         Map<String, String> libraryMap = new HashMap<>(10);
         Map<String, String> libraryMap = new HashMap<>(10);

+ 31 - 10
common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java

@@ -10,6 +10,7 @@ import org.diagbot.common.push.filter.pretreat.*;
 import org.diagbot.pub.Constants;
 import org.diagbot.pub.Constants;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
@@ -42,6 +43,13 @@ public class PretreatmentRule {
         return add2PreResultList(preResultList, content, ruleType, searchData);
         return add2PreResultList(preResultList, content, ruleType, searchData);
     }
     }
 
 
+    public static void main(String[] args) throws IOException {
+        PretreatmentRule pretreatmentRule = new PretreatmentRule();
+        SearchData searchData = new SearchData();
+        searchData.setSymptom("钠(Na)110mmol/L");
+        pretreatmentRule.rule(searchData);
+    }
+
     private String add2PreResultList(List<PreResult> preResultList, String content, String ruleType, SearchData searchData) 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>> kl_rule_filter_map = ApplicationCacheUtil.getKl_rule_filter_map();
         //符合条件的规则
         //符合条件的规则
@@ -94,12 +102,16 @@ public class PretreatmentRule {
         //标准值最优先匹配
         //标准值最优先匹配
         if (compareEqual(result.getValue(), rule.getEq_value())) {
         if (compareEqual(result.getValue(), rule.getEq_value())) {
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
             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())) {
+        } else if (compareMin(result.getValue(), rule.getMin_value(), rule.getMin_operator())
+                && compareMax(result.getValue(), rule.getMax_value(), rule.getMax_operator())
+                && result.getUnits().equals(rule.getMin_operator())
+                && result.getUnits().equals(rule.getMax_operator())) {
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
-        } else if (compareMin(result.getValue(), rule.getMin_value()) && result.getUnits().equals(rule.getMin_operator())) {
+        } else if (compareMin(result.getValue(), rule.getMin_value(), rule.getMin_operator())
+                && result.getUnits().equals(rule.getMin_operator())) {
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
-        } else if (compareMax(result.getValue(), rule.getMax_value()) && result.getUnits().equals(rule.getMin_operator())) {
+        } else if (compareMax(result.getValue(), rule.getMax_value(), rule.getMax_operator())
+                && result.getUnits().equals(rule.getMin_operator())) {
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
             content = content + rule.getRemind() == null ? "" : rule.getRemind();
         }
         }
         return content;
         return content;
@@ -114,10 +126,14 @@ public class PretreatmentRule {
         return false;
         return false;
     }
     }
 
 
-    private boolean compareMin(String c1, String c2) {
-        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)) {
+    private boolean compareMin(String c1, String c2, String operator) {
+        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2) && !StringUtils.isEmpty(operator)) {
             try {
             try {
-                return Double.valueOf(c1) < Double.valueOf(c2);
+                if (operator.contains("=")) {
+                    return Double.valueOf(c1) <= Double.valueOf(c2);
+                } else {
+                    return Double.valueOf(c1) < Double.valueOf(c2);
+                }
             } catch (Exception e) {
             } catch (Exception e) {
                 e.printStackTrace();
                 e.printStackTrace();
             }
             }
@@ -125,13 +141,18 @@ public class PretreatmentRule {
         return false;
         return false;
     }
     }
 
 
-    private boolean compareMax(String c1, String c2) {
-        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)) {
+    private boolean compareMax(String c1, String c2, String operator) {
+        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2) && !StringUtils.isEmpty(operator)) {
             try {
             try {
-                return Double.valueOf(c1) > Double.valueOf(c2);
+                if (operator.contains("=")) {
+                    return Double.valueOf(c1) >= Double.valueOf(c2);
+                } else {
+                    return Double.valueOf(c1) > Double.valueOf(c2);
+                }
             } catch (Exception e) {
             } catch (Exception e) {
             }
             }
         }
         }
         return false;
         return false;
     }
     }
+
 }
 }

+ 5 - 0
rule/pom.xml

@@ -22,6 +22,11 @@
     </properties>
     </properties>
 
 
     <dependencies>
     <dependencies>
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>nlp</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 34 - 0
rule/src/main/java/org/diagbot/rule/bean/CrisisDetail.java

@@ -0,0 +1,34 @@
+package org.diagbot.rule.bean;
+
+/**
+ * Created by louhr on 2019/8/31.
+ */
+public class CrisisDetail {
+    private String remindText;
+    private String standardText;
+    private String originText;
+
+    public String getRemindText() {
+        return remindText;
+    }
+
+    public void setRemindText(String remindText) {
+        this.remindText = remindText;
+    }
+
+    public String getStandardText() {
+        return standardText;
+    }
+
+    public void setStandardText(String standardText) {
+        this.standardText = standardText;
+    }
+
+    public String getOriginText() {
+        return originText;
+    }
+
+    public void setOriginText(String originText) {
+        this.originText = originText;
+    }
+}

+ 52 - 0
rule/src/main/java/org/diagbot/rule/bean/FeatureRate.java

@@ -0,0 +1,52 @@
+package org.diagbot.rule.bean;
+
+/**
+ * Created by fyeman on 2018/1/17.
+ */
+public class FeatureRate {
+    private String featureName;
+    private String extraProperty;
+    private String desc;
+    private String rate;
+    private String source;
+
+    public String getFeatureName() {
+        return featureName;
+    }
+
+    public void setFeatureName(String featureName) {
+        this.featureName = featureName;
+    }
+
+    public String getRate() {
+        return rate;
+    }
+
+    public void setRate(String rate) {
+        this.rate = rate;
+    }
+
+    public String getExtraProperty() {
+        return extraProperty;
+    }
+
+    public void setExtraProperty(String extraProperty) {
+        this.extraProperty = extraProperty;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+}

+ 76 - 0
rule/src/main/java/org/diagbot/rule/bean/LisDetail.java

@@ -0,0 +1,76 @@
+package org.diagbot.rule.bean;
+
+public class LisDetail {
+    private String detailName;
+    private String uniqueName;
+    private Double maxValue;
+    private Double minValue;
+    private String name;
+    private String otherValue;
+    private String units;
+    private Double value;
+
+    public String getDetailName() {
+        return detailName;
+    }
+
+    public void setDetailName(String detailName) {
+        this.detailName = detailName;
+    }
+
+    public String getUniqueName() {
+        return uniqueName;
+    }
+
+    public void setUniqueName(String uniqueName) {
+        this.uniqueName = uniqueName;
+    }
+
+    public Double getMaxValue() {
+        return maxValue;
+    }
+
+    public void setMaxValue(Double maxValue) {
+        this.maxValue = maxValue;
+    }
+
+    public Double getMinValue() {
+        return minValue;
+    }
+
+    public void setMinValue(Double minValue) {
+        this.minValue = minValue;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getOtherValue() {
+        return otherValue;
+    }
+
+    public void setOtherValue(String otherValue) {
+        this.otherValue = otherValue;
+    }
+
+    public String getUnits() {
+        return units;
+    }
+
+    public void setUnits(String units) {
+        this.units = units;
+    }
+
+    public Double getValue() {
+        return value;
+    }
+
+    public void setValue(Double value) {
+        this.value = value;
+    }
+}

+ 79 - 0
rule/src/main/java/org/diagbot/rule/bean/PreResult.java

@@ -0,0 +1,79 @@
+package org.diagbot.rule.bean;
+
+/**
+ * Created by louhr on 2019/8/31.
+ */
+public class PreResult {
+    private String detailName = "";
+    private String uniqueName = "";
+    private String maxValue = "";
+    private String minValue = "";
+    private String name = "";
+    private String otherValue = "";
+    private String units = "";
+    private String value = "";
+
+    public String getDetailName() {
+        return detailName;
+    }
+
+    public void setDetailName(String detailName) {
+        this.detailName = detailName;
+    }
+
+    public String getUniqueName() {
+        return uniqueName;
+    }
+
+    public void setUniqueName(String uniqueName) {
+        this.uniqueName = uniqueName;
+    }
+
+    public String getMaxValue() {
+        return maxValue;
+    }
+
+    public void setMaxValue(String maxValue) {
+        this.maxValue = maxValue;
+    }
+
+    public String getMinValue() {
+        return minValue;
+    }
+
+    public void setMinValue(String minValue) {
+        this.minValue = minValue;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getOtherValue() {
+        return otherValue;
+    }
+
+    public void setOtherValue(String otherValue) {
+        this.otherValue = otherValue;
+    }
+
+    public String getUnits() {
+        return units;
+    }
+
+    public void setUnits(String units) {
+        this.units = units;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 68 - 0
rule/src/main/java/org/diagbot/rule/bean/ResultMappingFilter.java

@@ -0,0 +1,68 @@
+package org.diagbot.rule.bean;
+
+
+public class ResultMappingFilter {
+    private Long id;
+    private String featureName;
+    private String featureType;
+    private String sex;
+    private int ageStart;
+    private int ageEnd;
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getFeatureName() {
+        return featureName;
+    }
+
+    public void setFeatureName(String featureName) {
+        this.featureName = featureName;
+    }
+
+    public String getFeatureType() {
+        return featureType;
+    }
+
+    public void setFeatureType(String featureType) {
+        this.featureType = featureType;
+    }
+
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public int getAgeStart() {
+        return ageStart;
+    }
+
+    public void setAgeStart(int ageStart) {
+        this.ageStart = ageStart;
+    }
+
+    public int getAgeEnd() {
+        return ageEnd;
+    }
+
+    public void setAgeEnd(int ageEnd) {
+        this.ageEnd = ageEnd;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}

+ 163 - 0
rule/src/main/java/org/diagbot/rule/bean/Rule.java

@@ -0,0 +1,163 @@
+package org.diagbot.rule.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 触发规则
+ * @author Mark Huang
+ * @since 27/08/2019
+ */
+@Getter
+@Setter
+public class Rule {
+    private String id = "";
+    // 大类名称
+    private String set_name = "";
+    // 小类名称
+    private String idx_name = "";
+    // 大类名称是否参与比较 1-参与
+    private String set_name_check = "";
+    // 最小值比较符
+    private String min_operator = "";
+    // 最小值
+    private String min_value = "";
+    // 最小值单位
+    private String min_unit = "";
+    // 最大值比较符
+    private String max_operator = "";
+    // 最大值
+    private String max_value = "";
+    // 最大值单位
+    private String max_unit = "";
+    // 标准值 用作等于
+    private String eq_operator = "";
+    // 标准值
+    private String eq_value = "";
+    // 标准值单位
+    private String eq_unit = "";
+    //提醒信息
+    private String remind = "";
+    //提醒信息
+    private String originText = "";
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getSet_name() {
+        return set_name;
+    }
+
+    public void setSet_name(String set_name) {
+        this.set_name = set_name;
+    }
+
+    public String getIdx_name() {
+        return idx_name;
+    }
+
+    public void setIdx_name(String idx_name) {
+        this.idx_name = idx_name;
+    }
+
+    public String getSet_name_check() {
+        return set_name_check;
+    }
+
+    public void setSet_name_check(String set_name_check) {
+        this.set_name_check = set_name_check;
+    }
+
+    public String getMin_operator() {
+        return min_operator;
+    }
+
+    public void setMin_operator(String min_operator) {
+        this.min_operator = min_operator;
+    }
+
+    public String getMin_value() {
+        return min_value;
+    }
+
+    public void setMin_value(String min_value) {
+        this.min_value = min_value;
+    }
+
+    public String getMin_unit() {
+        return min_unit;
+    }
+
+    public void setMin_unit(String min_unit) {
+        this.min_unit = min_unit;
+    }
+
+    public String getMax_operator() {
+        return max_operator;
+    }
+
+    public void setMax_operator(String max_operator) {
+        this.max_operator = max_operator;
+    }
+
+    public String getMax_value() {
+        return max_value;
+    }
+
+    public void setMax_value(String max_value) {
+        this.max_value = max_value;
+    }
+
+    public String getMax_unit() {
+        return max_unit;
+    }
+
+    public void setMax_unit(String max_unit) {
+        this.max_unit = max_unit;
+    }
+
+    public String getEq_operator() {
+        return eq_operator;
+    }
+
+    public void setEq_operator(String eq_operator) {
+        this.eq_operator = eq_operator;
+    }
+
+    public String getEq_value() {
+        return eq_value;
+    }
+
+    public void setEq_value(String eq_value) {
+        this.eq_value = eq_value;
+    }
+
+    public String getEq_unit() {
+        return eq_unit;
+    }
+
+    public void setEq_unit(String eq_unit) {
+        this.eq_unit = eq_unit;
+    }
+
+    public String getRemind() {
+        return remind;
+    }
+
+    public void setRemind(String remind) {
+        this.remind = remind;
+    }
+
+    public String getOriginText() {
+        return originText;
+    }
+
+    public void setOriginText(String originText) {
+        this.originText = originText;
+    }
+}

+ 36 - 0
rule/src/main/java/org/diagbot/rule/bean/RuleApp.java

@@ -0,0 +1,36 @@
+package org.diagbot.rule.bean;
+
+/**
+ * @Description:
+ * @Author: HUJING
+ * @Date: 2019/9/3 13:21
+ */
+public class RuleApp {
+    private String rule_id;
+    private String type_id;
+    private String remind;
+
+    public String getRule_id() {
+        return rule_id;
+    }
+
+    public void setRule_id(String rule_id) {
+        this.rule_id = rule_id;
+    }
+
+    public String getType_id() {
+        return type_id;
+    }
+
+    public void setType_id(String type_id) {
+        this.type_id = type_id;
+    }
+
+    public String getRemind() {
+        return remind;
+    }
+
+    public void setRemind(String remind) {
+        this.remind = remind;
+    }
+}

+ 305 - 0
rule/src/main/java/org/diagbot/rule/bean/SearchData.java

@@ -0,0 +1,305 @@
+package org.diagbot.rule.bean;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SearchData {
+    protected int length = 10;
+    protected int age_start = 0;
+    protected int age_end = 200;
+    protected int age = 0;
+    protected String sex;
+    // 搜索结果的贝叶斯阈值
+    protected String threshold = "0";
+    //特征类别
+    protected String featureType;
+    //诊断类别
+    protected Integer disType; //0:复诊,1:急诊
+    //特征类别对","进行分割后数据
+    protected String[] featureTypes;
+    //门诊 住院分类
+    protected String resourceType;
+    //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
+    protected String sysCode;
+    private List<PreResult> lisArr = new ArrayList<>();
+    protected String chief  = "";
+    protected String symptom = "";
+    protected String vital = "";
+    protected String lis = "";
+    protected String pacs = "";
+    protected String diag = "";
+    protected String past = "";
+    protected String other = "";
+    //当前开单lis项目
+    protected String lisOrder = "";
+    //当前开单pacs项目
+    protected String pacsOrder = "";
+    //当前开单其他 预留
+    protected String otherOrder = "";
+    //大数据推送诊断结果信息
+    protected List<FeatureRate> pushDiags = new ArrayList<>();
+
+    //量表
+    protected String scaleName = "";
+
+    //指标结果
+    protected String indications="";
+    //模型
+    protected String algorithmClassifyValue;
+    //推送条件
+    private Map<String, Map<String, String>> inputs = new HashMap<>(10, 0.8f);
+    //知识图谱推送条件
+    private Map<String, Map<String, String>> graphInputs = new HashMap<>(10, 0.8f);
+    //阴性 页面录入数据需要对结果过滤的集合
+    private Map<String, Map<String, String>> filters = new HashMap<>(10, 0.8f);
+    //满足规则的ID集合
+    private Map<String, List<Rule>> rules = new HashMap<>();
+
+    public Integer getDisType() {
+        return disType;
+    }
+
+    public void setDisType(Integer disType) {
+        this.disType = disType;
+    }
+
+    public List<PreResult> getLisArr() {
+        return lisArr;
+    }
+
+    public void setLisArr(List<PreResult> lisArr) {
+        this.lisArr = lisArr;
+    }
+
+    public int getLength() {
+        return length;
+    }
+
+    public void setLength(int length) {
+        this.length = length;
+    }
+
+    public int getAge_start() {
+        return age_start;
+    }
+
+    public void setAge_start(int age_start) {
+        this.age_start = age_start;
+    }
+
+    public int getAge_end() {
+        return age_end;
+    }
+
+    public void setAge_end(int age_end) {
+        this.age_end = age_end;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public String getFeatureType() {
+        return featureType;
+    }
+
+    public void setFeatureType(String featureType) {
+        this.featureType = featureType;
+    }
+
+    public String[] getFeatureTypes() {
+        return featureTypes;
+    }
+
+    public void setFeatureTypes(String[] featureTypes) {
+        this.featureTypes = featureTypes;
+    }
+
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(String resourceType) {
+        this.resourceType = resourceType;
+    }
+
+    public String getSysCode() {
+        return sysCode;
+    }
+
+    public void setSysCode(String sysCode) {
+        this.sysCode = sysCode;
+    }
+
+    public void setThreshold(String threshold) {
+        this.threshold = threshold;
+    }
+
+    public float getThreshold() { return Float.parseFloat(threshold); }
+
+    public Map<String, Map<String, String>> getInputs() {
+        return inputs;
+    }
+
+    public void setInputs(Map<String, Map<String, String>> inputs) {
+        this.inputs = inputs;
+    }
+
+    public String getChief() {
+        return chief;
+    }
+
+    public void setChief(String chief) {
+        this.chief = chief;
+    }
+
+    public String getSymptom() {
+        return symptom;
+    }
+
+    public void setSymptom(String symptom) {
+        this.symptom = symptom;
+    }
+
+    public String getVital() {
+        return vital;
+    }
+
+    public void setVital(String vital) {
+        this.vital = vital;
+    }
+
+    public String getLis() {
+        return lis;
+    }
+
+    public void setLis(String lis) {
+        this.lis = lis;
+    }
+
+    public String getPacs() {
+        return pacs;
+    }
+
+    public void setPacs(String pacs) {
+        this.pacs = pacs;
+    }
+
+    public String getDiag() {
+        return diag;
+    }
+
+    public void setDiag(String diag) {
+        this.diag = diag;
+    }
+
+    public String getPast() {
+        return past;
+    }
+
+    public void setPast(String past) {
+        this.past = past;
+    }
+
+    public String getOther() {
+        return other;
+    }
+
+    public void setOther(String other) {
+        this.other = other;
+    }
+
+    public String getScaleName() {
+        return scaleName;
+    }
+
+    public void setScaleName(String scaleName) {
+        this.scaleName = scaleName;
+    }
+
+    public String getAlgorithmClassifyValue() {
+        return algorithmClassifyValue;
+    }
+
+    public void setAlgorithmClassifyValue(String algorithmClassifyValue) {
+        this.algorithmClassifyValue = algorithmClassifyValue;
+    }
+
+    public Map<String, Map<String, String>> getFilters() {
+        return filters;
+    }
+
+    public void setFilters(Map<String, Map<String, String>> filters) {
+        this.filters = filters;
+    }
+
+    public List<FeatureRate> getPushDiags() {
+        return pushDiags;
+    }
+
+    public void setPushDiags(List<FeatureRate> pushDiags) {
+        this.pushDiags = pushDiags;
+    }
+
+    public String getIndications() {
+        return indications;
+    }
+
+    public void setIndications(String indications) {
+        this.indications = indications;
+    }
+
+    public Map<String, Map<String, String>> getGraphInputs() {
+        return graphInputs;
+    }
+
+    public void setGraphInputs(Map<String, Map<String, String>> graphInputs) {
+        this.graphInputs = graphInputs;
+    }
+
+    public String getLisOrder() {
+        return lisOrder;
+    }
+
+    public void setLisOrder(String lisOrder) {
+        this.lisOrder = lisOrder;
+    }
+
+    public String getPacsOrder() {
+        return pacsOrder;
+    }
+
+    public void setPacsOrder(String pacsOrder) {
+        this.pacsOrder = pacsOrder;
+    }
+
+    public String getOtherOrder() {
+        return otherOrder;
+    }
+
+    public void setOtherOrder(String otherOrder) {
+        this.otherOrder = otherOrder;
+    }
+
+    public Map<String, List<Rule>> getRules() {
+        return rules;
+    }
+
+    public void setRules(Map<String, List<Rule>> rules) {
+        this.rules = rules;
+    }
+}

+ 159 - 0
rule/src/main/java/org/diagbot/rule/cache/ApplicationCacheUtil.java

@@ -0,0 +1,159 @@
+package org.diagbot.rule.cache;
+
+import org.diagbot.nlp.participle.cfg.Configuration;
+import org.diagbot.nlp.participle.cfg.DefaultConfig;
+import org.diagbot.nlp.util.NlpCache;
+import org.diagbot.rule.bean.ResultMappingFilter;
+import org.diagbot.rule.bean.Rule;
+import org.diagbot.rule.bean.RuleApp;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ApplicationCacheUtil {
+
+    //词库同义词定义
+    public static Map<String, Map<String, String>> standard_info_synonym_map = null;
+    //诊断科室衍射
+    public static Map<String, String> doc_result_mapping_diag_map = null;
+    //特征性别 年龄过滤等
+    public static Map<String, Map<String, ResultMappingFilter>> doc_result_mapping_filter_map = null;
+    // 规则
+    public static Map<String, List<Rule>> kl_rule_filter_map = null;
+    //危险值提醒
+    public static Map<String, RuleApp> kl_rule_app_filter_map = null;
+
+    public static Map<String, Map<String, String>> getStandard_info_synonym_map() {
+        if (standard_info_synonym_map == null) {
+            standard_info_synonym_map = NlpCache.getStandard_info_synonym_map();
+        }
+        return standard_info_synonym_map;
+    }
+
+    public static Map<String, String> getDoc_result_mapping_diag_map() {
+        if (doc_result_mapping_diag_map == null) {
+            createDoc_result_mapping_diag_map();
+        }
+        return doc_result_mapping_diag_map;
+    }
+
+    public static Map<String, String> createDoc_result_mapping_diag_map() {
+        Configuration configuration = new DefaultConfig();
+        doc_result_mapping_diag_map = configuration.loadMapDict("bigdata_diag_2_dept.dict");
+        return doc_result_mapping_diag_map;
+    }
+
+    public static Map<String, Map<String, ResultMappingFilter>> getDoc_result_mapping_filter_map() {
+        if (doc_result_mapping_filter_map == null) {
+            createDoc_result_mapping_filter_map();
+        }
+        return doc_result_mapping_filter_map;
+    }
+
+    public static Map<String, Map<String, ResultMappingFilter>> createDoc_result_mapping_filter_map() {
+        Configuration configuration = new DefaultConfig();
+        List<String> fileContents = configuration.readFileContents("bigdata_sex_age_filter.dict");
+        String[] line_string;
+        List<ResultMappingFilter> resultMappingFilters = new ArrayList<>();
+        try {
+            for (int i = 0; i < fileContents.size(); i++) {
+                line_string = org.apache.commons.lang3.StringUtils.split(fileContents.get(i), "\\|");
+                if (line_string.length == 5) {
+                    ResultMappingFilter resultMappingFilter = new ResultMappingFilter();
+                    resultMappingFilter.setFeatureName(line_string[0]);
+                    resultMappingFilter.setFeatureType(line_string[1]);
+                    resultMappingFilter.setSex(line_string[2]);
+                    resultMappingFilter.setAgeStart(Integer.parseInt(line_string[3]));
+                    resultMappingFilter.setAgeEnd(Integer.parseInt(line_string[4]));
+                    resultMappingFilters.add(resultMappingFilter);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        doc_result_mapping_filter_map = new HashMap<>();
+        Map<String, ResultMappingFilter> filterMap = null;
+        for (ResultMappingFilter resultMappingFilter : resultMappingFilters) {
+            filterMap = doc_result_mapping_filter_map.get(resultMappingFilter.getFeatureType());
+            if (filterMap == null) {
+                filterMap = new HashMap<>();
+            }
+            filterMap.put(resultMappingFilter.getFeatureName(), resultMappingFilter);
+            doc_result_mapping_filter_map.put(resultMappingFilter.getFeatureType(), filterMap);
+        }
+        return doc_result_mapping_filter_map;
+    }
+
+
+    public static Map<String, List<Rule>> getKl_rule_filter_map() {
+        if (kl_rule_filter_map == null) {
+            create_kl_rule_filter_map();
+        }
+        return kl_rule_filter_map;
+    }
+
+    public static void create_kl_rule_filter_map() {
+        kl_rule_filter_map = new HashMap<>();
+
+        Configuration configuration = new DefaultConfig();
+        List<String> fileContents = configuration.readFileContents("bigdata_rule_filter.dict");
+
+        List<Rule> rules = null;
+        for (String line : fileContents) {
+            String[] content = line.split("\\|");
+            Rule rule = new Rule();
+            if (content.length == 14) {
+                rule.setId(content[0] == null ? "" : content[0]);
+                rule.setIdx_name(content[1] == null ? "" : content[1]);
+                rule.setSet_name(content[2] == null ? "" : content[2]);
+                rule.setSet_name_check(content[3] == null ? "" : content[3]);
+                rule.setMin_operator(content[4] == null ? "" : content[4]);
+                rule.setMin_value(content[5] == null ? "" : content[5]);
+                rule.setMin_unit(content[6] == null ? "" : content[6]);
+                rule.setMax_operator(content[7] == null ? "" : content[7]);
+                rule.setMax_value(content[8] == null ? "" : content[8]);
+                rule.setMax_unit(content[9] == null ? "" : content[9]);
+                rule.setEq_operator(content[10] == null ? "" : content[10]);
+                rule.setEq_value(content[11] == null ? "" : content[11]);
+                rule.setEq_unit(content[12] == null ? "" : content[12]);
+                rule.setRemind(content[13] == null ? "" : content[13]);
+                if (kl_rule_filter_map.get(rule.getIdx_name()) == null) {
+                    rules = new ArrayList<>();
+                } else {
+                    rules = kl_rule_filter_map.get(rule.getIdx_name());
+                }
+                rules.add(rule);
+                kl_rule_filter_map.put(rule.getIdx_name(), rules);
+            }
+        }
+    }
+
+    public static Map<String, RuleApp> getKl_rule_app_filter_map() {
+        if (kl_rule_app_filter_map == null) {
+            create_kl_rule_app_filter_map();
+        }
+        return kl_rule_app_filter_map;
+    }
+
+    public static void create_kl_rule_app_filter_map() {
+        kl_rule_app_filter_map = new HashMap<>();
+
+        Configuration configuration = new DefaultConfig();
+        List<String> fileContents = configuration.readFileContents("bigdata_rule_app_filter.dict");
+
+        RuleApp rules = new RuleApp();
+        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);
+            }
+        }
+    }
+}

+ 430 - 0
rule/src/main/java/org/diagbot/rule/cache/CacheFileManager.java

@@ -0,0 +1,430 @@
+package org.diagbot.rule.cache;
+
+import org.diagbot.pub.jdbc.MysqlJdbc;
+import org.diagbot.pub.utils.PropertiesUtil;
+import org.diagbot.pub.utils.security.EncrypDES;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by louhr on 2019/8/16.
+ */
+public class CacheFileManager {
+    Logger logger = LoggerFactory.getLogger(CacheFileManager.class);
+
+    private String user = "root";
+    private String password = "lantone";
+    private String url = "jdbc:mysql://192.168.2.236:3306/med?useUnicode=true&characterEncoding=UTF-8";
+
+    private String path = "";
+
+    public static void main(String[] args) {
+        CacheFileManager cacheFileManager = new CacheFileManager();
+        PropertiesUtil propertiesUtil = new PropertiesUtil("nlp.properties");
+        String p = propertiesUtil.getProperty("cache.file.dir");
+        File file = new File(p);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        //自然语言处理
+        cacheFileManager.createNlpCacheFile(p);
+        //大数据
+        cacheFileManager.createBigDataCacheFile(p);
+        //图谱
+        cacheFileManager.createGraphCacheFile(p);
+    }
+
+    public CacheFileManager() {
+        PropertiesUtil propertiesUtil = new PropertiesUtil("nlp.properties");
+        String p = propertiesUtil.getProperty("cache.file.dir");
+        File file = new File(p);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        logger.info("cache file path...." + p);
+        path = p;
+    }
+
+    public void createCacheFile() {
+        createNlpCacheFile(path);
+        createGraphCacheFile(path);
+        createBigDataCacheFile(path);
+    }
+
+    public void createNlpCacheFile() {
+        createNlpCacheFile(path);
+    }
+
+    public void createNlpCacheFile(String path) {
+        MysqlJdbc nlpJdbc = new MysqlJdbc(user, password, url);
+        Connection conn = nlpJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        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" +
+                    "                    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' ";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            FileWriter fw = new FileWriter(path + "tc.dict");
+
+            Map<String, String> idMap = new HashMap<>(10);
+            Map<String, String> nameMap = new HashMap<>(10);
+            String r1;
+            String r2;
+            String r3;
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                r3 = rs.getString(4);
+                if (idMap.get(r1) == null) {
+                    idMap.put(r1, r2);
+                    nameMap.put(r1, r3);
+                } else if (idMap.get(r1) != null) {
+                    idMap.put(r1, idMap.get(r1) + "," + r2);
+                    nameMap.put(r1, nameMap.get(r1) + "," + r3);
+                }
+            }
+
+            List<Map.Entry<String, String>> libraryList = new ArrayList<Map.Entry<String, String>>(idMap.entrySet());
+            Collections.sort(libraryList, new Comparator<Map.Entry<String, String>>() {
+                public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
+                    return o1.getKey().compareTo(o2.getKey());
+                }
+            });
+            for (Map.Entry<String, String> entry : libraryList) {
+                fw.write(encrypDES.encrytor(entry.getKey() + "|9|"
+                        + entry.getValue() + "|" + nameMap.get(entry.getKey())));
+                fw.write("\n");
+            }
+
+            fw.close();
+
+            sql = "SELECT l_1.name l_1_name, l_2.name l_2_name, l_1.type_id FROM kl_library_info l_1 " +
+                    "left join kl_library_info l_2 on l_1.concept_id = l_2.concept_id and l_2.is_concept = '1' " +
+                    "where l_1.is_concept = '0'";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+
+            fw = new FileWriter(path + "synonym.dict");
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
+                fw.write("\n");
+            }
+            fw.close();
+
+            sql = "SELECT l_1.name l_1_name, l_2.name l_2_name FROM kl_relation r " +
+                    "left join kl_concept c1 on r.start_id = c1.id " +
+                    "left join kl_concept c2 on r.end_id = c2.id " +
+                    "left join kl_library_info l_1 on l_1.id = c1.lib_id " +
+                    "left join kl_library_info l_2 on l_2.id = c2.lib_id where r.relation_id = 3";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+
+            libraryList = rsToMap(rs, false);
+
+            fw = new FileWriter(path + "chronic.dict");
+            for (Map.Entry<String, String> entry : libraryList) {
+                fw.write(encrypDES.encrytor(entry.getKey() + "|" + entry.getValue()));
+                fw.write("\n");
+            }
+            fw.close();
+
+            //推送词典
+            sql = "select k1.lib_name k1_lib_name, k2.lib_name k2_lib_name from kl_relation r " +
+                    "left join kl_concept k1 on k1.id = r.start_id " +
+                    "left join kl_concept k2 on k2.id = r.end_id " +
+                    "where r.relation_id = 19 and k1.is_deleted = 'N' and k2.is_deleted = 'N' and k1.lib_type = 1 and k2.lib_type = 1";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            libraryList = rsToMap(rs, true);
+
+            fw = new FileWriter(path + "push-tc.dict");
+            for (Map.Entry<String, String> entry : libraryList) {
+                fw.write(encrypDES.encrytor(entry.getKey() + "|" + entry.getValue()));
+                fw.write("\n");
+            }
+            fw.close();
+
+            fw = new FileWriter(path + "classify.dict");
+            fw.close();
+        } catch (IOException ioe) {
+            ioe.printStackTrace();
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            nlpJdbc.close(rs, st, conn);
+        }
+    }
+
+    public void createGraphCacheFile() {
+        createGraphCacheFile(path);
+    }
+
+    public void createGraphCacheFile(String path) {
+        MysqlJdbc nlpJdbc = new MysqlJdbc(user, password, url);
+        Connection conn = nlpJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            //疾病I、II类
+            EncrypDES encrypDES = new EncrypDES();//加密对象
+            String sql = "SELECT con.lib_name, dis.classify from kl_disease dis, kl_concept con where dis.concept_id = con.id";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
+            String r2, r3;
+            while (rs.next()) {
+                r2 = rs.getString(1);//疾病名称
+                r3 = rs.getString(2);//疾病类别
+                fw.write(encrypDES.encrytor(r2 + "|" + r3));
+                fw.write("\n");
+            }
+            fw.close();
+            //性别年龄
+            sql = "SELECT k1.lib_name, k1.lib_type, kcc.sex_type, kcc.min_age, kcc.max_age \n" +
+                    "FROM kl_concept_common kcc, kl_concept k1 \n" +
+                    "where kcc.concept_id = k1.id \n" +
+                    "and k1.lib_type in (18)";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            fw = new FileWriter(path + "graph_sex_age_filter.dict");
+            String r1, r4, r5;
+            while (rs.next()) {
+                r1 = rs.getString(1);//术语名称
+                r2 = rs.getString(3);//sexType 1:男 2:女 3:都可以
+                r3 = rs.getString(4);//min_age
+                r4 = rs.getString(5);//max_age
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4));
+                fw.write("\n");
+            }
+            fw.close();
+            //体征结果转体征指标
+            sql = "SELECT\n" +
+                    "\ti1.lib_name name1,\n" +
+                    "\ti2.lib_name name2 \n" +
+                    "FROM\n" +
+                    "\t`kl_relation` l \n" +
+                    "\tLEFT JOIN kl_concept i1 ON l.start_id = i1.id \n" +
+                    "\tLEFT JOIN kl_concept i2 ON l.end_id = i2.id \n" +
+                    "where l.relation_id=19 AND i1.lib_type=35 AND i2.lib_type=33 AND l.is_deleted='N'";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            fw = new FileWriter(path + "graph_vital_convert.dict");
+            while (rs.next()) {
+                r1 = rs.getString(1);//体征结果
+                r2 = rs.getString(2);//体征指标
+                fw.write(encrypDES.encrytor(r1 + "|" + r2));
+                fw.write("\n");
+            }
+            fw.close();
+            //疾病科室信息
+            sql = "SELECT k1.lib_name diag_name, k2.lib_name dept_name FROM kl_concept_common kcc, kl_concept k1, kl_concept k2 " +
+                    "where kcc.concept_id = k1.id and kcc.dept_id = k2.id " +
+                    "and k1.lib_type = 18 and kcc.dept_id  is not null";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            List<Map.Entry<String, String>> libaryList = rsToMap(rs, true);
+            fw = new FileWriter(path + "graph_diag_2_dept.dict");
+            for (Map.Entry<String, String> entry : libaryList) {
+                fw.write(encrypDES.encrytor(entry.getKey() + "|" + entry.getValue()));
+                fw.write("\n");
+            }
+            fw.close();
+
+            sql = "SELECT g.diag_level1,g.diag_level2,g.diag_level3 FROM `kl_disease_normalize` g ";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            fw = new FileWriter(path + "graph_diag_normalize.dict");
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
+                fw.write("\n");
+            }
+            fw.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            nlpJdbc.close(rs, st, conn);
+        }
+    }
+
+    public void createBigDataCacheFile() {
+        createBigDataCacheFile(path);
+    }
+
+    public void createBigDataCacheFile(String path) {
+        MysqlJdbc nlpJdbc = new MysqlJdbc(user, password, url);
+        Connection conn = nlpJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            EncrypDES encrypDES = new EncrypDES();
+            //疾病科室
+            String sql = "SELECT k1.lib_name diag_name, k2.lib_name dept_name FROM kl_concept_common kcc, kl_concept k1, kl_concept k2 " +
+                    "where kcc.concept_id = k1.id and kcc.dept_id = k2.id " +
+                    "and k1.lib_type = 18 and kcc.dept_id  is not null";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            List<Map.Entry<String, String>> libraryList = rsToMap(rs, true);
+
+            FileWriter fw = new FileWriter(path + "bigdata_diag_2_dept.dict");
+            for (Map.Entry<String, String> entry : libraryList) {
+                fw.write(encrypDES.encrytor(entry.getKey() + "|" + entry.getValue()));
+                fw.write("\n");
+            }
+            fw.close();
+
+            //性别年龄
+            sql = "SELECT k1.lib_name, k1.lib_type, kcc.sex_type, kcc.min_age, kcc.max_age " +
+                    "FROM kl_concept_common kcc, kl_concept k1 " +
+                    "where kcc.concept_id = k1.id " +
+                    "and k1.lib_type in (1, 18)";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            fw = new FileWriter(path + "bigdata_sex_age_filter.dict");
+
+            String r1, r2, r3, r4, r5;
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                r4 = rs.getString(4);
+                r5 = rs.getString(5);
+                if ("18".equals(r2)) {
+                    r2 = "2";
+                }
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5));
+                fw.write("\n");
+            }
+            fw.close();
+
+            sql = "SELECT lib_name FROM kl_concept WHERE is_deleted = 'N' AND lib_type = 70 AND lib_name regexp '[0-9]'";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+
+            fw = new FileWriter(path + "bigdata_value_analyze.dict");
+            while (rs.next()) {
+                fw.write(encrypDES.encrytor(rs.getString(1)));
+                fw.write("\n");
+            }
+            fw.close();
+
+            //规则过滤信息
+            sql = "SELECT id, idx_name, set_name, set_name_check, min_operator, min_value, min_unit, max_operator, max_value, " +
+                    "max_unit, eq_operator, eq_value, eq_unit, remind FROM kl_rule";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            fw = new FileWriter(path + "bigdata_rule_filter.dict");
+            String r6, r7, r8, r9, r10, r11, r12, r13, r14;
+            while (rs.next()) {
+                r1 = String.valueOf(rs.getInt(1));
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                r4 = rs.getString(4);
+                r5 = rs.getString(5);
+                r6 = rs.getString(6);
+                r7 = rs.getString(7);
+                r8 = rs.getString(8);
+                r9 = rs.getString(9);
+                r10 = rs.getString(10);
+                r11 = rs.getString(11);
+                r12 = rs.getString(12);
+                r13 = rs.getString(13);
+                r14 = rs.getString(14);
+                r1 = StringUtils.isEmpty(r1) ? "" : r1;
+                r2 = StringUtils.isEmpty(r2) ? "" : r2;
+                r3 = StringUtils.isEmpty(r3) ? "" : r3;
+                r4 = StringUtils.isEmpty(r4) ? "" : r4;
+                r5 = StringUtils.isEmpty(r5) ? "" : r5;
+                r6 = StringUtils.isEmpty(r6) ? "" : r6;
+                r7 = StringUtils.isEmpty(r7) ? "" : r7;
+                r8 = StringUtils.isEmpty(r8) ? "" : r8;
+                r9 = StringUtils.isEmpty(r9) ? "" : r9;
+                r10 = StringUtils.isEmpty(r10) ? "" : r10;
+                r11 = StringUtils.isEmpty(r11) ? "" : r11;
+                r12 = StringUtils.isEmpty(r12) ? "" : r12;
+                r13 = StringUtils.isEmpty(r13) ? "" : r13;
+                r14 = StringUtils.isEmpty(r14) ? "" : r14;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
+                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11
+                        + "|" + r12 + "|" + r13 + "|" + r14));
+                fw.write("\n");
+            }
+            fw.close();
+
+            sql = "SELECT 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");
+            while (rs.next()) {
+                r1 = String.valueOf(rs.getInt(1));
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                r1 = StringUtils.isEmpty(r1) ? "" : r1;
+                r2 = StringUtils.isEmpty(r2) ? "" : r2;
+                r3 = StringUtils.isEmpty(r3) ? "" : r3;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
+                fw.write("\n");
+            }
+            fw.close();
+        } catch (IOException ioe) {
+            ioe.printStackTrace();
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            nlpJdbc.close(rs, st, conn);
+        }
+    }
+
+    private List<Map.Entry<String, String>> rsToMap(ResultSet rs, boolean isJoin) throws SQLException {
+        String r1 = "";
+        String r2 = "";
+        Map<String, String> libraryMap = new HashMap<>(10);
+        while (rs.next()) {
+            r1 = rs.getString(1);
+            r2 = rs.getString(2);
+            if (libraryMap.get(r1) == null) {
+                libraryMap.put(r1, r2);
+            } else if (isJoin && libraryMap.get(r1) != null) {
+                libraryMap.put(r1, libraryMap.get(r1) + "," + r2);
+            }
+        }
+
+        List<Map.Entry<String, String>> libraryList = new ArrayList<Map.Entry<String, String>>(libraryMap.entrySet());
+        Collections.sort(libraryList, new Comparator<Map.Entry<String, String>>() {
+            public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
+                return o1.getKey().compareTo(o2.getKey());
+            }
+        });
+
+        return libraryList;
+    }
+}

+ 176 - 0
rule/src/main/java/org/diagbot/rule/cache/CacheUtil.java

@@ -0,0 +1,176 @@
+package org.diagbot.rule.cache;
+
+import org.apache.commons.lang3.StringUtils;
+import org.diagbot.nlp.participle.cfg.Configuration;
+import org.diagbot.nlp.participle.cfg.DefaultConfig;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CacheUtil {
+    public static Map<String,Map<String,String>> sexAgeMap=null;
+    public static Map<String,String> vitalMap=null;
+    public static Map<String,String> disgSortMap=null;
+    public static Map<String,String> diagClassifyMap = null;
+    public static Map<String,Integer> diagClassifyJiMap = null;
+    //诊断科室衍射
+    public static Map<String, String> doc_result_mapping_diag_map = null;
+
+    //疾病科室,获取缓存
+    public static Map<String,String> getDiagDepartCache(){
+        if (doc_result_mapping_diag_map == null) {
+            createDiagDepartCache();
+        }
+        return doc_result_mapping_diag_map;
+    }
+
+    public static Map<String,String> createDiagDepartCache(){
+        Configuration configuration = new DefaultConfig();
+        doc_result_mapping_diag_map = new HashMap<>();
+        List<String> contentList = configuration.readFileContents("graph_diag_2_dept.dict");
+        for (String s:contentList) {
+            String[] splits = s.split("\\|");
+            doc_result_mapping_diag_map.put(splits[0],splits[1]);
+        }
+        return doc_result_mapping_diag_map;
+    }
+
+    //疾病分级解析,获取缓存
+    public static Map<String,Integer> getDiagClassifyJiCache(){
+        if (diagClassifyJiMap == null) {
+            createDiagClassifyJiCache();
+        }
+        return diagClassifyJiMap;
+    }
+
+    public static Map<String,Integer> createDiagClassifyJiCache(){
+        Configuration configuration = new DefaultConfig();
+        diagClassifyJiMap = new HashMap<>();
+        List<String> contentList = configuration.readFileContents("graph_diag_normalize.dict");
+        String diagName =null,bigdiagName=null;
+        String[] diagSort =null;String[] split = null;
+        for (String s:contentList) {
+            String[] splits = s.split("\\|");
+            if (splits.length >= 2) {
+                diagName = splits[0].trim();//疾病本体
+                bigdiagName = splits[1].trim();//疾病大类
+                split = bigdiagName.split("\\、");
+                for (String dis:split) {
+                    diagClassifyJiMap.put(dis, 2);
+                }
+                diagClassifyJiMap.put(diagName,1);
+                if (splits.length == 3) {
+                    diagSort = splits[2].split("\\、");
+                    for (String dis : diagSort) {
+                        if (StringUtils.isNotEmpty(dis.trim())) {
+                            diagClassifyJiMap.put(dis.trim(), 3);
+                        }
+                    }
+                }
+            }
+        }
+        return diagClassifyJiMap;
+    }
+
+    //疾病归一解析,获取缓存
+    public static Map<String,String> getDiagClassifyCache(){
+        if (diagClassifyMap == null) {
+            createDiagClassifyCache();
+        }
+        return diagClassifyMap;
+    }
+
+    public static Map<String,String> createDiagClassifyCache(){
+        Configuration configuration = new DefaultConfig();
+        diagClassifyMap = new HashMap<>();
+        List<String> contentList = configuration.readFileContents("graph_diag_normalize.dict");
+        String diagName =null,bigdiagName=null;
+        String[] diagSort =null;String[] split =null;
+        for (String s:contentList) {
+            String[] splits = s.split("\\|");
+            if (splits.length >= 2) {
+                diagName = splits[0].trim();//疾病本体
+                bigdiagName = splits[1].trim();//疾病大类
+                split = bigdiagName.split("\\、");
+                for (String dis:split
+                        ) {
+                    diagClassifyMap.put(dis, diagName);
+                }
+
+                if (splits.length == 3) {
+                    diagSort = splits[2].split("\\、");
+                    for (String dis : diagSort) {
+                        if (StringUtils.isNotEmpty(dis.trim())) {
+                            diagClassifyMap.put(dis.trim(), bigdiagName);
+                        }
+                    }
+                }
+            }
+        }
+        return diagClassifyMap;
+    }
+
+    public static Map<String,String> getDiagSortCache(){
+        if(disgSortMap == null){
+            createDiagSortCache();
+        }
+        return disgSortMap;
+    }
+    public static Map<String,String> createDiagSortCache(){
+        disgSortMap = new HashMap<>();
+
+        Configuration configuration = new DefaultConfig();
+        List<String> contentList = configuration.readFileContents("graph_diag_classify.dict");
+        for (String s:contentList) {
+            String[] splits = s.split("\\|");
+            String diagName = splits[0];
+            String diagType = splits[1];
+            disgSortMap.put(diagName,diagType);
+        }
+        return disgSortMap;
+    }
+
+    public static Map<String,Map<String,String>> getSexAgeCache(){
+        if (sexAgeMap == null) {
+            createSexAgeCache();
+        }
+        return sexAgeMap;
+    }
+
+    public static Map<String,Map<String,String>> createSexAgeCache(){
+        Configuration configuration = new DefaultConfig();
+        sexAgeMap = new HashMap<>();
+        List<String> contentList = configuration.readFileContents("graph_sex_age_filter.dict");
+        for (String s:contentList) {
+            Map<String,String> contentMap = new HashMap<>();
+            String[] splits = s.split("\\|");
+            String sexTyep = splits[1];
+            String min_age = splits[2];
+            String max_age = splits[3];
+            contentMap.put("sexType",sexTyep);
+            contentMap.put("min_age",min_age);
+            contentMap.put("max_age",max_age);
+            sexAgeMap.put(splits[0],contentMap);
+        }
+        return sexAgeMap;
+    }
+
+    public static Map<String,String> getVitalCache(){
+        if (vitalMap == null) {
+            createVitalCache();
+        }
+        return vitalMap;
+    }
+
+    public static Map<String,String> createVitalCache(){
+        Configuration configuration = new DefaultConfig();
+        vitalMap = new HashMap<>();
+        List<String> contentList = configuration.readFileContents("graph_vital_convert.dict");
+        for (String s:contentList) {
+            String[] splits = s.split("\\|");
+            vitalMap.put(splits[0],splits[1]);
+        }
+        return vitalMap;
+    }
+}

+ 37 - 0
rule/src/main/java/org/diagbot/rule/crisis/CrisisApplication.java

@@ -1,8 +1,45 @@
 package org.diagbot.rule.crisis;
 package org.diagbot.rule.crisis;
 
 
+
+import org.diagbot.rule.bean.Rule;
+import org.diagbot.rule.bean.RuleApp;
+import org.diagbot.rule.bean.SearchData;
+import org.diagbot.rule.cache.ApplicationCacheUtil;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
 /**
  * Created by louhr on 2019/9/2.
  * Created by louhr on 2019/9/2.
  */
  */
 public class CrisisApplication {
 public class CrisisApplication {
+    private static String[] itemTypes = { "symptom", "vital", "lis", "pacs" };
 
 
+    public Map<String, List<String>> crisisContent(SearchData searchData) {
+        //<"symptom",["严重低钠血症,此项检验指标高危"]>
+        //<"vital",["严重代谢性碱中毒,此项检验指标高危"]>
+        Map<String, List<String>> crisisMap = new HashMap<>();
+        List<String> crisisList = null;
+        Map<String, RuleApp> ruleApps = ApplicationCacheUtil.getKl_rule_app_filter_map();
+        Map<String, List<Rule>> rules = searchData.getRules();
+        for (String itemType : itemTypes) {
+            List<Rule> detailRules = rules.get(itemType);
+            for (Rule rule : detailRules) {
+                if (ruleApps.containsKey(rule.getId())) {
+                    if ("0".equals(ruleApps.get(rule.getId()).getType_id())) {
+                        if (crisisMap.get(itemType) == null) {
+                            crisisList = new ArrayList<>();
+                        } else {
+                            crisisList = crisisMap.get(itemType);
+                        }
+                        crisisList.add(ruleApps.get(rule.getId()).getRemind());
+                        crisisMap.put(itemType, crisisList);
+                    }
+                }
+            }
+        }
+        return crisisMap;
+    }
 }
 }