Browse Source

push-grade-rule更新至186最新测试服务器

louhr 5 years ago
parent
commit
2ef60760f3
100 changed files with 3213 additions and 2441 deletions
  1. 6 0
      bigdata-web/pom.xml
  2. 0 285
      bigdata-web/src/main/java/org/diagbot/bigdata/common/ApplicationCacheUtil.java
  3. 0 98
      bigdata-web/src/main/java/org/diagbot/bigdata/common/InitListener.java
  4. 2 2
      bigdata-web/src/main/java/org/diagbot/bigdata/controller/AlgorithmController.java
  5. 0 22
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingDiagMapper.java
  6. 0 22
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingFilterMapper.java
  7. 0 22
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/mapper/ResultMappingVitalMapper.java
  8. 0 38
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingDiag.java
  9. 0 38
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingVital.java
  10. 0 12
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingDiagWrapper.java
  11. 0 6
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingFilterWrapper.java
  12. 0 7
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/wrapper/ResultMappingVitalWrapper.java
  13. 0 55
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingDiagMapper.xml
  14. 0 67
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingFilterMapper.xml
  15. 0 77
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/xml/ResultMappingVitalMapper.xml
  16. 0 8
      bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingDiagService.java
  17. 0 8
      bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingFilterService.java
  18. 0 8
      bigdata-web/src/main/java/org/diagbot/bigdata/service/ResultMappingVitalService.java
  19. 0 21
      bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingDiagServiceImpl.java
  20. 0 21
      bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingFilterServiceImpl.java
  21. 0 21
      bigdata-web/src/main/java/org/diagbot/bigdata/service/impl/ResultMappingVitalServiceImpl.java
  22. 5 10
      bigdata-web/src/main/java/org/diagbot/bigdata/work/AlgorithmCore.java
  23. 94 0
      bigdata-web/src/main/java/org/diagbot/bigdata/work/BigDataParamsProxy.java
  24. 1 1
      bigdata-web/src/main/java/org/diagbot/bigdata/work/BigDataSearchData.java
  25. 0 702
      bigdata-web/src/main/java/org/diagbot/bigdata/work/ParamsDataProxy.java
  26. 3 97
      bigdata-web/src/main/java/org/diagbot/bigdata/work/ResultDataProxy.java
  27. 37 41
      bigdata-web/src/test/java/org/diagbot/AddStandWordTest.java
  28. 135 0
      bigdata-web/src/test/java/org/diagbot/EyeHospitalData.java
  29. 8 2
      common-push/pom.xml
  30. 0 11
      common-push/src/main/java/org/diagbot/common/push/Test.java
  31. 34 0
      common-push/src/main/java/org/diagbot/common/push/bean/CrisisDetail.java
  32. 1 1
      common-service/src/main/java/org/diagbot/common/work/FeatureRate.java
  33. 1 1
      common-service/src/main/java/org/diagbot/common/work/LisDetail.java
  34. 15 15
      common-push/src/main/java/org/diagbot/common/push/filter/PreResult.java
  35. 14 4
      common-service/src/main/java/org/diagbot/common/work/ResponseData.java
  36. 1 1
      bigdata-web/src/main/java/org/diagbot/bigdata/dao/model/ResultMappingFilter.java
  37. 143 0
      common-push/src/main/java/org/diagbot/common/push/bean/Rule.java
  38. 45 0
      common-push/src/main/java/org/diagbot/common/push/bean/RuleApp.java
  39. 23 4
      common-service/src/main/java/org/diagbot/common/work/SearchData.java
  40. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Detail.java
  41. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Drugs.java
  42. 1 2
      common-service/src/main/java/org/diagbot/common/javabean/Filnlly.java
  43. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/FuzhenFilnlly.java
  44. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Indicators.java
  45. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/MangementEvaluation.java
  46. 5 2
      common-service/src/main/java/org/diagbot/common/javabean/MedicalIndication.java
  47. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/MedicalIndicationDetail.java
  48. 1 1
      common-service/src/main/java/org/diagbot/common/javabean/Medicition.java
  49. 157 0
      common-push/src/main/java/org/diagbot/common/push/cache/ApplicationCacheUtil.java
  50. 44 47
      common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java
  51. 1 1
      graph/src/main/java/org/diagbot/graph/util/CacheUtil.java
  52. 4 4
      common-push/src/main/java/org/diagbot/common/push/filter/ClassifyDiag.java
  53. 0 45
      common-push/src/main/java/org/diagbot/common/push/filter/PretreatmentFilter.java
  54. 7 12
      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. 22 4
      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. 29 2
      common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentSymptom.java
  62. 42 2
      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 59
      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. 12 12
      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. 5 5
      graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java
  77. 1 1
      graph/src/main/resources/bolt.properties
  78. 10 0
      graphdb/pom.xml
  79. 41 0
      graphdb/src/main/java/org/diagbot/pub/Ciku.java
  80. 44 0
      graphdb/src/main/java/org/diagbot/pub/Label.java
  81. 46 0
      graphdb/src/main/java/org/diagbot/pub/Type.java
  82. 153 0
      graphdb/src/main/java/org/diagbot/repository/DiseaseRepository.java
  83. 8 3
      graphdb/src/main/java/org/diagbot/service/KnowledgeService.java
  84. 800 3
      graphdb/src/main/java/org/diagbot/service/impl/KnowledgeServiceImpl.java
  85. 22 0
      graphdb/src/main/java/org/diagbot/vo/domain/NeoParamVO.java
  86. 38 0
      graphdb/src/main/java/org/diagbot/vo/domain/RespDTO.java
  87. 25 12
      graphdb/src/main/java/org/diagbot/web/KnowledgeController.java
  88. 7 0
      nlp/pom.xml
  89. 1 1
      nlp/src/main/java/org/diagbot/nlp/util/Constants.java
  90. 4 1
      nlp/src/main/java/org/diagbot/nlp/util/NegativeEnum.java
  91. 20 0
      nlp/src/main/java/org/diagbot/nlp/util/NlpUtil.java
  92. 6 0
      push-web/pom.xml
  93. 62 18
      push-web/src/main/java/org/diagbot/push/controller/AlgorithmController.java
  94. 5 5
      push-web/src/main/java/org/diagbot/push/controller/CacheFileManagerController.java
  95. 5 13
      push-web/src/main/java/org/diagbot/push/controller/GraphController.java
  96. 266 331
      push-web/src/main/java/org/diagbot/push/convert/PreProcess.java
  97. 1 1
      push-web/src/main/resources/static/dist/js/push.js
  98. 23 3
      push-web/src/main/resources/static/pages/algorithm/list.html
  99. 25 0
      rule/.gitignore
  100. 0 0
      rule/pom.xml

+ 6 - 0
bigdata-web/pom.xml

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

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

@@ -1,285 +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, List<Rule>> kl_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","eq_operator","eq_value","eq_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 create_kl_rule_filter_map() {
-        kl_rule_filter_map = new HashMap<>();
-
-        Configuration configuration = new DefaultConfig();
-        List<String> fileContents = configuration.readFileContents("bigdata_rule_filter.dict");
-        for (String line:fileContents) {
-            String[] content = line.split("\\|");
-        }
-    }
-
-    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;
 package org.diagbot.bigdata.controller;
 
 
 import org.diagbot.bigdata.work.AlgorithmCore;
 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.nlp.util.Constants;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.web.BaseController;
 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.core.AlgorithmExecutor;
 import org.algorithm.factory.AlgorithmFactory;
 import org.algorithm.factory.AlgorithmFactory;
 import org.algorithm.util.AlgorithmClassify;
 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.feature.FeatureType;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.NlpCache;
 import org.diagbot.nlp.util.NlpCache;
@@ -26,13 +26,10 @@ import java.util.*;
 public class AlgorithmCore {
 public class AlgorithmCore {
     Logger logger = LoggerFactory.getLogger(AlgorithmCore.class);
     Logger logger = LoggerFactory.getLogger(AlgorithmCore.class);
     public ResponseData algorithm(HttpServletRequest request, SearchData searchData, ResponseData responseData) throws Exception {
     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());
         logger.info("页面文本信息:" + searchData.getSymptom());
-        paramsDataProxy.createSearchData(request, searchData);
+        paramsDataProxy.createSearchData(searchData);
         //对象拷贝至BigDataSearchData处理
         //对象拷贝至BigDataSearchData处理
         BigDataSearchData bigDataSearchData = new BigDataSearchData();
         BigDataSearchData bigDataSearchData = new BigDataSearchData();
         BeanUtils.copyProperties(searchData, bigDataSearchData);
         BeanUtils.copyProperties(searchData, bigDataSearchData);
@@ -65,8 +62,6 @@ public class AlgorithmCore {
                 if (Constants.feature_type_symptom.equals(searchData.getFeatureTypes()[i])) {
                 if (Constants.feature_type_symptom.equals(searchData.getFeatureTypes()[i])) {
                     featuresMap = resultDataProxy.mapAdd(featuresMap, NlpCache.getStandard_info_push_map(), true);
                     featuresMap = resultDataProxy.mapAdd(featuresMap, NlpCache.getStandard_info_push_map(), true);
                 }
                 }
-                //大小类合并
-                featuresMap = resultDataProxy.resultMerge(request, featuresMap);
                 //按模型计算的概率排序
                 //按模型计算的概率排序
                 featuresOrderList = new ArrayList<Map.Entry<String, Float>>(featuresMap.entrySet());
                 featuresOrderList = new ArrayList<Map.Entry<String, Float>>(featuresMap.entrySet());
                 Collections.sort(featuresOrderList, new Comparator<Map.Entry<String, Float>>() {
                 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;
 package org.diagbot.bigdata.work;
 
 
 import org.algorithm.util.AlgorithmClassify;
 import org.algorithm.util.AlgorithmClassify;
-import org.diagbot.common.work.SearchData;
+import org.diagbot.common.push.bean.SearchData;
 
 
 public class BigDataSearchData extends 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;
 package org.diagbot.bigdata.work;
 
 
 import org.apache.commons.lang3.StringUtils;
 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.feature.FeatureType;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.Constants;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NegativeEnum;
@@ -29,7 +28,6 @@ public class ResultDataProxy {
         DecimalFormat df = new DecimalFormat("0.####");
         DecimalFormat df = new DecimalFormat("0.####");
         List<FeatureRate> featureList = new ArrayList<>(10);
         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, String> resultMappingDiagMap = ApplicationCacheUtil.getDoc_result_mapping_diag_map();
         Map<String, Map<String, ResultMappingFilter>> resultMappingFilterMap = ApplicationCacheUtil.getDoc_result_mapping_filter_map();
         Map<String, Map<String, ResultMappingFilter>> resultMappingFilterMap = ApplicationCacheUtil.getDoc_result_mapping_filter_map();
         Map<String, Map<String, String>> synonymMap = ApplicationCacheUtil.getStandard_info_synonym_map();
         Map<String, Map<String, String>> synonymMap = ApplicationCacheUtil.getStandard_info_synonym_map();
@@ -67,19 +65,11 @@ public class ResultDataProxy {
                 }
                 }
             }
             }
             featureList.add(featureRate);
             featureList.add(featureRate);
-//            if (!featureType.equals(Constants.feature_type_diag)) {
                 if (cursor < searchData.getLength()) {
                 if (cursor < searchData.getLength()) {
                     cursor++;
                     cursor++;
                 } else {
                 } else {
                     break;
                     break;
                 }
                 }
-//            } else {            //诊断最多返回5个
-//                if (cursor < 5) {
-//                    cursor++;
-//                } else {
-//                    break;
-//                }
-//            }
         }
         }
 
 
         return featureList;
         return featureList;
@@ -149,88 +139,4 @@ public class ResultDataProxy {
         }
         }
         return result;
         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;
 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.ParticipleUtil;
 import org.diagbot.nlp.participle.cfg.Configuration;
 import org.diagbot.nlp.participle.cfg.Configuration;
 import org.diagbot.nlp.participle.cfg.DefaultConfig;
 import org.diagbot.nlp.participle.cfg.DefaultConfig;
@@ -11,10 +11,6 @@ import org.diagbot.nlp.participle.word.LexemePath;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.util.List;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 
 /**
 /**
  * @Description:
  * @Description:
@@ -47,39 +43,39 @@ public class AddStandWordTest {
         long seconds = endTime - startTime;
         long seconds = endTime - startTime;
         System.out.println("添加标准词使用了:"+splitSeconds + "毫秒.");
         System.out.println("添加标准词使用了:"+splitSeconds + "毫秒.");
         System.out.println("处理文本总共使用了:"+seconds + "毫秒.");*/
         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";
         //        String s = "\tsafGG\tAFASSADG";
         //        System.out.println(s);
         //        System.out.println(s);
         //        System.out.println(s.trim());
         //        System.out.println(s.trim());
@@ -122,7 +118,7 @@ public class AddStandWordTest {
             int i = 1;
             int i = 1;
             for (Lexeme lexeme : lexemes) {
             for (Lexeme lexeme : lexemes) {
                 if (lexeme.getProperty().contains(",")) {
                 if (lexeme.getProperty().contains(",")) {
-                    ApplicationCacheUtil.setProterty(lexeme);
+//                    ApplicationCacheUtil.setProterty(lexeme);
                 }
                 }
                 if (lexemes.size() != i) {
                 if (lexemes.size() != i) {
                     System.out.print(lexeme.getText() + "(" + lexeme.getProperty() + ")|");
                     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>
             <artifactId>public</artifactId>
             <version>${project.version}</version>
             <version>${project.version}</version>
         </dependency>
         </dependency>
+
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>nlp</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <dependency>
         <dependency>
             <groupId>org.diagbot</groupId>
             <groupId>org.diagbot</groupId>
-            <artifactId>graph</artifactId>
+            <artifactId>common-service</artifactId>
             <version>1.0.0</version>
             <version>1.0.0</version>
-            <scope>compile</scope>
         </dependency>
         </dependency>
     </dependencies>
     </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.
  * 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 {
 public class LisDetail {
     private String detailName;
     private String detailName;

+ 15 - 15
common-push/src/main/java/org/diagbot/common/push/filter/PreResult.java

@@ -1,17 +1,17 @@
-package org.diagbot.common.push.filter;
+package org.diagbot.common.push.bean;
 
 
 /**
 /**
  * Created by louhr on 2019/8/31.
  * Created by louhr on 2019/8/31.
  */
  */
 public class PreResult {
 public class PreResult {
-    private String detailName;
-    private String uniqueName;
-    private Double maxValue;
-    private Double minValue;
-    private String name;
-    private String otherValue;
-    private String units;
-    private Double value;
+    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() {
     public String getDetailName() {
         return detailName;
         return detailName;
@@ -29,19 +29,19 @@ public class PreResult {
         this.uniqueName = uniqueName;
         this.uniqueName = uniqueName;
     }
     }
 
 
-    public Double getMaxValue() {
+    public String getMaxValue() {
         return maxValue;
         return maxValue;
     }
     }
 
 
-    public void setMaxValue(Double maxValue) {
+    public void setMaxValue(String maxValue) {
         this.maxValue = maxValue;
         this.maxValue = maxValue;
     }
     }
 
 
-    public Double getMinValue() {
+    public String getMinValue() {
         return minValue;
         return minValue;
     }
     }
 
 
-    public void setMinValue(Double minValue) {
+    public void setMinValue(String minValue) {
         this.minValue = minValue;
         this.minValue = minValue;
     }
     }
 
 
@@ -69,11 +69,11 @@ public class PreResult {
         this.units = units;
         this.units = units;
     }
     }
 
 
-    public Double getValue() {
+    public String getValue() {
         return value;
         return value;
     }
     }
 
 
-    public void setValue(Double value) {
+    public void setValue(String value) {
         this.value = 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.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -31,6 +31,8 @@ public class ResponseData {
     private List<String> diffDiag;//鉴别诊断
     private List<String> diffDiag;//鉴别诊断
     private List<String> excludeDiag; //排除诊断
     private List<String> excludeDiag; //排除诊断
 
 
+    private Map<String, List<CrisisDetail>> crisisDetails = new HashMap<>();
+
     public List<String> getDiffDiag() {
     public List<String> getDiffDiag() {
         return diffDiag;
         return diffDiag;
     }
     }
@@ -160,4 +162,12 @@ public class ResponseData {
     public void setBeforeCombineDis(List<FeatureRate> beforeCombineDis) {
     public void setBeforeCombineDis(List<FeatureRate> beforeCombineDis) {
         this.beforeCombineDis = 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 {
 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.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -23,7 +23,8 @@ public class SearchData {
     protected String resourceType;
     protected String resourceType;
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     protected String sysCode;
     protected String sysCode;
-    private List<LisDetail> lisArr = new ArrayList<>();
+    private List<PreResult> lisArr = new ArrayList<>();
+    protected String normal  = "";
     protected String chief  = "";
     protected String chief  = "";
     protected String symptom = "";
     protected String symptom = "";
     protected String vital = "";
     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>> graphInputs = new HashMap<>(10, 0.8f);
     //阴性 页面录入数据需要对结果过滤的集合
     //阴性 页面录入数据需要对结果过滤的集合
     private Map<String, Map<String, String>> filters = 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() {
     public Integer getDisType() {
         return disType;
         return disType;
@@ -63,11 +66,11 @@ public class SearchData {
         this.disType = disType;
         this.disType = disType;
     }
     }
 
 
-    public List<LisDetail> getLisArr() {
+    public List<PreResult> getLisArr() {
         return lisArr;
         return lisArr;
     }
     }
 
 
-    public void setLisArr(List<LisDetail> lisArr) {
+    public void setLisArr(List<PreResult> lisArr) {
         this.lisArr = lisArr;
         this.lisArr = lisArr;
     }
     }
 
 
@@ -157,6 +160,14 @@ public class SearchData {
         this.inputs = inputs;
         this.inputs = inputs;
     }
     }
 
 
+    public String getNormal() {
+        return normal;
+    }
+
+    public void setNormal(String normal) {
+        this.normal = normal;
+    }
+
     public String getChief() {
     public String getChief() {
         return chief;
         return chief;
     }
     }
@@ -292,4 +303,12 @@ public class SearchData {
     public void setOtherOrder(String otherOrder) {
     public void setOtherOrder(String otherOrder) {
         this.otherOrder = 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;
 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.ArrayList;
 import java.util.List;
 import java.util.List;
-import java.util.Map;
 
 
 public class Filnlly {
 public class Filnlly {
     private List<Indicators> adverseEvent;
     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.ArrayList;
 import java.util.Map;
 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;
 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;
 import com.alibaba.fastjson.JSONObject;
 
 

+ 5 - 2
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;
 import java.util.List;
 
 
@@ -7,6 +7,7 @@ import java.util.List;
  */
  */
 public class MedicalIndication {
 public class MedicalIndication {
     private String name;
     private String name;
+    // 触发推送的规则
     private String rule;
     private String rule;
     private List<MedicalIndicationDetail> details;
     private List<MedicalIndicationDetail> details;
 
 
@@ -22,7 +23,9 @@ public class MedicalIndication {
         return rule;
         return rule;
     }
     }
 
 
-    public void setRule(String rule) { this.rule = rule; }
+    public void setRule(String rule) {
+        this.rule = rule;
+    }
 
 
     public List<MedicalIndicationDetail> getDetails() {
     public List<MedicalIndicationDetail> getDetails() {
         return details;
         return details;

+ 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;
 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);
+            }
+        }
+    }
+}

+ 44 - 47
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -24,7 +24,7 @@ public class CacheFileManager {
 
 
     private String user = "root";
     private String user = "root";
     private String password = "lantone";
     private String password = "lantone";
-    private String url = "jdbc:mysql://192.168.2.236:3306/med?useUnicode=true&characterEncoding=UTF-8";
+    private String url = "jdbc:mysql://192.168.2.121:3306/med?useUnicode=true&characterEncoding=UTF-8";
 
 
     private String path = "";
     private String path = "";
 
 
@@ -73,7 +73,7 @@ public class CacheFileManager {
         try {
         try {
             EncrypDES encrypDES = new EncrypDES();
             EncrypDES encrypDES = new EncrypDES();
             //所有词典库 不能用concat_group 大小写不区分
             //所有词典库 不能用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_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" +
                     "left join kl_concept kc on l_1.concept_id = kc.id\n" +
                     "where kc.is_deleted = 'N' ";
                     "where kc.is_deleted = 'N' ";
@@ -191,11 +191,11 @@ public class CacheFileManager {
             st = conn.createStatement();
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             rs = st.executeQuery(sql);
             FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
             FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
-            String  r2 ,r3;
+            String r2, r3;
             while (rs.next()) {
             while (rs.next()) {
                 r2 = rs.getString(1);//疾病名称
                 r2 = rs.getString(1);//疾病名称
                 r3 = rs.getString(2);//疾病类别
                 r3 = rs.getString(2);//疾病类别
-                fw.write(encrypDES.encrytor(r2+ "|" + r3));
+                fw.write(encrypDES.encrytor(r2 + "|" + r3));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -213,7 +213,7 @@ public class CacheFileManager {
                 r2 = rs.getString(3);//sexType 1:男 2:女 3:都可以
                 r2 = rs.getString(3);//sexType 1:男 2:女 3:都可以
                 r3 = rs.getString(4);//min_age
                 r3 = rs.getString(4);//min_age
                 r4 = rs.getString(5);//max_age
                 r4 = rs.getString(5);//max_age
-                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3+ "|" + r4));
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3 + "|" + r4));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -258,7 +258,7 @@ public class CacheFileManager {
                 r1 = rs.getString(1);
                 r1 = rs.getString(1);
                 r2 = rs.getString(2);
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r3 = rs.getString(3);
-                fw.write(encrypDES.encrytor(r1+ "|" + r2+ "|" + r3));
+                fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
                 fw.write("\n");
                 fw.write("\n");
             }
             }
             fw.close();
             fw.close();
@@ -331,14 +331,14 @@ public class CacheFileManager {
             fw.close();
             fw.close();
 
 
             //规则过滤信息
             //规则过滤信息
-            sql = "SELECT set_name, idx_name, min_operator, min_value, min_unit, max_operator, " +
-                    " max_value, max_unit, eq_operator, eq_value, eq_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();
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             rs = st.executeQuery(sql);
-            fw = new FileWriter(path + "rule_filter.dict");
+            fw = new FileWriter(path + "bigdata_rule_filter.dict");
             String r6, r7, r8, r9, r10, r11, r12;
             String r6, r7, r8, r9, r10, r11, r12;
             while (rs.next()) {
             while (rs.next()) {
-                r1 = rs.getString(1);
+                r1 = String.valueOf(rs.getInt(1));
                 r2 = rs.getString(2);
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r3 = rs.getString(3);
                 r4 = rs.getString(4);
                 r4 = rs.getString(4);
@@ -350,57 +350,54 @@ public class CacheFileManager {
                 r10 = rs.getString(10);
                 r10 = rs.getString(10);
                 r11 = rs.getString(11);
                 r11 = rs.getString(11);
                 r12 = rs.getString(12);
                 r12 = rs.getString(12);
-                fw.write(encrypDES.encrytor(r1+ "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
-                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10 + "|" + r11 + "|" + r12));
+                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.write("\n");
             }
             }
             fw.close();
             fw.close();
 
 
-//            //规则过滤信息
-//            sql = "SELECT idx_name, set_name, set_status, min_value, max_value, standard_value, " +
-//                    " , unit, concept_text, crisis_status, remind FROM kl_rule_new ";
-//            st = conn.createStatement();
-//            rs = st.executeQuery(sql);
-//            fw = new FileWriter(path + "bigdata_rule_filter.dict");
-//            String r10;
-//            while (rs.next()) {
-//                r1 = rs.getString(1);
-//                r2 = rs.getString(2);
-//                r3 = rs.getString(3);
-//                r4 = rs.getString(4);
-//                r5 = rs.getString(5);
-//                r6 = rs.getString(6);
-//                r7 = rs.getString(7);
-//                r8 = rs.getString(8);
-//                r9 = rs.getString(9);
-//                r10 = rs.getString(10);
-//                r1 = StringUtils.isEmpty(r1)?"":r1;
-//                r2 = StringUtils.isEmpty(r1)?"":r2;
-//                r3 = StringUtils.isEmpty(r1)?"":r3;
-//                r4 = StringUtils.isEmpty(r1)?"":r4;
-//                r5 = StringUtils.isEmpty(r1)?"":r5;
-//                r6 = StringUtils.isEmpty(r1)?"":r6;
-//                r7 = StringUtils.isEmpty(r1)?"":r7;
-//                r8 = StringUtils.isEmpty(r1)?"":r8;
-//                r9 = StringUtils.isEmpty(r1)?"":r9;
-//                r10 = StringUtils.isEmpty(r1)?"":r10;
-//                fw.write(encrypDES.encrytor(r1+ "|" + r2 + "|" + r3 + "|" + r4 + "|" + r5
-//                        + "|" + r6 + "|" + r7 + "|" + r8 + "|" + r9 + "|" + r10));
-//                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();
         } catch (IOException ioe) {
         } catch (IOException ioe) {
             ioe.printStackTrace();
             ioe.printStackTrace();
         } catch (SQLException sqle) {
         } catch (SQLException sqle) {
             sqle.printStackTrace();
             sqle.printStackTrace();
-        }  catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         } finally {
         } finally {
             nlpJdbc.close(rs, st, conn);
             nlpJdbc.close(rs, st, conn);
         }
         }
     }
     }
 
 
-    private List<Map.Entry<String, String>> rsToMap(ResultSet rs, boolean isJoin) throws SQLException{
+    private List<Map.Entry<String, String>> rsToMap(ResultSet rs, boolean isJoin) throws SQLException {
         String r1 = "";
         String r1 = "";
         String r2 = "";
         String r2 = "";
         Map<String, String> libraryMap = new HashMap<>(10);
         Map<String, String> libraryMap = new HashMap<>(10);

+ 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.apache.commons.lang3.StringUtils;
 import org.diagbot.nlp.participle.cfg.Configuration;
 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 com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 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.text.DecimalFormat;
 import java.util.*;
 import java.util.*;
@@ -55,7 +55,7 @@ public class ClassifyDiag {
      * @param graphFeatures 过滤前的诊断结果
      * @param graphFeatures 过滤前的诊断结果
      * @return 返回过滤后的诊断结果
      * @return 返回过滤后的诊断结果
      */
      */
-    public List<FeatureRate> filterDiag(ResponseData graphResponseData,List<FeatureRate> graphFeatures){
+    public List<FeatureRate> filterDiag(ResponseData graphResponseData, List<FeatureRate> graphFeatures){
         //根据诊断依据规则过滤掉的诊断列表
         //根据诊断依据规则过滤掉的诊断列表
         List<String> excludeDiag = graphResponseData.getExcludeDiag();
         List<String> excludeDiag = graphResponseData.getExcludeDiag();
         //将需要排除的诊断从列表中删除
         //将需要排除的诊断从列表中删除

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

@@ -1,45 +0,0 @@
-package org.diagbot.common.push.filter;
-
-
-import org.diagbot.common.push.filter.pretreat.Pretreatment;
-import org.diagbot.common.push.filter.pretreat.PretreatmentSymptom;
-import org.diagbot.common.push.filter.pretreat.PretreatmentVital;
-import org.diagbot.common.work.SearchData;
-import org.springframework.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PretreatmentFilter {
-    public void crisisFilter(SearchData searchData) throws java.io.IOException {
-        //将数值类型内容全部转换为标准术语  依据kl_rule提供规则
-
-        List<PreResult> allPreResultList = new ArrayList<>();
-        //症状数据
-        if (!StringUtils.isEmpty(searchData.getSymptom())) {
-            searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), allPreResultList));
-        }
-        //体征数据
-        if (!StringUtils.isEmpty(searchData.getVital())) {
-            searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), allPreResultList));
-        }
-        //lis文本非结构化数据
-        if (!StringUtils.isEmpty(searchData.getLis())) {
-            searchData.setLis(add2PreResultList(new PretreatmentVital(), searchData.getLis(), allPreResultList));
-        }
-        //pacs数据
-        if (!StringUtils.isEmpty(searchData.getPacs())) {
-            searchData.setPacs(add2PreResultList(new PretreatmentVital(), searchData.getPacs(), allPreResultList));
-        }
-    }
-
-    private String add2PreResultList(Pretreatment pretreatment, String content, List<PreResult> allPreResultList) throws java.io.IOException {
-        List<PreResult> preResultList = pretreatment.analyze(content);
-        if (preResultList != null) {
-            allPreResultList.addAll(preResultList);
-
-
-        }
-        return content;
-    }
-}

+ 7 - 12
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/Pretreatment.java

@@ -1,6 +1,6 @@
 package org.diagbot.common.push.filter.pretreat;
 package org.diagbot.common.push.filter.pretreat;
 
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.participle.word.LexemePath;
@@ -19,10 +19,14 @@ public abstract class Pretreatment {
 
 
     protected int cursor = 0;
     protected int cursor = 0;
 
 
+    protected int max_back_search = 3;
+
     public abstract List<PreResult> analyze(String content) throws java.io.IOException;
     public abstract List<PreResult> analyze(String content) throws java.io.IOException;
 
 
     abstract PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index);
     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{
     protected List<PreResult> analyzeDefault(String content) throws java.io.IOException{
         LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
         LexemePath<Lexeme> lexemes = ParticipleUtil.participle(content);
 
 
@@ -55,9 +59,10 @@ public abstract class Pretreatment {
             return null;
             return null;
         }
         }
         PreResult result = new PreResult();
         PreResult result = new PreResult();
-        result.setValue(value);
+        result.setValue(String.valueOf(value));
         result.setUnits(lexeme.getText());
         result.setUnits(lexeme.getText());
         result.setDetailName(text);
         result.setDetailName(text);
+        result.setUniqueName(text);
         return result;
         return result;
     }
     }
 
 
@@ -75,14 +80,4 @@ public abstract class Pretreatment {
         }
         }
         return -1;
         return -1;
     }
     }
-
-    protected 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.VITAL_INDEX,
-                NegativeEnum.VITAL_INDEX_VALUE, NegativeEnum.VITAL_RESULT, NegativeEnum.SYMPTOM})) {
-            return leftLexeme.getText();
-        }
-        return null;
-    }
 }
 }

+ 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;
+    }
+}

+ 22 - 4
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentLis.java

@@ -1,15 +1,17 @@
 package org.diagbot.common.push.filter.pretreat;
 package org.diagbot.common.push.filter.pretreat;
 
 
-import org.diagbot.common.push.filter.PreResult;
+import org.diagbot.common.push.bean.PreResult;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NegativeEnum;
 import org.diagbot.nlp.util.NlpUtil;
 import org.diagbot.nlp.util.NlpUtil;
-import org.springframework.util.StringUtils;
 
 
+import java.lang.reflect.Array;
 import java.util.List;
 import java.util.List;
 
 
 public class PretreatmentLis extends Pretreatment {
 public class PretreatmentLis extends Pretreatment {
+    private String join_symbols = ";:;:";
+
     public List<PreResult> analyze(String content) throws java.io.IOException{
     public List<PreResult> analyze(String content) throws java.io.IOException{
         return super.analyzeDefault(content);
         return super.analyzeDefault(content);
     }
     }
@@ -21,8 +23,18 @@ public class PretreatmentLis extends Pretreatment {
         //继续往前找化验明细项
         //继续往前找化验明细项
         if (cursor > 0) cursor--;
         if (cursor > 0) cursor--;
         Lexeme leftLexeme = lexemes.get(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})) {
         if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.LIS_NAME})) {
-            result.setDetailName(leftLexeme.getText());
+            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 {
         } else {
             return null;
             return null;
         }
         }
@@ -31,11 +43,17 @@ public class PretreatmentLis extends Pretreatment {
         while (position > -1) {
         while (position > -1) {
             leftLexeme = lexemes.get(position);
             leftLexeme = lexemes.get(position);
             if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.LIS_TYPE})) {
             if (NlpUtil.isFeature(leftLexeme.getProperty(), new NegativeEnum[]{NegativeEnum.LIS_TYPE})) {
-                result.setName(leftLexeme.getText());
+                result.setName(NlpUtil.concept(leftLexeme, NegativeEnum.LIS_TYPE));
                 break;
                 break;
             }
             }
             position--;
             position--;
         }
         }
+        result.setValue(String.valueOf(value));
+        result.setUnits(lexeme.getText());
         return result;
         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;
+    }
+}

+ 29 - 2
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentSymptom.java

@@ -1,17 +1,44 @@
 package org.diagbot.common.push.filter.pretreat;
 package org.diagbot.common.push.filter.pretreat;
 
 
-import org.diagbot.common.push.filter.PreResult;
+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.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
 
 
 import java.util.List;
 import java.util.List;
 
 
 public class PretreatmentSymptom extends Pretreatment {
 public class PretreatmentSymptom extends Pretreatment {
+    protected NegativeEnum[] nees_symptom = new NegativeEnum[]{NegativeEnum.SYMPTOM};
+
     public List<PreResult> analyze(String content) throws java.io.IOException{
     public List<PreResult> analyze(String content) throws java.io.IOException{
-        return super.analyzeDefault(content);
+        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) {
     public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
         return super.createDefaultPreResult(lexemes, lexeme, 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;
+    }
 }
 }

+ 42 - 2
common-push/src/main/java/org/diagbot/common/push/filter/pretreat/PretreatmentVital.java

@@ -1,17 +1,57 @@
 package org.diagbot.common.push.filter.pretreat;
 package org.diagbot.common.push.filter.pretreat;
 
 
-import org.diagbot.common.push.filter.PreResult;
+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.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.participle.word.LexemePath;
+import org.diagbot.nlp.util.NegativeEnum;
+import org.diagbot.nlp.util.NlpUtil;
 
 
 import java.util.List;
 import java.util.List;
 
 
 public class PretreatmentVital extends Pretreatment {
 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{
     public List<PreResult> analyze(String content) throws java.io.IOException{
-        return super.analyzeDefault(content);
+        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) {
     public PreResult createPreResult(LexemePath<Lexeme> lexemes, Lexeme lexeme, int index) {
         return super.createDefaultPreResult(lexemes, lexeme, 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
  * @ClassName org.diagbot.bigdata.util.BigDataConstants
@@ -7,7 +7,7 @@ package org.diagbot.bigdata.util;
  * @Date 2019/1/16/016 14:06
  * @Date 2019/1/16/016 14:06
  * @Version 1.0
  * @Version 1.0
  **/
  **/
-public class BigDataConstants {
+public class PushConstants {
     public final static String resource_type_i = "I";       //住院
     public final static String resource_type_i = "I";       //住院
     public final static String resource_type_o = "O";       //门诊
     public final static String resource_type_o = "O";       //门诊
     public final static String resource_type_e = "E";       //急诊
     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 - 59
common-service/src/main/java/org/diagbot/common/javabean/Rule.java

@@ -1,59 +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 eq_operator;
-    // 等于值
-    private String eq_value;
-    // 等于值单位
-    private String eq_unit;
-    // 推送名称
-    private String remind;
-
-    public Rule() { }
-
-    public Rule(String[] elements) {
-//        Rule rule = new Rule();
-
-        if (elements.length == 12) {
-            this.set_name = (null == elements[0])?"":elements[0];
-            this.idx_name = (null == elements[1])?"":elements[1];
-            this.min_operator = (null == elements[2])?"":elements[2];
-            this.min_value = (null == elements[3])?"":elements[3];
-            this.min_unit = (null == elements[4])?"":elements[4];
-            this.max_operator = (null == elements[5])?"":elements[5];
-            this.max_value = (null == elements[6])?"":elements[6];
-            this.max_unit = (null == elements[7])?"":elements[7];
-            this.eq_operator = (null == elements[8])?"":elements[8];
-            this.eq_value = (null == elements[9])?"":elements[9];
-            this.eq_unit = (null == elements[10])?"":elements[10];
-            this.remind = (null == elements[11])?"":elements[11];
-        }
-    }
-}

+ 5 - 0
graph-web/pom.xml

@@ -35,6 +35,11 @@
 			<artifactId>common-service</artifactId>
 			<artifactId>common-service</artifactId>
 			<version>1.0.0</version>
 			<version>1.0.0</version>
 		</dependency>
 		</dependency>
+		<dependency>
+			<groupId>org.diagbot</groupId>
+			<artifactId>common-push</artifactId>
+			<version>1.0.0</version>
+		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>org.diagbot</groupId>
 			<groupId>org.diagbot</groupId>
 			<artifactId>nlp</artifactId>
 			<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;
 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.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.DiseaseCalculate;
 import org.diagbot.graphWeb.work.GraphCalculate;
 import org.diagbot.graphWeb.work.GraphCalculate;
 import org.diagbot.graphWeb.work.HighRiskCalculate;
 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.graphWeb.work.LisPacsCalculate;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.api.Response;
-import org.diagbot.pub.utils.PropertiesUtil;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 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 org.springframework.web.bind.annotation.ResponseBody;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
-import java.util.Map;
-
-import static org.diagbot.graph.jdbc.DriverManager.propertiesUtil;
 
 
 @Controller
 @Controller
 @RequestMapping("/graph")
 @RequestMapping("/graph")

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

@@ -1,18 +1,14 @@
 package org.diagbot.graphWeb.work;
 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.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 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;
 package org.diagbot.graphWeb.work;
 
 
 import org.apache.commons.lang3.StringUtils;
 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.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 

+ 12 - 12
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.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 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.DriverManager;
 import org.diagbot.graph.jdbc.Neo4jAPI;
 import org.diagbot.graph.jdbc.Neo4jAPI;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 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.diagbot.graphWeb.util.MapValueComparator;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -116,14 +116,14 @@ public class GraphCalculate {
             logger.info("diseaseSet :" + diseaseSet);
             logger.info("diseaseSet :" + diseaseSet);
         }
         }
         Integer diseaseType = searchData.getDisType();
         Integer diseaseType = searchData.getDisType();
-        List<LisDetail> lisArr = searchData.getLisArr();
+        List<PreResult> lisArr = searchData.getLisArr();
         Set<String> lisSet = new HashSet<>();
         Set<String> lisSet = new HashSet<>();
         Map<String,Double> lis_Result = new HashMap<>();
         Map<String,Double> lis_Result = new HashMap<>();
         if(lisArr != null && lisArr.size() > 0){
         if(lisArr != null && lisArr.size() > 0){
-            for (LisDetail lis:lisArr) {
+            for (PreResult lis:lisArr) {
                 String detailName = lis.getUniqueName();
                 String detailName = lis.getUniqueName();
                 logger.info("公表名为  :"+detailName);
                 logger.info("公表名为  :"+detailName);
-                Double value = lis.getValue();
+                Double value = Double.valueOf(lis.getValue());
                 lis_Result.put(detailName,value);
                 lis_Result.put(detailName,value);
                 lisSet.add(detailName);
                 lisSet.add(detailName);
             }
             }

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

@@ -1,16 +1,12 @@
 package org.diagbot.graphWeb.work;
 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.javabean.GdbResponse;
-import org.diagbot.graph.jdbc.DriverManager;
-import org.diagbot.graph.jdbc.Neo4jAPI;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.diagbot.pub.utils.http.HttpApi;
-import org.neo4j.driver.v1.Driver;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map;
 
 
 public class HighRiskCalculate {
 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;
 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.api.Response;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
 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>
             <artifactId>common-service</artifactId>
             <version>1.0.0</version>
             <version>1.0.0</version>
         </dependency>
         </dependency>
-
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>common-push</artifactId>
+            <version>1.0.0</version>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>org.diagbot</groupId>
             <groupId>org.diagbot</groupId>
             <artifactId>nlp</artifactId>
             <artifactId>nlp</artifactId>

+ 5 - 5
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.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 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.diagbot.pub.utils.PropertiesUtil;
-import org.neo4j.driver.internal.value.NodeValue;
 import org.neo4j.driver.v1.*;
 import org.neo4j.driver.v1.*;
 import org.neo4j.driver.v1.types.Node;
 import org.neo4j.driver.v1.types.Node;
 import org.neo4j.driver.v1.types.Path;
 import org.neo4j.driver.v1.types.Path;
@@ -863,6 +860,9 @@ public class Neo4jAPI {
                     } else if(que.equals("拟诊")){
                     } else if(que.equals("拟诊")){
                         queMap.put("拟诊","");
                         queMap.put("拟诊","");
                         neoPushMap.put(quezhenName,queMap);
                         neoPushMap.put(quezhenName,queMap);
+                    }else {
+                        queMap.put(que,"");
+                        neoPushMap.put(quezhenName,queMap);
                     }
                     }
                 }else {
                 }else {
                     Map<String,String> newMap = new HashMap<>();
                     Map<String,String> newMap = new HashMap<>();

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

@@ -1,5 +1,5 @@
 #235Mysql\u6570\u636E\u5E93
 #235Mysql\u6570\u636E\u5E93
-url_235 = jdbc:mysql://192.168.2.235:3306/scale?useUnicode=true&characterEncoding=UTF-8
+url_235 = jdbc:mysql://1.1.1.1:3306/scale?useUnicode=true&characterEncoding=UTF-8
 userNmae_235 = root
 userNmae_235 = root
 pass_235 = diagbot@20180822
 pass_235 = diagbot@20180822
 
 

+ 10 - 0
graphdb/pom.xml

@@ -84,6 +84,16 @@
             <scope>compile</scope>
             <scope>compile</scope>
         </dependency>
         </dependency>
 
 
+        <dependency>
+            <groupId>org.diagbot</groupId>
+            <artifactId>public</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.diagbot</groupId>-->
+            <!--<artifactId>nlp</artifactId>-->
+            <!--<version>1.0.0</version>-->
+        <!--</dependency>-->
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 41 - 0
graphdb/src/main/java/org/diagbot/pub/Ciku.java

@@ -0,0 +1,41 @@
+package org.diagbot.pub;
+
+public enum Ciku {
+    SYMPTOM("1","1,70"),VITAL_RESULT("2","35,70"),BIGlIS("3","12"),SUBLIS("subLis","13")
+    ,RESULTLIS("resultLis","14,70"),PACS("4","16"),RESULTPACS("resultPacs","17,70"),DISEASE("5","18")
+    ,HISTORY("6","18,70"),CAUSE("7","5,70"),PROGNOSIS("8","70"),OTHER("9","70");
+    private String name;
+    private String label;
+
+    Ciku(String name, String label) {
+        this.name = name;
+        this.label = label;
+    }
+    public static Ciku getEnum(String name) {
+        for (Ciku item : Ciku.values()) {
+            if (item.name.equals(name) ) {
+                return item;
+            }
+        }
+        return null;
+    }
+    public static String getLabel(String name) {
+        Ciku item = getEnum(name);
+        return item != null ? item.label : null;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+}

+ 44 - 0
graphdb/src/main/java/org/diagbot/pub/Label.java

@@ -0,0 +1,44 @@
+package org.diagbot.pub;
+
+public enum Label {
+    SYMPTOM("1","Symptom"),VITAL_RESULT("2","Vital"),LIS("3","LIS"),PACS("4","PACS"),
+    DISEASE("5","Disease"),HISTORY("6","History"),CAUSE("7","Cause"),PROGNOSIS("8","Other"),
+    OTHER("9","Other"),CONDITION("诊断依据","Condition"),NI("92","Condition"),QUE("91","Condition"),
+    HIGH("93","Condition"),DELETE("94","Condition"),
+    LISRESULT("化验结果","LISResult"),PACSRESULT("辅检结果","PACSResult");
+    private String name;
+    private String label;
+
+    Label(String name, String label) {
+        this.name = name;
+        this.label = label;
+    }
+    public static Label getEnum(String name) {
+        for (Label item : Label.values()) {
+            if (item.name.equals(name) ) {
+                return item;
+            }
+        }
+        return null;
+    }
+    public static String getLabel(String name) {
+        Label item = getEnum(name);
+        return item != null ? item.label : null;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+}

+ 46 - 0
graphdb/src/main/java/org/diagbot/pub/Type.java

@@ -0,0 +1,46 @@
+package org.diagbot.pub;
+
+/**
+ * excel
+ * 类型(1:症状,2:体征,3:化验,4:辅检,5:鉴别诊断,6:病史,7:诱因,8:病程,9:其他,91:确诊,92:拟诊,93:警惕)
+ */
+public enum Type {
+    SYMPTOM(1,"症状"),VITAL_RESULT(2,"体征结果"),LIS(3,"化验"),PACS(4,"辅检"),
+    DISEASE(5,"鉴别诊断"),HISTORY(6,"病史"),CAUSE(7,"诱因"),PROGNOSIS(8,"病程"),
+    OTHER(9,"其他"),QUE(91,"确诊"),NI(92,"拟诊"),HIGH(93,"警惕"),DELETE(94,"删除条件");
+    private Integer key;
+    private String name;
+
+    Type(Integer key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+    public static Type getEnum(Integer key) {
+        for (Type item : Type.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+    public static String getName(Integer key) {
+        Type item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    public Integer getKey() {
+        return key;
+    }
+
+    public void setKey(Integer key) {
+        this.key = key;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 153 - 0
graphdb/src/main/java/org/diagbot/repository/DiseaseRepository.java

@@ -18,4 +18,157 @@ public interface DiseaseRepository extends Neo4jRepository<Disease, Long> {
     @Query("match(d:Disease) where d.name in {0} return d.name as name, d.high_risk as risk")
     @Query("match(d:Disease) where d.name in {0} return d.name as name, d.high_risk as risk")
     List<Map<String, Object>> getHighRisk(List diagList);
     List<Map<String, Object>> getHighRisk(List diagList);
 
 
+
+    //删除诊断依据
+    //删除关系1
+    @Query("match(d:Disease)<-[r:拟诊|:确诊|:警惕]-(c:Condition)<-[r1]-(k:Condition)<-[r2]-(h:Condition) where d.disId={0} detach delete c,k,h")
+    void deleteRelation1(Long disId);
+    //删除关系2
+    @Query("match(d:Disease)<-[r:拟诊|:确诊|:警惕]-(c:Condition)<-[r1]-(k:Condition) where d.disId={0} detach delete c,k")
+    void deleteRelation2(Long disId);
+    //删除关系3
+    @Query("match(d:Disease)<-[r:拟诊|:确诊|:警惕]-(c:Condition) where d.disId={0} detach delete r")
+    void deleteRelation3(Long disId);
+    //删除排除关系4
+    @Query("match(d:Disease)<-[r:排除]-(l) where d.disId={0} detach delete l")
+    void deleteRelation4(Long disId);
+    //删除排除关系5
+    @Query("match(d:Disease)-[r:表现]->(j)-[r1:属于]->(k) where d.disId={0} detach delete r")
+    void deleteRelation5(Long disId);
+    //删除排除关系6
+    @Query("match(d:Disease)-[r:表现]->(j) where d.disId={0} detach delete r")
+    void deleteRelation6(Long disId);
+    //删除排除关系7
+    @Query("match(d:Disease)-[r:推荐]->(j:LIS) where d.disId={0} detach delete r")
+    void deleteRelation7(Long disId);
+    //删除排除关系8
+    @Query("match(d:Disease)-[r:推荐]->(j:PACS) where d.disId={0} detach delete r")
+    void deleteRelation8(Long disId);
+    //删除排除关系9
+    @Query("match(d:Disease)-[r:鉴别诊断]->(b) where d.disId={0} detach delete r")
+    void deleteRelation9(Long disId);
+    //删除排除关系10
+    @Query("match(c:Condition) where c.name={0} detach delete c")
+    void deleteRelation10(String conditionName);
+    //删除诊断
+    @Query("match(c:Disease) where c.disId={0} detach delete c")
+    void deleteRelation11(Long disId);
+    //更新图谱
+    //存储疾病
+    @Query("merge(d:Disease{name:{0},disId:{1},emergency:{2}})")
+    void mergeDis(String name,Long disId,Integer emergency);
+    //存储确诊,拟诊,警惕
+    @Query( "merge(c:Condition{name:{0},path:{1}})")
+    void mergeCondition(String disName,Integer path);
+    @Query("match(c:Condition{name:{0}}),(d:Disease{disId:{1}})" +
+            " merge(c)-[:确诊]->(d)")
+    void mergeQueNiHigh(String conditionName,Long disId);
+    @Query("match(c:Condition{name:{0}}),(d:Disease{disId:{1}})" +
+            " merge(c)-[:拟诊]->(d)")
+    void mergeNiHigh(String conditionName,Long disId);
+    @Query("match(c:Condition{name:{0}}),(d:Disease{disId:{1}})" +
+            " merge(c)-[:警惕]->(d)")
+    void mergeHigh(String conditionName,Long disId);
+    //任几的condition
+    @Query("merge(c:Condition{name:{0},path:{1},relation:{2}})")
+    void mergeRenCondition(String conditionName,Integer path,String relation);
+    @Query("match(c:Condition{name:{0}}),(s:Condition{name:{1}}) merge(c)-[r:诊断依据]->(s)")
+    void mergeRenCondition(String c1,String c2);
+    //具体code Condition
+    @Query("merge(c:Condition{name:{0},path:1,relation:'任一'})")
+    void mergeNUMCondition(String disName);
+    @Query("match(c:Condition{name:{0}}),(s:Condition{name:{1}}) merge(c)-[r:诊断依据]->(s)")
+    void mergeNUMCondition(String c1,String c2);
+    //开始添加所有的词语
+    //添加症状标准词
+    @Query("merge(d:Symptom{name:{0}})")
+    void mergeStandardSymptom(String name);
+    //疾病表现症状标准词
+    @Query("match(d:Disease{disId:{0}}),(s:Symptom{name:{1}}) merge(d)-[r:表现]->(s)")
+    void mergeRelationStandard(Long disId,String name);
+    //属于症状标准词
+    @Query("match(d:Condition{name:{0}}),(s:Symptom{name:{1}}) merge(d)<-[r:属于]-(s)")
+    void mergeRelationStandardshuyu(String conditionName,String name);
+    //添加体征标准词
+    @Query("merge(d:Vital{name:{0}})")
+    void mergeStandardVital(String name);
+    //疾病表现体征标准词
+    @Query("match(d:Disease{disId:{0}}),(s:Vital{name:{1}}) merge(d)-[r:表现]->(s)")
+    void mergeRelationStandardVital(Long disId,String name);
+    //属于体征标准词
+    @Query("match(d:Condition{name:{0}}),(s:Vital{name:{1}}) merge(d)<-[r:属于]-(s)")
+    void mergeRelationStandardVitalshuyu(String conditionName,String name);
+    //添加病史标准词
+    @Query("merge(d:History{name:{0}})")
+    void mergeStandardHistory(String name);
+    //疾病表现病史标准词
+    @Query("match(d:Disease{disId:{0}}),(s:History{name:{1}}) merge(d)-[r:表现]->(s)")
+    void mergeRelationStandardHistory(Long disId,String name);
+    //属于病史标准词
+    @Query("match(d:Condition{name:{0}}),(s:History{name:{1}}) merge(d)<-[r:属于]-(s)")
+    void mergeRelationStandardHistoryshuyu(String conditionName,String name);
+    //添加诱因标准词
+    @Query("merge(d:Cause{name:{0}})")
+    void mergeStandardCause(String name);
+    //疾病表现诱因标准词
+    @Query("match(d:Disease{disId:{0}}),(s:Cause{name:{1}}) merge(d)-[r:表现]->(s)")
+    void mergeRelationStandardCause(Long disId,String name);
+    //属于诱因标准词
+    @Query("match(d:Condition{name:{0}}),(s:Cause{name:{1}}) merge(d)<-[r:属于]-(s)")
+    void mergeRelationStandardCauseshuyu(String conditionName,String name);
+    //添加病程标准词
+    @Query("merge(d:Prognosis{name:{0}})")
+    void mergeStandardPrognosis(String name);
+    //疾病表现病程标准词
+    @Query("match(d:Disease{disId:{0}}),(s:Prognosis{name:{1}}) merge(d)-[r:表现]->(s)")
+    void mergeRelationStandardPrognosis(Long disId,String name);
+    //属于病程标准词
+    @Query("match(d:Condition{name:{0}}),(s:Prognosis{name:{1}}) merge(d)<-[r:属于]-(s)")
+    void mergeRelationStandardPrognosisshuyu(String conditionName,String name);
+    //添加其他标准词
+    @Query("merge(d:Other{name:{0}})")
+    void mergeStandardOther(String name);
+    //疾病表现其他标准词
+    @Query("match(d:Disease{disId:{0}}),(s:Other{name:{1}}) merge(d)-[r:表现]->(s)")
+    void mergeRelationStandardOther(Long disId,String name);
+    //属于其他标准词
+    @Query("match(d:Condition{name:{0}}),(s:Other{name:{1}}) merge(d)<-[r:属于]-(s)")
+    void mergeRelationStandardOthershuyu(String conditionName,String name);
+    //添加鉴别诊断
+    @Query("merge(d:DifferentDis{name:{0}})")
+    void mergeDifferentDis(String disName);
+    //疾病和鉴别诊断创建关系
+    @Query("match(d:Disease{disId:{0}}),(s:DifferentDis{name:{1}}) merge(d)-[r:鉴别诊断]->(s)")
+    void mergeRelationDifferentDis(Long disId,String name);
+    //创建公表名
+    @Query("merge(l:LIS{name:{0}})")
+    void mergePublicLIS(String lisName);
+    //疾病和鉴别诊断创建关系
+    @Query("match(d:Disease{disId:{0}}),(s:LIS{name:{1}}) merge(d)-[r:推荐]->(s)")
+    void mergeRelationLIS(Long disId,String name);
+    //创建化验结果节点
+    @Query("merge(l:LISResult{name:{0}})")
+    void mergeLISRESULT(String name);
+    //公表名和化验结果创建关系
+    @Query("match(d:LIS{name:{0}}),(s:LISResult{name:{1}}) merge(d)-[r:结果]->(s)")
+    void mergeRelationPublicLIS(String publicLis,String lisResult);
+    //化验结果和对应的codeCondition创建关系
+    @Query("match(d:Condition{name:{0}}),(s:LISResult{name:{1}}) merge(d)<-[r:诊断依据]-(s)")
+    void mergeRelationCondiLisRes(String codeCondition,String lisRes);
+    //创建辅检项目
+    @Query("merge(p:PACS{name:{0}})")
+    void mergePacs(String pacsName);
+    //疾病推荐辅检
+    @Query("match(d:Disease{disId:{0}}),(s:PACS{name:{1}}) merge(d)-[r:推荐]->(s)")
+    void mergeRelationDis2Pacs(Long disId,String name);
+    //创建辅检结果节点
+    @Query("merge(p:PACSResult{name:{0}})")
+    void mergePacsResult(String name);
+    //创建辅检和辅检结果的关系
+    @Query("match(d:PACS{name:{0}}),(s:PACSResult{name:{1}}) merge(d)-[r:结果]->(s)")
+    void mergeRelationPacsResult(String pacs,String pacsResult);
+    //辅检结果和对应的codeCondition创建关系
+    @Query("match(d:Condition{name:{0}}),(s:PACSResult{name:{1}}) merge(d)<-[r:诊断依据]-(s)")
+    void mergeRelationCondiPacsRes(String codeCondition,String pacsRes);
 }
 }
+

+ 8 - 3
graphdb/src/main/java/org/diagbot/service/KnowledgeService.java

@@ -5,9 +5,7 @@ import org.diagbot.entity.node.Symptom;
 import org.diagbot.vo.*;
 import org.diagbot.vo.*;
 import org.diagbot.entity.node.Disease;
 import org.diagbot.entity.node.Disease;
 import org.diagbot.entity.node.base.BaseNode;
 import org.diagbot.entity.node.base.BaseNode;
-import org.diagbot.vo.domain.FeatureRate;
-import org.diagbot.vo.domain.ResponseData;
-import org.diagbot.vo.domain.SearchData;
+import org.diagbot.vo.domain.*;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -54,4 +52,11 @@ public interface KnowledgeService {
     List<Symptom> selectAllSymptom(PageVo pageVo);
     List<Symptom> selectAllSymptom(PageVo pageVo);
     List<LIS> selectAllLIS(PageVo pageVo);
     List<LIS> selectAllLIS(PageVo pageVo);
 
 
+    //更新图谱
+    RespDTO updateNeoDisease(NeoParamVO singleDisease);
+    //删除图谱
+    RespDTO deleteNeoDisease(NeoParamVO singleDisease);
+    //批量插入
+    RespDTO<Boolean> batchInsertDis();
+
 }
 }

+ 800 - 3
graphdb/src/main/java/org/diagbot/service/impl/KnowledgeServiceImpl.java

@@ -6,6 +6,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.diagbot.entity.node.LIS;
 import org.diagbot.entity.node.LIS;
 import org.diagbot.entity.node.Symptom;
 import org.diagbot.entity.node.Symptom;
 import org.diagbot.mapper.KnowledgeMapper;
 import org.diagbot.mapper.KnowledgeMapper;
+import org.diagbot.pub.Ciku;
+import org.diagbot.pub.Label;
+import org.diagbot.pub.Type;
+import org.diagbot.pub.jdbc.MysqlJdbc;
 import org.diagbot.service.KnowledgeService;
 import org.diagbot.service.KnowledgeService;
 import org.diagbot.vo.*;
 import org.diagbot.vo.*;
 import org.diagbot.entity.node.Disease;
 import org.diagbot.entity.node.Disease;
@@ -24,12 +28,16 @@ import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.math.RoundingMode;
 import java.math.RoundingMode;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.text.NumberFormat;
 import java.text.NumberFormat;
 import java.util.*;
 import java.util.*;
 
 
 
 
 @Service
 @Service
-public class KnowledgeServiceImpl implements KnowledgeService {
+public class    KnowledgeServiceImpl implements KnowledgeService {
     Logger logger = LoggerFactory.getLogger(KnowledgeServiceImpl.class);
     Logger logger = LoggerFactory.getLogger(KnowledgeServiceImpl.class);
     @Autowired
     @Autowired
     private SymptomRepository symptomRepository;
     private SymptomRepository symptomRepository;
@@ -47,9 +55,10 @@ public class KnowledgeServiceImpl implements KnowledgeService {
     private KnowledgeMapper knowledgeMapper;
     private KnowledgeMapper knowledgeMapper;
 
 
     private List<BaseNode> baseNodes;
     private List<BaseNode> baseNodes;
-
+    private String user = "root";
+    private String password = "lantone";
+    private String url = "jdbc:mysql://192.168.2.241:3306/med?useUnicode=true&characterEncoding=UTF-8";
     private Pageable pageable;
     private Pageable pageable;
-
     /**
     /**
      * 处理症状节点相关的申请
      * 处理症状节点相关的申请
      */
      */
@@ -1397,6 +1406,794 @@ public class KnowledgeServiceImpl implements KnowledgeService {
         indicators1.setDetails(detailList1);
         indicators1.setDetails(detailList1);
         return indicators1;
         return indicators1;
     }
     }
+    //获取mysql链接
+    public Connection getConnect(){
+        MysqlJdbc mysqlJdbc = new MysqlJdbc(user, password, url);
+        Connection connect = mysqlJdbc.connect();
+        return connect;
+    }
+
+    /**
+     * 更新图谱
+     * @param singleDisease
+     * @return
+     * 类型(1:症状,2:体征,3:化验,4:辅检,5:鉴别诊断,6:病史,7:诱因,8:病程,9:其他,91:确诊,92:拟诊,93:警惕)
+     */
+    @Override
+    public RespDTO updateNeoDisease(NeoParamVO singleDisease) {
+        RespDTO respDTO = RespDTO.onSuc(true);
+        RespDTO respDTO1 = null;
+        try {
+        Connection connect = getConnect();
+        Long disId = singleDisease.getId();
+            //把数据库中的所有词读进map缓存
+        Map<String, Map<String, String>> ciKu = this.allStandWord2Map(connect);
+        respDTO1 = this.updateNeo(respDTO, disId,connect,ciKu);
+        connect.close();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return respDTO1;
+    }
+
+    public RespDTO updateNeo(RespDTO respDTO,Long disId,Connection connection, Map<String, Map<String, String>> ciKu){
+        //先删除
+        this.neo4jDelete(disId,connection);
+        String disName = this.getDisName(disId,connection);
+        if(StringUtils.isNotEmpty(disName)){
+            diseaseRepository.mergeDis(disName,disId,0);
+        }else {
+            respDTO = RespDTO.onError("在数据库中没有找到"+disId+"对应的疾病!!");
+        }
+
+        //获取每个诊断依据的全部数据
+        List<Map<String, String>> allData = this.getAllData(disId,connection);
+        //获取拟诊,确诊,警惕组合
+        Map<String, List<String>> allNiQueZhenCollection = this.getAllNiQueZhenCollection(disId,connection);
+        this.saveNiQue2Neo(allData,allNiQueZhenCollection,disName,disId);
+        this.saveData2Neo4j(allData,disId,disName,ciKu);
+        return respDTO;
+    }
+
+    /**
+     * 把一个完整的诊断依据封装到list中,list中存的是map,一行一个map
+     * @param disId
+     * @return
+     */
+    public List<Map<String,String>> getAllData(Long disId,Connection connection){
+        List<Map<String,String>> contentList = new ArrayList<>();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            String type, code ,standard,relation,result,formula,name;
+            String sql = "SELECT diagnose_id,dis_name,`type`,`code`,standard,relation,result,formula FROM `kl_diagnose_detail` where diagnose_id = "+disId+"  and is_deleted = 'N'";
+            st = connection.createStatement();
+            rs = st.executeQuery(sql);
+            while (rs.next()){
+                Map<String,String> content = new HashMap<>();
+                type = rs.getString(3);
+                code = rs.getString("code");
+                standard = rs.getString("standard");
+                relation = rs.getString("relation");
+                result = rs.getString("result");
+                formula = rs.getString("formula");
+                name = Type.getName(Integer.parseInt(type));
+                content.put("type",type);
+                content.put("typeName",name);
+                content.put("code",code);
+                content.put("standard",standard);
+                content.put("relation",relation);
+                content.put("result",result);
+                content.put("formula",formula);
+                contentList.add(content);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                rs.close();
+                st.close();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return contentList;
+    }
+
+    /**
+     * 获取一个诊断依据的确诊,拟诊,警惕集合
+     * @param disId
+     * @return
+     */
+    public Map<String,List<String>> getAllNiQueZhenCollection(Long disId,Connection connection)  {
+        Map<String,List<String>> queNiMap = new HashMap<>();
+        Statement st = null;
+        ResultSet rs = null;
+        List<String> queList = new ArrayList<>();
+        List<String> niList = new ArrayList<>();
+        List<String> highList = new ArrayList<>();
+        try {
+            String type, formula,  label,name;
+            String sql = "SELECT type,formula FROM `kl_diagnose_detail` where diagnose_id = "+disId+" and type in (91,92,93)";
+            st = connection.createStatement();
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                type = rs.getString(1);
+                formula = rs.getString(2);
+                name = Type.getName(Integer.parseInt(type));
+                if ("拟诊".equals(name)) {
+                    niList.add(formula);
+                } else if ("确诊".equals(name)) {
+                    queList.add(formula);
+                } else if ("警惕".equals(name)) {
+                    highList.add(formula);
+                }
+            }
+            List<String> newQueList = new ArrayList<>();
+            if(queList.size()>0){
+                for (String que:queList) {
+                    if(que.contains("拟诊")){
+                        for (String ni:niList
+                             ) {
+                            newQueList.add(que.replaceAll("拟诊",ni));
+                        }
+                    }else {
+                        newQueList.add(que);
+                    }
+                }
+            }
+            queNiMap.put("拟诊",niList);
+            queNiMap.put("确诊",newQueList);
+            queNiMap.put("警惕",highList);
+        }catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                rs.close();
+                st.close();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return queNiMap;
+    }
+
+    /**
+     * 加载所有词库
+     * @return
+     */
+    public  Map<String,Map<String,String>> allStandWord2Map(Connection connection){
+        Map<String,Map<String,String>> ciKu = new HashMap<>();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            String tongName, type,  isConcept,stand;
+            String sql = "SELECT name, type_id,is_concept,IF(is_concept=1,a.name,(select lib_name from kl_concept b where b.id = a.concept_id) ) lib_name \n" +
+                    "from kl_library_info a where  a.is_deleted = 'N'\n" +
+                    "and type_id in (1,5,12,13,14,16,17,18,35,70)";
+            st = connection.createStatement();
+            rs = st.executeQuery(sql);
+            Map<String,String> detail =null;
+            while (rs.next()) {
+                tongName = rs.getString(1);
+                type = rs.getString(2);
+                isConcept = rs.getString(3);
+                stand = rs.getString(4);
+                detail = new HashMap<>();
+                detail.put("isConcept",isConcept);
+                detail.put("stand",stand);
+                ciKu.put(tongName+","+type,detail);
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                rs.close();
+                st.close();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            return ciKu;
+        }
+    }
+
+    /**
+     * 获取疾病名
+     * @param disId
+     * @return
+     */
+    public String getDisName(Long disId,Connection connection){
+        Statement st = null;
+        ResultSet rs = null;
+        String name="";
+        try {
+            String sql = "SELECT dis_name FROM `kl_diagnose_detail` where diagnose_id = "+disId+" and is_deleted = 'N'";
+            st = connection.createStatement();
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                name = rs.getString(1);
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                rs.close();
+                st.close();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            return name;
+        }
+    }
+    /**
+     * 把确诊,拟诊,警惕存入图谱
+     */
+    public void saveNiQue2Neo(List<Map<String, String>> allData,Map<String, List<String>> allNiQueZhenCollection,String disName,Long disId){
+        List<String> stringList =null;
+        String[] types = {"确诊","拟诊","警惕"};
+        Integer path = 1;
+        String[] nisplits;
+        for (String type:types) {
+            if("确诊".equals(type)){
+                stringList = allNiQueZhenCollection.get(type);
+                if(stringList != null){
+                    for(int i =0;i<stringList.size();i++){
+                        nisplits = stringList.get(i).split("\\+");
+                        path = nisplits.length;
+                        diseaseRepository.mergeCondition(disName+"-"+type+"组块"+(i+1),path);
+                        diseaseRepository.mergeQueNiHigh(disName+"-"+type+"组块"+(i+1),disId);
+                        this.splitConditionContent(nisplits,disName,disName+"-"+type+"组块"+(i+1),allData);
+                    }
+                }
+            }else if("拟诊".equals(type)){
+                stringList = allNiQueZhenCollection.get(type);
+                if(stringList != null){
+                    for(int i =0;i<stringList.size();i++){
+                        nisplits = stringList.get(i).split("\\+");
+                        path = nisplits.length;
+                        diseaseRepository.mergeCondition(disName+"-"+type+"组块"+(i+1),path);
+                        diseaseRepository.mergeNiHigh(disName+"-"+type+"组块"+(i+1),disId);
+                        this.splitConditionContent(nisplits,disName,disName+"-"+type+"组块"+(i+1),allData);
+                    }
+                }
+            }else if("警惕".equals(type)){
+                stringList = allNiQueZhenCollection.get(type);
+                if(stringList != null){
+                    for(int i =0;i<stringList.size();i++){
+                        nisplits = stringList.get(i).split("\\+");
+                        path = nisplits.length;
+                        diseaseRepository.mergeCondition(disName+"-"+type+"组块"+(i+1),path);
+                        diseaseRepository.mergeHigh(disName+"-"+type+"组块"+(i+1),disId);
+                        this.splitConditionContent(nisplits,disName,disName+"-"+type+"组块"+(i+1),allData);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 处理任几
+     * @param nisplits
+     * @param disName
+     * @param startNode
+     * @param allData
+     */
+    public void splitConditionContent(String[] nisplits,String disName,String startNode,List<Map<String, String>> allData){
+        Integer path = 1;
+        String rel = "";
+        for (String ni:nisplits) {
+
+            if(ni.contains("/")){
+                if(ni.contains("任一")){
+                    path = 1;
+                    rel = "任一";
+                }else if(ni.contains("任二")){
+                    path = 2;
+                    rel = "任二";
+                }else if(ni.contains("任三")){
+                    path = 3;
+                    rel = "任三";
+                }else if(ni.contains("任四")){
+                    path = 4;
+                    rel = "任四";
+                }else if(ni.contains("任五")){
+                    path = 5;
+                    rel = "任五";
+                }else if(ni.contains("任六")){
+                    path = 6;
+                    rel = "任六";
+                }else if(ni.contains("任七")){
+                    path = 7;
+                    rel = "任七";
+                }else {
+                    path = 1;
+                    rel = "任一";
+                }
+                diseaseRepository.mergeRenCondition(disName+ni,path,rel);
+                diseaseRepository.mergeRenCondition(disName+ni,startNode);
+                //获取这个任几集合的数字集合
+                List<String> numList = this.getNumList(ni);
+                if(numList != null && numList.size()>0){
+                    for (String num:numList
+                            ) {
+                        this.processDetailNum(disName,num,disName+ni,allData);
+                    }
+                }
+            }else {
+                this.processDetailNum(disName,ni,startNode,allData);
+            }
+        }
+    }
+
+    /**
+     * 获取任几集合的code列表
+     * @return
+     */
+    public List<String> getNumList(String renCondition){
+        List<String> numList = new ArrayList<>();
+        String[] numSplits = renCondition.split("/");
+        if(numSplits.length>0){
+            for (int i=0;i<numSplits.length;i++){
+                if(i == 0){
+                    numList.add(numSplits[i].replaceAll("\\(",""));
+                }else if(i == numSplits.length-1){
+                    String numSplit = numSplits[i];
+                    int i1 = numSplit.indexOf(")");
+                    System.out.println(numSplit+"\t"+i1);
+                    if(i1 >= 0){
+                        numList.add(numSplits[i].substring(0,numSplits[i].indexOf(")")));
+                    }else {
+                        numList.add(numSplit);
+                    }
+
+                }else {
+                    numList.add(numSplits[i]);
+                }
+            }
+        }
+        return numList;
+    }
+    public void processDetailNum(String disName,String num,String renCondition,List<Map<String, String>> allData){
+        String[] types = {"化验","辅检","排除条件"};
+        for (Map<String, String> row:allData) {
+            String code = row.get("code");//编码
+            String type = row.get("type");//类型
+            String typeName = row.get("typeName");//类型对应的中文名
+            String relation = row.get("relation");//关联词
+            String result = row.get("result");//结果
+            if(num.equals(code)){
+                if(Arrays.asList(types).indexOf(typeName) <0){
+                    diseaseRepository.mergeNUMCondition(disName+code);
+                    diseaseRepository.mergeNUMCondition(disName+code,renCondition);
+                }else if("化验".equals(typeName) && !"".equals(result)){
+                    diseaseRepository.mergeNUMCondition(disName+code);
+                    diseaseRepository.mergeNUMCondition(disName+code,renCondition);
+                }else if("辅检".equals(typeName) && !"".equals(relation)){
+                    diseaseRepository.mergeNUMCondition(disName+code);
+                    diseaseRepository.mergeNUMCondition(disName+code,renCondition);
+                }
+            }
+        }
+    }
+
+    /**
+     * 保存完整的诊断依据入知识图谱
+     * @param allData
+     * @param disId
+     * @param disName
+     */
+    public void saveData2Neo4j(List<Map<String, String>> allData,Long disId,String disName,Map<String, Map<String, String>> ciKu){
+        for (Map<String,String> row:allData) {
+            String code = row.get("code");//编码
+            String type = row.get("type");//类型
+            String typeName = row.get("typeName");//类型对应的中文名
+            String standard = row.get("standard");//标准词
+            String relation = row.get("relation");//关联词
+            String result = row.get("result");//结果
+            if(StringUtils.isNotEmpty(type)){
+                String[] split =null;
+                String[] lisResultSplit =null;
+                String[] pacsResultSplit =null;
+                String standWord = null;String lisResult = null,pacsResult=null;
+                if(!"3".equals(type) && !"4".equals(type) && !"5".equals(type)){
+                    //添加词语之前,要找标准词
+                    //添加standard
+                    switch (type){
+                        case "1": //症状
+                            standWord = searchStandWord(standard, type, ciKu);
+                            if(StringUtils.isNotEmpty(standWord)){
+                                diseaseRepository.mergeStandardSymptom(standWord);
+                                diseaseRepository.mergeRelationStandard(disId,standWord);
+                                diseaseRepository.mergeRelationStandardshuyu(disName+code,standWord);
+                            }
+                            if(StringUtils.isNotEmpty(relation)){
+                                split = relation.split("、");
+                                if(split!=null && split.length>0){
+                                    for (String ci:split) {
+                                        if(StringUtils.isNotEmpty(ci)){
+                                            //找标准词
+                                            standWord = searchStandWord(ci,type,ciKu);
+                                            if(StringUtils.isNotEmpty(standWord)){
+                                                diseaseRepository.mergeStandardSymptom(standWord);
+                                                diseaseRepository.mergeRelationStandardshuyu(disName+code,standWord);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                        case "2"://体征结果
+                            standWord = searchStandWord(standard,type,ciKu);
+                            if(StringUtils.isNotEmpty(standWord)){
+                                diseaseRepository.mergeStandardVital(standWord);
+                                diseaseRepository.mergeRelationStandardVital(disId,standWord);
+                                diseaseRepository.mergeRelationStandardVitalshuyu(disName+code,standWord);
+                            }
+                            if(StringUtils.isNotEmpty(relation)){
+                                split = relation.split("、");
+                                if(split!=null && split.length>0){
+                                    for (String ci:split) {
+                                        if(StringUtils.isNotEmpty(ci)){
+                                            //找标准词
+                                            standWord = searchStandWord(ci,type,ciKu);
+                                            if(StringUtils.isNotEmpty(standWord)){
+                                                diseaseRepository.mergeStandardVital(standWord);
+                                                diseaseRepository.mergeRelationStandardVitalshuyu(disName+code,standWord);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                        case "6"://病史
+                            standWord = searchStandWord(standard,type,ciKu);
+                            if(StringUtils.isNotEmpty(standWord)){
+                                diseaseRepository.mergeStandardHistory(standWord);
+                                diseaseRepository.mergeRelationStandardHistory(disId,standWord);
+                                diseaseRepository.mergeRelationStandardHistoryshuyu(disName+code,standWord);
+                            }
+                            if(StringUtils.isNotEmpty(relation)){
+                                split = relation.split("、");
+                                if(split!=null && split.length>0){
+                                    for (String ci:split) {
+                                        if(StringUtils.isNotEmpty(ci)){
+                                            //找标准词
+                                            standWord = searchStandWord(ci,type,ciKu);
+                                            if(StringUtils.isNotEmpty(standWord)){
+                                                diseaseRepository.mergeStandardHistory(standWord);
+                                                diseaseRepository.mergeRelationStandardHistoryshuyu(disName+code,standWord);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                        case "7"://诱因
+                            standWord = searchStandWord(standard,type,ciKu);
+                            if(StringUtils.isNotEmpty(standWord)){
+                                diseaseRepository.mergeStandardCause(standWord);
+                                diseaseRepository.mergeRelationStandardCause(disId,standWord);
+                                diseaseRepository.mergeRelationStandardCauseshuyu(disName+code,standWord);
+                            }
+                            if(StringUtils.isNotEmpty(relation)){
+                                split = relation.split("、");
+                                if(split!=null && split.length>0){
+                                    for (String ci:split) {
+                                        if(StringUtils.isNotEmpty(ci)){
+                                            //找标准词
+                                            standWord = searchStandWord(ci,type,ciKu);
+                                            if(StringUtils.isNotEmpty(standWord)){
+                                                diseaseRepository.mergeStandardCause(standWord);
+                                                diseaseRepository.mergeRelationStandardCauseshuyu(disName+code,standWord);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                        case "8"://病程
+                            standWord = searchStandWord(standard,type,ciKu);
+                            if(StringUtils.isNotEmpty(standWord)){
+                                diseaseRepository.mergeStandardPrognosis(standWord);
+                                diseaseRepository.mergeRelationStandardPrognosis(disId,standWord);
+                                diseaseRepository.mergeRelationStandardPrognosisshuyu(disName+code,standWord);
+                            }
+                            if(StringUtils.isNotEmpty(relation)){
+                                split = relation.split("、");
+                                if(split!=null && split.length>0){
+                                    for (String ci:split) {
+                                        if(StringUtils.isNotEmpty(ci)){
+                                            //找标准词
+                                            standWord = searchStandWord(ci,type,ciKu);
+                                            if(StringUtils.isNotEmpty(standWord)){
+                                                diseaseRepository.mergeStandardPrognosis(standWord);
+                                                diseaseRepository.mergeRelationStandardPrognosisshuyu(disName+code,standWord);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                        case "9"://其他
+                            standWord = searchStandWord(standard,type,ciKu);
+                            if(StringUtils.isNotEmpty(standWord)){
+                                diseaseRepository.mergeStandardOther(standard);
+                                diseaseRepository.mergeRelationStandardOther(disId,standard);
+                                diseaseRepository.mergeRelationStandardOthershuyu(disName+code,standard);
+                            }
+                            if(StringUtils.isNotEmpty(relation)){
+                                split = relation.split("、");
+                                if(split!=null && split.length>0){
+                                    for (String ci:split) {
+                                        if(StringUtils.isNotEmpty(ci)){
+                                            //找标准词
+                                            standWord = searchStandWord(ci,type,ciKu);
+                                            if(StringUtils.isNotEmpty(standWord)){
+                                                diseaseRepository.mergeStandardOther(standWord);
+                                                diseaseRepository.mergeRelationStandardOthershuyu(disName+code,standWord);
+                                            }
+
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                    }
+                }else if("5".equals(type)){   //鉴别诊断
+                    //找标准词
+                    diseaseRepository.mergeDifferentDis(standard);
+                    diseaseRepository.mergeRelationDifferentDis(disId,standard);
+                    if(StringUtils.isNotEmpty(relation)){
+                        split = relation.split("、");
+                        if(split !=null && split.length>0){
+                            for (String dis:split) {
+                                if(StringUtils.isNotEmpty(dis)){
+                                    //找标准词
+                                    diseaseRepository.mergeDifferentDis(dis);
+                                    diseaseRepository.mergeRelationDifferentDis(disId,dis);
+                                }
+                            }
+                        }
+                    }
+                } else if("3".equals(type)){ //处理化验
+                    String lis = "";
+                    //查找化验大项的标准词
+                    standWord = searchStandWord(standard,type,ciKu);
+                    if(StringUtils.isNotEmpty(standWord)){
+                        if(StringUtils.isNotEmpty(relation) && standard.equals(relation)){
+                            lis = standWord;
+                        }else if(StringUtils.isNotEmpty(standard) && StringUtils.isEmpty(relation)){
+                            lis = standWord;
+                        }else if(StringUtils.isNotEmpty(standard)&& StringUtils.isNotEmpty(relation)&&!standard.equals(relation)){
+                            type = "subLis";
+                            if(StringUtils.isNotEmpty(searchStandWord(relation,type,ciKu))){
+                                //查找化验小项的标准词
+                                lis = standWord+"--"+searchStandWord(relation,type,ciKu);
+                            }
+
+                        }
+                    }
+
+                    //创建公表名
+                    diseaseRepository.mergePublicLIS(lis);
+                    //疾病推荐化验公表名
+                    diseaseRepository.mergeRelationLIS(disId,lis);
+                    //处理化验结果
+                    if(StringUtils.isNotEmpty(result)){
+                        lisResultSplit = result.split("、");
+                        if(lisResultSplit != null && lisResultSplit.length>0){
+                            //化验结果找标准词
+                            for (String lisRs:lisResultSplit) {
+                                if(StringUtils.isNotEmpty(lisRs)){
+                                    lisResult = searchStandWord(lisRs,"resultLis",ciKu);
+                                    if(StringUtils.isNotEmpty(lisResult)){
+                                        //创建化验结果节点
+                                        diseaseRepository.mergeLISRESULT(lisResult);
+                                        //公表名和化验结果创建关系
+                                        diseaseRepository.mergeRelationPublicLIS(lis,lisResult);
+                                        //化验结果和对应的codeCondition创建关系
+                                        diseaseRepository.mergeRelationCondiLisRes(disName+code,lisResult);
+                                    }
+
+                                }
+                            }
+                        }
+                    }
+                }else if("4".equals(type)){ //辅检
+                    //查找辅检的标准词
+                    standWord = searchStandWord(standard,type,ciKu);
+                    if(StringUtils.isNotEmpty(standWord)){
+                        //创建辅检标准词的节点
+                        diseaseRepository.mergePacs(standWord);
+                        //疾病推荐辅检
+                        diseaseRepository.mergeRelationDis2Pacs(disId,standWord);
+                    }
+                    if(StringUtils.isNotEmpty(relation)){
+                        pacsResultSplit = relation.split("、");
+                        if(pacsResultSplit != null && pacsResultSplit.length>0){
+                            for (String pacs:pacsResultSplit) {
+                                //查找辅检结果的标准词
+                                if(StringUtils.isNotEmpty(pacs)){
+                                   pacsResult = searchStandWord(pacs,"resultPacs",ciKu);
+                                   if(StringUtils.isNotEmpty(pacsResult)){
+                                       diseaseRepository.mergePacsResult(pacsResult);
+                                       //创建辅检和辅检结果关系
+                                       diseaseRepository.mergeRelationPacsResult(standWord,pacsResult);
+                                       //创建辅检结果和对应的pacsCondition的关系
+                                       diseaseRepository.mergeRelationCondiPacsRes(disName+code,pacsResult);
+                                   }
+
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 查找标准词
+     * @param type
+     * @return
+     */
+    public String searchStandWord(String word,String type,Map<String, Map<String, String>> ciKu){
+        String stand = null;
+        Map<String, String> detaiMap =null;
+        String label = Ciku.getLabel(type);
+        String[] labelSplits = label.split(",");
+        if(labelSplits.length == 1){
+            detaiMap = ciKu.get(word + "," + label);
+            if(detaiMap != null){
+                stand = detaiMap.get("stand");
+            }
+        }else if(labelSplits.length == 2){
+            detaiMap = ciKu.get(word + "," + labelSplits[0]);
+            if(detaiMap == null){
+                detaiMap = ciKu.get(word + "," + labelSplits[1]);
+            }
+            if(detaiMap != null){
+                stand = detaiMap.get("stand");
+            }
+        }
+        return stand;
+    }
+    /**
+     * 在图谱中删除诊断依据
+     * @param singleDisease
+     * @return
+     */
+    @Override
+    public RespDTO deleteNeoDisease(NeoParamVO singleDisease) {
+        Long disId = singleDisease.getId();
+        RespDTO respDTO = null;
+        try {
+        Connection connect = getConnect();
+        if(disId != null){
+            this.neo4jDelete(disId,connect);
+            connect.close();
+            respDTO = RespDTO.onSuc(true);
+        }else {
+            respDTO = RespDTO.onError(disId +" 删除失败!!!");
+        }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return respDTO;
+    }
+    //删除
+    public void neo4jDelete(Long disId,Connection connection) {
+        if (disId != null) {
+            diseaseRepository.deleteRelation1(disId);
+            diseaseRepository.deleteRelation2(disId);
+            diseaseRepository.deleteRelation3(disId);
+            diseaseRepository.deleteRelation4(disId);
+//            diseaseRepository.deleteRelation5(disId);
+//            diseaseRepository.deleteRelation6(disId);
+//            diseaseRepository.deleteRelation7(disId);
+//            diseaseRepository.deleteRelation8(disId);
+//            diseaseRepository.deleteRelation9(disId);
+            //删除disId
+            diseaseRepository.deleteRelation11(disId);
+            List<String> allCode = this.getAllCode(disId,connection);
+            if(allCode.size()>0){
+                for (String conName:allCode) {
+                    diseaseRepository.deleteRelation10(conName);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * 批量插入
+     *
+     * @return
+     */
+    @Override
+    public RespDTO<Boolean> batchInsertDis() {
+        //获取mysql链接
+        Connection connect = getConnect();
+        //把数据库中的所有词读进map缓存
+        Map<String, Map<String, String>> ciKu = this.allStandWord2Map(connect);
+        RespDTO<Boolean> respDTO = new RespDTO<>();
+        try {
+            List<Long> disList = getDisList(connect);
+            if(disList != null && disList.size()>0){
+                for (Long disId:disList) {
+                   respDTO = this.updateNeo(respDTO, disId, connect, ciKu);
+
+                }
+            }
+            connect.close();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+
+        return respDTO;
+    }
+    public void updateDate(Connection connection,Long disId){
+        String sql = "UPDATE `kl_diagnose` set neo_update='1970-01-01 12:00:00' where id="+disId+";";
+    }
+    public List<Long> getDisList(Connection connection){
+        List<Long> disIds = new ArrayList<>();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            Long id ;
+            String sql = "SELECT id FROM `kl_diagnose` where has_question=0 and is_deleted='N'";
+            st = connection.createStatement();
+            rs = st.executeQuery(sql);
+            while (rs.next()){
+                disIds.add(rs.getLong(1));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                rs.close();
+                st.close();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return disIds;
+    }
+
+    /**
+     * 获取一个诊断依据的全部code
+     * @param disId
+     * @return
+     */
+    public List<String> getAllCode(Long disId,Connection connection){
+        List<String> codeList = new ArrayList<>();
+        Statement st = null;
+        ResultSet rs = null;
+        try {
+            String code ,name;
+            String sql = "SELECT dis_name,code FROM `kl_diagnose_detail` where diagnose_id="+disId+" and code != \"\"";
+            st = connection.createStatement();
+            rs = st.executeQuery(sql);
+            while (rs.next()){
+                name = rs.getString("dis_name");
+                code = rs.getString("code");
+                codeList.add(name+code);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                rs.close();
+                st.close();
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return codeList;
+    }
 
 
     @Override
     @Override
     public List<Map<String, Object>> getRecommendItem(QueryVo queryVo) {
     public List<Map<String, Object>> getRecommendItem(QueryVo queryVo) {

+ 22 - 0
graphdb/src/main/java/org/diagbot/vo/domain/NeoParamVO.java

@@ -0,0 +1,22 @@
+package org.diagbot.vo.domain;
+
+import java.io.Serializable;
+
+public class NeoParamVO implements Serializable {
+    private  Long id; //诊断依据id,是唯一的
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Override
+    public String toString() {
+        return "NeoParamVO{" +
+                "id=" + id +
+                '}';
+    }
+}

+ 38 - 0
graphdb/src/main/java/org/diagbot/vo/domain/RespDTO.java

@@ -0,0 +1,38 @@
+package org.diagbot.vo.domain;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 通用返回格式
+ * @author: gaodm
+ * @time: 2018/8/1 14:55
+ */
+public class RespDTO<T> implements Serializable {
+
+
+    public String code = "0";
+    public String msg = "";
+    public T data;
+
+    public static RespDTO onSuc(Object data) {
+        RespDTO resp = new RespDTO();
+        resp.data = data;
+        return resp;
+    }
+
+    public static RespDTO onError(String errMsg) {
+        RespDTO resp = new RespDTO();
+        resp.code = "-1";
+        resp.msg = errMsg;
+        return resp;
+    }
+
+    @Override
+    public String toString() {
+        return "RespDTO{" +
+                "code=" + code +
+                ", error='" + msg + '\'' +
+                ", data=" + data +
+                '}';
+    }
+}

+ 25 - 12
graphdb/src/main/java/org/diagbot/web/KnowledgeController.java

@@ -185,17 +185,30 @@ public class KnowledgeController {
         return knowledgeService.getScale(queryVo);
         return knowledgeService.getScale(queryVo);
     }
     }
 
 
-    /*
-    @RequestMapping("/actedIn/{personId}/{movieId}")
-    public TJ actedIn(@PathVariable("personId")String personId, @PathVariable("movieId")String movieId){
-        Person person=diseaseServer.findOnePerson(Long.parseLong(personId));
-        Disease disease =diseaseServer.findOneMovie(Long.parseLong(movieId));
-        TJ TJ =new TJ();
-        TJ.setRoles("龙套");
-        TJ.setStartNode(person);
-        TJ.setEndNode(disease);
-        return diseaseServer.actedIn(TJ);
-    }
-    */
+    /**
+     * 给定诊断依据的id,删除图谱中对应的诊断依据
+     * @param disease
+     * @return
+     */
+    @RequestMapping("/deleteDisease")
+    public RespDTO deleteDiseaseData(@Valid @RequestBody NeoParamVO disease){
+        RespDTO respDTO = knowledgeService.deleteNeoDisease(disease);
+        return respDTO;
+    }
 
 
+    /**
+     * 给定诊断依据的id,更新图谱中对应的诊断依据
+     * @param disease
+     * @return
+     */
+    @RequestMapping("/updateDisease")
+    public RespDTO updateDiseaseData(@Valid @RequestBody NeoParamVO disease){
+        RespDTO respDTO = knowledgeService.updateNeoDisease(disease);
+        return respDTO;
+    }
+    @RequestMapping("/init")
+    public RespDTO batchInsert( ){
+        RespDTO respDTO = knowledgeService.batchInsertDis();
+        return respDTO;
+    }
 }
 }

+ 7 - 0
nlp/pom.xml

@@ -38,6 +38,13 @@
             <artifactId>poi-ooxml</artifactId>
             <artifactId>poi-ooxml</artifactId>
             <version>3.17</version>
             <version>3.17</version>
         </dependency>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>bson</artifactId>
+            <version>3.10.2</version>
+        </dependency>
+
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

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

@@ -46,7 +46,7 @@ public class Constants {
     public final static String word_property_number = "28";
     public final static String word_property_number = "28";
 
 
     public static String[] vital_filter_data = new String[] {
     public static String[] vital_filter_data = new String[] {
-            "神清","神志清","睡眠可","精神可","精神佳","二便无殊","体重无明显减轻","睡眠一般","小便无殊","大便无殊","胃纳可","食欲可"
+            "神清","神志清","睡眠可","精神可","精神佳","二便无殊","体重无明显减轻","睡眠一般","小便无殊","大便无殊","胃纳可","食欲可", "大小便正常"
     };
     };
 
 
     public final static String word_property_timestamp = "40";
     public final static String word_property_timestamp = "40";

+ 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"),
     SYMPTOM_PERFORMANCE("26"), NUMBER_QUANTIFIER("27"), DIGITS("28"),
     OTHER("44"),
     OTHER("44"),
     VITAL_INDEX("33"), VITAL_INDEX_VALUE("34"), VITAL_RESULT("35"),
     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");
     RETURN_VISIT("68"), DIAG_STAND("70");
     private String value;
     private String value;
 
 
@@ -147,6 +147,9 @@ public enum NegativeEnum {
             case "44":
             case "44":
                 negativeEnum = org.diagbot.nlp.util.NegativeEnum.OTHER;
                 negativeEnum = org.diagbot.nlp.util.NegativeEnum.OTHER;
                 break;
                 break;
+            case "46":
+                negativeEnum = NegativeEnum.PUB_NAME;
+                break;
             case "68":
             case "68":
                 negativeEnum = NegativeEnum.RETURN_VISIT;
                 negativeEnum = NegativeEnum.RETURN_VISIT;
                 break;
                 break;

+ 20 - 0
nlp/src/main/java/org/diagbot/nlp/util/NlpUtil.java

@@ -97,4 +97,24 @@ public class NlpUtil {
         }
         }
         return false;
         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();
+    }
 }
 }

+ 6 - 0
push-web/pom.xml

@@ -67,6 +67,12 @@
 			<version>0.0.1</version>
 			<version>0.0.1</version>
 		</dependency>
 		</dependency>
 
 
+		<dependency>
+			<groupId>org.diagbot</groupId>
+			<artifactId>rule</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+
 		<dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
 			<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;
 package org.diagbot.push.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.diagbot.bigdata.work.AlgorithmCore;
 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.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.GraphCalculate;
 import org.diagbot.graphWeb.work.LisPacsCalculate;
 import org.diagbot.graphWeb.work.LisPacsCalculate;
 import org.diagbot.nlp.util.Constants;
 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.PropertiesUtil;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.diagbot.pub.utils.http.HttpApi;
 import org.diagbot.pub.web.BaseController;
 import org.diagbot.pub.web.BaseController;
+import org.diagbot.rule.crisis.CrisisApplication;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
 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.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
-import org.diagbot.push.convert.PreProcess;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.*;
@@ -121,15 +120,22 @@ public class AlgorithmController extends BaseController {
     }
     }
 
 
     public Response<ResponseData> combine(HttpServletRequest request, SearchData searchData) throws Exception {
     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("开始推送服务......");
         logger.info("开始推送服务......");
         Response<ResponseData> response = new Response();
         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();
         AlgorithmCore core = new AlgorithmCore();
-        ResponseData bigDataResponseData = core.algorithm(request, searchData, RuleResponseData);
+        ResponseData bigDataResponseData = core.algorithm(request, searchData, responseData);
 
 
         GraphCalculate graphCalculate = new GraphCalculate();
         GraphCalculate graphCalculate = new GraphCalculate();
         ResponseData graphResponseData = graphCalculate.calculate(request, searchData);
         ResponseData graphResponseData = graphCalculate.calculate(request, searchData);
@@ -159,12 +165,19 @@ public class AlgorithmController extends BaseController {
         pushDiags.addAll(bigDataResponseData.getDis());
         pushDiags.addAll(bigDataResponseData.getDis());
         searchData.setPushDiags(pushDiags);
         searchData.setPushDiags(pushDiags);
         bigDataResponseData.setTreat(graphResponseData.getTreat());
         bigDataResponseData.setTreat(graphResponseData.getTreat());
+
         //量表和指标推送
         //量表和指标推送
+        Map<String, List<CrisisDetail>> crisisDetails = responseData.getCrisisDetails();
+        List<MedicalIndication> crisisDetailsList = this.getCrisisDetails(crisisDetails);
         List<MedicalIndication> medicalIndications = graphResponseData.getMedicalIndications();
         List<MedicalIndication> medicalIndications = graphResponseData.getMedicalIndications();
+        if (medicalIndications == null) medicalIndications = new ArrayList<>();
+        medicalIndications.addAll(crisisDetailsList);
         if (medicalIndications != null && medicalIndications.size() > 0) {
         if (medicalIndications != null && medicalIndications.size() > 0) {
             logger.info("指标推送!!!!!!!!!");
             logger.info("指标推送!!!!!!!!!");
-           bigDataResponseData.getMedicalIndications().addAll(medicalIndications);
+//           bigDataResponseData.getMedicalIndications().addAll(medicalIndications);
+            bigDataResponseData.setMedicalIndications(medicalIndications);
         }
         }
+
         //推送管理评估
         //推送管理评估
         bigDataResponseData.setManagementEvaluation(graphResponseData.getManagementEvaluation());
         bigDataResponseData.setManagementEvaluation(graphResponseData.getManagementEvaluation());
         //知识图谱直接替换大数据中的检验检查数据
         //知识图谱直接替换大数据中的检验检查数据
@@ -196,6 +209,37 @@ public class AlgorithmController extends BaseController {
         return response;
         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){
     public List<FeatureRate> getVital(Map<String, String> vitalCache,List<FeatureRate> vitals){
         Set<String> vitalSet = new LinkedHashSet<>();
         Set<String> vitalSet = new LinkedHashSet<>();
         List<FeatureRate> vitalList = new ArrayList<>();
         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;
 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.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.nlp.util.NlpCache;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.api.Response;
 import org.diagbot.pub.web.BaseController;
 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_diag_map();
         ApplicationCacheUtil.createDoc_result_mapping_filter_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;
         return response;
     }
     }
 }
 }

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

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

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

@@ -1,13 +1,8 @@
 package org.diagbot.push.convert;
 package org.diagbot.push.convert;
 
 
 import com.alibaba.fastjson.JSONObject;
 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.ParticipleUtil;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.participle.word.LexemePath;
@@ -26,7 +21,6 @@ public class PreProcess {
     private static String neg = "阴性";
     private static String neg = "阴性";
 
 
     private List<Map<String, Object>> vitlist = new ArrayList<>();
     private List<Map<String, Object>> vitlist = new ArrayList<>();
-    private List<Map<String, Object>> pacslist = new ArrayList<>();
     private String[] vitkeyset = {"index", "value", "unit"};
     private String[] vitkeyset = {"index", "value", "unit"};
     private String[] bptype = {"血压","收缩压","舒张压","/"};
     private String[] bptype = {"血压","收缩压","舒张压","/"};
 
 
@@ -39,12 +33,12 @@ public class PreProcess {
     public SearchData processClinicalData(SearchData searchdata) {
     public SearchData processClinicalData(SearchData searchdata) {
         SearchData sData = 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;
         return sData;
     }
     }
@@ -52,324 +46,265 @@ public class PreProcess {
     public ResponseData applyrules(SearchData sData) {
     public ResponseData applyrules(SearchData sData) {
 
 
         ResponseData ruleResponse = new ResponseData();
         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(applytopacs(sData.getPacs(), 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;
             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> applytopacs(String pacs, Map<String, List<Rule>> rule) {
-        List<MedicalIndication> reminder = new ArrayList<>();
-
-        try {
-            Set<String> pacsResultList = new HashSet<>();
-            Lexeme lexeme;
-            LexemePath<Lexeme> lexemes = ParticipleUtil.participle(pacs);
-            for (int i = 0; i < lexemes.size(); i++) {
-                lexeme = lexemes.get(i);
-                List<String> propetys = Arrays.asList(lexeme.getProperty().split(","));
-                if (lexeme.getText().trim().length() > 0) {
-                    if(propetys.contains(Constants.word_property_PACS_Result)){
-                        pacsResultList.add(lexeme.getText());
-                    }
-                }
-            }
-            if(pacsResultList.size()>0){
-                for (String pacsResult:pacsResultList) {
-                    if(rule.containsKey(pacsResult)){
-                        List<Rule> rules = rule.get(pacsResult);
-
-                        List<MedicalIndicationDetail> mds = new ArrayList<>();
-                        MedicalIndicationDetail medicalIndicationDetail = new MedicalIndicationDetail();
-                        medicalIndicationDetail.setType(4);
-                        JSONObject jsonObject = new JSONObject();
-                        jsonObject.put("controlType",2);
-                        jsonObject.put("name",pacsResult);
-                        medicalIndicationDetail.setContent(jsonObject);
-                        mds.add(medicalIndicationDetail);
-                        MedicalIndication medicalIndication = new MedicalIndication();
-                        medicalIndication.setName(rules.get(0).getIdx_name()+","+rules.get(0).getRemind());
-                        medicalIndication.setDetails(mds);
-                        reminder.add(medicalIndication);
-                    }
-                }
-            }
-        } 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.getEq_operator().equals("=") && otherval.contains(rule.getEq_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())
-                                .append(rule.getEq_operator()).append(rule.getEq_value()).append(rule.getEq_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);
-                        medind.setRule(append.toString());
-                        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) {
-                        if (minunit.equals(unit) ) {
-                            switch (minop) {
-                                case ">":
-                                    if (numval > minval) { minmatch = true; }
-                                    break;
-                                case ">=":
-                                    if (numval >= minval) { minmatch = true; }
-                                    break;
-                            }
-                        } else { minmatch = false; }
-                    } else { minmatch = false; }
-
-                    if (String.valueOf(maxval).trim().length() > 0 ) {
-                        if (maxunit.equals(unit) ) {
-                            switch (maxop) {
-                                case "<":
-                                    if (numval < maxval) {
-                                        maxmatch = true;
-                                    }
-                                    break;
-                                case "<=":
-                                    if (numval <= maxval) {
-                                        maxmatch = true;
-                                    }
-                                    break;
-                            }
-                        } else { maxmatch = false; }
-                    } else { maxmatch = false; }
-
-                    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);
-                        medind.setRule(append.toString());
-                        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;
+//    }
 }
 }

+ 1 - 1
push-web/src/main/resources/static/dist/js/push.js

@@ -1,6 +1,6 @@
 var nlp_web_url = "http://192.168.2.186:5002/nlp-web";
 var nlp_web_url = "http://192.168.2.186:5002/nlp-web";
 var bigdata_web_url = "http://192.168.2.186:5001/bigdata-web";
 var bigdata_web_url = "http://192.168.2.186:5001/bigdata-web";
-var graph_web_url = "http://192.168.2.234:186/graph-web";
+var graph_web_url = "http://192.168.2.186:5003/graph-web";
 // var push_web_url = "http://192.168.2.234:5008/push-web";
 // var push_web_url = "http://192.168.2.234:5008/push-web";
 
 
 // var nlp_web_url = "http://192.168.3.180:5002/nlp-web";
 // var nlp_web_url = "http://192.168.3.180:5002/nlp-web";

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

@@ -109,11 +109,15 @@
                 </div>
                 </div>
                 <div class="form-group">
                 <div class="form-group">
                     <label for="other_id">化验结果</label>&nbsp;
                     <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>
                 <div class="form-group">
                 <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>
                 <div class="form-group">
                 <div class="form-group">
                     <label for="diag_id">诊断</label>&nbsp;
                     <label for="diag_id">诊断</label>&nbsp;
@@ -440,6 +444,8 @@
                     var other = $("#other_id").val();
                     var other = $("#other_id").val();
                     var lis = $("#lis_id").val();
                     var lis = $("#lis_id").val();
                     var pacs = $("#pacs_id").val();
                     var pacs = $("#pacs_id").val();
+                    var lisOrder = $("#lis_order").val();
+                    var pacsOrder = $("#pacs_order").val();
                     var diag = $("#diag_id").val();
                     var diag = $("#diag_id").val();
                     var length = $("#length").val();
                     var length = $("#length").val();
                     var sex = $("#sex").val();
                     var sex = $("#sex").val();
@@ -466,6 +472,12 @@
                     if (pacs != null && pacs != undefined) {
                     if (pacs != null && pacs != undefined) {
                         d.pacs = pacs;
                         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 != '') {
                     if (diag != null && diag != undefined && diag != '') {
                         d.diag = diag;
                         d.diag = diag;
                     }
                     }
@@ -553,6 +565,8 @@
                     var other = $("#other_id").val();
                     var other = $("#other_id").val();
                     var lis = $("#lis_id").val();
                     var lis = $("#lis_id").val();
                     var pacs = $("#pacs_id").val();
                     var pacs = $("#pacs_id").val();
+                    var lisOrder = $("#lis_order").val();
+                    var pacsOrder = $("#pacs_order").val();
                     var diag = $("#diag_id").val();
                     var diag = $("#diag_id").val();
                     var length = $("#length").val();
                     var length = $("#length").val();
                     var sex = $("#sex").val();
                     var sex = $("#sex").val();
@@ -579,6 +593,12 @@
                     if (pacs != null && pacs != undefined) {
                     if (pacs != null && pacs != undefined) {
                         d.pacs = pacs;
                         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 != '') {
                     if (diag != null && diag != undefined && diag != '') {
                         d.diag = 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/

+ 0 - 0
rule/pom.xml


Some files were not shown because too many files changed in this diff