Browse Source

使用新结构的诊断依据推送

kongwz 6 years ago
parent
commit
befc08b44a

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

@@ -49,7 +49,7 @@ public class GraphCalculate {
         String webDiag = searchData.getDiag();
         logger.info("页面诊断为 :"+webDiag);
         //计算诊断
-        Map<String, Map<String,String>> condition = neo4jAPI.getCondition((String[]) inputList.toArray(new String[inputList.size()]),webDiag );
+        Map<String, Map<String,String>> condition = neo4jAPI.getNewCondition((String[]) inputList.toArray(new String[inputList.size()]),webDiag );
         List<FeatureRate> featureRates = new ArrayList<>();
         for (Map.Entry<String, Map<String,String>> d : condition.entrySet()) {
                 FeatureRate featureRate = new FeatureRate();

+ 18 - 10
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -665,6 +665,7 @@ public class Neo4jAPI {
             logger.info("session 为: " + session);
             //第一步查询是否有组合的词
             query = propertiesUtil.getProperty("searchCollection1").replace("fildList", fildList.toString());
+            logger.info("开始查询是否有组合的词,查询语句为: \n"+query);
 //            System.out.println("查找是否有组合词语句:\n"+query);
             result = session.run(query);
             while (result.hasNext()) {
@@ -676,6 +677,7 @@ public class Neo4jAPI {
                 }
             }
             query = propertiesUtil.getProperty("serchCollect").replace("fildList", fildList.toString());
+            logger.info("开始查询近义词,查询语句为:\n"+query);
             result = session.run(query);
             while (result.hasNext()) {
                 Record record = result.next();
@@ -684,6 +686,7 @@ public class Neo4jAPI {
                 //如果不包含诊断依据就找它的同义词,否则就要这个词
                 if ("近义词".equals(typeCollect.get(0)) && typeCollect.size() == 1) {
                     query = "match(l)-[r:近义词]->(h) where l.name=" + fild + " return h.name as js";
+                    logger.info("如果有近义词就替换,查询语句为:\n"+query);
                     StatementResult jinyiResult = session.run(query);
                     while (jinyiResult.hasNext()) {
                         Record next = jinyiResult.next();
@@ -694,9 +697,10 @@ public class Neo4jAPI {
                 }
             }
             newList.addAll(fildList);
-            int i = 0;
+            int i = 1;
             while (newList.size() > 0) {
                 query = propertiesUtil.getProperty("searchCondition1").replace("newList", newList.toString()).replace("fildList", fildList.toString());
+                logger.info("第"+i+"次查询符合的诊断依据为:\n"+query);
 //                System.out.println("第"+i+"次的查询语句为: \n"+query);
                 i++;
                 result = session.run(query);
@@ -710,6 +714,7 @@ public class Neo4jAPI {
             }
             //第三步查找确诊
             query = propertiesUtil.getProperty("searchQuezhen").replace("fildList", fildList.toString());
+            logger.info("开始查找确诊疑诊,语句为:\n"+query);
 //            System.out.println("查找确诊的语句为: \n"+query);
             result = session.run(query);
             while (result.hasNext()) {
@@ -733,6 +738,7 @@ public class Neo4jAPI {
                 String[] webDiagSplits = webDiag.split(",");
                 String mainDiag = webDiagSplits[0];
                 query = propertiesUtil.getProperty("searchDifferentialDiagnose").replace("mainDis", mainDiag);
+                logger.info("根据界面诊断查询鉴别诊断,界面诊断为:"+mainDiag+"查询语句为:\n"+query);
                 result = session.run(query);
                 while (result.hasNext()) {
                     Record record = result.next();
@@ -761,6 +767,7 @@ public class Neo4jAPI {
                 }
             }
             query =propertiesUtil.getProperty("searchEmergency").replace("disList",newDis.toString());
+            logger.info("判断图谱推出的诊断中是否有急诊,判断语句为:\n"+query);
             result = session.run(query);
             while (result.hasNext()) {
                 Record record = result.next();
@@ -897,6 +904,7 @@ public class Neo4jAPI {
             session = driver.session(AccessMode.WRITE);
             logger.info("session 为: " + session);
             query = propertiesUtil.getProperty("serchCollect").replace("fildList", fildList.toString());
+            logger.info("查找是否有组合词,查找语句为:\n"+query);
             result = session.run(query);
             while (result.hasNext()) {
                 Record record = result.next();
@@ -905,6 +913,7 @@ public class Neo4jAPI {
                 //如果不包含诊断依据就找它的同义词,否则就要这个词
                 if ("近义词".equals(typeCollect.get(0)) && typeCollect.size() == 1) {
                     query = "match(l)-[r:近义词]->(h) where l.name=" + fild + " return h.name as js";
+                    logger.info("如果有近义词就替换,处理语句为:\n"+query);
                     StatementResult jinyiResult = session.run(query);
                     while (jinyiResult.hasNext()) {
                         Record next = jinyiResult.next();
@@ -915,10 +924,11 @@ public class Neo4jAPI {
                 }
             }
             newList.addAll(fildList);
-            int i = 0;
+            int i = 1;
             while (newList.size() > 0) {
                 i++;
                 query = propertiesUtil.getProperty("searchCondition").replace("newList", newList.toString()).replace("fildList", fildList.toString());
+                logger.info("第"+i+"次查询符合诊断依据的语句:\n"+query);
                 result = session.run(query);
                 newList.clear();
                 while (result.hasNext()) {
@@ -933,6 +943,7 @@ public class Neo4jAPI {
                 }
             }
             query = propertiesUtil.getProperty("searchUe").replace("fildList", fildList.toString());
+            logger.info("查找界面输入是否有不良反应,处理语句为:\n"+query);
             result = session.run(query);
             while (result.hasNext()) {
                 Record record = result.next();
@@ -1195,6 +1206,7 @@ public class Neo4jAPI {
                 String query = "";
                 query = "match(d:Disease)-[r:不良反应]->(u:UntowardEffect) where d.name in " + webDiagList + " \n" +
                         "return d.name as dis,collect(u.name) as ueCollect";
+                logger.info("根据页面诊断查询每个诊断所对应的不良反应集合,查询语句为:\n"+query);
                 result = tx.run(query);
                 while (result.hasNext()) {
                     Record next = result.next();
@@ -1263,12 +1275,8 @@ public class Neo4jAPI {
                     for (Map.Entry<String, ArrayList> df : diseFilds.entrySet()) {
                         String diseaseName = df.getKey();//疾病
                         ArrayList value = df.getValue();//其他条件
-                        StringBuffer s1 = new StringBuffer();
-                        s1.append("match (d:Disease{name:'" + diseaseName + "'})-[r0:推荐]->(m:Drugs)-[:包含]->(n:Medicine),(d)-[r1:推荐]->(n)");
-                        s1.append("\n");
-                        s1.append("where r0.p<6").append("\n");
-                        s1.append("return m.name as 类, r0.p as sort, n.name as 药物, r1.rate as a order by sort , a desc");
-                        query = s1.toString();
+                        query = propertiesUtil.getProperty("searchDrugsMedic").replace("diseaseName","\'"+diseaseName+"\'");
+                        logger.info("查找诊断对应的类和药物,包括类和药的排序,查找语句为:\n"+query);
                         result = tx.run(query);
                         Map<String, LinkedHashMap<String, String>> contentMap = new LinkedHashMap<>();
                         while (result.hasNext()) {
@@ -1287,8 +1295,8 @@ public class Neo4jAPI {
                         }
                         //药类型的大小类拼接
                         Map<String, String> shortLargeMap = new HashMap<>();
-                        //                        query="match (n:Disease{name:'"+diseaseName+"'})-[:推荐]->(d:Drugs)<-[:包含]-(m) return d.name as short,m.name as large";
-                        query = "match (n:Disease{name:'" + diseaseName + "'})-[r0:推荐]->(m:Drugs)-[:包含]->(k:Drugs) return k.name as short,m.name as large";
+                        propertiesUtil.getProperty("searchBigSubDrugs").replace("diseaseName","\'"+diseaseName+"\'");
+                        logger.info("查找诊断对应的大小类,进行拼接,查找语句为:\n"+query);
                         result = tx.run(query);
                         while (result.hasNext()) {
                             Record record = result.next();

+ 8 - 0
graph/src/main/resources/bolt.properties

@@ -76,6 +76,14 @@ where n.name in startList\n \
 with distinct m,r\n \
 return m.name as name, labels(m)[0] as label,type(r) as relationType;
 
+#\u6CBB\u7597\u5904\u7406
+#\u67E5\u627E\u8BCA\u65AD\u5BF9\u5E94\u7684\u7C7B\u548C\u836F,\u4EE5\u53CA\u4ED6\u4EEC\u7684\u6392\u5E8F
+searchDrugsMedic=match (d:Disease{name:diseaseName})-[r0:\u63A8\u8350]->(m:Drugs)-[:\u5305\u542B]->(n:Medicine),(d)-[r1:\u63A8\u8350]->(n)\n \
+where r0.p<6 \n \
+return m.name as \u7C7B, r0.p as sort, n.name as \u836F\u7269, r1.rate as a order by sort , a desc
+#\u67E5\u627E\u8BCA\u65AD\u5BF9\u5E94\u7684\u836F\u7269\u7684\u5927\u5C0F\u7C7B
+searchBigSubDrugs=match (n:Disease{name:diseaseName})-[r0:\u63A8\u8350]->(m:Drugs)-[:\u5305\u542B]->(k:Drugs) return k.name as short,m.name as large
+
 #\u67E5\u627E\u9274\u522B\u8BCA\u65AD\u7684\u8BED\u53E5
 searchDifferentialDiagnose=match(d:Disease)-[r:\u9274\u522B\u8BCA\u65AD]->(h) where d.name='mainDis' return collect(h.name) as coll