Bladeren bron

根据诊断依据中的排除条件,将需要排除的疾病从推送的诊断列表中去除

MarkHuang 6 jaren geleden
bovenliggende
commit
12d41c9c45

+ 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 - 1
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()) {
@@ -151,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;
+        }
+    }
 }

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