Browse Source

Merge remote-tracking branch 'origin/push-dev' into push-dev

louhr 6 years ago
parent
commit
30ba385608

+ 9 - 0
common-service/src/main/java/org/diagbot/common/work/ResponseData.java

@@ -27,6 +27,7 @@ public class ResponseData {
 //    private Map<String,JSONObject> managementEvaluation; //管理评估
     private Map managementEvaluation;
     private List<String> diffDiag;//鉴别诊断
+    private List<String> excludeDiag; //排除诊断
 
     public List<String> getDiffDiag() {
         return diffDiag;
@@ -36,6 +37,14 @@ public class ResponseData {
         this.diffDiag = diffDiag;
     }
 
+    public List<String> getExcludeDiag() {
+        return excludeDiag;
+    }
+
+    public void setExcludeDiag(List<String> excludeDiag) {
+        this.excludeDiag = excludeDiag;
+    }
+
     public Map getManagementEvaluation() {
         return managementEvaluation;
     }

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

@@ -36,6 +36,10 @@ public class GraphCalculate {
      * @throws Exception
      */
     public ResponseData calculate(HttpServletRequest request, SearchData searchData) throws Exception {
+
+        long starttime = System.currentTimeMillis();
+        System.out.println("Start at: " + starttime);
+
         ResponseData responseData = new ResponseData();
 //        ParamsDataProxy paramsDataProxy = new ParamsDataProxy();
 //        paramsDataProxy.createSearchData(request, searchData);
@@ -44,7 +48,7 @@ public class GraphCalculate {
         String sex = searchData.getSex();
         logger.info("前端传来的年龄为 :"+age+" 前端传来的性别为 :"+sex);
         //获取缓存
-        Map<String, String> lexionCache = CacheUtil.getLexionCache();
+//        Map<String, String> lexionCache = CacheUtil.getLexionCache();
         Map<String, Map<String, String>> sexAgeCache = CacheUtil.getSexAgeCache();
         Map<String, Map<String, String>> inputs = searchData.getGraphInputs();
         Set<String> ss = new HashSet<>();
@@ -59,6 +63,8 @@ public class GraphCalculate {
             }
         }
         logger.info("从分词系统接收到的词 :" + ss);
+        System.out.println("Participle takes: " + (System.currentTimeMillis()-starttime)/1000d + 's');
+
         String[] featureTypes = searchData.getFeatureType().split(",");
         List<String> featureTypeList = Arrays.asList(featureTypes);
         logger.info("featureTypeList : " + featureTypeList);
@@ -71,9 +77,15 @@ public class GraphCalculate {
         logger.info("页面诊断为 :"+webDiag);
         //计算诊断
         Map<String, Map<String,String>> condition =null;
+        Map<String, Map<String, String>> excludelist = null;
         if(featureTypeList.contains("2")){
             condition = neo4jAPI.getNewCondition((String[]) inputList.toArray(new String[inputList.size()]),webDiag );
+
+            // 查找需要排除的诊断
+            excludelist = neo4jAPI.getExcludeDiag(inputList);
+            responseData.setExcludeDiag(Arrays.asList(excludelist.keySet().stream().toArray(String[]::new)));
         }
+
         List<FeatureRate> featureRates = new ArrayList<>();
         if(condition != null){
             for (Map.Entry<String, Map<String,String>> d : condition.entrySet()) {
@@ -88,7 +100,6 @@ public class GraphCalculate {
                         if(min_age <age && age<=max_age){
                             FeatureRate featureRate = new FeatureRate();
                             featureRate.setFeatureName(dis);
-                            featureRate.setExtraProperty("");
                             Map<String, String> value = d.getValue();
                             String s = JSON.toJSONString(value);
                             featureRate.setDesc(s);
@@ -152,9 +163,12 @@ public class GraphCalculate {
             responseData.setMedicalIndications(idn);
 
         }
+
         //诊断推送
         responseData.setDis(featureRates);
         responseData.setInputs(searchData.getInputs());
+
+        System.out.println("Total takes: " + (System.currentTimeMillis()-starttime)/1000d + 's');
         return responseData;
     }
 

+ 35 - 0
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -9,6 +9,7 @@ import org.assertj.core.util.Lists;
 import org.diagbot.common.javabean.*;
 import org.diagbot.common.work.*;
 import org.diagbot.pub.utils.PropertiesUtil;
+import org.neo4j.driver.internal.value.NodeValue;
 import org.neo4j.driver.v1.*;
 import org.neo4j.driver.v1.types.Node;
 import org.neo4j.driver.v1.types.Path;
@@ -2655,4 +2656,38 @@ public class Neo4jAPI {
             return scaleStructure;
         }
     }
+
+    /**
+     * 查询需要排除的疾病
+     * @param info
+     * @return
+     */
+    public Map<String, Map<String, String>> getExcludeDiag(List<String> info) {
+        Session session = null;
+        String infostr = Pattern.compile("([(,)*])").matcher(info.toString()).replaceAll("\"$0\"");
+        infostr = infostr.replace("[", "[\"");
+        infostr = infostr.replace("]", "\"]");
+        infostr = infostr.replaceAll(" ", "");
+
+        Map<String, Map<String, String>> diaglist = new HashMap<>();
+        try{
+            session = driver.session(AccessMode.READ);
+            String query = "unwind " + infostr + " as lis " +
+                    "match (ex)-[q:排除依据]-(c)-[r:排除]->(d:Disease) where ex.name = lis return d";
+            System.out.println(query);
+            StatementResult dlist = session.run(query);
+
+            while (dlist.hasNext()) {
+                Record rec = dlist.next();
+                Node nd = rec.get("d").asNode();
+                String name = nd.get("name").toString().replaceAll("\"","");
+                diaglist.put(name, new HashMap<>());
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        } finally {
+            CloseSession(session);
+            return diaglist;
+        }
+    }
 }

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

@@ -239,7 +239,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
         logger.info("分词系统传来的词: " + ss);
         logger.info("图谱开始根据传来的分词计算诊断.....");
         //开始推送诊断逻辑,包括推送疑诊,急诊,鉴别诊断
-        if (featureTypeList != null && featureTypeList.contains("7")) {
+        if (featureTypeList != null && featureTypeList.contains("2")) {
             //第一,二步查询输入的词所在number
             Set<String> fildInNumber = this.getNumber(ss);
             //第三步查找疑诊
@@ -298,11 +298,11 @@ public class KnowledgeServiceImpl implements KnowledgeService {
                 for (Map.Entry<String, Map<String, String>> d : diseaseCondition.entrySet()) {
                     FeatureRate featureRate = new FeatureRate();
                     featureRate.setFeatureName(d.getKey());
-                    featureRate.setExtraProperty("");
+                    featureRate.setExtraProperty("neo4j");
                     Map<String, String> value = d.getValue();
                     String s = JSON.toJSONString(value);
                     featureRate.setDesc(s);
-                    featureRate.setRate("neo4j");
+//                    featureRate.setRate("neo4j");
                     featureRates.add(featureRate);
                 }
             }
@@ -312,7 +312,7 @@ public class KnowledgeServiceImpl implements KnowledgeService {
         logger.info("图谱计算出来的诊断(包含疑诊,急诊,鉴别诊断)为: " + que);
 
         //推送治疗,包含不良反应
-        if (webDiag != null && webDiag.trim() != "" && featureTypeList.contains("8")) {
+        if (webDiag != null && webDiag.trim() != "" && featureTypeList.contains("6")) {
             logger.info("界面有诊断,并且features包含8,可以走治疗方案");
             //查找页面诊断里是否有不良反应(慢病的情况下)
             Map<String, List<String>> disUE = new HashMap<>();

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

@@ -141,16 +141,26 @@ public class AlgorithmController extends BaseController {
             }
             List<FeatureRate> graphFeatureRates = graphResponseData.getDis();
             graphFeatureRates.addAll(disFeatureRates);
+            //将需要排除的诊断从列表中删除
+            List<FeatureRate> updateFeatureRates = new ArrayList<>();
+            List<String> removeDis = graphResponseData.getExcludeDiag();
+            for (int j = 0; j < graphFeatureRates.size(); j++) {
+                if (removeDis.indexOf(graphFeatureRates.get(j).getFeatureName()) == -1) {
+                    updateFeatureRates.add(graphFeatureRates.get(j));
+                }
+            }
             //大数据推送疾病数据用知识图谱替换
-            bigDataResponseData.setDis(graphFeatureRates);
+            bigDataResponseData.setDis(updateFeatureRates);
         }
 
         //推送出的诊断信息作为参数传入知识图谱
         List<FeatureRate> pushDiags = new ArrayList<>();
-        for (FeatureRate fr : bigDataResponseData.getDis()) {
-            pushDiags.add(fr);
-            logger.info("合并知识图谱、大数据后推送的诊断信息....: " + fr.getFeatureName());
-        }
+        pushDiags.addAll(bigDataResponseData.getDis());
+
+//        for (FeatureRate fr : bigDataResponseData.getDis()) {
+//            pushDiags.add(fr);
+//            logger.info("合并知识图谱、大数据后推送的诊断信息....: " + fr.getFeatureName());
+//        }
         searchData.setPushDiags(pushDiags);
 
         bigDataResponseData.setTreat(graphResponseData.getTreat());