浏览代码

开单合理性代码修改

louhr 5 年之前
父节点
当前提交
59b1d5fc40

+ 158 - 0
bigdata-web/src/test/java/org/diagbot/RuleTest.java

@@ -0,0 +1,158 @@
+package org.diagbot;
+
+import org.diagbot.common.push.bean.Rule;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.filter.rule.PretreatmentRule;
+import org.diagbot.nlp.rule.module.PreResult;
+import org.diagbot.pub.jdbc.MysqlJdbc;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by louhr on 2019/11/22.
+ */
+public class RuleTest {
+    public static void main(String[] args) {
+        RuleTest test = new RuleTest();
+        try {
+            test.validate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void validate() throws Exception {
+        MysqlJdbc nlpJdbc = new MysqlJdbc("root", "diagbot@20180822", "jdbc:mysql://192.168.2.235:3306/med-s?useUnicode=true&characterEncoding=UTF-8");
+        List<Map<String, String>> data = nlpJdbc.query("kl_rule_pub",
+                new String[]{"id", "pub_name", "min_operator", "min_value", "min_unit",
+                        "max_operator", "max_value", "max_unit", "eq_operator", "eq_value", "eq_unit", "remind", "suffix_info"}, "");
+
+        List<Map<String, Object>> updates = new ArrayList<>();
+        List<Map<String, Object>> wheres = new ArrayList<>();
+        //数据预处理
+        PretreatmentRule pretreatmentRule = new PretreatmentRule();
+        double value = 0.0;
+        for (Map<String, String> map : data) {
+            SearchData searchData = new SearchData();
+            searchData.setSysCode("1");
+            if (!StringUtils.isEmpty(map.get("eq_operator")) && "=".equals(map.get("eq_operator"))) {
+                if ("诊断--".equals(map.get("pub_name"))) {
+                    searchData.setDiag(map.get("eq_value"));
+                }
+                if ("开单--".equals(map.get("pub_name"))) {
+                    searchData.setLisOrder(map.get("eq_value"));
+                    searchData.setPacsOrder(map.get("eq_value"));
+                }
+                if ("症状--".equals(map.get("pub_name"))) {
+                    searchData.setSymptom(map.get("eq_value"));
+                }
+                if ("药品--".equals(map.get("pub_name"))) {
+                    searchData.setPasts(map.get("eq_value"));
+                }
+                if ("既往--".equals(map.get("pub_name"))) {
+                    searchData.setPasts(map.get("eq_value"));
+                }
+                if ("过敏--".equals(map.get("pub_name"))) {
+                    searchData.setPasts(map.get("eq_value"));
+                }
+                if (map.get("pub_name").indexOf("其他--") > -1) {
+                    searchData.setOther(map.get("pub_name") + map.get("eq_value"));
+                }
+                if (map.get("pub_name").indexOf("检查--") > -1) {
+                    searchData.setPacs(map.get("pub_name") + map.get("eq_value"));
+                }
+            } else if (!StringUtils.isEmpty(map.get("min_operator")) && !StringUtils.isEmpty(map.get("max_operator"))) {
+                if (map.get("pub_name").indexOf("体征--") > -1) {
+                    value = Double.valueOf(map.get("min_value")) + 0.1;
+                    searchData.setVital(map.get("pub_name") + value + map.get("min_unit"));
+                }
+                if (map.get("pub_name").indexOf("其他--") > -1) {
+                    value = Double.valueOf(map.get("min_value")) + 0.1;
+                    searchData.setOther(map.get("pub_name") + value + map.get("min_unit"));
+                }
+                if (map.get("pub_name").indexOf("化验--") > -1) {
+                    value = Double.valueOf(map.get("min_value")) + 0.1;
+                    List<PreResult> list = new ArrayList<>();
+                    PreResult preResult = new PreResult();
+                    preResult.setUniqueName(map.get("pub_name").substring(4));
+                    preResult.setValue(String.valueOf(value));
+                    preResult.setUnits(map.get("min_unit"));
+                    list.add(preResult);
+                    searchData.setLisArr(list);
+                }
+                if (map.get("pub_name").indexOf("年龄--") > -1) {
+                    int v = Integer.valueOf(map.get("min_value")) + 1;
+                    searchData.setAge(v);
+                }
+            } else if (!StringUtils.isEmpty(map.get("min_operator"))) {
+                if (map.get("pub_name").indexOf("体征--") > -1) {
+                    value = Double.valueOf(map.get("min_value")) - 0.1;
+                    searchData.setVital(map.get("pub_name") + value + map.get("min_unit"));
+                }
+                if (map.get("pub_name").indexOf("其他--") > -1) {
+                    value = Double.valueOf(map.get("min_value")) - 0.1;
+                    searchData.setOther(map.get("pub_name") + value + map.get("min_unit"));
+                }
+                if (map.get("pub_name").indexOf("化验--") > -1) {
+                    value = Double.valueOf(map.get("min_value")) - 0.1;
+                    List<PreResult> list = new ArrayList<>();
+                    PreResult preResult = new PreResult();
+                    preResult.setUniqueName(map.get("pub_name").substring(4));
+                    preResult.setValue(String.valueOf(value));
+                    preResult.setUnits(map.get("min_unit"));
+                    list.add(preResult);
+                    searchData.setLisArr(list);
+                }
+                if (map.get("pub_name").indexOf("年龄--") > -1) {
+                    int v = Integer.valueOf(map.get("min_value")) - 1;
+                    searchData.setAge(v);
+                }
+            } else if (!StringUtils.isEmpty(map.get("max_operator"))) {
+                if (map.get("pub_name").indexOf("体征--") > -1) {
+                    value = Double.valueOf(map.get("max_value")) + 0.1;
+                    searchData.setVital(map.get("pub_name") + value + map.get("max_unit"));
+                }
+                if (map.get("pub_name").indexOf("其他--") > -1) {
+                    value = Double.valueOf(map.get("max_value")) + 0.1;
+                    searchData.setOther(map.get("pub_name") + value + map.get("max_unit"));
+                }
+                if (map.get("pub_name").indexOf("化验--") > -1) {
+                    value = Double.valueOf(map.get("max_value")) + 0.1;
+                    List<PreResult> list = new ArrayList<>();
+                    PreResult preResult = new PreResult();
+                    preResult.setUniqueName(map.get("pub_name").substring(4));
+                    preResult.setValue(String.valueOf(value));
+                    preResult.setUnits(map.get("max_unit"));
+                    list.add(preResult);
+                    searchData.setLisArr(list);
+                }
+                if (map.get("pub_name").indexOf("年龄--") > -1) {
+                    int v = Integer.valueOf(map.get("max_value")) + 1;
+                    searchData.setAge(v);
+                }
+            }
+
+            Map<String, Object> line = new HashMap<>();
+            Map<String, Object> where = new HashMap<>();
+
+            pretreatmentRule.rule(searchData);
+            Map<String, List<Rule>> rules = searchData.getRules();
+            for (Map.Entry<String, List<Rule>> entry : rules.entrySet()) {
+                if (entry.getValue().size() > 0) {
+                    line.put("rule_type", "9");
+                    where.put("id", map.get("id"));
+
+                    updates.add(line);
+                    wheres.add(where);
+                    break;
+                }
+            }
+        }
+
+        nlpJdbc.update("kl_rule_pub", updates, wheres);
+    }
+}

+ 2 - 2
common-push/src/main/java/org/diagbot/common/push/bean/CrisisDetail.java

@@ -5,8 +5,8 @@ package org.diagbot.common.push.bean;
  */
 public class CrisisDetail {
     private String remindText;
-    private String standardText;
-    private String originText;
+    private String standardText = "";
+    private String originText = "";
     private String typeId;
 
     public String getRemindText() {

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

@@ -34,6 +34,8 @@ public class Rule {
     private String eq_unit = "";
     //提醒信息
     private String remind = "";
+    //追加到文本尾部信息
+    private String suffixInfo = "";
     //提醒信息
     private String originText = "";
 
@@ -133,6 +135,14 @@ public class Rule {
         this.remind = remind;
     }
 
+    public String getSuffixInfo() {
+        return suffixInfo;
+    }
+
+    public void setSuffixInfo(String suffixInfo) {
+        this.suffixInfo = suffixInfo;
+    }
+
     public String getOriginText() {
         return originText;
     }

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

@@ -34,7 +34,7 @@ public class SearchData {
     protected String pacs = "";
     protected String diag = "";
     private String diseaseName;
-    protected String past = "";
+    protected String pasts = "";
     protected String other = "";
     //当前开单lis项目
     protected String lisOrder = "";
@@ -220,12 +220,12 @@ public class SearchData {
         this.diag = diag;
     }
 
-    public String getPast() {
-        return past;
+    public String getPasts() {
+        return pasts;
     }
 
-    public void setPast(String past) {
-        this.past = past;
+    public void setPasts(String pasts) {
+        this.pasts = pasts;
     }
 
     public String getOther() {

+ 2 - 1
common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java

@@ -165,7 +165,7 @@ public class ApplicationCacheUtil {
         for (String line : fileContents) {
             String[] content = line.split("\\|", -1);
             Rule rule = new Rule();
-            if (content.length == 12) {
+            if (content.length == 13) {
                 rule.setId(content[0] == null ? "" : content[0]);
                 rule.setPub_name(content[1] == null ? "" : content[1]);
                 rule.setMin_operator(content[2] == null ? "" : content[2]);
@@ -178,6 +178,7 @@ public class ApplicationCacheUtil {
                 rule.setEq_value(content[9] == null ? "" : content[9]);
                 rule.setEq_unit(content[10] == null ? "" : content[10]);
                 rule.setRemind(content[11] == null ? "" : content[11]);
+                rule.setSuffixInfo(content[12] == null ? "" : content[12]);
                 if (kl_rule_filter_map.get(rule.getPub_name()) == null) {
                     rules = new ArrayList<>();
                 } else {

+ 8 - 6
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -22,9 +22,9 @@ import java.util.*;
 public class CacheFileManager {
     Logger logger = LoggerFactory.getLogger(CacheFileManager.class);
 
-    private String user = "teamdata";
-    private String password = "jiO2rfnYhg";
-    private String url = "jdbc:mysql://192.168.2.121:3306/med?useUnicode=true&characterEncoding=UTF-8";
+    private String user = "root";
+    private String password = "diagbot@20180822";
+    private String url = "jdbc:mysql://192.168.2.235:3306/med-s?useUnicode=true&characterEncoding=UTF-8";
 
     private String path = "";
 
@@ -344,11 +344,11 @@ public class CacheFileManager {
 
             //规则过滤信息
             sql = "SELECT id, pub_name, min_operator, min_value, min_unit, max_operator, max_value, " +
-                    "max_unit, eq_operator, eq_value, eq_unit, remind FROM kl_rule_pub";
+                    "max_unit, eq_operator, eq_value, eq_unit, remind, suffix_info FROM kl_rule_pub";
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             fw = new FileWriter(path + "bigdata_rule_filter.dict");
-            String r6, r7, r8, r9, r10, r11, r12;
+            String r6, r7, r8, r9, r10, r11, r12, r13;
             while (rs.next()) {
                 r1 = String.valueOf(rs.getInt(1));
                 r2 = rs.getString(2);
@@ -362,6 +362,7 @@ public class CacheFileManager {
                 r10 = rs.getString(10);
                 r11 = rs.getString(11);
                 r12 = rs.getString(12);
+                r13 = rs.getString(13);
                 r1 = StringUtils.isEmpty(r1) ? "" : r1;
                 r2 = StringUtils.isEmpty(r2) ? "" : r2;
                 r3 = StringUtils.isEmpty(r3) ? "" : r3;
@@ -374,9 +375,10 @@ public class CacheFileManager {
                 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));
+                        + "|" + r12 + "|" + r13));
                 fw.write("\n");
             }
             fw.close();

+ 15 - 0
common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java

@@ -30,6 +30,10 @@ public class PretreatmentRule {
         }
         //lis结构化信息
         if (searchData.getLisArr() != null && searchData.getLisArr().size() > 0) {
+            List<PreResult> preResults = searchData.getLisArr();
+            for (PreResult result : preResults) {
+                result.setUniqueName("化验--" + result.getUniqueName());
+            }
             searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis", searchData));
         } else if (!StringUtils.isEmpty(searchData.getLis())) {
             searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis", searchData));
@@ -38,6 +42,10 @@ public class PretreatmentRule {
         if (!StringUtils.isEmpty(searchData.getPacs())) {
             searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs", searchData));
         }
+        //既往史
+        if (!StringUtils.isEmpty(searchData.getPasts())) {
+            searchData.setPasts(add2PreResultList(new PretreatmentPast(), searchData.getPasts(), "past", searchData));
+        }
         //其他史
         if (!StringUtils.isEmpty(searchData.getOther())) {
             searchData.setOther(add2PreResultList(new PretreatmentOther(), searchData.getOther(), "other", searchData));
@@ -54,6 +62,13 @@ public class PretreatmentRule {
         if (!StringUtils.isEmpty(searchData.getPacsOrder())) {
             add2PreResultList(new PretreatmentMakeList(), searchData.getPacsOrder(), "pacsOrder", searchData);
         }
+
+        Map<String, List<Rule>> ruleMap = searchData.getRules();
+        for (Map.Entry<String, List<Rule>> entry : ruleMap.entrySet()) {
+            for (Rule rule : entry.getValue()) {
+                System.out.println("id:" + rule.getId() + "; pub_name: " + rule.getPub_name());
+            }
+        }
     }
 
     private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType, SearchData searchData) throws java.io.IOException {

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

@@ -99,9 +99,9 @@ public class ParamsDataProxy {
             featuresList = fa.start(searchData.getVital(), FeatureType.FEATURE);
             paramFeatureInit(searchData, featuresList);
         }
-        if (!StringUtils.isEmpty(searchData.getPast())) {
+        if (!StringUtils.isEmpty(searchData.getPasts())) {
             //提取既往史
-            featuresList = fa.start(searchData.getPast(), FeatureType.FEATURE);
+            featuresList = fa.start(searchData.getPasts(), FeatureType.FEATURE);
             paramFeatureInit(searchData, featuresList);
         }
         if (!StringUtils.isEmpty(searchData.getOther()) || !StringUtils.isEmpty(searchData.getIndications())) {

+ 10 - 0
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentNormal.java

@@ -24,6 +24,16 @@ public class PretreatmentNormal extends Pretreatment {
                     preResults.add(result);
                     return preResults;
                 }
+            } else 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;

+ 5 - 11
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentOther.java

@@ -11,8 +11,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class PretreatmentOther extends Pretreatment {
-    protected NegativeEnum[] nees_disease = new NegativeEnum[]{NegativeEnum.DISEASE};
-    protected NegativeEnum[] nees_operation = new NegativeEnum[]{NegativeEnum.OPERATION};
+    protected NegativeEnum[] nees_married = new NegativeEnum[]{NegativeEnum.MARRIED_DESC};
 
     public List<PreResult> analyze(String content) throws java.io.IOException{
         List<PreResult> preResults = new ArrayList<>();
@@ -20,15 +19,10 @@ public class PretreatmentOther extends Pretreatment {
         for (int i = 0; i < lexemes.size(); i++) {
             Lexeme l = lexemes.get(i);
             PreResult result = new PreResult();
-            if (NlpUtil.isFeature(l.getProperty(), nees_disease)) {
-                result.setUniqueName("诊断--");
-                result.setDetailName("诊断--");
-                result.setValue(NlpUtil.concept(l, NegativeEnum.DISEASE));
-                preResults.add(result);
-            } else if (NlpUtil.isFeature(l.getProperty(), nees_operation)) {
-                result.setUniqueName("手术--");
-                result.setDetailName("手术--");
-                result.setValue(NlpUtil.concept(l, NegativeEnum.OPERATION));
+            if (NlpUtil.isFeature(l.getProperty(), nees_married)) {
+                result.setUniqueName("其他--");
+                result.setDetailName("其他--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.MARRIED_DESC));
                 preResults.add(result);
             }
         }

+ 10 - 2
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentPacs.java

@@ -24,18 +24,26 @@ public class PretreatmentPacs extends Pretreatment {
             Lexeme l = lexemes.get(i);
             if (NlpUtil.isFeature(l.getProperty(), nees_pacs_result) && i > 0) {
                 int c = i - 1;
+                boolean isFind = false;
                 while (c > -1) {
                     leftLexeme = lexemes.get(c);
                     if (NlpUtil.isFeature(leftLexeme.getProperty(), nees_pacs_name)) {
                         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));
+                        result.setUniqueName("检查--" + NlpUtil.concept(leftLexeme, NegativeEnum.PACS_NAME));
                         preResultList.add(result);
+                        isFind = true;
                         break;
                     }
                     c--;
                 }
+                if (!isFind) {
+                    PreResult result = new PreResult();
+                    result.setValue(NlpUtil.concept(l, NegativeEnum.PACS_RESULT));
+                    result.setUniqueName("检查--");
+                    preResultList.add(result);
+                }
             } else if (NlpUtil.isFeature(l.getProperty(), nees_time_and_unit) && i > 0) {
                 PreResult result = data2Object(lexemes, l, i, l.getProperty());
                 if (result != null) {
@@ -83,7 +91,7 @@ public class PretreatmentPacs extends Pretreatment {
         if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[] { NegativeEnum.PACS_NAME })) {
             result.setDetailName(NlpUtil.concept(leftLexeme, NegativeEnum.PACS_NAME));
         } else if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[] { NegativeEnum.PACS_NAME })) {
-            result.setUniqueName(NlpUtil.concept(leftLexeme, NegativeEnum.PACS_NAME));
+            result.setUniqueName("检查--" + NlpUtil.concept(leftLexeme, NegativeEnum.PACS_NAME));
         } else {
             return null;
         }

+ 74 - 0
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentPast.java

@@ -0,0 +1,74 @@
+package org.diagbot.nlp.rule.pretreat;
+
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.rule.module.PreResult;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PretreatmentPast extends Pretreatment {
+    protected NegativeEnum[] nees_past_desc = new NegativeEnum[]{NegativeEnum.PAST_DESC};
+    protected NegativeEnum[] nees_disease = new NegativeEnum[]{NegativeEnum.DISEASE};
+    protected NegativeEnum[] nees_operation = new NegativeEnum[]{NegativeEnum.OPERATION};
+    protected NegativeEnum[] nees_allergy = new NegativeEnum[]{NegativeEnum.ALLERGY};
+    protected NegativeEnum[] nees_med = new NegativeEnum[]{NegativeEnum.MEDICINE, NegativeEnum.MEDICINE_NAME, NegativeEnum.MEDICINE_PRD};
+
+    public List<PreResult> analyze(String content) throws java.io.IOException{
+        List<PreResult> preResults = new ArrayList<>();
+        LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
+        for (int i = 0; i < lexemes.size(); i++) {
+            Lexeme l = lexemes.get(i);
+            PreResult result = new PreResult();
+            if (NlpUtil.isFeature(l.getProperty(), nees_disease)) {
+                result.setUniqueName("诊断--");
+                result.setDetailName("诊断--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.DISEASE));
+                preResults.add(result);
+            } else if (NlpUtil.isFeature(l.getProperty(), nees_past_desc)) {
+                result.setUniqueName("既往--");
+                result.setDetailName("既往--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.PAST_DESC));
+                preResults.add(result);
+            } else if (NlpUtil.isFeature(l.getProperty(), nees_operation)) {
+                result.setUniqueName("手术--");
+                result.setDetailName("手术--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.OPERATION));
+                preResults.add(result);
+            } else if (NlpUtil.isFeature(l.getProperty(), nees_med)) {
+                result.setUniqueName("药品--");
+                result.setDetailName("药品--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.MEDICINE));
+                preResults.add(result);
+            }
+            if (l.getText().indexOf("过敏") > -1) {
+                int max_find_step = 10;
+                int position = i - 1;
+                Lexeme leftLexeme;
+                while (i - position < max_find_step && position > -1) {
+                    leftLexeme = lexemes.get(position);
+                    //遇上过敏史信息
+                    if (NlpUtil.isFeature(leftLexeme.getProperty(), nees_allergy)) {
+                        result.setUniqueName("过敏--");
+                        result.setDetailName("过敏--");
+                        result.setValue(NlpUtil.concept(l, NegativeEnum.ALLERGY) + "过敏");
+                        preResults.add(result);
+                    }
+                    position--;
+                }
+            }
+        }
+        return preResults;
+    }
+
+    public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return null;
+    }
+
+    public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return null;
+    }
+}

+ 7 - 4
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentVital.java

@@ -15,19 +15,22 @@ public class PretreatmentVital extends Pretreatment {
 
     public List<PreResult> analyze(String content) throws java.io.IOException{
         List<PreResult> preResults = super.analyzeDefault(content);
+        for (PreResult result : preResults) {
+            result.setUniqueName("体征--" + result.getUniqueName());
+        }
         LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
         for (int i = 0; i < lexemes.size(); i++) {
             Lexeme l = lexemes.get(i);
             if (NlpUtil.isFeature(l.getProperty(), nees_vital_result)) {
                 PreResult result = new PreResult();
-                result.setUniqueName("体征结果--");
-                result.setDetailName("体征结果--");
+                result.setUniqueName("体征--");
+                result.setDetailName("体征--");
                 result.setValue(NlpUtil.concept(l, NegativeEnum.VITAL_RESULT));
                 preResults.add(result);
             }else if (NlpUtil.isFeature(l.getProperty(), nees_vital_index)) {
                 PreResult result = new PreResult();
-                result.setUniqueName("体征结果--");
-                result.setDetailName("体征结果--");
+                result.setUniqueName("体征--");
+                result.setDetailName("体征--");
                 result.setValue(NlpUtil.concept(l, NegativeEnum.VITAL_INDEX));
                 preResults.add(result);
             }

+ 11 - 2
nlp/src/main/java/org/diagbot/nlp/util/NegativeEnum.java

@@ -12,8 +12,8 @@ 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"), PUB_NAME("46"), MEDICINE_NAME("53"),MEDICINE_PRD("54"),
-    RETURN_VISIT("68"), DIAG_STAND("70");
+    ADDRESS("36"), PERSON("38"), PERSON_FEATURE_DESC("39"), PUB_NAME("46"), MEDICINE_NAME("53"),MEDICINE_PRD("54"),PAST_DESC("55"),ALLERGY("65"),
+    MARRIED_DESC("62"), RETURN_VISIT("68"), DIAG_STAND("70");
     private String value;
 
     NegativeEnum(String value) {
@@ -156,6 +156,15 @@ public enum NegativeEnum {
             case "54":
                 negativeEnum = NegativeEnum.MEDICINE_PRD;
                 break;
+            case "55":
+                negativeEnum = NegativeEnum.PAST_DESC;
+                break;
+            case "62":
+                negativeEnum = NegativeEnum.MARRIED_DESC;
+                break;
+            case "65":
+                negativeEnum = NegativeEnum.ALLERGY;
+                break;
             case "68":
                 negativeEnum = NegativeEnum.RETURN_VISIT;
                 break;

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

@@ -151,80 +151,80 @@ public class AlgorithmController extends BaseController {
 
         //大数据推送
 //        searchData.setLength(6);    //模型推送最多6个比较合理
-        AlgorithmCore core = new AlgorithmCore();
-        ResponseData bigDataResponseData = core.algorithm(request, searchData, responseData);
-
-        GraphCalculate graphCalculate = new GraphCalculate();
-        ResponseData graphResponseData = graphCalculate.calculate(request, searchData);
-        if (graphResponseData.getDis().size() > 0) {
-            List<FeatureRate> disFeatureRates = new ArrayList<>();
-            List<FeatureRate> bigdis = bigDataResponseData.getDis();
-            List<FeatureRate> graphdis = graphResponseData.getDis();
-            for (FeatureRate bg:graphdis) {
-                Iterator<FeatureRate> iterator = bigdis.iterator();
-                while (iterator.hasNext()){
-                    FeatureRate gd = iterator.next();
-                    if(gd.getFeatureName().equals(bg.getFeatureName()) &&(bg.getDesc().contains("确诊")|| bg.getDesc().contains("拟诊"))){
-                        iterator.remove();
-                    }
-                }
-            }
-            disFeatureRates = bigdis;
-            List<FeatureRate> graphFeatureRates = graphResponseData.getDis();
-            graphFeatureRates.addAll(disFeatureRates);
-            bigDataResponseData.setDis(graphFeatureRates);
-        }
-        //归一之前诊断信息
-        bigDataResponseData.setBeforeCombineDis(bigDataResponseData.getDis());
-        //推送出的诊断信息作为参数传入知识图谱
-        List<FeatureRate> pushDiags = new ArrayList<>();
-        pushDiags.addAll(bigDataResponseData.getDis());
-        searchData.setPushDiags(pushDiags);
-        bigDataResponseData.setTreat(graphResponseData.getTreat());
-
-        //量表和指标推送
-        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("指标推送!!!!!!!!!");
-            //           bigDataResponseData.getMedicalIndications().addAll(medicalIndications);
-            bigDataResponseData.setMedicalIndications(medicalIndications);
-        }
-
-        //推送管理评估
-        bigDataResponseData.setManagementEvaluation(graphResponseData.getManagementEvaluation());
-
-        //知识图谱直接替换大数据中的检验检查数据
-        Map<String, List<FeatureRate>> lisPacs = graphCalculate.getLisPacs(request, searchData);
-        bigDataResponseData.setLabs(lisPacs.get("lisList"));
-        bigDataResponseData.setPacs(lisPacs.get("pacsList"));
-        //体征结果和指标推送
-        Map<String, String> vitalCache = CacheUtil.getVitalCache();
-        List<String> featureList = Arrays.asList(searchData.getFeatureTypes());
-        List<FeatureRate> vitals = lisPacs.get("vitalResultList");
-        if (featureList.contains(Constants.feature_type_vital_index) && this.getVital(vitalCache, vitals).size() > 0) {
-            bigDataResponseData.setVitals(this.getVital(vitalCache, vitals));
-
-        }
-        if (featureList.contains(Constants.feature_type_vital) && vitals.size() > 0) {
-            bigDataResponseData.setVitals(vitals);
-        }
-
-        //把所有的诊断拿出来经过过滤层过滤
-        ClassifyDiag classifyDiag = new ClassifyDiag();
-        List<FeatureRate> upfes = classifyDiag.filterDiag(graphResponseData, pushDiags);
-        List<FeatureRate> classify = classifyDiag.diagClassify(upfes);
-        List<FeatureRate> featureRates = classifyDiag.sortDiag(classify);
-        bigDataResponseData.setDis(featureRates);
-        //返回结果化验、辅检、体征、进行性别年龄过滤
-        ResultDataProxy resultDataProxy = new ResultDataProxy();
-        resultDataProxy.resultSexAgeFilter(request, bigDataResponseData, searchData);
-        response.setData(bigDataResponseData);
+//        AlgorithmCore core = new AlgorithmCore();
+//        ResponseData bigDataResponseData = core.algorithm(request, searchData, responseData);
+//
+//        GraphCalculate graphCalculate = new GraphCalculate();
+//        ResponseData graphResponseData = graphCalculate.calculate(request, searchData);
+//        if (graphResponseData.getDis().size() > 0) {
+//            List<FeatureRate> disFeatureRates = new ArrayList<>();
+//            List<FeatureRate> bigdis = bigDataResponseData.getDis();
+//            List<FeatureRate> graphdis = graphResponseData.getDis();
+//            for (FeatureRate bg:graphdis) {
+//                Iterator<FeatureRate> iterator = bigdis.iterator();
+//                while (iterator.hasNext()){
+//                    FeatureRate gd = iterator.next();
+//                    if(gd.getFeatureName().equals(bg.getFeatureName()) &&(bg.getDesc().contains("确诊")|| bg.getDesc().contains("拟诊"))){
+//                        iterator.remove();
+//                    }
+//                }
+//            }
+//            disFeatureRates = bigdis;
+//            List<FeatureRate> graphFeatureRates = graphResponseData.getDis();
+//            graphFeatureRates.addAll(disFeatureRates);
+//            bigDataResponseData.setDis(graphFeatureRates);
+//        }
+//        //归一之前诊断信息
+//        bigDataResponseData.setBeforeCombineDis(bigDataResponseData.getDis());
+//        //推送出的诊断信息作为参数传入知识图谱
+//        List<FeatureRate> pushDiags = new ArrayList<>();
+//        pushDiags.addAll(bigDataResponseData.getDis());
+//        searchData.setPushDiags(pushDiags);
+//        bigDataResponseData.setTreat(graphResponseData.getTreat());
+//
+//        //量表和指标推送
+//        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("指标推送!!!!!!!!!");
+//            //           bigDataResponseData.getMedicalIndications().addAll(medicalIndications);
+//            bigDataResponseData.setMedicalIndications(medicalIndications);
+//        }
+//
+//        //推送管理评估
+//        bigDataResponseData.setManagementEvaluation(graphResponseData.getManagementEvaluation());
+//
+//        //知识图谱直接替换大数据中的检验检查数据
+//        Map<String, List<FeatureRate>> lisPacs = graphCalculate.getLisPacs(request, searchData);
+//        bigDataResponseData.setLabs(lisPacs.get("lisList"));
+//        bigDataResponseData.setPacs(lisPacs.get("pacsList"));
+//        //体征结果和指标推送
+//        Map<String, String> vitalCache = CacheUtil.getVitalCache();
+//        List<String> featureList = Arrays.asList(searchData.getFeatureTypes());
+//        List<FeatureRate> vitals = lisPacs.get("vitalResultList");
+//        if (featureList.contains(Constants.feature_type_vital_index) && this.getVital(vitalCache, vitals).size() > 0) {
+//            bigDataResponseData.setVitals(this.getVital(vitalCache, vitals));
+//
+//        }
+//        if (featureList.contains(Constants.feature_type_vital) && vitals.size() > 0) {
+//            bigDataResponseData.setVitals(vitals);
+//        }
+//
+//        //把所有的诊断拿出来经过过滤层过滤
+//        ClassifyDiag classifyDiag = new ClassifyDiag();
+//        List<FeatureRate> upfes = classifyDiag.filterDiag(graphResponseData, pushDiags);
+//        List<FeatureRate> classify = classifyDiag.diagClassify(upfes);
+//        List<FeatureRate> featureRates = classifyDiag.sortDiag(classify);
+//        bigDataResponseData.setDis(featureRates);
+//        //返回结果化验、辅检、体征、进行性别年龄过滤
+//        ResultDataProxy resultDataProxy = new ResultDataProxy();
+//        resultDataProxy.resultSexAgeFilter(request, bigDataResponseData, searchData);
+//        response.setData(bigDataResponseData);
         return response;
     }
 

+ 46 - 19
rule/src/main/java/org/diagbot/rule/crisis/CrisisApplication.java

@@ -43,32 +43,59 @@ public class CrisisApplication {
             if (!ruleTypeIdList.contains(app.getValue().getTypeId())) {
                 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;
+            String appRemindVar = "";
+            String appOriginText = "";
+            String[] fieldRuleIds = app.getValue().getRuleIds().split("\\|");
+            for (String fieldRuleId : fieldRuleIds) {
+                String[] ruleIds = fieldRuleId.split(",");
+                String standardText = "", originText = "", remind = "";;
+                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() + ";";
+                                if (StringUtils.isEmpty(remind)) {
+                                    remind = suitRule.getRemind();
+                                } else {
+                                    remind = remind + "," + suitRule.getRemind();
+                                }
+
+                                if (StringUtils.isEmpty(originText)) {
+                                    originText = suitRule.getOriginText();
+                                } else {
+                                    originText = originText + ";" + suitRule.getOriginText();
+                                }
+                                break;
+                            }
                         }
                     }
+                    if (!isFindRule) {
+                        allRuleIdsSuit = false;
+                        break;
+                    }
                 }
-                if (!isFindRule) {
-                    allRuleIdsSuit = false;
-                    break;
+                if (allRuleIdsSuit) {
+                    if (StringUtils.isEmpty(appRemindVar)) {
+                        appRemindVar = remind;
+                    } else {
+                        appRemindVar = appRemindVar + "," + remind;
+                    }
+                    if (StringUtils.isEmpty(appOriginText)) {
+                        appOriginText = originText;
+                    } else {
+                        appOriginText = appOriginText + "," + originText;
+                    }
                 }
             }
             //所有规则都满足
-            if (allRuleIdsSuit) {
+            if (!StringUtils.isEmpty(appRemindVar)) {
                 CrisisDetail crisisDetail = new CrisisDetail();
-                crisisDetail.setOriginText(originText);
-                crisisDetail.setStandardText(standardText);
-                crisisDetail.setRemindText(app.getValue().getRemind());
+                crisisDetail.setOriginText(appOriginText);
+//                crisisDetail.setStandardText(standardText);
+                crisisDetail.setRemindText(appRemindVar);
                 crisisDetail.setTypeId(app.getValue().getTypeId());
 
                 crisisList = crisisMap.get(key);