Explorar o código

规则过滤危急值、开单合理性检查

louhr %!s(int64=5) %!d(string=hai) anos
pai
achega
cae652eb48
Modificáronse 90 ficheiros con 2456 adicións e 2240 borrados
  1. 2 2
      algorithm/src/main/resources/algorithm.properties
  2. 6 0
      bigdata-web/pom.xml
  3. 0 274
      bigdata-web/src/main/java/org/diagbot/bigdata/common/ApplicationCacheUtil.java
  4. 0 98
      bigdata-web/src/main/java/org/diagbot/bigdata/common/InitListener.java
  5. 2 2
      bigdata-web/src/main/java/org/diagbot/bigdata/controller/AlgorithmController.java
  6. 0 22
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingDiagMapper.java
  7. 0 22
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingFilterMapper.java
  8. 0 22
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingVitalMapper.java
  9. 0 38
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingDiag.java
  10. 0 38
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingVital.java
  11. 0 12
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingDiagWrapper.java
  12. 0 6
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingFilterWrapper.java
  13. 0 7
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingVitalWrapper.java
  14. 0 55
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingDiagMapper.xml
  15. 0 67
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingFilterMapper.xml
  16. 0 77
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingVitalMapper.xml
  17. 0 8
      bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingDiagService.java
  18. 0 8
      bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingFilterService.java
  19. 0 8
      bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingVitalService.java
  20. 0 21
      bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingDiagServiceImpl.java
  21. 0 21
      bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingFilterServiceImpl.java
  22. 0 21
      bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingVitalServiceImpl.java
  23. 5 10
      bigdata-web/src/main/java/org/diagbot/bigdata/work/AlgorithmCore.java
  24. 94 0
      bigdata-web/src/main/java/org/diagbot/bigdata/work/BigDataParamsProxy.java
  25. 1 1
      bigdata-web/src/main/java/org/diagbot/bigdata/work/BigDataSearchData.java
  26. 0 702
      bigdata-web/src/main/java/org/diagbot/bigdata/work/ParamsDataProxy.java
  27. 3 97
      bigdata-web/src/main/java/org/diagbot/bigdata/work/ResultDataProxy.java
  28. 37 41
      bigdata-web/src/test/java/org/diagbot/AddStandWordTest.java
  29. 135 0
      bigdata-web/src/test/java/org/diagbot/EyeHospitalData.java
  30. 8 2
      common-push/pom.xml
  31. 0 11
      common-push/src/main/java/org/diagbot/common/push/Test.java
  32. 34 0
      common-push/src/main/java/org/diagbot/common/push/bean/CrisisDetail.java
  33. 1 1
      common-service/src/main/java/org/diagbot/common/work/FeatureRate.java
  34. 1 1
      common-service/src/main/java/org/diagbot/common/work/LisDetail.java
  35. 79 0
      common-push/src/main/java/org/diagbot/common/push/bean/PreResult.java
  36. 14 4
      common-service/src/main/java/org/diagbot/common/work/ResponseData.java
  37. 1 1
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingFilter.java
  38. 143 0
      common-push/src/main/java/org/diagbot/common/push/bean/Rule.java
  39. 45 0
      common-push/src/main/java/org/diagbot/common/push/bean/RuleApp.java
  40. 23 4
      common-service/src/main/java/org/diagbot/common/work/SearchData.java
  41. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Detail.java
  42. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Drugs.java
  43. 1 2
      common-service/src/main/java/org/diagbot/common/javabean/Filnlly.java
  44. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/FuzhenFilnlly.java
  45. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Indicators.java
  46. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/MangementEvaluation.java
  47. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/MedicalIndication.java
  48. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/MedicalIndicationDetail.java
  49. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Medicition.java
  50. 157 0
      common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java
  51. 49 14
      common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java
  52. 1 1
      graph/src/main/java/org/diagbot/graph/util/CacheUtil.java
  53. 4 4
      common-push/src/main/java/org/diagbot/common/push/filter/ClassifyDiag.java
  54. 83 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/Pretreatment.java
  55. 39 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentDiag.java
  56. 59 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentLis.java
  57. 43 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentMakeList.java
  58. 46 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentNormal.java
  59. 45 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentOther.java
  60. 51 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentPacs.java
  61. 44 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentSymptom.java
  62. 57 0
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentVital.java
  63. 181 0
      common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java
  64. 2 2
      bigdata-web/src/main/java/org/diagbot/bigdata/util/BigDataConstants.java
  65. 266 0
      common-push/src/main/java/org/diagbot/common/push/work/ParamsDataProxy.java
  66. 0 50
      common-service/src/main/java/org/diagbot/common/javabean/Rule.java
  67. 5 0
      graph-web/pom.xml
  68. 2 10
      graph-web/src/main/java/org/diagbot/graphWeb/controller/GraphController.java
  69. 4 8
      graph-web/src/main/java/org/diagbot/graphWeb/work/DiseaseCalculate.java
  70. 3 4
      graph-web/src/main/java/org/diagbot/graphWeb/work/FilterSortDiag.java
  71. 52 16
      graph-web/src/main/java/org/diagbot/graphWeb/work/GraphCalculate.java
  72. 1 5
      graph-web/src/main/java/org/diagbot/graphWeb/work/HighRiskCalculate.java
  73. 3 3
      graph-web/src/main/java/org/diagbot/graphWeb/work/LisPacsCalculate.java
  74. 0 84
      graph-web/src/main/java/org/diagbot/graphWeb/work/ParamsDataProxy.java
  75. 5 1
      graph/pom.xml
  76. 50 6
      graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java
  77. 2 2
      graph/src/main/resources/bolt.properties
  78. 2 2
      graphdb/src/main/resources/application.yml
  79. 4 1
      nlp/src/main/java/org/diagbot/nlp/util/NegativeEnum.java
  80. 60 1
      nlp/src/main/java/org/diagbot/nlp/util/NlpUtil.java
  81. 2 2
      nlp/src/main/resources/nlp.properties
  82. 6 0
      push-web/pom.xml
  83. 62 18
      push-web/src/main/java/org/diagbot/push/controller/AlgorithmController.java
  84. 5 5
      push-web/src/main/java/org/diagbot/push/controller/CacheFileManagerController.java
  85. 5 13
      push-web/src/main/java/org/diagbot/push/controller/GraphController.java
  86. 266 271
      push-web/src/main/java/org/diagbot/push/convert/PreProcess.java
  87. 23 3
      push-web/src/main/resources/static/pages/algorithm/list.html
  88. 25 0
      rule/.gitignore
  89. 29 0
      rule/pom.xml
  90. 70 0
      rule/src/main/java/org/diagbot/rule/crisis/CrisisApplication.java

+ 2 - 2
algorithm/src/main/resources/algorithm.properties

@@ -1,7 +1,7 @@
 ################################ model basic url ###################################
 
-#basicPath=E:/project/push/algorithm/src/main/models/model_version_replacement/model
-basicPath=/opt/models/dev/models/model_version_replacement/model
+basicPath=E:/project/push/algorithm/src/main/models/model_version_replacement/model
+#basicPath=/opt/models/dev/models/model_version_replacement/model
 #basicPath=E:/xxx/model_version_replacement/model
 
 ############################### current model version ################################

+ 6 - 0
bigdata-web/pom.xml

@@ -43,6 +43,12 @@
             <version>1.0.0</version>
         </dependency>
 
+		<dependency>
+			<groupId>org.diagbot</groupId>
+			<artifactId>common-push</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
         <dependency>
             <groupId>org.diagbot</groupId>
             <artifactId>common-service</artifactId>

+ 0 - 274
bigdata-web/src/main/java/org/diagbot/bigdata/common/ApplicationCacheUtil.java

@@ -1,274 +0,0 @@
-package org.diagbot.bigdata.common;
-
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-import org.diagbot.bigdata.util.BigDataConstants;
-import org.diagbot.common.javabean.Rule;
-import org.diagbot.nlp.participle.ParticipleUtil;
-import org.diagbot.nlp.participle.cfg.Configuration;
-import org.diagbot.nlp.participle.cfg.DefaultConfig;
-import org.diagbot.nlp.participle.word.Lexeme;
-import org.diagbot.nlp.participle.word.LexemePath;
-import org.diagbot.nlp.util.NegativeEnum;
-import org.diagbot.nlp.util.NlpCache;
-import org.diagbot.pub.utils.security.EncrypDES;
-
-import javax.servlet.ServletContext;
-import java.util.*;
-
-public class ApplicationCacheUtil {
-
-    //词库同义词定义
-    public static Map<String, Map<String, String>> standard_info_synonym_map = null;
-    //词库大小类定义
-    public static Map<String, String> standard_info_classify_map = null;
-    //树形结构存储大小类
-    public static Map<String, NlpCache.Node> standard_info_type_tree_map = null;
-//    体征衍射
-//    public static Map<String, String> doc_result_mapping_vital_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<Map<String, String>>> kl_result_mapping_standword_map = null;
-    // 规则
-    public static Map<String, List<Rule>> rule_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> getStandard_info_classify_map() {
-        if (standard_info_classify_map == null) {
-            standard_info_classify_map = NlpCache.getStandard_info_classify_map();
-        }
-        return standard_info_classify_map;
-    }
-
-    public static Map<String, NlpCache.Node> getStandard_info_type_tree_map() {
-        if (standard_info_type_tree_map == null) {
-            standard_info_type_tree_map = NlpCache.getStandard_info_type_tree_map();
-        }
-        return standard_info_type_tree_map;
-    }
-
-//    /**
-//     * 現已無用
-//     * @return
-//     */
-//    public static Map<String, String> getDoc_result_mapping_vital_map() {
-//        if (doc_result_mapping_vital_map == null) {
-//            Configuration configuration = new DefaultConfig();
-//            doc_result_mapping_vital_map = configuration.loadMapDict("doc_result_mapping_vital.dict");
-//        }
-//        return doc_result_mapping_vital_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<Map<String, String>>> getKl_result_mapping_standword_map() {
-        if (kl_result_mapping_standword_map == null) {
-            createKl_result_mapping_standword_map();
-        }
-        return kl_result_mapping_standword_map;
-    }
-
-    public static Map<String, List<Map<String, String>>> createKl_result_mapping_standword_map() {
-        kl_result_mapping_standword_map = new HashMap<>();
-        Configuration configuration = new DefaultConfig();
-        List<String> fileContents = configuration.readFileContents("bigdata_value_analyze.dict");
-        List<Map<String, String>> standWordObjValList = null;
-        Map<String, String> standWordObjVal = null;
-        String operation = ">=|≥|>|大于|>|超过|<=|≤|<|小于|<|少于";
-        try {
-            for (String fileContent : fileContents) {
-                LexemePath<Lexeme> lexemes = null;
-                String op = "";
-                String[] fileContentSplit = null;
-                //每一个标准词根据大于小于符号切开,不然进行分词时还是会得到原本的标准词
-                if (fileContent.contains(">") || fileContent.contains("大于")
-                        || fileContent.contains(">") || fileContent.contains("超过")) {
-                    op = ">";
-                    fileContentSplit = fileContent.split(operation);
-                } else if (fileContent.contains("<") || fileContent.contains("小于")
-                        || fileContent.contains("<") || fileContent.contains("少于")) {
-                    op = "<";
-                    fileContentSplit = fileContent.split(operation);
-                } else if (fileContent.contains(">=") || fileContent.contains("≥")){
-                    op = ">=";
-                    fileContentSplit = fileContent.split(operation);
-                } else if (fileContent.contains("<=") || fileContent.contains("≤")) {
-                    op = "<=";
-                    fileContentSplit = fileContent.split(operation);
-                } else {
-                    continue;
-                }
-                LexemePath<Lexeme> lexemeWord = null;
-                //每一个标准词切开后进行分词
-                for (String fileContentWords : fileContentSplit) {
-                    lexemeWord = ParticipleUtil.participle(fileContentWords);
-                    if (lexemeWord != null) {
-                        if (null == lexemes) {
-                            lexemes = lexemeWord;
-                        } else {
-                            for (Lexeme lexeme : lexemeWord) {
-                                lexemes.add(lexeme);
-                            }
-                        }
-                    }
-                }
-                String standWordObjKey = "";
-                standWordObjValList = new ArrayList<>();
-                standWordObjVal = new HashMap<>();
-                int i = 0;
-                for (Lexeme lexeme : lexemes) {
-                    i++;
-                    if (lexeme.getProperty().contains(",")) {
-                        setProterty(lexeme); //如果分词后词性有多个,只选一个(暂时只处理症状,体征)
-                    }
-                    NegativeEnum lexemeNegativeEnum = NegativeEnum.parseOfValue(lexeme.getProperty());
-                    if (lexemeNegativeEnum == NegativeEnum.SYMPTOM || lexemeNegativeEnum == NegativeEnum.CAUSE
-                            || lexemeNegativeEnum == NegativeEnum.VITAL_INDEX
-                            || lexemeNegativeEnum == NegativeEnum.DIAG_STAND) {
-                        if (!kl_result_mapping_standword_map.containsKey(lexeme.getText())) {
-                            kl_result_mapping_standword_map.put(lexeme.getText(), standWordObjValList);
-                        } else {
-                            standWordObjKey = lexeme.getText();
-                        }
-                    }
-                    if (lexemeNegativeEnum == NegativeEnum.DIGITS) {
-                        standWordObjVal.put("value", lexeme.getText());
-                    }
-                    if (lexemeNegativeEnum == NegativeEnum.UNIT
-                            || lexemeNegativeEnum == NegativeEnum.EVENT_TIME
-                            || lexemeNegativeEnum == NegativeEnum.OTHER) {
-                        standWordObjVal.put("unit", lexeme.getText().toLowerCase());
-                    }
-                    if (lexemes.size() == i) {
-                        standWordObjVal.put("op", op);
-                        standWordObjVal.put("standword", fileContent);
-                        if (kl_result_mapping_standword_map.containsKey(standWordObjKey)) {
-                            kl_result_mapping_standword_map.get(standWordObjKey).add(standWordObjVal);
-                        } else {
-                            standWordObjValList.add(standWordObjVal);
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return kl_result_mapping_standword_map;
-    }
-
-    public static Map<String, List<Rule>> get_rule_filter_map() {
-        if (rule_filter_map == null || rule_filter_map.size() == 0) {
-            create_rule_filter_map();
-        }
-        return rule_filter_map;
-    }
-
-    public static void create_rule_filter_map() {
-        rule_filter_map = new HashMap<>();
-        List<Rule> rulelist;
-        Map<String, String> rule;
-        String key;
-
-        String[] labels = {"set_name","idx_name","min_operator","min_value","min_unit",
-                "max_operator","max_value","max_unit","remind"};
-
-        Configuration configuration = new DefaultConfig();
-        List<String> fileContents = configuration.readFileContents("rule_filter.dict");
-
-        for (String line:fileContents) {
-            rule = new HashMap<>();
-            String[] content = line.split("\\|");
-            if (labels.length == content.length) {
-//                for (int i=0; i<labels.length; i++) {
-//                    rule.put(labels[i], content[i]);
-//                }
-//                key = content[0] + "--" + content[1];
-                key = content[1];
-                if (rule_filter_map.get(key) == null) {
-                    rule_filter_map.put(key, new ArrayList<>());
-                }
-                rulelist = rule_filter_map.get(key);
-                rulelist.add(new Rule(content));
-            }
-        }
-    }
-
-    public static void setProterty(Lexeme lexeme) {
-        for (String featureType : lexeme.getProperty().split(",")) {
-            switch (featureType) {
-                case "1":
-                    lexeme.setProperty("1");
-                    break;
-                case "33":
-                    lexeme.setProperty("33");
-                    break;
-                case "70":
-                    lexeme.setProperty("70");
-                    break;
-
-            }
-        }
-    }
-}

+ 0 - 98
bigdata-web/src/main/java/org/diagbot/bigdata/common/InitListener.java

@@ -1,98 +0,0 @@
-package org.diagbot.bigdata.common;
-
-
-import org.diagbot.bigdata.dao.model.ResultMappingDiag;
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-import org.diagbot.bigdata.dao.model.ResultMappingVital;
-import org.diagbot.bigdata.service.ResultMappingDiagService;
-import org.diagbot.bigdata.service.ResultMappingFilterService;
-import org.diagbot.bigdata.service.ResultMappingVitalService;
-import org.diagbot.bigdata.util.BigDataConstants;
-import org.diagbot.nlp.participle.cfg.Configuration;
-import org.diagbot.nlp.participle.cfg.DefaultConfig;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.annotation.WebListener;
-import java.util.*;
-
-@WebListener
-public class InitListener implements ServletContextListener {
-    @Autowired
-    ResultMappingVitalService resultMappingVitalService;
-    @Autowired
-    ResultMappingDiagService resultMappingDiagService;
-    @Autowired
-    ResultMappingFilterService resultMappingFilterService;
-
-    public void contextDestroyed(ServletContextEvent arg0) {
-
-    }
-
-    /**
-     * 开始初始化数据
-     *
-     * @return
-     */
-    public void contextInitialized(ServletContextEvent event) {
-//        contextStandardLibraryInitialized(event);
-//        contextFeatureMappingInitialized(event);
-//        contextResultMappingDiagInitialized(event);
-//        contextResultMappingFilterInitialized(event);
-    }
-
-//    public void contextStandardLibraryInitialized(ServletContextEvent event) {
-//        ApplicationCacheUtil applicationCacheUtil = new ApplicationCacheUtil();
-//        applicationCacheUtil.putStandardInfoContext(event.getServletContext());
-//    }
-
-//    public void contextFeatureMappingInitialized(ServletContextEvent event) {
-//        Configuration configuration = new DefaultConfig();
-//        Map<String, String> resultMappingVitals = configuration.loadMapDict("tc.dict");
-////        List<ResultMappingVital> resultMappingVitals = resultMappingVitalService.selectList(new HashMap<>());
-//        Map<String, String> mapping = new HashMap<>();
-//        for (ResultMappingVital resultMappingVital : resultMappingVitals) {
-//            mapping.put(resultMappingVital.getName(), resultMappingVital.getNameMapping());
-//        }
-//        event.getServletContext().setAttribute(BigDataConstants.result_mapping_vital, mapping);
-//    }
-//
-//    public void contextResultMappingDiagInitialized(ServletContextEvent event) {
-//        List<ResultMappingDiag> resultMappingDiags = resultMappingDiagService.selectList(new HashMap<>());
-//
-//        Map<String, String> mapping = new HashMap<>();
-//        for (ResultMappingDiag resultMappingDiag : resultMappingDiags) {
-//            mapping.put(resultMappingDiag.getDiagName(), resultMappingDiag.getDeptName());
-//        }
-//        event.getServletContext().setAttribute(BigDataConstants.result_mapping_diag, mapping);
-//    }
-//
-//    public void contextResultMappingFilterInitialized(ServletContextEvent event) {
-//        List<ResultMappingFilter> resultMappingFilters = resultMappingFilterService.selectList(new HashMap<>());
-//
-//        Map<String, Map<String, ResultMappingFilter>> mapping = new HashMap<>();
-//        Map<String, ResultMappingFilter> filterMap = null;
-//        for (ResultMappingFilter resultMappingFilter : resultMappingFilters) {
-//            filterMap = mapping.get(resultMappingFilter.getFeatureType());
-//            if (filterMap == null) {
-//                filterMap = new HashMap<>();
-//            }
-//            filterMap.put(resultMappingFilter.getFeatureName(), resultMappingFilter);
-//            mapping.put(resultMappingFilter.getFeatureType(), filterMap);
-//        }
-//        event.getServletContext().setAttribute(BigDataConstants.result_mapping_filter, mapping);
-//    }
-
-    private void put(Map<String, List<String>> map, String key, List<String> value, String ele) {
-        if (value == null) {
-            value = new ArrayList<>(Arrays.asList(ele));
-            map.put(key, value);
-        } else {
-            if (!value.contains(ele)) {
-                value.add(ele);
-                map.put(key, value);
-            }
-        }
-    }
-}

+ 2 - 2
bigdata-web/src/main/java/org/diagbot/bigdata/controller/AlgorithmController.java

@@ -1,8 +1,8 @@
 package org.diagbot.bigdata.controller;
 
 import org.diagbot.bigdata.work.AlgorithmCore;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.web.BaseController;

+ 0 - 22
bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingDiagMapper.java

@@ -1,22 +0,0 @@
-/** 
-* @Company: 杭州朗通信息技术有限公司
-* @Department: 医疗事业部
-* @Description: 互动反馈系统 
-* @Address: 浙江省杭州市余杭区向往街1008号乐富海邦园11幢4楼
-*/
-package org.diagbot.bigdata.dao.mapper;
-
-import org.diagbot.bigdata.dao.model.ResultMappingDiag;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingDiagWrapper;
-import org.diagbot.pub.orm.EntityMapper;
-
-/**
-* @Title: Feature.java
-* @Package: com.zjlantone.nlp.web.doc.dao.model
-* @Description: 数据库操作接口类 
-* @author: 楼辉荣
-* @date: 2016年8月8日 下午17:16:23
-* @version: V1.0
-*/
-public interface ResultMappingDiagMapper extends EntityMapper<ResultMappingDiag, ResultMappingDiagWrapper, Long> {
-}

+ 0 - 22
bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingFilterMapper.java

@@ -1,22 +0,0 @@
-/** 
-* @Company: 杭州朗通信息技术有限公司
-* @Department: 医疗事业部
-* @Description: 互动反馈系统 
-* @Address: 浙江省杭州市余杭区向往街1008号乐富海邦园11幢4楼
-*/
-package org.diagbot.bigdata.dao.mapper;
-
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingFilterWrapper;
-import org.diagbot.pub.orm.EntityMapper;
-
-/**
-* @Title: Feature.java
-* @Package: com.zjlantone.nlp.web.doc.dao.model
-* @Description: 数据库操作接口类 
-* @author: 楼辉荣
-* @date: 2016年8月8日 下午17:16:23
-* @version: V1.0
-*/
-public interface ResultMappingFilterMapper extends EntityMapper<ResultMappingFilter, ResultMappingFilterWrapper, Long> {
-}

+ 0 - 22
bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingVitalMapper.java

@@ -1,22 +0,0 @@
-/** 
-* @Company: 杭州朗通信息技术有限公司
-* @Department: 医疗事业部
-* @Description: 互动反馈系统 
-* @Address: 浙江省杭州市余杭区向往街1008号乐富海邦园11幢4楼
-*/
-package org.diagbot.bigdata.dao.mapper;
-
-import org.diagbot.bigdata.dao.model.ResultMappingVital;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingVitalWrapper;
-import org.diagbot.pub.orm.EntityMapper;
-
-/**
-* @Title: Feature.java
-* @Package: com.zjlantone.nlp.web.doc.dao.model
-* @Description: 数据库操作接口类 
-* @author: 楼辉荣
-* @date: 2016年8月8日 下午17:16:23
-* @version: V1.0
-*/
-public interface ResultMappingVitalMapper extends EntityMapper<ResultMappingVital, ResultMappingVitalWrapper, Long> {
-}

+ 0 - 38
bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingDiag.java

@@ -1,38 +0,0 @@
-package org.diagbot.bigdata.dao.model;
-
-import java.io.Serializable;
-
-/**
- * @Auther: fyeman
- * @Date: 2018/9/12/012 16:50
- * @Description:
- */
-public class ResultMappingDiag implements Serializable {
-    private Long id;
-    private String diagName;
-    private String deptName;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getDiagName() {
-        return diagName;
-    }
-
-    public void setDiagName(String diagName) {
-        this.diagName = diagName;
-    }
-
-    public String getDeptName() {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName) {
-        this.deptName = deptName;
-    }
-}

+ 0 - 38
bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingVital.java

@@ -1,38 +0,0 @@
-package org.diagbot.bigdata.dao.model;
-
-import java.io.Serializable;
-
-/**
- * @Auther: fyeman
- * @Date: 2018/9/10/010 14:30
- * @Description:
- */
-public class ResultMappingVital implements Serializable {
-    private Long id;
-    private String name;
-    private String nameMapping;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getNameMapping() {
-        return nameMapping;
-    }
-
-    public void setNameMapping(String nameMapping) {
-        this.nameMapping = nameMapping;
-    }
-}

+ 0 - 12
bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingDiagWrapper.java

@@ -1,12 +0,0 @@
-package org.diagbot.bigdata.dao.model.wrapper;
-
-
-import org.diagbot.bigdata.dao.model.ResultMappingDiag;
-
-/**
- * @Auther: fyeman
- * @Date: 2018/9/12/012 16:51
- * @Description:
- */
-public class ResultMappingDiagWrapper extends ResultMappingDiag {
-}

+ 0 - 6
bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingFilterWrapper.java

@@ -1,6 +0,0 @@
-package org.diagbot.bigdata.dao.model.wrapper;
-
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-
-public class ResultMappingFilterWrapper extends ResultMappingFilter {
-}

+ 0 - 7
bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingVitalWrapper.java

@@ -1,7 +0,0 @@
-package org.diagbot.bigdata.dao.model.wrapper;
-
-
-import org.diagbot.bigdata.dao.model.ResultMappingVital;
-
-public class ResultMappingVitalWrapper extends ResultMappingVital {
-}

+ 0 - 55
bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingDiagMapper.xml

@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.diagbot.bigdata.dao.mapper.ResultMappingDiagMapper">
-    <!-- 映射定义列-->
-    <resultMap type="org.diagbot.bigdata.dao.model.ResultMappingDiag" id="resultMappingDiagMap">
-        <id property="id" column="id"/>
-        <result property="diagName" column="diag_name"/>
-        <result property="deptName" column="dept_name"/>
-    </resultMap>
-
-    <!-- 映射定义列-->
-    <resultMap type="org.diagbot.bigdata.dao.model.wrapper.ResultMappingDiagWrapper" id="resultMappingDiagWrapperMap">
-        <id property="id" column="id"/>
-        <result property="diagName" column="diag_name"/>
-        <result property="deptName" column="dept_name"/>
-    </resultMap>
-
-    <!-- 通用查询结果列-->
-    <sql id="Base_Column_List">
-		 t.id,	 t.diag_name,	 t.dept_name
-	</sql>
-
-    <!-- 查询(根据主键ID查询) -->
-    <select id="selectByPrimaryKey" resultMap="resultMappingDiagMap" parameterType="java.lang.Integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_diag t
-        WHERE t.id = #{id}
-    </select>
-
-    <!-- 查询(根据主键ID查询) -->
-    <select id="selectWrapperByPrimaryKey" resultMap="resultMappingDiagWrapperMap" parameterType="java.lang.Integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_diag t
-        WHERE t.id = #{id}
-    </select>
-
-    <!-- 依据Map查询条件返回结果集-->
-    <select id="selectList" resultMap="resultMappingDiagMap" parameterType="java.util.Map">
-        select diag_name, group_concat(dept_name) dept_name from doc_result_mapping_diag  group by diag_name
-    </select>
-
-    <!-- 依据Map查询条件返回扩展属性结果集-->
-    <select id="selectListWrapper" resultMap="resultMappingDiagWrapperMap" parameterType="java.util.Map">
-        select diag_name, group_concat(dept_name) dept_name from doc_result_mapping_diag  group by diag_name
-    </select>
-
-    <!--删除:根据主键ID删除-->
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
-		 DELETE FROM doc_result_mapping_diag
-		 WHERE id = #{id}
-	</delete>
-</mapper>

+ 0 - 67
bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingFilterMapper.xml

@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.diagbot.bigdata.dao.mapper.ResultMappingFilterMapper">
-    <!-- 映射定义列-->
-    <resultMap type="org.diagbot.bigdata.dao.model.ResultMappingFilter" id="resultMappingFilterMap">
-        <id property="id" column="id"/>
-        <result property="featureName" column="feature_name"/>
-        <result property="featureType" column="feature_type"/>
-        <result property="sex" column="sex"/>
-        <result property="ageStart" column="age_start"/>
-        <result property="ageEnd" column="age_end"/>
-        <result property="remark" column="remark"/>
-    </resultMap>
-
-    <!-- 映射定义列-->
-    <resultMap type="org.diagbot.bigdata.dao.model.wrapper.ResultMappingFilterWrapper" id="resultMappingFilterWrapperMap">
-        <id property="id" column="id"/>
-        <result property="featureName" column="feature_name"/>
-        <result property="featureType" column="feature_type"/>
-        <result property="sex" column="sex"/>
-        <result property="ageStart" column="age_start"/>
-        <result property="ageEnd" column="age_end"/>
-        <result property="remark" column="remark"/>
-    </resultMap>
-
-    <!-- 通用查询结果列-->
-    <sql id="Base_Column_List">
-		 t.id, t.feature_name, t.feature_type, t.sex, t.age_start, t.age_end, t.remark
-	</sql>
-
-    <!-- 查询(根据主键ID查询) -->
-    <select id="selectByPrimaryKey" resultMap="resultMappingFilterMap" parameterType="java.lang.Integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_filter t
-        WHERE t.id = #{id}
-    </select>
-
-    <!-- 查询(根据主键ID查询) -->
-    <select id="selectWrapperByPrimaryKey" resultMap="resultMappingFilterWrapperMap" parameterType="java.lang.Integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_filter t
-        WHERE t.id = #{id}
-    </select>
-
-    <!-- 依据Map查询条件返回结果集-->
-    <select id="selectList" resultMap="resultMappingFilterMap" parameterType="java.util.Map">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_filter t WHERE 1=1
-    </select>
-
-    <!-- 依据Map查询条件返回扩展属性结果集-->
-    <select id="selectListWrapper" resultMap="resultMappingFilterWrapperMap" parameterType="java.util.Map">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_filter t WHERE 1=1
-    </select>
-
-    <!--删除:根据主键ID删除-->
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
-		 DELETE FROM doc_result_mapping_filter
-		 WHERE id = #{id}
-	</delete>
-</mapper>

+ 0 - 77
bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingVitalMapper.xml

@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.diagbot.bigdata.dao.mapper.ResultMappingVitalMapper">
-    <!-- 映射定义列-->
-    <resultMap type="org.diagbot.bigdata.dao.model.ResultMappingVital" id="resultMappingVitalMap">
-        <id property="id" column="id"/>
-        <result property="name" column="name"/>
-        <result property="nameMapping" column="name_mapping"/>
-    </resultMap>
-
-    <!-- 映射定义列-->
-    <resultMap type="org.diagbot.bigdata.dao.model.wrapper.ResultMappingVitalWrapper" id="resultMappingVitalWrapperMap">
-        <id property="id" column="id"/>
-        <result property="name" column="name"/>
-        <result property="nameMapping" column="name_mapping"/>
-    </resultMap>
-
-    <!-- 通用查询结果列-->
-    <sql id="Base_Column_List">
-		 t.id,	 t.name,	 t.name_mapping
-	</sql>
-
-    <!-- 查询(根据主键ID查询) -->
-    <select id="selectByPrimaryKey" resultMap="resultMappingVitalMap" parameterType="java.lang.Integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_vital t
-        WHERE t.id = #{id}
-    </select>
-
-    <!-- 查询(根据主键ID查询) -->
-    <select id="selectWrapperByPrimaryKey" resultMap="resultMappingVitalWrapperMap" parameterType="java.lang.Integer">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_vital t
-        WHERE t.id = #{id}
-    </select>
-
-    <!-- 依据Map查询条件返回结果集-->
-    <select id="selectList" resultMap="resultMappingVitalMap" parameterType="java.util.Map">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_vital t WHERE 1=1
-        <if test="id != null and id != ''">
-            and t.id = #{id}
-        </if>
-        <if test="name != null and name != ''">
-            and t.name = #{name}
-        </if>
-        <if test="nameMapping != null and nameMapping != ''">
-            and t.name_mapping = #{nameMapping}
-        </if>
-    </select>
-
-    <!-- 依据Map查询条件返回扩展属性结果集-->
-    <select id="selectListWrapper" resultMap="resultMappingVitalWrapperMap" parameterType="java.util.Map">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM doc_result_mapping_vital t WHERE 1=1
-        <if test="id != null and id != ''">
-            and t.id = #{id}
-        </if>
-        <if test="name != null and name != ''">
-            and t.name = #{name}
-        </if>
-        <if test="nameMapping != null and nameMapping != ''">
-            and t.name_mapping = #{nameMapping}
-        </if>
-    </select>
-
-    <!--删除:根据主键ID删除-->
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
-		 DELETE FROM doc_result_mapping_vital
-		 WHERE id = #{id}
-	</delete>
-</mapper>

+ 0 - 8
bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingDiagService.java

@@ -1,8 +0,0 @@
-package org.diagbot.bigdata.service;
-
-import org.diagbot.bigdata.dao.model.ResultMappingDiag;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingDiagWrapper;
-import org.diagbot.pub.service.BaseService;
-
-public interface ResultMappingDiagService extends BaseService<ResultMappingDiag, ResultMappingDiagWrapper, Long> {
-}

+ 0 - 8
bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingFilterService.java

@@ -1,8 +0,0 @@
-package org.diagbot.bigdata.service;
-
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingFilterWrapper;
-import org.diagbot.pub.service.BaseService;
-
-public interface ResultMappingFilterService extends BaseService<ResultMappingFilter, ResultMappingFilterWrapper, Long> {
-}

+ 0 - 8
bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingVitalService.java

@@ -1,8 +0,0 @@
-package org.diagbot.bigdata.service;
-
-import org.diagbot.bigdata.dao.model.ResultMappingVital;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingVitalWrapper;
-import org.diagbot.pub.service.BaseService;
-
-public interface ResultMappingVitalService extends BaseService<ResultMappingVital, ResultMappingVitalWrapper, Long> {
-}

+ 0 - 21
bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingDiagServiceImpl.java

@@ -1,21 +0,0 @@
-package org.diagbot.bigdata.service.impl;
-
-import org.diagbot.bigdata.dao.mapper.ResultMappingDiagMapper;
-import org.diagbot.bigdata.dao.model.ResultMappingDiag;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingDiagWrapper;
-import org.diagbot.bigdata.service.ResultMappingDiagService;
-import org.diagbot.pub.service.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ResultMappingDiagServiceImpl extends BaseServiceImpl<ResultMappingDiag, ResultMappingDiagWrapper, Long> implements ResultMappingDiagService {
-    @Autowired
-    ResultMappingDiagMapper resultMappingDiagMapper;
-
-    @Autowired
-    private void setEntityMapper() {
-        super.setEntityMapper(resultMappingDiagMapper);
-    }
-
-}

+ 0 - 21
bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingFilterServiceImpl.java

@@ -1,21 +0,0 @@
-package org.diagbot.bigdata.service.impl;
-
-import org.diagbot.bigdata.dao.mapper.ResultMappingFilterMapper;
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingFilterWrapper;
-import org.diagbot.bigdata.service.ResultMappingFilterService;
-import org.diagbot.pub.service.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ResultMappingFilterServiceImpl extends BaseServiceImpl<ResultMappingFilter, ResultMappingFilterWrapper, Long> implements ResultMappingFilterService {
-    @Autowired
-    ResultMappingFilterMapper resultMappingFilterMapper;
-
-    @Autowired
-    private void setEntityMapper() {
-        super.setEntityMapper(resultMappingFilterMapper);
-    }
-
-}

+ 0 - 21
bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingVitalServiceImpl.java

@@ -1,21 +0,0 @@
-package org.diagbot.bigdata.service.impl;
-
-import org.diagbot.bigdata.dao.mapper.ResultMappingVitalMapper;
-import org.diagbot.bigdata.dao.model.ResultMappingVital;
-import org.diagbot.bigdata.dao.model.wrapper.ResultMappingVitalWrapper;
-import org.diagbot.bigdata.service.ResultMappingVitalService;
-import org.diagbot.pub.service.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ResultMappingVitalServiceImpl extends BaseServiceImpl<ResultMappingVital, ResultMappingVitalWrapper, Long> implements ResultMappingVitalService {
-    @Autowired
-    ResultMappingVitalMapper resultMappingVitalMapper;
-
-    @Autowired
-    private void setEntityMapper() {
-        super.setEntityMapper(resultMappingVitalMapper);
-    }
-
-}

+ 5 - 10
bigdata-web/src/main/java/org/diagbot/bigdata/work/AlgorithmCore.java

@@ -3,9 +3,9 @@ package org.diagbot.bigdata.work;
 import org.algorithm.core.AlgorithmExecutor;
 import org.algorithm.factory.AlgorithmFactory;
 import org.algorithm.util.AlgorithmClassify;
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
 import org.diagbot.nlp.feature.FeatureType;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.NlpCache;
@@ -26,13 +26,10 @@ import java.util.*;
 public class AlgorithmCore {
     Logger logger = LoggerFactory.getLogger(AlgorithmCore.class);
     public ResponseData algorithm(HttpServletRequest request, SearchData searchData, ResponseData responseData) throws Exception {
-        if (responseData == null) {
-            responseData = new ResponseData();
-        }
         //录入文本处理,包括提取特征、推送类型转换等
-        ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
+        BigDataParamsProxy paramsDataProxy = new BigDataParamsProxy();
         logger.info("页面文本信息:" + searchData.getSymptom());
-        paramsDataProxy.createSearchData(request, searchData);
+        paramsDataProxy.createSearchData(searchData);
         //对象拷贝至BigDataSearchData处理
         BigDataSearchData bigDataSearchData = new BigDataSearchData();
         BeanUtils.copyProperties(searchData, bigDataSearchData);
@@ -65,8 +62,6 @@ public class AlgorithmCore {
                 if (Constants.feature_type_symptom.equals(searchData.getFeatureTypes()[i])) {
                     featuresMap = resultDataProxy.mapAdd(featuresMap, NlpCache.getStandard_info_push_map(), true);
                 }
-                //大小类合并
-                featuresMap = resultDataProxy.resultMerge(request, featuresMap);
                 //按模型计算的概率排序
                 featuresOrderList = new ArrayList<Map.Entry<String, Float>>(featuresMap.entrySet());
                 Collections.sort(featuresOrderList, new Comparator<Map.Entry<String, Float>>() {

+ 94 - 0
bigdata-web/src/main/java/org/diagbot/bigdata/work/BigDataParamsProxy.java

@@ -0,0 +1,94 @@
+package org.diagbot.bigdata.work;
+
+import org.algorithm.util.AlgorithmClassify;
+import org.apache.commons.lang3.StringUtils;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.work.ParamsDataProxy;
+import org.diagbot.nlp.feature.FeatureType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @ClassName org.diagbot.bigdata.work.ParamsDataProxy
+ * @Description TODO
+ * @Author fyeman
+ * @Date 2019/1/16/016 14:04
+ * @Version 1.0
+ **/
+public class BigDataParamsProxy {
+    Logger logger = LoggerFactory.getLogger(BigDataParamsProxy.class);
+
+    public void createSearchData(SearchData searchData) throws Exception {
+        ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
+        paramsDataProxy.createSearchData(searchData);
+    }
+    /**
+     * featureType转算法模型类型
+     *
+     * @param sysCode
+     * @param featureTypes
+     * @param searchData
+     */
+    public AlgorithmClassify[] createAlgorithmClassify(String sysCode, String[] featureTypes, SearchData searchData) {
+        AlgorithmClassify[] classifies = new AlgorithmClassify[featureTypes.length];
+        //下了诊断且其他信息全为空 反推标识
+        boolean reverse = !StringUtils.isEmpty(searchData.getDiag()) && StringUtils.isEmpty(searchData.getSymptom());
+        for (int i = 0; i < featureTypes.length; i++) {
+            if (featureTypes[i] != null) {
+                //模型
+                switch (FeatureType.parse(featureTypes[i])) {
+                    case SYMPTOM:
+                        if (reverse) {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_SYMPTOM;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_SYMPTOM;
+                        }
+                        break;
+                    case DIAG:
+                        if (reverse) {
+                            classifies[i] = null;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG;
+                        }
+                        break;
+                    case VITAL:
+                        if (reverse) {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_VITAL;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_VITAL;
+                        }
+                        break;
+                    case LIS:
+                        if (reverse) {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_LIS;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_LIS;
+                        }
+                        break;
+                    case PACS:
+                        if (reverse) {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_PACS;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_PACS;
+                        }
+                        break;
+                    case TREAT:
+                        if (reverse) {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_TREAT;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_TREAT;
+                        }
+                        break;
+                    case HISTORY:
+                        if (reverse) {
+                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_HISTORY;
+                        } else {
+                            classifies[i] = AlgorithmClassify.NEURAL_HISTORY;
+                        }
+                        break;
+                }
+            }
+        }
+        return classifies;
+    }
+}

+ 1 - 1
bigdata-web/src/main/java/org/diagbot/bigdata/work/BigDataSearchData.java

@@ -1,7 +1,7 @@
 package org.diagbot.bigdata.work;
 
 import org.algorithm.util.AlgorithmClassify;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.SearchData;
 
 public class BigDataSearchData extends SearchData {
     //模型

+ 0 - 702
bigdata-web/src/main/java/org/diagbot/bigdata/work/ParamsDataProxy.java

@@ -1,702 +0,0 @@
-package org.diagbot.bigdata.work;
-
-import org.algorithm.util.AlgorithmClassify;
-import org.apache.commons.lang3.StringUtils;
-import org.diagbot.bigdata.common.ApplicationCacheUtil;
-import org.diagbot.bigdata.util.BigDataConstants;
-import org.diagbot.common.work.SearchData;
-import org.diagbot.nlp.feature.FeatureAnalyze;
-import org.diagbot.nlp.feature.FeatureType;
-import org.diagbot.nlp.participle.ParticipleUtil;
-import org.diagbot.nlp.participle.word.Lexeme;
-import org.diagbot.nlp.participle.word.LexemePath;
-import org.diagbot.nlp.util.Constants;
-import org.diagbot.nlp.util.NegativeEnum;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.*;
-import java.util.regex.Pattern;
-
-/**
- * @ClassName org.diagbot.bigdata.work.ParamsDataProxy
- * @Description TODO
- * @Author fyeman
- * @Date 2019/1/16/016 14:04
- * @Version 1.0
- **/
-public class ParamsDataProxy {
-    Logger logger = LoggerFactory.getLogger(ParamsDataProxy.class);
-    //标准词只处理的词性
-    public static NegativeEnum[] negativeEnums = new NegativeEnum[] { NegativeEnum.VITAL_INDEX, NegativeEnum.SYMPTOM
-            , NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME, NegativeEnum.UNIT, NegativeEnum.DIAG_STAND
-            , NegativeEnum.OTHER};
-    //标准词处理的三元组
-    public static NegativeEnum[][] negativeEnumTriple = {
-            { NegativeEnum.VITAL_INDEX, NegativeEnum.DIGITS, NegativeEnum.UNIT },
-            { NegativeEnum.VITAL_INDEX, NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME },
-            { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS, NegativeEnum.UNIT },
-            { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME },
-            { NegativeEnum.DIAG_STAND, NegativeEnum.DIGITS, NegativeEnum.UNIT },
-            { NegativeEnum.DIAG_STAND, NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME },
-            { NegativeEnum.DIAG_STAND, NegativeEnum.DIGITS, NegativeEnum.OTHER }
-    };
-    //标准词处理的二元组
-    public static NegativeEnum[][] negativeEnumTwoTuple = {
-            { NegativeEnum.VITAL_INDEX, NegativeEnum.DIGITS },
-            { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS }
-    };
-
-    public void createSearchData(HttpServletRequest request, SearchData searchData) throws Exception {
-        //消除空格
-        if (searchData.getSymptom() != null) {
-            searchData.setSymptom(searchData.getSymptom().trim());
-        }
-        if (searchData.getDiag() != null) {
-            searchData.setDiag(searchData.getDiag().trim());
-        }
-        //计算年龄区间
-        if (searchData.getAge() > 0) {
-            searchData.setAge_start(searchData.getAge() - 5);
-            searchData.setAge_end(searchData.getAge() + 5);
-        }
-        //修改性别代码
-        if (!StringUtils.isEmpty(searchData.getSex())) {
-            if ("M".equals(searchData.getSex())) {
-                searchData.setSex("1");
-            } else if ("F".equals(searchData.getSex())) {
-                searchData.setSex("2");
-            } else {
-                searchData.setSex("3");
-            }
-        } else {
-            searchData.setSex("3");
-        }
-        //默认查询门诊数据
-        if (StringUtils.isEmpty(searchData.getResourceType())) {
-            searchData.setResourceType(BigDataConstants.resource_type_o);
-        }
-        //给症状末尾添加诊断依据标准词
-        String[] items = { searchData.getSymptom(), searchData.getOther(), searchData.getVital()
-                , searchData.getLis(), searchData.getPacs(), searchData.getDiag() };
-        String[] itemsType = { "symptom", "other", "vital", "lis", "pacs", "diag" };
-        for (int i = 0; i < items.length; i++) {
-            if (items[i] != null) {
-                LexemePath<Lexeme> featureData = ParticipleUtil.participle(items[i]);
-                if (featureData != null) {
-                    addStandWord(featureData, ApplicationCacheUtil.getKl_result_mapping_standword_map(), searchData, itemsType[i]);
-                }
-            }
-        }
-        //所有信息参与推送
-        //        searchData.setSymptom(searchData.getSymptom() + searchData.getVital()
-        //                + searchData.getLis() + searchData.getPacs() + searchData.getPast() + searchData.getOther() + searchData.getIndications());
-        if (StringUtils.isNotEmpty(searchData.getSymptom())) {
-            searchData.setSymptom(searchData.getSymptom().trim());
-        }
-        //一次推送多个类别信息
-        String[] featureTypes = searchData.getFeatureType().split(",");
-        //featureType统一转换
-        String[] convertFeatureTypes = new String[featureTypes.length];
-        for (int i = 0; i < featureTypes.length; i++) {
-            convertFeatureTypes[i] = convertFeatureType(searchData.getSysCode(), featureTypes[i]);
-        }
-        searchData.setFeatureType(StringUtils.join(convertFeatureTypes, ","));
-        searchData.setFeatureTypes(convertFeatureTypes);
-
-        //获取入参中的特征信息
-        FeatureAnalyze fa = new FeatureAnalyze();
-        List<Map<String, Object>> featuresList = new ArrayList<>();
-        if (!StringUtils.isEmpty(searchData.getSymptom())) {
-            //提取现病史
-            featuresList = fa.start(searchData.getSymptom(), FeatureType.FEATURE);
-            paramFeatureInit(searchData, featuresList);
-            //提取时间信息
-            featuresList = fa.start(searchData.getSymptom(), FeatureType.TIME);
-            paramFeatureInit(searchData, featuresList);
-        }
-        if (!StringUtils.isEmpty(searchData.getVital())) {
-            //提取体征
-            featuresList = fa.start(searchData.getVital(), FeatureType.FEATURE);
-            paramFeatureInit(searchData, featuresList);
-        }
-        if (!StringUtils.isEmpty(searchData.getPast())) {
-            //提取既往史
-            featuresList = fa.start(searchData.getPast(), FeatureType.FEATURE);
-            paramFeatureInit(searchData, featuresList);
-        }
-        if (!StringUtils.isEmpty(searchData.getOther()) || !StringUtils.isEmpty(searchData.getIndications())) {
-            //提取其他史等
-            featuresList = fa.start((searchData.getOther() == null ? "" : searchData.getOther()) + (searchData.getIndications() == null ? "" : searchData.getIndications()), FeatureType.FEATURE);
-            paramFeatureInit(searchData, featuresList);
-        }
-        if (!StringUtils.isEmpty(searchData.getPacs())) {
-            featuresList = fa.start(searchData.getPacs(), FeatureType.PACS);
-            paramFeatureInit(searchData, featuresList);
-        }
-        if (!StringUtils.isEmpty(searchData.getLis())) {
-            featuresList = fa.start(searchData.getLis(), FeatureType.LIS);
-            paramFeatureInit(searchData, featuresList);
-        }
-        // 清洗特征词,去除词性不匹配的词
-        searchData = cleanFeature(featuresList, fa, searchData);
-        if (!StringUtils.isEmpty(searchData.getOther())) {
-            //如果既往史中诊断信息,需要提取这个特征
-            featuresList = fa.start(searchData.getOther(), FeatureType.DIAG);
-            paramFeatureInit(searchData, featuresList);
-        }
-
-        if (!StringUtils.isEmpty(searchData.getDiag()) && StringUtils.isEmpty(searchData.getSymptom())) {
-            featuresList = fa.start(searchData.getDiag(), FeatureType.DIAG);
-            paramFeatureInit(searchData, featuresList);
-        }
-    }
-
-    /**
-     * featureType转算法模型类型
-     *
-     * @param sysCode
-     * @param featureTypes
-     * @param searchData
-     */
-    public AlgorithmClassify[] createAlgorithmClassify(String sysCode, String[] featureTypes, SearchData searchData) {
-        AlgorithmClassify[] classifies = new AlgorithmClassify[featureTypes.length];
-        //下了诊断且其他信息全为空 反推标识
-        boolean reverse = !StringUtils.isEmpty(searchData.getDiag()) && StringUtils.isEmpty(searchData.getSymptom());
-        for (int i = 0; i < featureTypes.length; i++) {
-            //            featureTypes[i] = convertFeatureType(sysCode, featureTypes[i]);
-            if (featureTypes[i] != null) {
-                //模型
-                switch (FeatureType.parse(featureTypes[i])) {
-                    case SYMPTOM:
-                        if (reverse) {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_SYMPTOM;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_SYMPTOM;
-                        }
-                        break;
-                    case DIAG:
-                        if (reverse) {
-                            classifies[i] = null;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG;
-                        }
-                        break;
-                    case VITAL:
-                        if (reverse) {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_VITAL;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_VITAL;
-                        }
-                        break;
-                    case LIS:
-                        if (reverse) {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_LIS;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_LIS;
-                        }
-                        break;
-                    case PACS:
-                        if (reverse) {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_PACS;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_PACS;
-                        }
-                        break;
-                    case TREAT:
-                        if (reverse) {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_TREAT;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_TREAT;
-                        }
-                        break;
-                    case HISTORY:
-                        if (reverse) {
-                            classifies[i] = AlgorithmClassify.NEURAL_DIAG_HISTORY;
-                        } else {
-                            classifies[i] = AlgorithmClassify.NEURAL_HISTORY;
-                        }
-                        break;
-                }
-            }
-        }
-        return classifies;
-    }
-
-    /**
-     * 外部系统featureType需要转化为大数据定义的featureType
-     *
-     * @param sysCode
-     * @param featureType
-     * @return
-     */
-    private String convertFeatureType(String sysCode, String featureType) {
-        if (StringUtils.isEmpty(sysCode) || sysCode.equals("1")) {
-            if ("1".equals(featureType)) {
-                return BigDataConstants.feature_type_symptom;
-            }
-            if ("7".equals(featureType)) {
-                return BigDataConstants.feature_type_diag;
-            }
-            if ("4".equals(featureType)) {
-                return BigDataConstants.feature_type_vital;
-            }
-            if ("5".equals(featureType)) {
-                return BigDataConstants.feature_type_lis;
-            }
-            if ("6".equals(featureType)) {
-                return BigDataConstants.feature_type_pacs;
-            }
-            if ("3".equals(featureType)) {
-                return BigDataConstants.feature_type_history;
-            }
-            if ("8".equals(featureType)) {
-                return BigDataConstants.feature_type_treat;
-            }
-            if ("22".equals(featureType)) {
-                return BigDataConstants.feature_type_labelpush;
-            }
-            if ("11".equals(featureType)) {
-                return BigDataConstants.feature_type_manju;
-            }
-            if ("42".equals(featureType)) {
-                return BigDataConstants.feature_type_vital_index;
-            }
-            return null;
-        }
-        return featureType;
-    }
-
-    /**
-     * 推送模型入参
-     *
-     * @param searchData
-     * @throws Exception
-     */
-    private void paramFeatureInit(SearchData searchData, List<Map<String, Object>> featuresList) throws Exception {
-        if (featuresList != null && featuresList.size() > 0) {
-            Map<String, Object> featureMap = null;
-            for (int i = 0; i < featuresList.size(); i++) {
-                featureMap = featuresList.get(i);
-                Map<String, String> map = new HashMap<>();
-                for (Map.Entry<String, Object> entry : featureMap.entrySet()) {
-                    map.put(entry.getKey(), String.valueOf(entry.getValue()));
-                }
-                map.put("featureType", String.valueOf(featureMap.get("feature_type")));
-                map.put("featureName", String.valueOf(featureMap.get("feature_name")));
-                map.put("property", String.valueOf(featureMap.get("property")));
-                map.put("concept", String.valueOf(featureMap.get("concept")));
-                if (Constants.default_negative.equals(featureMap.get("negative"))) {
-                    if (map.get("featureType").equals(Constants.feature_type_time)) {
-                        searchData.getInputs().put("时间", map);
-                    } else {
-                        if (searchData.getInputs().get(map.get("feature_name")) == null) {
-                            if (i < 5) {
-                                searchData.getInputs().put(map.get("feature_name"), map);
-                            }
-                            searchData.getGraphInputs().put(map.get("feature_name"), map);
-                        }
-                    }
-                } else {
-                    searchData.getFilters().put(map.get("feature_name"), map);
-                }
-            }
-        }
-    }
-
-    /**
-     * 给SearchData中症状末尾添加诊断依据标准词
-     *
-     * @param lexemes
-     * @param standWords
-     * @param sData
-     * @return
-     */
-    public SearchData addStandWord(List<Lexeme> lexemes, Map<String, List<Map<String, String>>> standWords, SearchData sData, String itemType) {
-        List<Lexeme> feature = new ArrayList<>();
-
-        //收集分词结果中体征指标或体征指标值(数字)
-        for (Lexeme lexeme : lexemes) {
-            if (lexeme.getProperty().contains(",")) {
-                ApplicationCacheUtil.setProterty(lexeme); //如果分词后词性有多个,只选一个(暂时只处理症状,体征)
-            }
-            NegativeEnum lexemeNegativeEnum = NegativeEnum.parseOfValue(lexeme.getProperty());
-            for (int i = 0; i < negativeEnums.length; i++) {
-                if (lexemeNegativeEnum == negativeEnums[i]) {
-                    feature.add(lexeme);
-                    break;
-                }
-            }
-        }
-        //根据收集到的分词结果把体征指标和对应体征指标值(数字)拼接
-        List<String> featureType = new ArrayList<>();
-
-        for (int i = 0; i < feature.size(); i++) {
-            boolean featureTypeState = true;
-            boolean featureTypeStatus = false;
-            if (i < feature.size() - 2) {
-                for (int j = 0; j < negativeEnumTriple.length; j++) {
-                    String featureText = "";
-                    for (int k = 0; k < negativeEnumTriple[j].length; k++) {
-                        if (NegativeEnum.parseOfValue(feature.get(i + k).getProperty()) == negativeEnumTriple[j][k]) {
-                            featureTypeStatus = true;
-                            featureText += "\t" + feature.get(i + k).getText();
-                        } else {
-                            featureTypeStatus = false;
-                            break;
-                        }
-                    }
-                    if (featureTypeStatus) {
-                        featureType.add(featureText);
-                        featureTypeState = false;
-                    }
-                }
-            }
-            if (featureTypeState && i < feature.size() - 1) {
-                for (int j = 0; j < negativeEnumTwoTuple.length; j++) {
-                    String featureText = "";
-                    for (int k = 0; k < negativeEnumTwoTuple[j].length; k++) {
-                        if (NegativeEnum.parseOfValue(feature.get(i + k).getProperty()) == negativeEnumTwoTuple[j][k]) {
-                            featureTypeStatus = true;
-                            featureText += "\t" + feature.get(i + k).getText();
-                        } else {
-                            featureTypeStatus = false;
-                            break;
-                        }
-                    }
-                    if (featureTypeStatus) {
-                        featureType.add(featureText);
-                    }
-                }
-            }
-        }
-        //将标准词中体征指标值(数字)与分词结果中体征指标值(数字)比较
-        String newStandWord = "";
-        for (String f : featureType) {
-            String[] features = f.trim().split("\t");
-            if (standWords.containsKey(features[0])) {
-                List<Map<String, String>> standWordList = standWords.get(features[0]);
-                for (Map<String, String> standWordMap : standWordList) {
-                    if (standWordMap.containsKey("unit") && standWordMap.containsKey("value")) {
-                        if (features.length == 2) {
-                            newStandWord = judgment(features, standWordMap, newStandWord, sData, itemType);
-                        } else {
-                            if (standWordMap.get("unit").equals(features[2].toLowerCase())) {
-                                newStandWord = judgment(features, standWordMap, newStandWord, sData, itemType);
-                            }
-                        }
-                    } else if (standWordMap.containsKey("value")) {
-                        if (features.length == 2) {
-                            newStandWord = judgment(features, standWordMap, newStandWord, sData, itemType);
-                        }
-                    }
-                }
-            }
-        }
-        //血压既满足血压≥140/90mmHg,又满足血压小于90/60mmHg时,只取前者
-        String addStandWords = "";
-        String smallerStandWord = "";
-        boolean flag = true;
-        for (String standWord : newStandWord.split(",")) {
-            if (!"".equals(standWord) || standWord.length() > 0) {
-                if (standWord.contains("<") || standWord.contains("<=") || standWord.contains("小于")) {
-                    smallerStandWord += "," + standWord;
-                } else {
-                    addStandWords += "," + proxy(standWord);
-                    flag = false;
-                }
-            }
-        }
-        if (flag) {
-            addStandWords += smallerStandWord;
-        }
-        addbloodPressure(sData, itemType, addStandWords);
-        return sData;
-    }
-
-
-    /**
-     * 将标准词中体征指标值(数字)与分词结果中体征指标值(数字)比较
-     * 除了血压>140/90mmHg类似标准词,其他标准词直接添加在症状后面
-     *
-     * @param features
-     * @param standWordMap
-     * @param standWord
-     * @param sData
-     * @return 血压>140/90mmHg或血压小于90/60mmHg或同时返回,在addStandWord()中进一步处理
-     */
-    private String judgment(String[] features, Map<String, String> standWordMap, String standWord, SearchData sData, String itemType) {
-        if (hasDigit(features[1])) {
-            try {
-                if (">".equals(standWordMap.get("op"))) {
-                    //单独处理  血压>140/90mmHg   类似情况
-                    if (features[1].contains("/")) {
-                        if (standWordMap.get("value").contains("/")) {
-                            String[] feature = features[1].split("/");
-                            Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
-                            Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
-
-                            String[] values = standWordMap.get("value").split("/");
-                            Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
-                            Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
-                            if (featuresSBP > standWordSBP || featuresDBP > standWordDBP) {
-                                standWord += "," + standWordMap.get("standword");
-                            }
-                        }
-                    } else {
-                        //"symptom","other","vital","lis","pacs","diag"
-                        String num = getNum(standWordMap.get("value"));
-                        if (Double.valueOf(getNum(features[1])) > Double.valueOf(num)) {
-                            setStandword(standWordMap, sData, itemType);
-                        }
-                    }
-                } else if ("<".equals(standWordMap.get("op"))) {
-                    //单独处理  血压小于90/60mmHg   类似情况
-                    if (standWordMap.get("value").contains("/")) {
-                        if (features[1].contains("/")) {
-                            String[] feature = features[1].split("/");
-                            Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
-                            Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
-
-                            String[] values = standWordMap.get("value").split("/");
-                            Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
-                            Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
-                            if (featuresSBP < standWordSBP || featuresDBP < standWordDBP) {
-                                standWord += "," + standWordMap.get("standword");
-                            }
-                        }
-                    } else {
-                        String num = getNum(standWordMap.get("value"));
-                        if (Double.valueOf(getNum(features[1])) < Double.valueOf(num)) {
-                            setStandword(standWordMap, sData, itemType);
-                        }
-                    }
-                } else if (">=".equals(standWordMap.get("op"))) {
-                    //单独处理  血压大于等于140/90mmHg   类似情况
-                    if (standWordMap.get("value").contains("/")) {
-                        if (features[1].contains("/")) {
-                            String[] feature = features[1].split("/");
-                            Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
-                            Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
-
-                            String[] values = standWordMap.get("value").split("/");
-                            Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
-                            Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
-                            if (featuresSBP >= standWordSBP || featuresDBP >= standWordDBP) {
-                                standWord += "," + standWordMap.get("standword");
-                            }
-                        }
-                    } else {
-                        String num = getNum(standWordMap.get("value"));
-                        if (Double.valueOf(getNum(features[1])) >= Double.valueOf(num)) {
-                            setStandword(standWordMap, sData, itemType);
-                        }
-                    }
-                } else if ("<=".equals(standWordMap.get("op"))) {
-                    //单独处理  血压小于等于90/60mmHg   类似情况
-                    if (standWordMap.get("value").contains("/")) {
-                        if (features[1].contains("/")) {
-                            String[] feature = features[1].split("/");
-                            Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
-                            Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
-
-                            String[] values = standWordMap.get("value").split("/");
-                            Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
-                            Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
-                            if (featuresSBP <= standWordSBP || featuresDBP <= standWordDBP) {
-                                standWord += "," + standWordMap.get("standword");
-                            }
-                        }
-                    } else {
-                        String num = getNum(standWordMap.get("value"));
-                        if (Double.valueOf(getNum(features[1])) <= Double.valueOf(num)) {
-                            setStandword(standWordMap, sData, itemType);
-                        }
-                    }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return standWord;
-    }
-
-    /**
-     * 根据不同项目添加标准词
-     *
-     * @param standWordMap
-     * @param sData
-     * @param itemType
-     */
-    private void setStandword(Map<String, String> standWordMap, SearchData sData, String itemType) {
-        switch (itemType) {
-            case "symptom":
-                if (sData.getSymptom().indexOf(proxy(standWordMap.get("standword"))) == -1) {
-                    sData.setSymptom(sData.getSymptom() + "," + proxy(standWordMap.get("standword")));
-                }
-                break;
-            case "other":
-                if (sData.getOther().indexOf(proxy(standWordMap.get("standword"))) == -1) {
-                    sData.setOther(sData.getOther() + "," + proxy(standWordMap.get("standword")));
-                }
-                break;
-            case "vital":
-                if (sData.getVital().indexOf(proxy(standWordMap.get("standword"))) == -1) {
-                    sData.setVital(sData.getVital() + "," + proxy(standWordMap.get("standword")));
-                }
-                break;
-            case "lis":
-                if (sData.getLis().indexOf(proxy(standWordMap.get("standword"))) == -1) {
-                    sData.setLis(sData.getLis() + "," + proxy(standWordMap.get("standword")));
-                }
-                break;
-            case "pacs":
-                if (sData.getPacs().indexOf(proxy(standWordMap.get("standword"))) == -1) {
-                    sData.setPacs(sData.getPacs() + "," + proxy(standWordMap.get("standword")));
-                }
-                break;
-            case "diag":
-                if (sData.getDiag().indexOf(proxy(standWordMap.get("standword"))) == -1) {
-                    sData.setDiag(sData.getDiag() + "," + proxy(standWordMap.get("standword")));
-                }
-                break;
-        }
-    }
-
-    /**
-     * 添加血压(血压既满足血压≥140/90mmHg,又满足血压小于90/60mmHg时,只取前者)
-     *
-     * @param sData
-     * @param itemType
-     * @param addStandWords
-     */
-    private void addbloodPressure(SearchData sData, String itemType, String addStandWords) {
-        switch (itemType) {
-            case "symptom":
-                if (sData.getSymptom().indexOf(addStandWords) == -1) {
-                    sData.setSymptom(sData.getSymptom() + "," + addStandWords);
-                }
-                break;
-            case "other":
-                if (sData.getOther().indexOf(addStandWords) == -1) {
-                    sData.setOther(sData.getOther() + "," + addStandWords);
-                }
-                break;
-            case "vital":
-                if (sData.getVital().indexOf(addStandWords) == -1) {
-                    sData.setVital(sData.getVital() + "," + addStandWords);
-                }
-                break;
-            case "lis":
-                if (sData.getLis().indexOf(addStandWords) == -1) {
-                    sData.setLis(sData.getLis() + "," + addStandWords);
-                }
-                break;
-            case "pacs":
-                if (sData.getPacs().indexOf(addStandWords) == -1) {
-                    sData.setPacs(sData.getPacs() + "," + addStandWords);
-                }
-                break;
-            case "diag":
-                if (sData.getDiag().indexOf(addStandWords) == -1) {
-                    sData.setDiag(sData.getDiag() + "," + addStandWords);
-                }
-                break;
-        }
-    }
-
-    /**
-     * 判断分词后的特征中是否含有数字
-     *
-     * @param content
-     * @return
-     */
-    private boolean hasDigit(String content) {
-        boolean flag = false;
-        if (Pattern.compile(".*\\d+.*").matcher(content).matches()) {
-            flag = true;
-        }
-        return flag;
-    }
-
-    /**
-     * 将字符串中的数字提取出来,针对分词结果中"90."类似情况
-     *
-     * @param standWord
-     * @return
-     */
-    private String getNum(String standWord) {
-        StringBuffer sb = new StringBuffer();
-        for (String num : standWord.replaceAll("[^0-9]", ",").split(",")) {
-            if (num.length() > 0) {
-                sb.append(num);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * 将血压超过标准值的标准词改为血压升高
-     *
-     * @param standWord
-     * @return
-     */
-    private String proxy(String standWord) {
-        if (standWord.contains("压") && (standWord.contains("≥") || standWord.contains("大于"))) {
-            standWord = "血压升高";
-        } else if (standWord.contains("心率") && (standWord.contains("大于") || standWord.contains("超过"))) {
-            standWord = "心率快";
-        }
-        return standWord;
-    }
-
-    private SearchData cleanFeature(List<Map<String, Object>> featuresList, FeatureAnalyze fa,
-                                    SearchData searchData) {
-        // 在输入的辅检文本中,只提取辅检信息
-        String[] PACS_Feature = { Constants.word_property_PACS,
-                Constants.word_property_PACS_Detail, Constants.word_property_PACS_Result };
-        searchData = removeFeature(searchData.getLis(), fa, searchData, PACS_Feature, FeatureType.PACS);
-
-        // 在输入的化验文本中,只提取化验信息
-        String[] LIS_Feature = { Constants.word_property_LIS,
-                Constants.word_property_LIS_Detail, Constants.word_property_LIS_Result };
-        searchData = removeFeature(searchData.getPacs(), fa, searchData, LIS_Feature, FeatureType.LIS);
-
-        return searchData;
-    }
-
-    private SearchData removeFeature(String text, FeatureAnalyze fa,
-                                     SearchData searchData, String[] properties, FeatureType featureType) {
-        String name = "";
-        Boolean related = false;
-
-        try {
-            List<Map<String, Object>> featureList = fa.start(text, featureType);
-            if (featureList != null) {
-                for (Map<String, Object> item : featureList) {
-                    name = item.get("feature_name").toString();
-                    String[] property = item.get("property").toString().split(",");
-                    for (String prop : property) {
-                        if (Arrays.asList(properties).contains(prop)) {
-                            //                            related = true;
-                            searchData.getInputs().remove(name);
-                            break;
-                        }
-                    }
-
-                    //                    if (!related) {
-                    //                        searchData.getInputs().remove(name);
-                    //                    }
-                    //9
-                    //                    related = false;
-                }
-            }
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
-            return searchData;
-        }
-    }
-}

+ 3 - 97
bigdata-web/src/main/java/org/diagbot/bigdata/work/ResultDataProxy.java

@@ -1,10 +1,9 @@
 package org.diagbot.bigdata.work;
 
 import org.apache.commons.lang3.StringUtils;
-import org.diagbot.bigdata.common.ApplicationCacheUtil;
-import org.diagbot.bigdata.dao.model.ResultMappingFilter;
-import org.diagbot.bigdata.util.BigDataConstants;
-import org.diagbot.common.work.FeatureRate;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResultMappingFilter;
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
 import org.diagbot.nlp.feature.FeatureType;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.NegativeEnum;
@@ -29,7 +28,6 @@ public class ResultDataProxy {
         DecimalFormat df = new DecimalFormat("0.####");
         List<FeatureRate> featureList = new ArrayList<>(10);
 
-//        Map<String, String> resultMappingVitalMap = ApplicationCacheUtil.getDoc_result_mapping_vital_map();
         Map<String, String> resultMappingDiagMap = ApplicationCacheUtil.getDoc_result_mapping_diag_map();
         Map<String, Map<String, ResultMappingFilter>> resultMappingFilterMap = ApplicationCacheUtil.getDoc_result_mapping_filter_map();
         Map<String, Map<String, String>> synonymMap = ApplicationCacheUtil.getStandard_info_synonym_map();
@@ -67,19 +65,11 @@ public class ResultDataProxy {
                 }
             }
             featureList.add(featureRate);
-//            if (!featureType.equals(Constants.feature_type_diag)) {
                 if (cursor < searchData.getLength()) {
                     cursor++;
                 } else {
                     break;
                 }
-//            } else {            //诊断最多返回5个
-//                if (cursor < 5) {
-//                    cursor++;
-//                } else {
-//                    break;
-//                }
-//            }
         }
 
         return featureList;
@@ -149,88 +139,4 @@ public class ResultDataProxy {
         }
         return result;
     }
-
-    /**
-     * 大小类数据合并
-     *
-     * @param request
-     * @param map
-     */
-    public Map<String, Float> resultMerge(HttpServletRequest request, Map<String, Float> map) {
-        Map<String, NlpCache.Node> nodesMap = NlpCache.getStandard_info_type_tree_map();
-        Map<String, Float> resultMap = new HashMap<>();
-        //设定阀值
-        float threshold = 0.001f;
-        Map<String, Float> thresholdMap = new HashMap<>();
-        for (Map.Entry<String, Float> entry : map.entrySet()) {
-            if (!"null".equals(entry.getKey()) && entry.getValue() >= threshold) {
-                thresholdMap.put(entry.getKey(), entry.getValue());
-            }
-        }
-
-        NlpCache.Node node = null;
-        List<String> delList = new ArrayList<>();
-        for (Map.Entry<String, Float> entry : thresholdMap.entrySet()) {
-            if (delList.contains(entry.getKey())) continue;
-
-            node = nodesMap.get(entry.getKey());
-            if (node != null) {
-                String topName = node.getName();
-                NlpCache.Node p = node.getParent();
-                if (p != null && nodesMap.get(p.getName()) != null) {
-                    topName = p.getName();
-                }
-                while (p != null) {
-                    List<String> nodeNamesList = new ArrayList<>();
-                    lookChilds(topName, p, thresholdMap, nodeNamesList);
-                    if (nodeNamesList.size() > 0) {
-                        topName = p.getName();
-                    }
-                    p = p.getParent();
-                }
-
-                if (thresholdMap.get(topName) != null) {
-                    resultMap.put(topName, thresholdMap.get(topName));
-                    delList.add(topName);
-                }
-                NlpCache.Node topNode = nodesMap.get(topName);
-                lookChildsAndCal(resultMap, thresholdMap, topNode, delList, topNode.getName());
-                delList.add(topName);
-            } else {
-                resultMap.put(entry.getKey(), entry.getValue());
-            }
-        }
-        return resultMap;
-    }
-
-    private void lookChilds(String own, NlpCache.Node p, Map<String, Float> thresholdMap, List<String> nodeNamesList) {
-        for (NlpCache.Node n : p.getChilds()) {
-            if (own.equals(n.getName())) {
-                continue;
-            } else {
-                if (thresholdMap.get(n.getName()) != null) {
-                    nodeNamesList.add(n.getName());
-                }
-                if (n.getChilds().size() > 0) {
-                    lookChilds("", n, thresholdMap, nodeNamesList);
-                }
-            }
-        }
-    }
-
-    private void lookChildsAndCal(Map<String, Float> resultMap, Map<String, Float> thresholdMap, NlpCache.Node node, List<String> delList, String topName) {
-        for (NlpCache.Node n : node.getChilds()) {
-            if (thresholdMap.get(n.getName()) != null) {
-                if (resultMap.get(topName) == null) {
-                    resultMap.put(topName, thresholdMap.get(n.getName()));
-                } else {
-                    resultMap.put(topName, resultMap.get(topName) + thresholdMap.get(n.getName()));
-                }
-                delList.add(n.getName());
-            }
-            if (n.getChilds().size() > 0) {
-                lookChildsAndCal(resultMap, thresholdMap, n, delList, topName);
-            }
-        }
-    }
 }

+ 37 - 41
bigdata-web/src/test/java/org/diagbot/AddStandWordTest.java

@@ -1,8 +1,8 @@
 package org.diagbot;
 
-import org.diagbot.bigdata.common.ApplicationCacheUtil;
-import org.diagbot.bigdata.work.ParamsDataProxy;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.bigdata.work.BigDataParamsProxy;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.cfg.Configuration;
 import org.diagbot.nlp.participle.cfg.DefaultConfig;
@@ -11,10 +11,6 @@ import org.diagbot.nlp.participle.word.LexemePath;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * @Description:
@@ -47,39 +43,39 @@ public class AddStandWordTest {
         long seconds = endTime - startTime;
         System.out.println("添加标准词使用了:"+splitSeconds + "毫秒.");
         System.out.println("处理文本总共使用了:"+seconds + "毫秒.");*/
-        for (int j = 1; j < 11; j++) {
-
-
-            SearchData searchData = new SearchData();
-            ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
-            searchData.setSymptom("安静时心率98次/分");
-            searchData.setOther("心率156次/分");
-            searchData.setVital("男性43岁");
-            searchData.setLis("Hachinski缺血积分2分");
-            searchData.setPacs("病程9个月");
-            searchData.setDiag("BMI12");
-            String[] items = { searchData.getSymptom(), searchData.getOther(), searchData.getVital()
-                    , searchData.getLis(), searchData.getPacs(), searchData.getDiag() };
-            String[] itemsType = { "symptom", "other", "vital", "lis", "pacs", "diag" };
-            long startTime = System.currentTimeMillis();
-            for (int i = 0; i < items.length; i++) {
-                if (items[i] != null) {
-                    LexemePath<Lexeme> featureData = ParticipleUtil.participle(items[i]);
-                    if (featureData != null) {
-                        paramsDataProxy.addStandWord(featureData, ApplicationCacheUtil.getKl_result_mapping_standword_map(), searchData, itemsType[i]);
-                    }
-                }
-            }
-            System.out.println(searchData.getSymptom());
-            System.out.println(searchData.getOther());
-            System.out.println(searchData.getVital());
-            System.out.println(searchData.getLis());
-            System.out.println(searchData.getPacs());
-            System.out.println(searchData.getDiag());
-            long endTime = System.currentTimeMillis();
-            System.out.println("处理文本总共使用了:" + (endTime - startTime) + "毫秒.");
-            System.out.println("---------------------------第" + j + "次处理---------------------------------");
-        }
+//        for (int j = 1; j < 11; j++) {
+//
+//
+//            SearchData searchData = new SearchData();
+//            BigDataParamsProxy paramsDataProxy = new BigDataParamsProxy();
+//            searchData.setSymptom("安静时心率98次/分");
+//            searchData.setOther("心率156次/分");
+//            searchData.setVital("男性43岁");
+//            searchData.setLis("Hachinski缺血积分2分");
+//            searchData.setPacs("病程9个月");
+//            searchData.setDiag("BMI12");
+//            String[] items = { searchData.getSymptom(), searchData.getOther(), searchData.getVital()
+//                    , searchData.getLis(), searchData.getPacs(), searchData.getDiag() };
+//            String[] itemsType = { "symptom", "other", "vital", "lis", "pacs", "diag" };
+//            long startTime = System.currentTimeMillis();
+//            for (int i = 0; i < items.length; i++) {
+//                if (items[i] != null) {
+//                    LexemePath<Lexeme> featureData = ParticipleUtil.participle(items[i]);
+//                    if (featureData != null) {
+//                        paramsDataProxy.addStandWord(featureData, ApplicationCacheUtil.getKl_result_mapping_standword_map(), searchData, itemsType[i]);
+//                    }
+//                }
+//            }
+//            System.out.println(searchData.getSymptom());
+//            System.out.println(searchData.getOther());
+//            System.out.println(searchData.getVital());
+//            System.out.println(searchData.getLis());
+//            System.out.println(searchData.getPacs());
+//            System.out.println(searchData.getDiag());
+//            long endTime = System.currentTimeMillis();
+//            System.out.println("处理文本总共使用了:" + (endTime - startTime) + "毫秒.");
+//            System.out.println("---------------------------第" + j + "次处理---------------------------------");
+//        }
         //        String s = "\tsafGG\tAFASSADG";
         //        System.out.println(s);
         //        System.out.println(s.trim());
@@ -122,7 +118,7 @@ public class AddStandWordTest {
             int i = 1;
             for (Lexeme lexeme : lexemes) {
                 if (lexeme.getProperty().contains(",")) {
-                    ApplicationCacheUtil.setProterty(lexeme);
+//                    ApplicationCacheUtil.setProterty(lexeme);
                 }
                 if (lexemes.size() != i) {
                     System.out.print(lexeme.getText() + "(" + lexeme.getProperty() + ")|");

+ 135 - 0
bigdata-web/src/test/java/org/diagbot/EyeHospitalData.java

@@ -0,0 +1,135 @@
+package org.diagbot;
+
+import org.diagbot.pub.jdbc.MysqlJdbc;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.sql.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.Date;
+import java.util.stream.Collectors;
+
+/**
+ * Created by louhr on 2019/9/3.
+ */
+public class EyeHospitalData {
+
+    public static void main(String[] args) {
+//        EyeHospitalData ehl = new EyeHospitalData();
+//        Connection conn = ehl.createOracleJdbc();
+//        ehl.queryHospitalInput(conn);
+    }
+
+//    private List<Map<String, Object>> queryHospitalInput(Connection conn) {
+//        PreparedStatement pstmt = null;
+//        ResultSet rs = null;
+//        List<Map<String, Object>> list = new ArrayList<>();
+//        String ipid = "";
+//        try {
+//
+//            DateFormat df = new SimpleDateFormat("yyyyMMdd");
+//
+//            Calendar cal = Calendar.getInstance();
+//            cal.setTime(new Date());
+//            String end_time = df.format(cal.getTime());
+//
+//            cal.add(Calendar.DATE, -7);
+//            String start_time = df.format(cal.getTime());
+//
+//
+//            int record_cnt = 1;
+//
+//            while (start_time.compareTo("20190801") > -1) {
+//                System.out.println(start_time + "..." + end_time);
+//
+//                String sql = "select xml_cont, ipid, pid, dept_name, dept_code, create_time from inpcase.hospital_record " +
+//                        "where substr(create_time, 0, 8) > '" + start_time + "' and substr(create_time, 0, 8) <= '" + end_time + "'";
+//                pstmt = conn.prepareStatement(sql);
+//                //建立一个结果集,用来保存查询出来的结果
+//                rs = pstmt.executeQuery();
+//
+//
+//                while (rs.next()) {
+//                    if (record_cnt % 100 == 0) {
+//                        System.out.println("已查询" + record_cnt + "行数据!");
+//                    }
+//                    Map<String, Object> map = new HashMap<>();
+//                    OracleResultSet ors = (OracleResultSet) rs;
+//                    OPAQUE op = ors.getOPAQUE(1);
+//                    ipid = ors.getString(2);
+//                    String pid = ors.getString(3);
+//                    String dept_name = ors.getString(4);
+//                    String dept_code = ors.getString(5);
+//                    String create_time = ors.getString(6);
+//
+//                    XMLType xml = XMLType.createXML(op);
+//                    String xml_cont = xml.getStringVal();
+//                    xml_cont = xml_cont.substring(xml_cont.indexOf("<text>") + 6, xml_cont.indexOf("</text>"));
+//
+//                    String sex = xml_cont.substring(xml_cont.indexOf("性  别:") + 5, xml_cont.indexOf("性  别:") + 8);
+//                    String age = xml_cont.substring(xml_cont.indexOf("年  龄:") + 5, xml_cont.indexOf("年  龄:") + 8);
+//                    String marry = xml_cont.substring(xml_cont.indexOf("婚  姻:") + 5, xml_cont.indexOf("婚  姻:") + 8);
+//                    String in_hospital = xml_cont.substring(xml_cont.indexOf("入院日期:") + 5, xml_cont.indexOf("入院日期:") + 22);
+//                    String content = xml_cont.substring(xml_cont.indexOf("主  诉:"), xml_cont.indexOf("医师签名:"));
+//
+//                    map.put("ipid", ipid);
+//                    map.put("pid", pid);
+//                    map.put("dept_name", dept_name);
+//                    map.put("dept_code", dept_code);
+//                    map.put("create_time", create_time);
+//                    map.put("sex", sex);
+//                    map.put("age", age);
+//                    map.put("marry", marry);
+//                    map.put("in_hospital", in_hospital);
+//                    map.put("content", content);
+//
+//                    System.out.println(sex);
+//                    System.out.println(age);
+//                    System.out.println(marry);
+//                    System.out.println(in_hospital);
+//                    System.out.println(content);
+//
+//                    list.add(map);
+//
+//                    record_cnt++;
+//                }
+//
+//                end_time = start_time;
+//                cal.add(Calendar.DATE, -7);
+//                start_time = df.format(cal.getTime());
+//            }
+//        } catch (Exception e) {
+//            System.out.println(ipid);
+//            e.printStackTrace();
+//        } finally {
+//            try {
+//                rs.close();
+//                pstmt.close();
+//            }catch (SQLException sqle) {
+//                sqle.printStackTrace();
+//            }
+//        }
+//        return list;
+//    }
+//
+//    private void insertMysql(List<Map<String, Object>> list) {
+//        MysqlJdbc nlpJdbc = new MysqlJdbc("root", "", "jdbc:mysql://127.0.0.1:3306/eye_hospital?useUnicode=true&characterEncoding=UTF-8");
+//        nlpJdbc.insert(list, "hospital_record", new String[]{"ipid", "pid", "dept_name", "dept_code", "create_time", "sex", "age", "marry", "in_hospital", "content"});
+//    }
+//
+//    private Connection createOracleJdbc() {
+//        Connection conn = null;
+//        try {
+//            Class.forName("oracle.jdbc.driver.OracleDriver");
+//            conn = DriverManager.getConnection("jdbc:oracle:thin:@//172.17.1.143:1521/orc1",
+//                    "louhr", "louhr");
+//            return conn;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return conn;
+//    }
+}

+ 8 - 2
common-push/pom.xml

@@ -22,11 +22,17 @@
             <artifactId>public</artifactId>
             <version>${project.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>nlp</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <dependency>
             <groupId>org.diagbot</groupId>
-            <artifactId>graph</artifactId>
+            <artifactId>common-service</artifactId>
             <version>1.0.0</version>
-            <scope>compile</scope>
         </dependency>
     </dependencies>
 

+ 0 - 11
common-push/src/main/java/org/diagbot/common/push/Test.java

@@ -1,11 +0,0 @@
-package org.diagbot.common.push;
-
-/**
- * @ClassName org.diagbot.common.push.Test
- * @Description TODO
- * @Author fyeman
- * @Date 2019/8/5/005 17:07
- * @Version 1.0
- **/
-public class Test {
-}

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

@@ -0,0 +1,34 @@
+package org.diagbot.common.push.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;
+    }
+}

+ 1 - 1
common-service/src/main/java/org/diagbot/common/work/FeatureRate.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 /**
  * Created by fyeman on 2018/1/17.

+ 1 - 1
common-service/src/main/java/org/diagbot/common/work/LisDetail.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 public class LisDetail {
     private String detailName;

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

@@ -0,0 +1,79 @@
+package org.diagbot.common.push.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;
+    }
+}

+ 14 - 4
common-service/src/main/java/org/diagbot/common/work/ResponseData.java

@@ -1,7 +1,7 @@
-package org.diagbot.common.work;
-import com.alibaba.fastjson.JSONObject;
-import org.diagbot.common.javabean.Filnlly;
-import org.diagbot.common.javabean.MedicalIndication;
+package org.diagbot.common.push.bean;
+
+import org.diagbot.common.push.bean.neo4j.Filnlly;
+import org.diagbot.common.push.bean.neo4j.MedicalIndication;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -31,6 +31,8 @@ public class ResponseData {
     private List<String> diffDiag;//鉴别诊断
     private List<String> excludeDiag; //排除诊断
 
+    private Map<String, List<CrisisDetail>> crisisDetails = new HashMap<>();
+
     public List<String> getDiffDiag() {
         return diffDiag;
     }
@@ -160,4 +162,12 @@ public class ResponseData {
     public void setBeforeCombineDis(List<FeatureRate> beforeCombineDis) {
         this.beforeCombineDis = beforeCombineDis;
     }
+
+    public Map<String, List<CrisisDetail>> getCrisisDetails() {
+        return crisisDetails;
+    }
+
+    public void setCrisisDetails(Map<String, List<CrisisDetail>> crisisDetails) {
+        this.crisisDetails = crisisDetails;
+    }
 }

+ 1 - 1
bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingFilter.java

@@ -1,4 +1,4 @@
-package org.diagbot.bigdata.dao.model;
+package org.diagbot.common.push.bean;
 
 
 public class ResultMappingFilter {

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

@@ -0,0 +1,143 @@
+package org.diagbot.common.push.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 触发规则
+ * @author Mark Huang
+ * @since 27/08/2019
+ */
+@Getter
+@Setter
+public class Rule {
+    private String id = "";
+    // 大类名称
+    private String pub_name = "";
+    // 最小值比较符
+    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 getPub_name() {
+        return pub_name;
+    }
+
+    public void setPub_name(String pub_name) {
+        this.pub_name = pub_name;
+    }
+
+    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;
+    }
+}

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

@@ -0,0 +1,45 @@
+package org.diagbot.common.push.bean;
+
+/**
+ * @Description:
+ * @Author: HUJING
+ * @Date: 2019/9/3 13:21
+ */
+public class RuleApp {
+    private String id;
+    private String ruleIds;
+    private String typeId;
+    private String remind;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getRuleIds() {
+        return ruleIds;
+    }
+
+    public void setRuleIds(String ruleIds) {
+        this.ruleIds = ruleIds;
+    }
+
+    public String getTypeId() {
+        return typeId;
+    }
+
+    public void setTypeId(String typeId) {
+        this.typeId = typeId;
+    }
+
+    public String getRemind() {
+        return remind;
+    }
+
+    public void setRemind(String remind) {
+        this.remind = remind;
+    }
+}

+ 23 - 4
common-service/src/main/java/org/diagbot/common/work/SearchData.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.work;
+package org.diagbot.common.push.bean;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -23,7 +23,8 @@ public class SearchData {
     protected String resourceType;
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     protected String sysCode;
-    private List<LisDetail> lisArr = new ArrayList<>();
+    private List<PreResult> lisArr = new ArrayList<>();
+    protected String normal  = "";
     protected String chief  = "";
     protected String symptom = "";
     protected String vital = "";
@@ -54,6 +55,8 @@ public class SearchData {
     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;
@@ -63,11 +66,11 @@ public class SearchData {
         this.disType = disType;
     }
 
-    public List<LisDetail> getLisArr() {
+    public List<PreResult> getLisArr() {
         return lisArr;
     }
 
-    public void setLisArr(List<LisDetail> lisArr) {
+    public void setLisArr(List<PreResult> lisArr) {
         this.lisArr = lisArr;
     }
 
@@ -157,6 +160,14 @@ public class SearchData {
         this.inputs = inputs;
     }
 
+    public String getNormal() {
+        return normal;
+    }
+
+    public void setNormal(String normal) {
+        this.normal = normal;
+    }
+
     public String getChief() {
         return chief;
     }
@@ -292,4 +303,12 @@ public class SearchData {
     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;
+    }
 }

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/Detail.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 /**
  * 指标的详细信息

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/Drugs.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import java.util.LinkedList;
 

+ 1 - 2
common-service/src/main/java/org/diagbot/common/javabean/Filnlly.java

@@ -1,8 +1,7 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 public class Filnlly {
     private List<Indicators> adverseEvent;

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/FuzhenFilnlly.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import java.util.ArrayList;
 import java.util.Map;

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/Indicators.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import java.util.List;
 

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/MangementEvaluation.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import com.alibaba.fastjson.JSONObject;
 

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/MedicalIndication.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import java.util.List;
 

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/MedicalIndicationDetail.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 import com.alibaba.fastjson.JSONObject;
 

+ 1 - 1
common-service/src/main/java/org/diagbot/common/javabean/Medicition.java

@@ -1,4 +1,4 @@
-package org.diagbot.common.javabean;
+package org.diagbot.common.push.bean.neo4j;
 
 /**
  * 药

+ 157 - 0
common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java

@@ -0,0 +1,157 @@
+package org.diagbot.common.push.cache;
+
+import org.diagbot.common.push.bean.ResultMappingFilter;
+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.DefaultConfig;
+import org.diagbot.nlp.util.NlpCache;
+
+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("\\|", -1);
+            Rule rule = new Rule();
+            if (content.length == 12) {
+                rule.setId(content[0] == null ? "" : content[0]);
+                rule.setPub_name(content[1] == null ? "" : content[1]);
+                rule.setMin_operator(content[2] == null ? "" : content[2]);
+                rule.setMin_value(content[3] == null ? "" : content[3]);
+                rule.setMin_unit(content[4] == null ? "" : content[4]);
+                rule.setMax_operator(content[5] == null ? "" : content[5]);
+                rule.setMax_value(content[6] == null ? "" : content[6]);
+                rule.setMax_unit(content[7] == null ? "" : content[7]);
+                rule.setEq_operator(content[8] == null ? "" : content[8]);
+                rule.setEq_value(content[9] == null ? "" : content[9]);
+                rule.setEq_unit(content[10] == null ? "" : content[10]);
+                rule.setRemind(content[11] == null ? "" : content[11]);
+                if (kl_rule_filter_map.get(rule.getPub_name()) == null) {
+                    rules = new ArrayList<>();
+                } else {
+                    rules = kl_rule_filter_map.get(rule.getPub_name());
+                }
+                rules.add(rule);
+                kl_rule_filter_map.put(rule.getPub_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");
+
+        for (String line : fileContents) {
+            String[] content = line.split("\\|", -1);
+            RuleApp ruleApp = new RuleApp();
+            if (content.length == 4) {
+                ruleApp.setId(content[0] == null ? "" : content[0]);
+                ruleApp.setRuleIds(content[1] == null ? "" : content[1]);
+                ruleApp.setTypeId(content[2] == null ? "" : content[2]);
+                ruleApp.setRemind(content[3] == null ? "" : content[3]);
+                kl_rule_app_filter_map.put(ruleApp.getId(), ruleApp);
+            }
+        }
+    }
+}

+ 49 - 14
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -5,6 +5,7 @@ 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;
@@ -72,7 +73,7 @@ public class CacheFileManager {
         try {
             EncrypDES encrypDES = new EncrypDES();
             //所有词典库 不能用concat_group 大小写不区分
-            String sql = "select l_1.name l_1_name, l_1.type_id type_id, l_2.name l_2_name, l_1.concept_id from kl_library_info l_1\n" +
+            String sql = "select l_1.name l_1_name, l_1.type_id type_id, l_2.name l_2_name, kc.lib_name from kl_library_info l_1\n" +
                     "                    left join kl_library_info l_2 on l_1.concept_id = l_2.concept_id and l_2.is_concept = 1\n" +
                     "left join kl_concept kc on l_1.concept_id = kc.id\n" +
                     "where kc.is_deleted = 'N' ";
@@ -190,11 +191,11 @@ public class CacheFileManager {
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
-            String  r2 ,r3;
+            String r2, r3;
             while (rs.next()) {
                 r2 = rs.getString(1);//疾病名称
                 r3 = rs.getString(2);//疾病类别
-                fw.write(encrypDES.encrytor(r2+ "|" + r3));
+                fw.write(encrypDES.encrytor(r2 + "|" + r3));
                 fw.write("\n");
             }
             fw.close();
@@ -212,7 +213,7 @@ public class CacheFileManager {
                 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(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4));
                 fw.write("\n");
             }
             fw.close();
@@ -257,7 +258,7 @@ public class CacheFileManager {
                 r1 = rs.getString(1);
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
-                fw.write(encrypDES.encrytor(r1+ "|" + r2+ "|" + r3));
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
                 fw.write("\n");
             }
             fw.close();
@@ -330,14 +331,14 @@ public class CacheFileManager {
             fw.close();
 
             //规则过滤信息
-            sql = "SELECT set_name, idx_name, min_operator, min_value, min_unit, max_operator, " +
-                    " max_value, max_unit, remind FROM kl_rule ";
+            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";
             st = conn.createStatement();
             rs = st.executeQuery(sql);
-            fw = new FileWriter(path + "rule_filter.dict");
-            String r6, r7, r8, r9;
+            fw = new FileWriter(path + "bigdata_rule_filter.dict");
+            String r6, r7, r8, r9, r10, r11, r12;
             while (rs.next()) {
-                r1 = rs.getString(1);
+                r1 = String.valueOf(rs.getInt(1));
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r4 = rs.getString(4);
@@ -346,8 +347,42 @@ public class CacheFileManager {
                 r7 = rs.getString(7);
                 r8 = rs.getString(8);
                 r9 = rs.getString(9);
-                fw.write(encrypDES.encrytor(r1+ "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
-                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9));
+                r10 = rs.getString(10);
+                r11 = rs.getString(11);
+                r12 = rs.getString(12);
+                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;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
+                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11
+                        + "|" + r12));
+                fw.write("\n");
+            }
+            fw.close();
+
+            sql = "SELECT id, rule_id, type_id, remind FROM kl_rule_app";
+            st = conn.createStatement();
+            rs = st.executeQuery(sql);
+            fw = new FileWriter(path + "bigdata_rule_app_filter.dict");
+            while (rs.next()) {
+                r1 = String.valueOf(rs.getInt(1));
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                r4 = rs.getString(4);
+                r1 = StringUtils.isEmpty(r1) ? "" : r1;
+                r2 = StringUtils.isEmpty(r2) ? "" : r2;
+                r3 = StringUtils.isEmpty(r3) ? "" : r3;
+                r4 = StringUtils.isEmpty(r4) ? "" : r4;
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4));
                 fw.write("\n");
             }
             fw.close();
@@ -355,14 +390,14 @@ public class CacheFileManager {
             ioe.printStackTrace();
         } catch (SQLException sqle) {
             sqle.printStackTrace();
-        }  catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
         } finally {
             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 r2 = "";
         Map<String, String> libraryMap = new HashMap<>(10);

+ 1 - 1
graph/src/main/java/org/diagbot/graph/util/CacheUtil.java

@@ -1,4 +1,4 @@
-package org.diagbot.graph.util;
+package org.diagbot.common.push.cache;
 
 import org.apache.commons.lang3.StringUtils;
 import org.diagbot.nlp.participle.cfg.Configuration;

+ 4 - 4
common-push/src/main/java/org/diagbot/common/push/filter/ClassifyDiag.java

@@ -2,9 +2,9 @@ package org.diagbot.common.push.filter;
 
 import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.graph.util.CacheUtil;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.cache.CacheUtil;
 
 import java.text.DecimalFormat;
 import java.util.*;
@@ -55,7 +55,7 @@ public class ClassifyDiag {
      * @param graphFeatures 过滤前的诊断结果
      * @return 返回过滤后的诊断结果
      */
-    public List<FeatureRate> filterDiag(ResponseData graphResponseData,List<FeatureRate> graphFeatures){
+    public List<FeatureRate> filterDiag(ResponseData graphResponseData, List<FeatureRate> graphFeatures){
         //根据诊断依据规则过滤掉的诊断列表
         List<String> excludeDiag = graphResponseData.getExcludeDiag();
         //将需要排除的诊断从列表中删除

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

@@ -0,0 +1,83 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by louhr on 2019/8/31.
+ */
+public abstract class Pretreatment {
+    protected NegativeEnum[] nees_time_and_unit = new NegativeEnum[]{NegativeEnum.EVENT_TIME, NegativeEnum.UNIT};
+
+    protected int cursor = 0;
+
+    protected int max_back_search = 3;
+
+    public abstract List<PreResult> analyze(String content) throws java.io.IOException;
+
+    abstract PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index);
+
+    abstract String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index);
+
+    protected List<PreResult> analyzeDefault(String content) throws java.io.IOException{
+        LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
+
+        List<PreResult> preResultList = new ArrayList<>();
+        for (int i = 0; i < lexemes.size(); i++) {
+            Lexeme l = lexemes.get(i);
+            if (NlpUtil.isFeature(l.getProperty(), nees_time_and_unit)) {
+                PreResult result = data2Object(lexemes, l, i, l.getProperty());
+                if (result != null) {
+                    preResultList.add(result);
+                }
+            }
+        }
+        return preResultList;
+    }
+
+    protected PreResult data2Object(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index, String property) {
+        if (index < 2) {
+            return null;
+        }
+        return createPreResult(lexemes, lexeme, index);
+    }
+
+    public PreResult createDefaultPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        double value = findNumberValue(lexemes, lexeme, index);
+        if (value == -1) return null;
+        //继续往前找本体
+        String text = findBodyValue(lexemes, lexeme, index);
+        if (StringUtils.isEmpty(text)) {
+            return null;
+        }
+        PreResult result = new PreResult();
+        result.setValue(String.valueOf(value));
+        result.setUnits(lexeme.getText());
+        result.setDetailName(text);
+        result.setUniqueName(text);
+        return result;
+    }
+
+    protected double findNumberValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        if (index < 1) return -1;
+        cursor = index - 1;
+        Lexeme leftLexeme = lexemes.get(cursor);
+        if ("×".equals(leftLexeme.getText())) {
+            if  (cursor <= 0) return -1;
+            cursor--;
+            leftLexeme = lexemes.get(cursor);
+        }
+        if (NlpUtil.isNumberString(leftLexeme)) {
+            return NlpUtil.numberText2value(leftLexeme);
+        }
+        return -1;
+    }
+}

+ 39 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentDiag.java

@@ -0,0 +1,39 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PretreatmentDiag extends Pretreatment {
+    protected NegativeEnum[] nees_disease = new NegativeEnum[]{NegativeEnum.DISEASE};
+
+    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);
+            if (NlpUtil.isFeature(l.getProperty(), nees_disease)) {
+                PreResult result = new PreResult();
+                result.setUniqueName("诊断--");
+                result.setDetailName("诊断--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.DISEASE));
+                preResults.add(result);
+            }
+        }
+        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;
+    }
+}

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

@@ -0,0 +1,59 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.lang.reflect.Array;
+import java.util.List;
+
+public class PretreatmentLis extends Pretreatment {
+    private String join_symbols = ";:;:";
+
+    public List<PreResult> analyze(String content) throws java.io.IOException{
+        return super.analyzeDefault(content);
+    }
+
+    public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        PreResult result = new PreResult();
+        double value = findNumberValue(lexemes, lexeme, index);
+        if (value == -1) return null;
+        //继续往前找化验明细项
+        if (cursor > 0) cursor--;
+        Lexeme leftLexeme = lexemes.get(cursor);
+        if (join_symbols.contains(leftLexeme.getText())) {
+            if (cursor > 0) {
+                cursor--;
+                leftLexeme = lexemes.get(cursor);
+            } else {
+                return null;
+            }
+        }
+        if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.LIS_NAME})) {
+            result.setDetailName(NlpUtil.concept(leftLexeme, NegativeEnum.LIS_NAME));
+        } else if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.PUB_NAME})) {
+            result.setUniqueName(NlpUtil.concept(leftLexeme, NegativeEnum.PUB_NAME));
+        } else {
+            return null;
+        }
+        //查找化验套餐
+        int position = cursor - 1;
+        while (position > -1) {
+            leftLexeme = lexemes.get(position);
+            if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.LIS_TYPE})) {
+                result.setName(NlpUtil.concept(leftLexeme, NegativeEnum.LIS_TYPE));
+                break;
+            }
+            position--;
+        }
+        result.setValue(String.valueOf(value));
+        result.setUnits(lexeme.getText());
+        return result;
+    }
+
+    public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return null;
+    }
+}

+ 43 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentMakeList.java

@@ -0,0 +1,43 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PretreatmentMakeList extends Pretreatment {
+    protected NegativeEnum[] nees_pacs_name = new NegativeEnum[]{NegativeEnum.PACS_NAME};
+    protected NegativeEnum[] nees_lis_type = new NegativeEnum[]{NegativeEnum.LIS_TYPE};
+
+    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();
+            result.setUniqueName("开单--");
+            result.setDetailName("开单--");
+            if (NlpUtil.isFeature(l.getProperty(), nees_pacs_name)) {
+                result.setValue(NlpUtil.concept(l, NegativeEnum.PACS_NAME));
+                preResults.add(result);
+            } else if (NlpUtil.isFeature(l.getProperty(), nees_lis_type)) {
+                result.setValue(NlpUtil.concept(l, NegativeEnum.LIS_TYPE));
+                preResults.add(result);
+            }
+        }
+        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;
+    }
+}

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

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

+ 45 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentOther.java

@@ -0,0 +1,45 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.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};
+
+    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_operation)) {
+                result.setUniqueName("手术--");
+                result.setDetailName("手术--");
+                result.setValue(NlpUtil.concept(l, NegativeEnum.OPERATION));
+                preResults.add(result);
+            }
+        }
+        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;
+    }
+}

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

@@ -0,0 +1,51 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.List;
+
+public class PretreatmentPacs extends Pretreatment {
+    protected NegativeEnum[] nees_pacs_result = new NegativeEnum[]{NegativeEnum.PACS_RESULT};
+    protected NegativeEnum[] nees_pacs_name = new NegativeEnum[]{NegativeEnum.PACS_NAME};
+    public List<PreResult> analyze(String content) throws java.io.IOException{
+        List<PreResult> preResultList = super.analyzeDefault(content);
+        //pacs除了数值型需要转, 还需要对部分检查结果提取,以便做危机警示
+        LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
+
+        Lexeme leftLexeme;
+        for (int i = 0; i < lexemes.size(); i++) {
+            Lexeme l = lexemes.get(i);
+            if (NlpUtil.isFeature(l.getProperty(), nees_pacs_result) && i > 0) {
+                int c = i - 1;
+                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));
+                        preResultList.add(result);
+                        break;
+                    }
+                    c--;
+                }
+
+            }
+        }
+
+        return preResultList;
+    }
+
+    public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return super.createDefaultPreResult(lexemes, lexeme, index);
+    }
+
+    public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return null;
+    }
+}

+ 44 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentSymptom.java

@@ -0,0 +1,44 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.List;
+
+public class PretreatmentSymptom extends Pretreatment {
+    protected NegativeEnum[] nees_symptom = new NegativeEnum[]{NegativeEnum.SYMPTOM};
+
+    public List<PreResult> analyze(String content) throws java.io.IOException{
+        List<PreResult> preResults = super.analyzeDefault(content);
+
+        LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
+        for (int i = 0; i < lexemes.size(); i++) {
+            Lexeme l = lexemes.get(i);
+            PreResult result = new PreResult();
+            result.setUniqueName("症状--");
+            result.setDetailName("症状--");
+            if (NlpUtil.isFeature(l.getProperty(), nees_symptom)) {
+                result.setValue(NlpUtil.concept(l, NegativeEnum.SYMPTOM));
+                preResults.add(result);
+            }
+        }
+        return preResults;
+    }
+
+    public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return super.createDefaultPreResult(lexemes, lexeme, index);
+    }
+
+    public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        if (cursor > 0) cursor--;
+        Lexeme leftLexeme = lexemes.get(cursor);
+        if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.SYMPTOM})) {
+            return NlpUtil.concept(leftLexeme, NegativeEnum.SYMPTOM);
+        }
+        return null;
+    }
+}

+ 57 - 0
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentVital.java

@@ -0,0 +1,57 @@
+package org.diagbot.common.push.filter.pretreat;
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.nlp.participle.ParticipleUtil;
+import org.diagbot.nlp.participle.word.Lexeme;
+import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
+
+import java.util.List;
+
+public class PretreatmentVital extends Pretreatment {
+    protected NegativeEnum[] nees_vital_result = new NegativeEnum[]{NegativeEnum.VITAL_RESULT};
+    protected NegativeEnum[] nees_vital_index = new NegativeEnum[]{NegativeEnum.VITAL_INDEX};
+
+    public List<PreResult> analyze(String content) throws java.io.IOException{
+        List<PreResult> preResults = super.analyzeDefault(content);
+        LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
+        for (int i = 0; i < lexemes.size(); i++) {
+            Lexeme l = lexemes.get(i);
+            if (NlpUtil.isFeature(l.getProperty(), nees_vital_result)) {
+                PreResult result = new PreResult();
+                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.setValue(NlpUtil.concept(l, NegativeEnum.VITAL_INDEX));
+                preResults.add(result);
+            }
+        }
+        return preResults;
+    }
+
+    public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        return super.createDefaultPreResult(lexemes, lexeme, index);
+    }
+
+
+    public String findBodyValue(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
+        if (cursor > 0) cursor--;
+        int search_len = 0;
+        Lexeme leftLexeme = null;
+        while (search_len < max_back_search && cursor > -1) {
+            leftLexeme = lexemes.get(cursor);
+            if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.VITAL_INDEX})) {
+                return NlpUtil.concept(leftLexeme, NegativeEnum.VITAL_INDEX);
+            }
+            search_len++;
+            cursor--;
+        }
+        return null;
+    }
+}

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

@@ -0,0 +1,181 @@
+package org.diagbot.common.push.filter.rule;
+
+
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.Rule;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
+import org.diagbot.common.push.filter.pretreat.*;
+import org.diagbot.pub.Constants;
+import org.springframework.util.StringUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class PretreatmentRule {
+    public void rule(SearchData searchData) throws java.io.IOException {
+        //患者基本信息 性别 年龄
+        if (!StringUtils.isEmpty(searchData.getNormal())) {
+            searchData.setNormal(add2PreResultList(new PretreatmentNormal(), searchData.getNormal(), "normal", searchData));
+        }
+        //症状数据
+        if (!StringUtils.isEmpty(searchData.getSymptom())) {
+            searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom", searchData));
+        }
+        //体征数据
+        if (!StringUtils.isEmpty(searchData.getVital())) {
+            searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), "vital", searchData));
+        }
+        //lis结构化信息
+        if (searchData.getLisArr() != null && searchData.getLisArr().size() > 0) {
+            searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis", searchData));
+        } else if (!StringUtils.isEmpty(searchData.getLis())) {
+            searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis", searchData));
+        }
+        //pacs数据
+        if (!StringUtils.isEmpty(searchData.getPacs())) {
+            searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs", searchData));
+        }
+        //其他史
+        if (!StringUtils.isEmpty(searchData.getOther())) {
+            searchData.setOther(add2PreResultList(new PretreatmentOther(), searchData.getOther(), "other", searchData));
+        }
+        //开具诊断
+        if (!StringUtils.isEmpty(searchData.getDiag())) {
+            add2PreResultList(new PretreatmentDiag(), searchData.getDiag(), "diag", searchData);
+        }
+        //开具辅检化验
+        if (!StringUtils.isEmpty(searchData.getLisOrder())) {
+            add2PreResultList(new PretreatmentMakeList(), searchData.getLisOrder(), "lisOrder", searchData);
+        }
+        //开具辅检化验
+        if (!StringUtils.isEmpty(searchData.getPacsOrder())) {
+            add2PreResultList(new PretreatmentMakeList(), searchData.getPacsOrder(), "pacsOrder", searchData);
+        }
+    }
+
+    private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType, SearchData searchData) throws java.io.IOException {
+        List<PreResult> preResultList = pretreatment.analyze(content);
+        return add2PreResultList(preResultList, content, ruleType, 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 {
+        Map<String, List<Rule>> kl_rule_filter_map = ApplicationCacheUtil.getKl_rule_filter_map();
+        //符合条件的规则
+        Map<String, List<Rule>> accord_rule_map = searchData.getRules();
+        List<Rule> accord_rules = null;
+        if (preResultList != null) {
+            for (PreResult result : preResultList) {
+                //规则库中匹配
+                if (kl_rule_filter_map.get(result.getUniqueName()) != null) {
+                    List<Rule> rules = kl_rule_filter_map.get(result.getUniqueName());
+                    if (rules == null) {
+                        continue;
+                    }
+                    for (Rule rule : rules) {
+                        boolean isSuit = suitRule(result, rule, content);
+                        if (isSuit) {
+                            rule.setOriginText(result.getUniqueName() + ":" + result.getValue() + result.getUnits());
+                            if (accord_rule_map.get(ruleType) == null) {
+                                accord_rules = new ArrayList<>();
+                            } else {
+                                accord_rules = accord_rule_map.get(ruleType);
+                            }
+                            accord_rules.add(rule);
+                            accord_rule_map.put(ruleType, accord_rules);
+                            searchData.setRules(accord_rule_map);
+
+                            content = content + rule.getRemind() == null ? "" : rule.getRemind();
+                        }
+                    }
+                }
+            }
+
+        }
+        return content;
+    }
+
+    private boolean suitRule(PreResult result, Rule rule, String content) {
+        //标准值最优先匹配
+        if (org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getEq_value())) {
+            if (compareEqual(result.getValue(), rule.getEq_value())) {
+                return true;
+            } else {
+                return false;
+            }
+        } else if (org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMax_value()) && org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMin_value())) {
+            if (compareMin(result.getValue(), rule.getMax_value(), rule.getMax_operator()) //比最大值小
+                    && compareMax(result.getValue(), rule.getMin_value(), rule.getMin_operator()) //比最小值大
+                    && result.getUnits().equals(rule.getMin_unit())
+                    && result.getUnits().equals(rule.getMax_unit())) {
+                return true;
+            } else {
+                return false;
+            }
+        } else if (org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMin_value())) {
+            if (compareMin(result.getValue(), rule.getMin_value(), rule.getMin_operator())   //比最小值小
+                    && result.getUnits().equals(rule.getMin_unit())) {
+                return true;
+            } else {
+                return false;
+            }
+        } else if(org.apache.commons.lang3.StringUtils.isNotEmpty(rule.getMax_value()))  {
+            if (compareMax(result.getValue(), rule.getMax_value(), rule.getMax_operator())   //比最大值大
+                    && result.getUnits().equals(rule.getMax_unit())) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        return false;
+    }
+
+
+    private boolean compareEqual(String c1, String c2) {
+        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)
+                && c1.equals(c2)) {
+            return true;
+        }
+        return false;
+    }
+
+    private boolean compareMin(String c1, String c2, String operator) {
+        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2) && !StringUtils.isEmpty(operator)) {
+            try {
+                if (operator.contains("=")) {
+                    return Double.valueOf(c1) <= Double.valueOf(c2);
+                } else {
+                    return Double.valueOf(c1) < Double.valueOf(c2);
+                }
+            } catch (Exception e) {
+            }
+        }
+        return false;
+    }
+
+    private boolean compareMax(String c1, String c2, String operator) {
+        if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2) && !StringUtils.isEmpty(operator)) {
+            try {
+                if (operator.contains("=")) {
+                    return Double.valueOf(c1) >= Double.valueOf(c2);
+                } else {
+                    return Double.valueOf(c1) > Double.valueOf(c2);
+                }
+            } catch (Exception e) {
+            }
+        }
+        return false;
+    }
+
+}

+ 2 - 2
bigdata-web/src/main/java/org/diagbot/bigdata/util/BigDataConstants.java

@@ -1,4 +1,4 @@
-package org.diagbot.bigdata.util;
+package org.diagbot.common.push.util;
 
 /**
  * @ClassName org.diagbot.bigdata.util.BigDataConstants
@@ -7,7 +7,7 @@ package org.diagbot.bigdata.util;
  * @Date 2019/1/16/016 14:06
  * @Version 1.0
  **/
-public class BigDataConstants {
+public class PushConstants {
     public final static String resource_type_i = "I";       //住院
     public final static String resource_type_o = "O";       //门诊
     public final static String resource_type_e = "E";       //急诊

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

@@ -0,0 +1,266 @@
+package org.diagbot.common.push.work;
+
+import org.apache.commons.lang3.StringUtils;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.util.PushConstants;
+import org.diagbot.nlp.feature.FeatureAnalyze;
+import org.diagbot.nlp.feature.FeatureType;
+import org.diagbot.nlp.util.Constants;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName org.diagbot.bigdata.work.ParamsDataProxy
+ * @Description TODO
+ * @Author fyeman
+ * @Date 2019/1/16/016 14:04
+ * @Version 1.0
+ **/
+public class ParamsDataProxy {
+    Logger logger = LoggerFactory.getLogger(ParamsDataProxy.class);
+    //标准词只处理的词性
+    public static NegativeEnum[] negativeEnums = new NegativeEnum[] { NegativeEnum.VITAL_INDEX, NegativeEnum.SYMPTOM
+            , NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME, NegativeEnum.UNIT, NegativeEnum.DIAG_STAND
+            , NegativeEnum.OTHER};
+    //标准词处理的三元组
+    public static NegativeEnum[][] negativeEnumTriple = {
+            { NegativeEnum.VITAL_INDEX, NegativeEnum.DIGITS, NegativeEnum.UNIT },
+            { NegativeEnum.VITAL_INDEX, NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME },
+            { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS, NegativeEnum.UNIT },
+            { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME },
+            { NegativeEnum.DIAG_STAND, NegativeEnum.DIGITS, NegativeEnum.UNIT },
+            { NegativeEnum.DIAG_STAND, NegativeEnum.DIGITS, NegativeEnum.EVENT_TIME },
+            { NegativeEnum.DIAG_STAND, NegativeEnum.DIGITS, NegativeEnum.OTHER }
+    };
+    //标准词处理的二元组
+    public static NegativeEnum[][] negativeEnumTwoTuple = {
+            { NegativeEnum.VITAL_INDEX, NegativeEnum.DIGITS },
+            { NegativeEnum.SYMPTOM, NegativeEnum.DIGITS }
+    };
+
+    public void createNormalInfo(SearchData searchData) throws Exception {
+        //计算年龄区间
+        if (searchData.getAge() > 0) {
+            searchData.setAge_start(searchData.getAge() - 5);
+            searchData.setAge_end(searchData.getAge() + 5);
+
+            searchData.setNormal("年龄" + searchData.getAge() + "岁");
+        }
+        //修改性别代码
+        if (!StringUtils.isEmpty(searchData.getSex())) {
+            if ("M".equals(searchData.getSex())) {
+                searchData.setSex("1");
+                searchData.setNormal(searchData.getNormal() + "性别男性");
+            } else if ("F".equals(searchData.getSex())) {
+                searchData.setSex("2");
+                searchData.setNormal(searchData.getNormal() + "性别女性");
+            } else {
+                searchData.setSex("3");
+                searchData.setNormal(searchData.getNormal() + "性别其他");
+            }
+        } else {
+            searchData.setSex("3");
+        }
+    }
+
+    public void createSearchData(SearchData searchData) throws Exception {
+        //消除空格
+        if (searchData.getSymptom() != null) {
+            searchData.setSymptom(searchData.getSymptom().trim());
+        }
+        if (searchData.getDiag() != null) {
+            searchData.setDiag(searchData.getDiag().trim());
+        }
+        //默认查询门诊数据
+        if (StringUtils.isEmpty(searchData.getResourceType())) {
+            searchData.setResourceType(PushConstants.resource_type_o);
+        }
+        if (StringUtils.isNotEmpty(searchData.getSymptom())) {
+            searchData.setSymptom(searchData.getSymptom().trim());
+        }
+        //一次推送多个类别信息
+        String[] featureTypes = searchData.getFeatureType().split(",");
+        //featureType统一转换
+        String[] convertFeatureTypes = new String[featureTypes.length];
+        for (int i = 0; i < featureTypes.length; i++) {
+            convertFeatureTypes[i] = convertFeatureType(searchData.getSysCode(), featureTypes[i]);
+        }
+        searchData.setFeatureType(StringUtils.join(convertFeatureTypes, ","));
+        searchData.setFeatureTypes(convertFeatureTypes);
+
+        //获取入参中的特征信息
+        FeatureAnalyze fa = new FeatureAnalyze();
+        List<Map<String, Object>> featuresList = new ArrayList<>();
+        if (!StringUtils.isEmpty(searchData.getSymptom())) {
+            //提取现病史
+            featuresList = fa.start(searchData.getSymptom(), FeatureType.FEATURE);
+            paramFeatureInit(searchData, featuresList);
+            //提取时间信息
+            featuresList = fa.start(searchData.getSymptom(), FeatureType.TIME);
+            paramFeatureInit(searchData, featuresList);
+        }
+        if (!StringUtils.isEmpty(searchData.getVital())) {
+            //提取体征
+            featuresList = fa.start(searchData.getVital(), FeatureType.FEATURE);
+            paramFeatureInit(searchData, featuresList);
+        }
+        if (!StringUtils.isEmpty(searchData.getPast())) {
+            //提取既往史
+            featuresList = fa.start(searchData.getPast(), FeatureType.FEATURE);
+            paramFeatureInit(searchData, featuresList);
+        }
+        if (!StringUtils.isEmpty(searchData.getOther()) || !StringUtils.isEmpty(searchData.getIndications())) {
+            //提取其他史等
+            featuresList = fa.start((searchData.getOther() == null ? "" : searchData.getOther()) + (searchData.getIndications() == null ? "" : searchData.getIndications()), FeatureType.FEATURE);
+            paramFeatureInit(searchData, featuresList);
+        }
+        if (!StringUtils.isEmpty(searchData.getPacs())) {
+            featuresList = fa.start(searchData.getPacs(), FeatureType.PACS);
+            paramFeatureInit(searchData, featuresList);
+        }
+        if (!StringUtils.isEmpty(searchData.getLis())) {
+            featuresList = fa.start(searchData.getLis(), FeatureType.LIS);
+            paramFeatureInit(searchData, featuresList);
+        }
+        // 清洗特征词,去除词性不匹配的词
+        searchData = cleanFeature(featuresList, fa, searchData);
+        if (!StringUtils.isEmpty(searchData.getOther())) {
+            //如果既往史中诊断信息,需要提取这个特征
+            featuresList = fa.start(searchData.getOther(), FeatureType.DIAG);
+            paramFeatureInit(searchData, featuresList);
+        }
+        if (!StringUtils.isEmpty(searchData.getDiag()) && StringUtils.isEmpty(searchData.getSymptom())) {
+            featuresList = fa.start(searchData.getDiag(), FeatureType.DIAG);
+            paramFeatureInit(searchData, featuresList);
+        }
+    }
+
+    /**
+     * 外部系统featureType需要转化为大数据定义的featureType
+     *
+     * @param sysCode
+     * @param featureType
+     * @return
+     */
+    private String convertFeatureType(String sysCode, String featureType) {
+        if (StringUtils.isEmpty(sysCode) || sysCode.equals("1")) {
+            if ("1".equals(featureType)) {
+                return PushConstants.feature_type_symptom;
+            }
+            if ("7".equals(featureType)) {
+                return PushConstants.feature_type_diag;
+            }
+            if ("4".equals(featureType)) {
+                return PushConstants.feature_type_vital;
+            }
+            if ("5".equals(featureType)) {
+                return PushConstants.feature_type_lis;
+            }
+            if ("6".equals(featureType)) {
+                return PushConstants.feature_type_pacs;
+            }
+            if ("3".equals(featureType)) {
+                return PushConstants.feature_type_history;
+            }
+            if ("8".equals(featureType)) {
+                return PushConstants.feature_type_treat;
+            }
+            if ("22".equals(featureType)) {
+                return PushConstants.feature_type_labelpush;
+            }
+            if ("11".equals(featureType)) {
+                return PushConstants.feature_type_manju;
+            }
+            if ("42".equals(featureType)) {
+                return PushConstants.feature_type_vital_index;
+            }
+            return null;
+        }
+        return featureType;
+    }
+
+    private SearchData cleanFeature(List<Map<String, Object>> featuresList, FeatureAnalyze fa,
+                                    SearchData searchData) {
+        // 在输入的辅检文本中,只提取辅检信息
+        String[] PACS_Feature = { Constants.word_property_PACS,
+                Constants.word_property_PACS_Detail, Constants.word_property_PACS_Result };
+        searchData = removeFeature(searchData.getLis(), fa, searchData, PACS_Feature, FeatureType.PACS);
+
+        // 在输入的化验文本中,只提取化验信息
+        String[] LIS_Feature = { Constants.word_property_LIS,
+                Constants.word_property_LIS_Detail, Constants.word_property_LIS_Result };
+        searchData = removeFeature(searchData.getPacs(), fa, searchData, LIS_Feature, FeatureType.LIS);
+
+        return searchData;
+    }
+
+    private SearchData removeFeature(String text, FeatureAnalyze fa,
+                                     SearchData searchData, String[] properties, FeatureType featureType) {
+        String name = "";
+        Boolean related = false;
+
+        try {
+            List<Map<String, Object>> featureList = fa.start(text, featureType);
+            if (featureList != null) {
+                for (Map<String, Object> item : featureList) {
+                    name = item.get("feature_name").toString();
+                    String[] property = item.get("property").toString().split(",");
+                    for (String prop : property) {
+                        if (Arrays.asList(properties).contains(prop)) {
+                            //                            related = true;
+                            searchData.getInputs().remove(name);
+                            break;
+                        }
+                    }
+                }
+            }
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        } finally {
+            return searchData;
+        }
+    }
+
+    /**
+     * 推送模型入参
+     *
+     * @param searchData
+     * @throws Exception
+     */
+    private void paramFeatureInit(SearchData searchData, List<Map<String, Object>> featuresList) throws Exception {
+        if (featuresList != null && featuresList.size() > 0) {
+            Map<String, Object> featureMap = null;
+            for (int i = 0; i < featuresList.size(); i++) {
+                featureMap = featuresList.get(i);
+                Map<String, String> map = new HashMap<>();
+                for (Map.Entry<String, Object> entry : featureMap.entrySet()) {
+                    map.put(entry.getKey(), String.valueOf(entry.getValue()));
+                }
+                map.put("featureType", String.valueOf(featureMap.get("feature_type")));
+                map.put("featureName", String.valueOf(featureMap.get("feature_name")));
+                map.put("property", String.valueOf(featureMap.get("property")));
+                map.put("concept", String.valueOf(featureMap.get("concept")));
+                if (Constants.default_negative.equals(featureMap.get("negative"))) {
+                    if (map.get("featureType").equals(Constants.feature_type_time)) {
+                        searchData.getInputs().put("时间", map);
+                    } else {
+                        if (searchData.getInputs().get(map.get("feature_name")) == null) {
+                            if (i < 5) {
+                                searchData.getInputs().put(map.get("feature_name"), map);
+                            }
+                            searchData.getGraphInputs().put(map.get("feature_name"), map);
+                        }
+                    }
+                } else {
+                    searchData.getFilters().put(map.get("feature_name"), map);
+                }
+            }
+        }
+    }
+}

+ 0 - 50
common-service/src/main/java/org/diagbot/common/javabean/Rule.java

@@ -1,50 +0,0 @@
-package org.diagbot.common.javabean;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 触发规则
- * @author Mark Huang
- * @since 27/08/2019
- */
-@Getter
-@Setter
-public class Rule {
-    // 套餐名称
-    private String set_name;
-    // 指标名称
-    private String idx_name;
-    // 最小值操作符
-    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 remind;
-
-    public Rule() { }
-
-    public Rule(String[] elements) {
-//        Rule rule = new Rule();
-
-        if (elements.length == 9) {
-            this.set_name = elements[0];
-            this.idx_name = elements[1];
-            this.min_operator = elements[2];
-            this.min_value = elements[3];
-            this.min_unit = elements[4];
-            this.max_operator = elements[5];
-            this.max_value = elements[6];
-            this.max_unit = elements[7];
-            this.remind = elements[8];
-        }
-    }
-}

+ 5 - 0
graph-web/pom.xml

@@ -35,6 +35,11 @@
 			<artifactId>common-service</artifactId>
 			<version>1.0.0</version>
 		</dependency>
+		<dependency>
+			<groupId>org.diagbot</groupId>
+			<artifactId>common-push</artifactId>
+			<version>1.0.0</version>
+		</dependency>
 		<dependency>
 			<groupId>org.diagbot</groupId>
 			<artifactId>nlp</artifactId>

+ 2 - 10
graph-web/src/main/java/org/diagbot/graphWeb/controller/GraphController.java

@@ -1,18 +1,13 @@
 package org.diagbot.graphWeb.controller;
 
-import com.alibaba.fastjson.JSONObject;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
 import org.diagbot.graph.javabean.GdbResponse;
-import org.diagbot.graph.jdbc.DriverManager;
-import org.diagbot.graph.jdbc.Neo4jAPI;
-import org.diagbot.graphWeb.dao.BackResponse;
 import org.diagbot.graphWeb.work.DiseaseCalculate;
 import org.diagbot.graphWeb.work.GraphCalculate;
 import org.diagbot.graphWeb.work.HighRiskCalculate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
 import org.diagbot.graphWeb.work.LisPacsCalculate;
 import org.diagbot.pub.api.Response;
-import org.diagbot.pub.utils.PropertiesUtil;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -20,9 +15,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Map;
-
-import static org.diagbot.graph.jdbc.DriverManager.propertiesUtil;
 
 @Controller
 @RequestMapping("/graph")

+ 4 - 8
graph-web/src/main/java/org/diagbot/graphWeb/work/DiseaseCalculate.java

@@ -1,18 +1,14 @@
 package org.diagbot.graphWeb.work;
 
-import com.alibaba.fastjson.JSONObject;
-import org.diagbot.common.javabean.*;
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
-import org.diagbot.nlp.relation.module.Lis;
-import org.diagbot.pub.api.Response;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.bean.neo4j.*;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 
 /**

+ 3 - 4
graph-web/src/main/java/org/diagbot/graphWeb/work/FilterSortDiag.java

@@ -1,10 +1,9 @@
 package org.diagbot.graphWeb.work;
 
 import org.apache.commons.lang3.StringUtils;
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.graph.jdbc.Neo4jAPI;
-import org.diagbot.graph.util.CacheUtil;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.cache.CacheUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

+ 52 - 16
graph-web/src/main/java/org/diagbot/graphWeb/work/GraphCalculate.java

@@ -4,21 +4,21 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
-import org.diagbot.common.javabean.MangementEvaluation;
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.javabean.Filnlly;
-import org.diagbot.common.work.LisDetail;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.PreResult;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.bean.neo4j.Filnlly;
+import org.diagbot.common.push.bean.neo4j.MangementEvaluation;
+import org.diagbot.common.push.bean.neo4j.MedicalIndication;
+import org.diagbot.common.push.bean.neo4j.MedicalIndicationDetail;
+import org.diagbot.common.push.cache.CacheUtil;
 import org.diagbot.graph.jdbc.DriverManager;
 import org.diagbot.graph.jdbc.Neo4jAPI;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 
-import org.diagbot.common.javabean.MedicalIndication;
-import org.diagbot.common.javabean.MedicalIndicationDetail;
-import org.diagbot.graph.util.CacheUtil;
 import org.diagbot.graphWeb.util.MapValueComparator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,8 +47,7 @@ public class GraphCalculate {
         int age = searchData.getAge();
         String sex = searchData.getSex();
         logger.info("前端传来的年龄为 :"+age+" 前端传来的性别为 :"+sex);
-        //获取缓存
-//        Map<String, String> lexionCache = CacheUtil.getLexionCache();
+
         Map<String, Map<String, String>> sexAgeCache = CacheUtil.getSexAgeCache();
         Map<String, Map<String, String>> inputs = searchData.getGraphInputs();
         Set<String> ss = new HashSet<>();
@@ -117,14 +116,14 @@ public class GraphCalculate {
             logger.info("diseaseSet :" + diseaseSet);
         }
         Integer diseaseType = searchData.getDisType();
-        List<LisDetail> lisArr = searchData.getLisArr();
+        List<PreResult> lisArr = searchData.getLisArr();
         Set<String> lisSet = new HashSet<>();
         Map<String,Double> lis_Result = new HashMap<>();
         if(lisArr != null && lisArr.size() > 0){
-            for (LisDetail lis:lisArr) {
+            for (PreResult lis:lisArr) {
                 String detailName = lis.getUniqueName();
                 logger.info("公表名为  :"+detailName);
-                Double value = lis.getValue();
+                Double value = Double.valueOf(lis.getValue());
                 lis_Result.put(detailName,value);
                 lisSet.add(detailName);
             }
@@ -152,16 +151,20 @@ public class GraphCalculate {
                 responseData.setManagementEvaluation(mangementEvaluation1);
             }
         }
-
+        String pacsOrder = searchData.getPacsOrder();
         //指标推送
         if (featureTypeList.contains("22") ) {
+            List<MedicalIndication> pacsMi = getPacsMi(pacsOrder, inputList,webDiag);
             //查找指标
             Set<String> indSet = neo4jAPI.getInd((String[]) inputList.toArray(new String[inputList.size()]));
             logger.info("featureTypeList 包含22,走指标推送!!!,图谱推出的指标为:" + indSet);
             if(indSet.contains("肾功能不全")){
                 List<MedicalIndication> idn = neo4jAPI.getIdn(indSet, age, sex);
-                responseData.setMedicalIndications(idn);
+                pacsMi.addAll(idn);
+                responseData.setMedicalIndications(pacsMi);
             }
+            responseData.setMedicalIndications(pacsMi);
+
         }
 
         //诊断推送
@@ -171,6 +174,39 @@ public class GraphCalculate {
         System.out.println("Total takes: " + (System.currentTimeMillis()-starttime)/1000d + 's');
         return responseData;
     }
+    public List<MedicalIndication> getPacsMi(String pacsOrder,List<String> inputList,String webDiag){
+        if(StringUtils.isNotEmpty(webDiag)){
+            String[] webDiagsplits = webDiag.split(",|,|、|;|:|;");
+            for (String wd:webDiagsplits
+                 ) {
+                inputList.add(wd);
+            }
+        }
+
+        List<MedicalIndication> pacsMi = new ArrayList<>();
+        Map<String, String> newInd = neo4jAPI.getNewInd((String[]) inputList.toArray(new String[inputList.size()]));
+        if(StringUtils.isNotEmpty(pacsOrder)){
+            String[] pacsOrders = pacsOrder.split(",|,");
+            for (String pacs:pacsOrders) {
+                if(newInd.containsKey(pacs)){
+                    String causes = newInd.get(pacs);
+                    MedicalIndication m = new MedicalIndication();
+                    List<MedicalIndicationDetail> mds = new ArrayList<>();
+                    MedicalIndicationDetail medicalIndicationDetail = new MedicalIndicationDetail();
+                    medicalIndicationDetail.setType(4);
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("name", causes);
+                    jsonObject.put("controlType",2);
+                    medicalIndicationDetail.setContent(jsonObject);
+                    mds.add(medicalIndicationDetail);
+                    m.setName("不建议做:"+pacs);
+                    m.setDetails(mds);
+                    pacsMi.add(m);
+                }
+            }
+        }
+        return pacsMi;
+    }
 //    诊断过滤
     public void filterDis(List<FeatureRate> graphFeatureRates,String sex,Integer age) throws Exception {
         if(neo4jAPI == null){

+ 1 - 5
graph-web/src/main/java/org/diagbot/graphWeb/work/HighRiskCalculate.java

@@ -1,16 +1,12 @@
 package org.diagbot.graphWeb.work;
 
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.SearchData;
 import org.diagbot.graph.javabean.GdbResponse;
-import org.diagbot.graph.jdbc.DriverManager;
-import org.diagbot.graph.jdbc.Neo4jAPI;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
-import org.neo4j.driver.v1.Driver;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class HighRiskCalculate {

+ 3 - 3
graph-web/src/main/java/org/diagbot/graphWeb/work/LisPacsCalculate.java

@@ -1,8 +1,8 @@
 package org.diagbot.graphWeb.work;
 
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;

+ 0 - 84
graph-web/src/main/java/org/diagbot/graphWeb/work/ParamsDataProxy.java

@@ -1,84 +0,0 @@
-package org.diagbot.graphWeb.work;
-
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.diagbot.common.work.SearchData;
-import org.diagbot.nlp.feature.FeatureAnalyze;
-import org.diagbot.nlp.feature.FeatureType;
-import org.diagbot.nlp.util.Constants;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.*;
-
-public class ParamsDataProxy {
-    public void createSearchData(HttpServletRequest request, SearchData searchData)throws Exception {
-        //消除空格
-        if (searchData.getSymptom() != null) {
-            searchData.setSymptom(searchData.getSymptom().trim());
-        }
-        if (searchData.getDiag() != null) {
-            searchData.setDiag(searchData.getDiag().trim());
-        }
-        //计算年龄区间
-        if (searchData.getAge() > 0) {
-            searchData.setAge_start(searchData.getAge() - 5);
-            searchData.setAge_end(searchData.getAge() + 5);
-        }
-        //默认查询门诊数据
-//        if (org.springframework.util.StringUtils.isEmpty(searchData.getResourceType())) {
-//            searchData.setResourceType(BigDataConstants.resource_type_o);
-//        }
-        //所有信息参与推送
-        searchData.setSymptom(searchData.getSymptom() + searchData.getVital()
-                + searchData.getLis() + searchData.getPacs() + searchData.getPast() + searchData.getOther() + searchData.getIndications());
-        searchData.setSymptom(searchData.getSymptom().trim());
-        //一次推送多个类别信息
-        String[] featureTypes = searchData.getFeatureType().split(",");
-        searchData.setFeatureTypes(featureTypes);
-
-        //获取入参中的特征信息
-        FeatureAnalyze fa = new FeatureAnalyze();
-
-        if (!org.springframework.util.StringUtils.isEmpty(searchData.getSymptom())) {
-            List<Map<String, Object>> featuresList = fa.start(searchData.getSymptom(), FeatureType.FEATURE);
-            paramFeatureInit(searchData, featuresList);
-
-            //如果既往史中诊断信息,需要提取这个特征
-            featuresList = fa.start(searchData.getOther(), FeatureType.DIAG);
-            paramFeatureInit(searchData, featuresList);
-        }
-
-        if (!org.springframework.util.StringUtils.isEmpty(searchData.getDiag()) && org.springframework.util.StringUtils.isEmpty(searchData.getSymptom())) {
-            List<Map<String, Object>> featuresList = fa.start(searchData.getDiag(), FeatureType.DIAG);
-            paramFeatureInit(searchData, featuresList);
-        }
-
-    }
-
-    /**
-     * 推送模型入参
-     *
-     * @param searchData
-     * @throws Exception
-     */
-    private void paramFeatureInit(SearchData searchData, List<Map<String, Object>> featuresList) throws Exception {
-        if (featuresList != null && featuresList.size() > 0) {
-//            BeanUtils.setProperty(searchData, property_list, featuresList);
-            Map<String, Object> featureMap = null;
-            for (int i = 0; i < featuresList.size(); i++) {
-                featureMap = featuresList.get(i);
-                Map<String, String> map = new HashMap<>();
-                for (Map.Entry<String, Object> entry : featureMap.entrySet()) {
-                    map.put(entry.getKey(), String.valueOf(entry.getValue()));
-                }
-                map.put("featureType", String.valueOf(featureMap.get("feature_type")));
-                map.put("featureName", String.valueOf(featureMap.get("feature_name")));
-                if (Constants.default_negative.equals(featureMap.get("negative"))) {
-                    searchData.getInputs().put(map.get("feature_name"), map);
-                } else {
-                    searchData.getFilters().put(map.get("feature_name"), map);
-                }
-            }
-        }
-    }
-}

+ 5 - 1
graph/pom.xml

@@ -27,7 +27,11 @@
             <artifactId>common-service</artifactId>
             <version>1.0.0</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>common-push</artifactId>
+            <version>1.0.0</version>
+        </dependency>
         <dependency>
             <groupId>org.diagbot</groupId>
             <artifactId>nlp</artifactId>

+ 50 - 6
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -4,12 +4,9 @@ import com.alibaba.druid.support.json.JSONUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import io.netty.handler.codec.json.JsonObjectDecoder;
-import org.assertj.core.util.Lists;
-import org.diagbot.common.javabean.*;
-import org.diagbot.common.work.*;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.neo4j.*;
 import org.diagbot.pub.utils.PropertiesUtil;
-import org.neo4j.driver.internal.value.NodeValue;
 import org.neo4j.driver.v1.*;
 import org.neo4j.driver.v1.types.Node;
 import org.neo4j.driver.v1.types.Path;
@@ -1146,7 +1143,54 @@ public class Neo4jAPI {
         }
     }
 
-
+    /**
+     * 指标推送,检查预警
+     */
+    public Map<String,String> getNewInd(String[] keys) {
+        //查找指标推送
+        Map<String ,String> indMap = new HashMap<>();
+        List<String> fildList = new ArrayList<>();
+        for (String fild : keys) {
+            fildList.add("\"" + fild.trim() + "\"");
+        }
+        logger.info("根据 " + fildList + " 这些词推送指标!!!");
+        Session session = null;
+        StatementResult result = null;
+        String query = "";
+        try {
+            session = driver.session(AccessMode.WRITE);
+            //第一步查询输入的词所在number
+            query = "match(t:Temporary)-[r:属于]->(n:NewCondition)-[r1:诊断依据]->(n1:NewCondition)-[r2:拟诊]->(n2:NewIndicators) \n" +
+                    "where t.name in "+fildList+" return n2.name as name";
+            System.out.println(query);
+            result = session.run(query);
+            while (result.hasNext()) {
+                Record record = result.next();
+                String newIndName = record.get("name").toString();
+                StringBuffer s = new StringBuffer();
+                query = "match(n2:NewIndicators)-[r:表现]->(t:Temporary) where n2.name="+newIndName+" return collect(t.name) as names";
+                StatementResult sr = session.run(query);
+                while (sr.hasNext()){
+                    Record next = sr.next();
+                    List<Object> names = next.get("names").asList();
+                    if(names.size()>0){
+                        for (Object o:names) {
+
+                            if(fildList.indexOf("\""+o.toString()+"\"") >= 0){
+                                s.append(o.toString().replace("\"", ""));
+                            }
+                        }
+                    }
+                }
+                indMap.put(newIndName.replace("\"", ""),s.toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            CloseSession(session);
+            return indMap;
+        }
+    }
     /**
      * 多疾病下治疗方案
      *

+ 2 - 2
graph/src/main/resources/bolt.properties

@@ -5,7 +5,7 @@ pass_235 = diagbot@20180822
 
 # neo4j bolt credentials
 #\u7EBF\u4E0A\u4F7F\u7528
-bolt.uri=bolt://192.168.2.232
+bolt.uri=bolt://192.168.2.234
 bolt.user=neo4j
 bolt.passwd=root
 
@@ -87,7 +87,7 @@ searchDifferentialDiagnose=match(d:Disease)-[r:\u9274\u522B\u8BCA\u65AD]->(h) wh
 searchEmergency=match(d:Disease) where d.name in disList return d.name as emDis,d.emergency as em
 
 #\u67E5\u627E\u6307\u6807\u7684\u8BED\u53E5
-searchIndication=match (n:Condition)-[r:\u786E\u8BCA|:\u62DF\u8BCA]->(m:Indicators)\n \
+    searchIndication=match (n:Condition)-[r:\u786E\u8BCA|:\u62DF\u8BCA]->(m:Indicators)\n \
 where n.name in fildList\n \
 with distinct m,r\n \
 return m.name as name

+ 2 - 2
graphdb/src/main/resources/application.yml

@@ -6,14 +6,14 @@ spring:
     active: local
   data:
     neo4j:
-      uri: bolt://192.168.2.232:7687
+      uri: bolt://192.168.2.234:7687
       username: neo4j
       password: root
 
 # 驱动配置信息
   datasource:
     driver-class-name: org.neo4j.jdbc.Driver
-    url: jdbc:neo4j:http://192.168.2.232:7474
+    url: jdbc:neo4j:http://192.168.2.234:7474
     username: neo4j
     password: root
     #定义初始连接数

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

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

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

@@ -2,7 +2,7 @@ package org.diagbot.nlp.util;
 
 import org.diagbot.nlp.participle.word.Lexeme;
 
-import java.util.Arrays;
+import java.util.*;
 
 /**
  * @Auther: fyeman
@@ -11,6 +11,20 @@ import java.util.Arrays;
  */
 public class NlpUtil {
 
+    private static List numtextList = new ArrayList(Arrays.asList("数", "多", "半", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"));
+    private static  Map<String, String> numtextMap = new HashMap<String, String>(){{
+        put("一","1");
+        put("二","2");
+        put("三","3");
+        put("四","4");
+        put("五","5");
+        put("六","6");
+        put("七","7");
+        put("八","8");
+        put("九","9");
+        put("十","10");
+    }};
+
     public static String[] extendsSymbol(String[] origin, String[] extend_symbols) {
         String[] symbols = new String[origin.length + extend_symbols.length];
         System.arraycopy(origin, 0, symbols, 0, origin.length);
@@ -33,6 +47,31 @@ public class NlpUtil {
         return false;
     }
 
+    public static double numberText2value(Lexeme l) {
+        double value = 0.0;
+        if (numtextList.contains(l.getText())) {
+            if ("数".equals(l.getText()) || "多".equals(l.getText())) {     //数年直接按5年处理
+                value = 5;
+            } else if ("半".equals(l.getText())) {
+                value = 0.5;
+            } else {
+                value = Double.valueOf(numtextMap.get(l.getText()));
+            }
+        } else {
+            try {
+                value = Double.valueOf(l.getText());
+            } catch (Exception nfe) {
+                if (l.getText().indexOf("-") > -1) {
+                    try {
+                        value = Double.valueOf(l.getText().split("-")[0]);
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        }
+        return value;
+    }
+
     public static boolean isFeature(String property, NegativeEnum[] features) {
         if (property == null) {
             return false;
@@ -58,4 +97,24 @@ public class NlpUtil {
         }
         return false;
     }
+
+    /**
+     * 返回对应词性的标准术语
+     * @param lexeme
+     * @param feature
+     * @return
+     */
+    public static String concept(Lexeme lexeme, NegativeEnum feature) {
+        if (lexeme.getProperty() == null) {
+            return lexeme.getText();
+        }
+        String[] properties = lexeme.getProperty().split(",");
+        String[] concepts = lexeme.getConcept().split(",");
+        for (int i = 0; i < properties.length; i++) {
+            if (NegativeEnum.parseOfValue(properties[i]) == feature) {
+                return concepts[i];
+            }
+        }
+        return lexeme.getText();
+    }
 }

+ 2 - 2
nlp/src/main/resources/nlp.properties

@@ -1,3 +1,3 @@
 #Êý¾ÝÎļþ´æ·Å·¾¶
-cache.file.dir=/opt/diagbot-push/cache_file/
-#cache.file.dir=d:\\cache_file\\
+#cache.file.dir=/opt/diagbot-push/cache_file/
+cache.file.dir=d:\\cache_file\\

+ 6 - 0
push-web/pom.xml

@@ -67,6 +67,12 @@
 			<version>0.0.1</version>
 		</dependency>
 
+		<dependency>
+			<groupId>org.diagbot</groupId>
+			<artifactId>rule</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>

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

@@ -1,18 +1,17 @@
 package org.diagbot.push.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 import org.diagbot.bigdata.work.AlgorithmCore;
-import org.diagbot.common.javabean.Drugs;
-import org.diagbot.common.javabean.Filnlly;
-import org.diagbot.common.javabean.MedicalIndication;
-import org.diagbot.common.javabean.Medicition;
+import org.diagbot.common.push.bean.CrisisDetail;
+import org.diagbot.common.push.bean.FeatureRate;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.bean.neo4j.*;
+import org.diagbot.common.push.cache.CacheUtil;
 import org.diagbot.common.push.filter.ClassifyDiag;
-import org.diagbot.common.work.FeatureRate;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
-import org.diagbot.graph.util.CacheUtil;
-import org.diagbot.graphWeb.work.DiseaseCalculate;
-import org.diagbot.graphWeb.work.FilterSortDiag;
+import org.diagbot.common.push.filter.rule.PretreatmentRule;
+import org.diagbot.common.push.work.ParamsDataProxy;
 import org.diagbot.graphWeb.work.GraphCalculate;
 import org.diagbot.graphWeb.work.LisPacsCalculate;
 import org.diagbot.nlp.util.Constants;
@@ -22,6 +21,7 @@ import org.diagbot.pub.jdbc.MysqlJdbc;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.diagbot.pub.web.BaseController;
+import org.diagbot.rule.crisis.CrisisApplication;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
@@ -29,7 +29,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
-import org.diagbot.push.convert.PreProcess;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
@@ -121,15 +120,22 @@ public class AlgorithmController extends BaseController {
     }
 
     public Response<ResponseData> combine(HttpServletRequest request, SearchData searchData) throws Exception {
-        logger.info("开始规则转换......");
-        PreProcess prepro = new PreProcess();
-        searchData = prepro.processClinicalData(searchData);
-        ResponseData RuleResponseData = prepro.applyrules(searchData);
-
+        ResponseData responseData = new ResponseData();
         logger.info("开始推送服务......");
         Response<ResponseData> response = new Response();
+        //一些基本信息预处理 如年龄 性别
+        ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
+        paramsDataProxy.createNormalInfo(searchData);
+        //数据预处理
+        PretreatmentRule pretreatmentRule = new PretreatmentRule();
+        pretreatmentRule.rule(searchData);
+        //危机值
+        CrisisApplication crisisApplication = new CrisisApplication();
+        responseData.setCrisisDetails(crisisApplication.crisisContent(searchData));
+
+        //大数据推送
         AlgorithmCore core = new AlgorithmCore();
-        ResponseData bigDataResponseData = core.algorithm(request, searchData, RuleResponseData);
+        ResponseData bigDataResponseData = core.algorithm(request, searchData, responseData);
 
         GraphCalculate graphCalculate = new GraphCalculate();
         ResponseData graphResponseData = graphCalculate.calculate(request, searchData);
@@ -159,12 +165,19 @@ public class AlgorithmController extends BaseController {
         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.getMedicalIndications().addAll(medicalIndications);
+            bigDataResponseData.setMedicalIndications(medicalIndications);
         }
+
         //推送管理评估
         bigDataResponseData.setManagementEvaluation(graphResponseData.getManagementEvaluation());
         //知识图谱直接替换大数据中的检验检查数据
@@ -196,6 +209,37 @@ public class AlgorithmController extends BaseController {
         return response;
     }
 
+    /**
+     * 包装输出的危急值
+     * @param crisisDetails
+     * @return
+     */
+    public List<MedicalIndication> getCrisisDetails(Map<String, List<CrisisDetail>> crisisDetails){
+        List<MedicalIndication> crisisDetailList = new ArrayList<>();
+        for(Map.Entry<String, List<CrisisDetail>> entry : crisisDetails.entrySet()) {
+            for (CrisisDetail crisisDetail:entry.getValue()) {
+                String originText = crisisDetail.getOriginText();//文本输入的数据
+                String remindText = crisisDetail.getRemindText();//危机警示指标
+                String standardText = crisisDetail.getStandardText();//评判标准
+                if(StringUtils.isNotEmpty(remindText)){
+                    MedicalIndication medicalIndication = new MedicalIndication();
+                    List<MedicalIndicationDetail> crisisMid = new ArrayList<>();
+                    MedicalIndicationDetail medicalIndicationDetail = new MedicalIndicationDetail();
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("controlType",2);
+                    jsonObject.put("name",standardText);
+                    medicalIndicationDetail.setType(4);
+                    medicalIndicationDetail.setContent(jsonObject);
+                    crisisMid.add(medicalIndicationDetail);
+                    medicalIndication.setName(remindText);
+                    medicalIndication.setDetails(crisisMid);
+                    crisisDetailList.add(medicalIndication);
+                }
+            }
+        }
+        return crisisDetailList;
+    }
+
     public List<FeatureRate> getVital(Map<String, String> vitalCache,List<FeatureRate> vitals){
         Set<String> vitalSet = new LinkedHashSet<>();
         List<FeatureRate> vitalList = new ArrayList<>();

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

@@ -1,9 +1,9 @@
 package org.diagbot.push.controller;
 
-import org.diagbot.bigdata.common.ApplicationCacheUtil;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
 import org.diagbot.common.push.cache.CacheFileManager;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.graph.util.CacheUtil;
+import org.diagbot.common.push.cache.CacheUtil;
 import org.diagbot.nlp.util.NlpCache;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.web.BaseController;
@@ -42,8 +42,8 @@ public class CacheFileManagerController extends BaseController {
         //更新大数据缓存
         ApplicationCacheUtil.createDoc_result_mapping_diag_map();
         ApplicationCacheUtil.createDoc_result_mapping_filter_map();
-        ApplicationCacheUtil.createKl_result_mapping_standword_map();
-        ApplicationCacheUtil.create_rule_filter_map();
+        ApplicationCacheUtil.create_kl_rule_filter_map();
+        ApplicationCacheUtil.create_kl_rule_app_filter_map();
         return response;
     }
 }

+ 5 - 13
push-web/src/main/java/org/diagbot/push/controller/GraphController.java

@@ -1,18 +1,13 @@
 package org.diagbot.push.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import org.diagbot.common.javabean.MedicalIndication;
-import org.diagbot.common.javabean.MedicalIndicationDetail;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.work.ParamsDataProxy;
 import org.diagbot.graph.javabean.GdbResponse;
 import org.diagbot.graph.jdbc.DriverManager;
 import org.diagbot.graph.jdbc.Neo4jAPI;
-import org.diagbot.graphWeb.work.GraphCalculate;
-import org.diagbot.graphWeb.work.HighRiskCalculate;
-import org.diagbot.graphWeb.work.LisPacsCalculate;
-import org.diagbot.graphWeb.work.ParamsDataProxy;
-import org.diagbot.graphWeb.work.ScaleCalculate;
+import org.diagbot.graphWeb.work.*;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.web.BaseController;
 import org.neo4j.driver.v1.Driver;
@@ -23,9 +18,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -97,7 +89,7 @@ public class GraphController extends BaseController {
     @ResponseBody
     public Map<String, Object> scale(HttpServletRequest request, @RequestBody SearchData searchData) throws Exception {
         ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
-        paramsDataProxy.createSearchData(request, searchData);
+        paramsDataProxy.createSearchData(searchData);
         //        Driver driver = DriverManager.newDrive("localhost", "neo4j", "root");
         Driver driver = DriverManager.newDrive();
         Neo4jAPI neo4jAPI = new Neo4jAPI(driver);

+ 266 - 271
push-web/src/main/java/org/diagbot/push/convert/PreProcess.java

@@ -1,13 +1,8 @@
 package org.diagbot.push.convert;
 
 import com.alibaba.fastjson.JSONObject;
-import org.diagbot.bigdata.common.ApplicationCacheUtil;
-import org.diagbot.common.javabean.MedicalIndication;
-import org.diagbot.common.javabean.MedicalIndicationDetail;
-import org.diagbot.common.javabean.Rule;
-import org.diagbot.common.work.LisDetail;
-import org.diagbot.common.work.ResponseData;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.ResponseData;
+import org.diagbot.common.push.bean.SearchData;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
@@ -38,12 +33,12 @@ public class PreProcess {
     public SearchData processClinicalData(SearchData searchdata) {
         SearchData sData = searchdata;
 
-        sData.setLisArr(processLis(sData.getLisArr()));
-
-        if (sData.getLisArr().size() > 0) {
-            List<String> otherVal = sData.getLisArr().stream().map(lisArr -> lisArr.getOtherValue()).collect(Collectors.toList());
-            sData.setLis(String.join(",", otherVal));
-        }
+//        sData.setLisArr(processLis(sData.getLisArr()));
+//
+//        if (sData.getLisArr().size() > 0) {
+//            List<String> otherVal = sData.getLisArr().stream().map(lisArr -> lisArr.getOtherValue()).collect(Collectors.toList());
+//            sData.setLis(String.join(",", otherVal));
+//        }
 
         return sData;
     }
@@ -51,265 +46,265 @@ public class PreProcess {
     public ResponseData applyrules(SearchData sData) {
 
         ResponseData ruleResponse = new ResponseData();
-
-        List<MedicalIndication> reminder;
-        try {
-            Map<String, List<Rule>> rule = ApplicationCacheUtil.get_rule_filter_map();
-
-            reminder = applytolis(sData.getLisArr(), rule);
-
-            reminder.addAll(applytovital(sData.getVital(), rule));
-
-            ruleResponse.setMedicalIndications(reminder);
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
+//
+//        List<MedicalIndication> reminder;
+//        try {
+//            Map<String, List<Rule>> rule = ApplicationCacheUtil.get_rule_filter_map();
+//
+//            reminder = applytolis(sData.getLisArr(), rule);
+//
+//            reminder.addAll(applytovital(sData.getVital(), rule));
+//
+//            ruleResponse.setMedicalIndications(reminder);
+//
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//        } finally {
             return ruleResponse;
-        }
-    }
-
-    private List<MedicalIndication> applytolis(List<LisDetail> lisarr, Map<String, List<Rule>> rule) {
-
-        List<MedicalIndication> reminder = new ArrayList<>();
-        try {
-            String name;
-            String detail;
-
-            for (LisDetail lis : lisarr) {
-                detail = lis.getDetailName();
-//                name = lis.getName();
-                String key = detail;
-                if (rule.get(key) != null) {
-                    reminder.addAll(comparelis(rule.get(key), lis));
-                }
-            }
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
-            return reminder;
-        }
+//        }
     }
 
-    private List<MedicalIndication> applytovital(String vital, Map<String, List<Rule>> rule) {
-
-        List<MedicalIndication> reminder = new ArrayList<>();
-
-        try {
-            Map<String, Object> vitobj = new HashMap<>();
-            Lexeme lexeme;
-            LexemePath<Lexeme> lexemes = ParticipleUtil.participle(vital);
-            for (int i=0; i<lexemes.size(); i++) {
-                lexeme = lexemes.get(i);
-                if (lexeme.getText().trim().length() > 0) {
-                    if (lexeme.getProperty().equals(Constants.word_property_vital_idx)) {
-                        vitobj = new HashMap<>();
-                        vitobj.put(vitkeyset[0], lexeme.getText());
-                    } else if (lexeme.getProperty().equals(Constants.word_property_number) &&
-                            vitobj.get(vitkeyset[0]) != null) {
-                        vitobj.put(vitkeyset[1], lexeme.getText());
-                    } else if (lexeme.getProperty().equals(Constants.word_property_unit) &&
-                            vitobj.get(vitkeyset[1]) != null) {
-                        vitobj.put(vitkeyset[2], lexeme.getText());
-
-                        if (vitobj.get(vitkeyset[0]).toString().equals(bptype[0]) &&
-                                vitobj.get(vitkeyset[1]).toString().contains(bptype[3])) {
-                            String[] idx = Arrays.asList(bptype).subList(1,3).toArray(new String[2]);
-                            String[] vals = vitobj.get(vitkeyset[1]).toString().split(bptype[3]);
-                            String unit = vitobj.get(vitkeyset[2]).toString();
-
-                            if (idx.length == vals.length) {
-                                for (int j=0; j<idx.length; j++) {
-                                    vitobj = new HashMap<>();
-                                    vitobj.put(vitkeyset[0], idx[j]);
-                                    vitobj.put(vitkeyset[1], vals[j]);
-                                    vitobj.put(vitkeyset[2], unit);
-                                    vitlist.add(vitobj);
-                                }
-                            }
-                        } else {
-                            vitlist.add(vitobj);
-                        }
-                    }
-                }
-//                System.out.println(lexeme.getText() + ": " + lexeme.getProperty());
-            }
-
-            for (Map<String, Object> obj : vitlist) {
-                String idx = obj.get(vitkeyset[0]).toString();
-                if (rule.get(idx) != null) {
-                    reminder.addAll(comparevit(rule.get(idx), obj));
-                }
-            }
-            System.out.println("\n");
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
-            return reminder;
-        }
-    }
-
-
-    private List<MedicalIndication> comparelis(List<Rule> rules, LisDetail lis) {
-        List<MedicalIndication> reminder = new ArrayList<>();
-
-        try {
-            String detailname = lis.getDetailName();
-            Double numval = lis.getValue();
-            String unit = lis.getUnits();
-            String otherval = lis.getOtherValue();
-
-            reminder = compare(rules, reminder, detailname, numval, unit, otherval);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
-            return reminder;
-        }
-    }
-
-    private List<MedicalIndication> comparevit(List<Rule> rules, Map<String, Object> vit) {
-        List<MedicalIndication> reminder = new ArrayList<>();
-
-        try {
-            String detailname = vit.get(vitkeyset[0]).toString();
-            Double numval = Double.valueOf(vit.get(vitkeyset[1]).toString());
-            String unit = vit.get(vitkeyset[2]).toString();
-            String otherval = "";
-
-            reminder = compare(rules, reminder, detailname, numval, unit, otherval);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
-            return reminder;
-        }
-    }
-
-    private List<MedicalIndication> compare(List<Rule> rules, List<MedicalIndication> reminder,
-                                            String detailname, Double numval, String unit, String otherval) {
-        boolean minmatch, maxmatch;
-        Double minval, maxval;
-        String minop, maxop, minunit, maxunit;
-
-        try {
-            if (null == numval && otherval.trim().length() > 0) {
-                for (Rule rule : rules) {
-                    if (rule.getMin_operator().equals("=") && otherval.contains(rule.getMin_value())) {
-                        StringBuffer rulesContent = new StringBuffer();
-                        StringBuffer append = rulesContent.append(rule.getIdx_name()).append(rule.getMin_operator()).append(rule.getMin_value()).append(rule.getMin_unit())
-                                .append(rule.getMax_operator()).append(rule.getMax_value()).append(rule.getMax_unit());
-                        MedicalIndication medind = new MedicalIndication();
-                        List<MedicalIndicationDetail> k = new ArrayList<>();
-                        MedicalIndicationDetail mid = new MedicalIndicationDetail();
-                        JSONObject jsonObject = new JSONObject();
-//                        jsonObject.put("name",detailname + ": " + otherval+ ", " +rule.getRemind());
-                        jsonObject.put("name",append.toString());
-                        jsonObject.put("controlType",2);
-                        mid.setType(4);
-                        mid.setContent(jsonObject);
-                        k.add(mid);
-                        medind.setName(rule.getRemind());
-                        medind.setDetails(k);
-                        reminder.add(medind);
-
-                        System.out.println(medind.getRule() + " -> " + medind.getName());
-                    }
-                }
-            } else if (String.valueOf(numval).trim().length() > 0 && unit.length() > 0){
-                for (Rule rule : rules) {
-                    minmatch = maxmatch = false;
-                    minval = (rule.getMin_value().length()==0)?0:Double.valueOf(rule.getMin_value());
-                    maxval = (rule.getMax_value().length()==0)?0:Double.valueOf(rule.getMax_value());
-                    minunit = rule.getMin_unit();
-                    maxunit = rule.getMax_unit();
-                    minop = rule.getMin_operator();
-                    maxop = rule.getMax_operator();
-
-                    if ( String.valueOf(minval).trim().length() > 0 && minunit.equals(unit) ) {
-                        switch (minop) {
-                            case ">":
-                                if (numval > minval) { minmatch = true; }
-                                break;
-                            case ">=":
-                                if (numval >= minval) { minmatch = true; }
-                                break;
-                        }
-                    } else { minmatch = true; }
-
-                    if (String.valueOf(maxval).trim().length() > 0 && maxunit.equals(unit) ) {
-                        switch (maxop) {
-                            case "<":
-                                if (numval < maxval) { maxmatch = true; }
-                                break;
-                            case "<=":
-                                if (numval <= maxval) { maxmatch = true; }
-                                break;
-                        }
-                    } else { maxmatch = true; }
-
-                    if (minmatch && maxmatch) {
-                        StringBuffer rulesContent = new StringBuffer();
-                        StringBuffer append = rulesContent.append(rule.getIdx_name()).append(rule.getMin_operator()).append(rule.getMin_value()).append(rule.getMin_unit())
-                                .append(rule.getMax_operator()).append(rule.getMax_value()).append(rule.getMax_unit());
-
-                        MedicalIndication medind = new MedicalIndication();
-                        List<MedicalIndicationDetail> k = new ArrayList<>();
-                        MedicalIndicationDetail mid = new MedicalIndicationDetail();
-                        JSONObject jsonObject = new JSONObject();
-//                        jsonObject.put("name",detailname + ": " + numval + " " + unit+ "," +rule.getRemind());
-                        jsonObject.put("name", append.toString());
-                        jsonObject.put("controlType",2);
-                        mid.setType(4);
-                        mid.setContent(jsonObject);
-                        k.add(mid);
-                        medind.setName(rule.getRemind());
-                        medind.setDetails(k);
-                        reminder.add(medind);
-
-                        System.out.println(medind.getRule() + " -> " + medind.getName());
-                    }
-                }
-            }
-
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        } finally {
-            return reminder;
-        }
-    }
-
-    private List<LisDetail> processLis(List<LisDetail> lisArr) {
-        if (lisArr == null) {
-            return new ArrayList<>();
-        }
-        if (lisArr.size() == 0) {
-            return lisArr;
-        }
-
-        String Otherval = "";
-
-        for (int i = 0; i < lisArr.size(); i++) {
-            LisDetail lisres = lisArr.get(i);
-
-//            Otherval = (lisres.getOtherValue().trim().length() > 0) ? lisres.getOtherValue().trim() + "\n" : "";
-            Otherval = lisres.getOtherValue();
-
-            if (Otherval.indexOf(pos) >= 0 || Otherval.indexOf(neg) >= 0) {
-                lisres.setOtherValue(lisres.getDetailName() + Otherval);
-            } else {
-                Otherval = (Otherval.trim().length() > 0) ? Otherval.trim() + "\n" : "";
-                if (lisres.getValue() == null) {
-                    continue;
-                } else if (lisres.getMaxValue() != null && lisres.getValue() > lisres.getMaxValue()) {
-                    lisres.setOtherValue(Otherval + lisres.getDetailName() + up);
-                } else if (lisres.getMinValue() != null && lisres.getValue() < lisres.getMinValue()) {
-                    lisres.setOtherValue(Otherval + lisres.getDetailName() + down);
-                } else {
-                    lisres.setOtherValue(Otherval + lisres.getDetailName() + normal);
-                }
-            }
-        }
-
-        return lisArr;
-    }
+//    private List<MedicalIndication> applytolis(List<LisDetail> lisarr, Map<String, List<Rule>> rule) {
+//
+//        List<MedicalIndication> reminder = new ArrayList<>();
+//        try {
+//            String name;
+//            String detail;
+//
+//            for (LisDetail lis : lisarr) {
+//                detail = lis.getDetailName();
+////                name = lis.getName();
+//                String key = detail;
+//                if (rule.get(key) != null) {
+//                    reminder.addAll(comparelis(rule.get(key), lis));
+//                }
+//            }
+//
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//        } finally {
+//            return reminder;
+//        }
+//    }
+//
+//    private List<MedicalIndication> applytovital(String vital, Map<String, List<Rule>> rule) {
+//
+//        List<MedicalIndication> reminder = new ArrayList<>();
+//
+//        try {
+//            Map<String, Object> vitobj = new HashMap<>();
+//            Lexeme lexeme;
+//            LexemePath<Lexeme> lexemes = ParticipleUtil.participle(vital);
+//            for (int i=0; i<lexemes.size(); i++) {
+//                lexeme = lexemes.get(i);
+//                if (lexeme.getText().trim().length() > 0) {
+//                    if (lexeme.getProperty().equals(Constants.word_property_vital_idx)) {
+//                        vitobj = new HashMap<>();
+//                        vitobj.put(vitkeyset[0], lexeme.getText());
+//                    } else if (lexeme.getProperty().equals(Constants.word_property_number) &&
+//                            vitobj.get(vitkeyset[0]) != null) {
+//                        vitobj.put(vitkeyset[1], lexeme.getText());
+//                    } else if (lexeme.getProperty().equals(Constants.word_property_unit) &&
+//                            vitobj.get(vitkeyset[1]) != null) {
+//                        vitobj.put(vitkeyset[2], lexeme.getText());
+//
+//                        if (vitobj.get(vitkeyset[0]).toString().equals(bptype[0]) &&
+//                                vitobj.get(vitkeyset[1]).toString().contains(bptype[3])) {
+//                            String[] idx = Arrays.asList(bptype).subList(1,3).toArray(new String[2]);
+//                            String[] vals = vitobj.get(vitkeyset[1]).toString().split(bptype[3]);
+//                            String unit = vitobj.get(vitkeyset[2]).toString();
+//
+//                            if (idx.length == vals.length) {
+//                                for (int j=0; j<idx.length; j++) {
+//                                    vitobj = new HashMap<>();
+//                                    vitobj.put(vitkeyset[0], idx[j]);
+//                                    vitobj.put(vitkeyset[1], vals[j]);
+//                                    vitobj.put(vitkeyset[2], unit);
+//                                    vitlist.add(vitobj);
+//                                }
+//                            }
+//                        } else {
+//                            vitlist.add(vitobj);
+//                        }
+//                    }
+//                }
+////                System.out.println(lexeme.getText() + ": " + lexeme.getProperty());
+//            }
+//
+//            for (Map<String, Object> obj : vitlist) {
+//                String idx = obj.get(vitkeyset[0]).toString();
+//                if (rule.get(idx) != null) {
+//                    reminder.addAll(comparevit(rule.get(idx), obj));
+//                }
+//            }
+//            System.out.println("\n");
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//        } finally {
+//            return reminder;
+//        }
+//    }
+//
+//
+//    private List<MedicalIndication> comparelis(List<Rule> rules, LisDetail lis) {
+//        List<MedicalIndication> reminder = new ArrayList<>();
+//
+//        try {
+//            String detailname = lis.getDetailName();
+//            Double numval = lis.getValue();
+//            String unit = lis.getUnits();
+//            String otherval = lis.getOtherValue();
+//
+//            reminder = compare(rules, reminder, detailname, numval, unit, otherval);
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//        } finally {
+//            return reminder;
+//        }
+//    }
+//
+//    private List<MedicalIndication> comparevit(List<Rule> rules, Map<String, Object> vit) {
+//        List<MedicalIndication> reminder = new ArrayList<>();
+//
+//        try {
+//            String detailname = vit.get(vitkeyset[0]).toString();
+//            Double numval = Double.valueOf(vit.get(vitkeyset[1]).toString());
+//            String unit = vit.get(vitkeyset[2]).toString();
+//            String otherval = "";
+//
+//            reminder = compare(rules, reminder, detailname, numval, unit, otherval);
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//        } finally {
+//            return reminder;
+//        }
+//    }
+//
+//    private List<MedicalIndication> compare(List<Rule> rules, List<MedicalIndication> reminder,
+//                                            String detailname, Double numval, String unit, String otherval) {
+//        boolean minmatch, maxmatch;
+//        Double minval, maxval;
+//        String minop, maxop, minunit, maxunit;
+//
+//        try {
+//            if (null == numval && otherval.trim().length() > 0) {
+//                for (Rule rule : rules) {
+//                    if (rule.getMin_operator().equals("=") && otherval.contains(rule.getMin_value())) {
+//                        StringBuffer rulesContent = new StringBuffer();
+//                        StringBuffer append = rulesContent.append(rule.getIdx_name()).append(rule.getMin_operator()).append(rule.getMin_value()).append(rule.getMin_unit())
+//                                .append(rule.getMax_operator()).append(rule.getMax_value()).append(rule.getMax_unit());
+//                        MedicalIndication medind = new MedicalIndication();
+//                        List<MedicalIndicationDetail> k = new ArrayList<>();
+//                        MedicalIndicationDetail mid = new MedicalIndicationDetail();
+//                        JSONObject jsonObject = new JSONObject();
+////                        jsonObject.put("name",detailname + ": " + otherval+ ", " +rule.getRemind());
+//                        jsonObject.put("name",append.toString());
+//                        jsonObject.put("controlType",2);
+//                        mid.setType(4);
+//                        mid.setContent(jsonObject);
+//                        k.add(mid);
+//                        medind.setName(rule.getRemind());
+//                        medind.setDetails(k);
+//                        reminder.add(medind);
+//
+//                        System.out.println(medind.getRule() + " -> " + medind.getName());
+//                    }
+//                }
+//            } else if (String.valueOf(numval).trim().length() > 0 && unit.length() > 0){
+//                for (Rule rule : rules) {
+//                    minmatch = maxmatch = false;
+//                    minval = (rule.getMin_value().length()==0)?0:Double.valueOf(rule.getMin_value());
+//                    maxval = (rule.getMax_value().length()==0)?0:Double.valueOf(rule.getMax_value());
+//                    minunit = rule.getMin_unit();
+//                    maxunit = rule.getMax_unit();
+//                    minop = rule.getMin_operator();
+//                    maxop = rule.getMax_operator();
+//
+//                    if ( String.valueOf(minval).trim().length() > 0 && minunit.equals(unit) ) {
+//                        switch (minop) {
+//                            case ">":
+//                                if (numval > minval) { minmatch = true; }
+//                                break;
+//                            case ">=":
+//                                if (numval >= minval) { minmatch = true; }
+//                                break;
+//                        }
+//                    } else { minmatch = true; }
+//
+//                    if (String.valueOf(maxval).trim().length() > 0 && maxunit.equals(unit) ) {
+//                        switch (maxop) {
+//                            case "<":
+//                                if (numval < maxval) { maxmatch = true; }
+//                                break;
+//                            case "<=":
+//                                if (numval <= maxval) { maxmatch = true; }
+//                                break;
+//                        }
+//                    } else { maxmatch = true; }
+//
+//                    if (minmatch && maxmatch) {
+//                        StringBuffer rulesContent = new StringBuffer();
+//                        StringBuffer append = rulesContent.append(rule.getIdx_name()).append(rule.getMin_operator()).append(rule.getMin_value()).append(rule.getMin_unit())
+//                                .append(rule.getMax_operator()).append(rule.getMax_value()).append(rule.getMax_unit());
+//
+//                        MedicalIndication medind = new MedicalIndication();
+//                        List<MedicalIndicationDetail> k = new ArrayList<>();
+//                        MedicalIndicationDetail mid = new MedicalIndicationDetail();
+//                        JSONObject jsonObject = new JSONObject();
+////                        jsonObject.put("name",detailname + ": " + numval + " " + unit+ "," +rule.getRemind());
+//                        jsonObject.put("name", append.toString());
+//                        jsonObject.put("controlType",2);
+//                        mid.setType(4);
+//                        mid.setContent(jsonObject);
+//                        k.add(mid);
+//                        medind.setName(rule.getRemind());
+//                        medind.setDetails(k);
+//                        reminder.add(medind);
+//
+//                        System.out.println(medind.getRule() + " -> " + medind.getName());
+//                    }
+//                }
+//            }
+//
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//        } finally {
+//            return reminder;
+//        }
+//    }
+//
+//    private List<LisDetail> processLis(List<LisDetail> lisArr) {
+//        if (lisArr == null) {
+//            return new ArrayList<>();
+//        }
+//        if (lisArr.size() == 0) {
+//            return lisArr;
+//        }
+//
+//        String Otherval = "";
+//
+//        for (int i = 0; i < lisArr.size(); i++) {
+//            LisDetail lisres = lisArr.get(i);
+//
+////            Otherval = (lisres.getOtherValue().trim().length() > 0) ? lisres.getOtherValue().trim() + "\n" : "";
+//            Otherval = lisres.getOtherValue();
+//
+//            if (Otherval.indexOf(pos) >= 0 || Otherval.indexOf(neg) >= 0) {
+//                lisres.setOtherValue(lisres.getDetailName() + Otherval);
+//            } else {
+//                Otherval = (Otherval.trim().length() > 0) ? Otherval.trim() + "\n" : "";
+//                if (lisres.getValue() == null) {
+//                    continue;
+//                } else if (lisres.getMaxValue() != null && lisres.getValue() > lisres.getMaxValue()) {
+//                    lisres.setOtherValue(Otherval + lisres.getDetailName() + up);
+//                } else if (lisres.getMinValue() != null && lisres.getValue() < lisres.getMinValue()) {
+//                    lisres.setOtherValue(Otherval + lisres.getDetailName() + down);
+//                } else {
+//                    lisres.setOtherValue(Otherval + lisres.getDetailName() + normal);
+//                }
+//            }
+//        }
+//
+//        return lisArr;
+//    }
 }

+ 23 - 3
push-web/src/main/resources/static/pages/algorithm/list.html

@@ -109,11 +109,15 @@
                 </div>
                 <div class="form-group">
                     <label for="other_id">化验结果</label>&nbsp;
-                    <input type="text" id="lis_id" placeholder="" size="140">&nbsp;&nbsp;&nbsp;&nbsp;
+                    <input type="text" id="lis_id" placeholder="" size="60">&nbsp;&nbsp;&nbsp;&nbsp;
+                    <label for="other_id">辅检结果</label>&nbsp;
+                    <input type="text" id="pacs_id" placeholder="" size="60">&nbsp;&nbsp;&nbsp;&nbsp;
                 </div>
                 <div class="form-group">
-                    <label for="other_id">辅检结果</label>&nbsp;
-                    <input type="text" id="pacs_id" placeholder="" size="140">&nbsp;&nbsp;&nbsp;&nbsp;
+                    <label for="other_id">开单化验</label>&nbsp;
+                    <input type="text" id="lis_order" placeholder="" size="60">&nbsp;&nbsp;&nbsp;&nbsp;
+                    <label for="other_id">开单检查</label>&nbsp;
+                    <input type="text" id="pacs_order" placeholder="" size="60">&nbsp;&nbsp;&nbsp;&nbsp;
                 </div>
                 <div class="form-group">
                     <label for="diag_id">诊断</label>&nbsp;
@@ -440,6 +444,8 @@
                     var other = $("#other_id").val();
                     var lis = $("#lis_id").val();
                     var pacs = $("#pacs_id").val();
+                    var lisOrder = $("#lis_order").val();
+                    var pacsOrder = $("#pacs_order").val();
                     var diag = $("#diag_id").val();
                     var length = $("#length").val();
                     var sex = $("#sex").val();
@@ -466,6 +472,12 @@
                     if (pacs != null && pacs != undefined) {
                         d.pacs = pacs;
                     }
+                    if (lisOrder != null && lisOrder != undefined) {
+                        d.lisOrder = lisOrder;
+                    }
+                    if (pacsOrder != null && pacsOrder != undefined) {
+                        d.pacsOrder = pacsOrder;
+                    }
                     if (diag != null && diag != undefined && diag != '') {
                         d.diag = diag;
                     }
@@ -553,6 +565,8 @@
                     var other = $("#other_id").val();
                     var lis = $("#lis_id").val();
                     var pacs = $("#pacs_id").val();
+                    var lisOrder = $("#lis_order").val();
+                    var pacsOrder = $("#pacs_order").val();
                     var diag = $("#diag_id").val();
                     var length = $("#length").val();
                     var sex = $("#sex").val();
@@ -579,6 +593,12 @@
                     if (pacs != null && pacs != undefined) {
                         d.pacs = pacs;
                     }
+                    if (lisOrder != null && lisOrder != undefined) {
+                        d.lisOrder = lisOrder;
+                    }
+                    if (pacsOrder != null && pacsOrder != undefined) {
+                        d.pacsOrder = pacsOrder;
+                    }
                     if (diag != null && diag != undefined && diag != '') {
                         d.diag = diag;
                     }

+ 25 - 0
rule/.gitignore

@@ -0,0 +1,25 @@
+/target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/

+ 29 - 0
rule/pom.xml

@@ -22,8 +22,37 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>nlp</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>common-push</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 
     <build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.properties</include>
+                    <include>**/*.xml</include>
+                    <include>**/*.json</include>
+                </includes>
+                <filtering>false</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+            </resource>
+        </resources>
+        <finalName>rule</finalName>
     </build>
 </project>

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

@@ -0,0 +1,70 @@
+package org.diagbot.rule.crisis;
+
+import org.diagbot.common.push.bean.CrisisDetail;
+import org.diagbot.common.push.bean.Rule;
+import org.diagbot.common.push.bean.RuleApp;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by louhr on 2019/9/2.
+ */
+public class CrisisApplication {
+    public Map<String, List<CrisisDetail>> crisisContent(SearchData searchData) {
+        Map<String, List<Rule>> rules = searchData.getRules();
+        if (rules == null) {
+            return new HashMap<String, List<CrisisDetail>>();
+        }
+        Map<String, RuleApp> ruleApps = ApplicationCacheUtil.getKl_rule_app_filter_map();
+
+        Map<String, List<CrisisDetail>> crisisMap = new HashMap<>();
+        List<CrisisDetail> crisisList = null;
+        for (Map.Entry<String, RuleApp> app : ruleApps.entrySet()) {
+            if (StringUtils.isEmpty(app.getValue().getRuleIds())) {
+                continue;
+            }
+            String[] ruleIds = app.getValue().getRuleIds().split(",");
+            String standardText = "", originText = "";
+            boolean allRuleIdsSuit = true;
+            for (String ruleId : ruleIds) {
+                boolean isFindRule = false;
+                for (Map.Entry<String, List<Rule>> suitRules : rules.entrySet()) {
+                    for (Rule suitRule : suitRules.getValue()) {
+                        if (ruleId.equals(suitRule.getId())) {
+                            isFindRule = true;
+                            standardText += suitRule.getPub_name() + ";";
+                            originText += suitRule.getOriginText() + ";";
+                            break;
+                        }
+                    }
+                }
+                if (!isFindRule) {
+                    allRuleIdsSuit = false;
+                    break;
+                }
+            }
+            //所有规则都满足
+            if (allRuleIdsSuit) {
+                CrisisDetail crisisDetail = new CrisisDetail();
+                crisisDetail.setOriginText(originText);
+                crisisDetail.setStandardText(standardText);
+                crisisDetail.setRemindText(app.getValue().getRemind());
+
+                crisisList = crisisMap.get(app.getKey());
+                if (crisisList == null) {
+                    crisisList = new ArrayList<>();
+                }
+                crisisList.add(crisisDetail);
+                crisisMap.put(app.getKey(), crisisList);
+            }
+        }
+        return crisisMap;
+    }
+}