kongwz 6 年 前
コミット
275adf937e

+ 59 - 43
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -646,8 +646,8 @@ public class Neo4jAPI {
      * @param keys
      * @return
      */
-    public Map<String, Map<String,String>> getCondition(String[] keys,String webDiag) {
-        Map<String, Map<String,String>> diseaseCondition = new LinkedHashMap<>();
+    public Map<String, Map<String, String>> getCondition(String[] keys, String webDiag) {
+        Map<String, Map<String, String>> diseaseCondition = new LinkedHashMap<>();
         List<String> newList = new ArrayList<>();
         ArrayList<String> fildList = new ArrayList<>();
         //输出确诊集合
@@ -704,12 +704,8 @@ public class Neo4jAPI {
                 while (result.hasNext()) {
                     Record record = result.next();
                     String condition = record.get("condition").toString();
-                    String jundgement = record.get("jundgement").toString();
-                    String label = record.get("label").toString();
-                    if ("TRUE".equals(jundgement)) {
-                        newList.add(condition);
-                        fildList.add(condition);
-                    }
+                    newList.add(condition);
+                    fildList.add(condition);
                 }
             }
             //第三步查找确诊
@@ -729,12 +725,11 @@ public class Neo4jAPI {
             for (String qu : quezhen) {
                 Map<String, String> dis_res = new HashMap<>();
                 dis_res.put("确诊", "");
-//                diseaseCondition.put(qu, JSON.toJSONString(dis_res));
-                diseaseCondition.put(qu,dis_res);
+                diseaseCondition.put(qu, dis_res);
                 logger.info("图谱推出的诊断为: " + qu);
             }
             Set<String> queSets = diseaseCondition.keySet();
-            if(webDiag != null && webDiag.trim() != ""){
+            if (webDiag != null && webDiag.trim() != "") {
                 String[] webDiagSplits = webDiag.split(",");
                 String mainDiag = webDiagSplits[0];
                 query = propertiesUtil.getProperty("searchDifferentialDiagnose").replace("mainDis", mainDiag);
@@ -742,21 +737,38 @@ public class Neo4jAPI {
                 while (result.hasNext()) {
                     Record record = result.next();
                     List<Object> coll = record.get("coll").asList();
-                    if(coll != null && coll.size()>0){
-                        for (Object o:coll) {
-                            if(queSets.contains(o.toString().replace("\"",""))){
+                    if (coll != null && coll.size() > 0) {
+                        for (Object o : coll) {
+                            if (queSets.contains(o.toString().replace("\"", ""))) {
                                 Map<String, String> stringStringMap = diseaseCondition.get(o.toString().replace("\"", ""));
-                                stringStringMap.put("鉴别诊断","");
-                                diseaseCondition.put(o.toString().replace("\"",""),stringStringMap);
-                            }else {
+                                stringStringMap.put("鉴别诊断", "");
+                                diseaseCondition.put(o.toString().replace("\"", ""), stringStringMap);
+                            } else {
                                 Map<String, String> diffMap = new HashMap<>();
-                                diffMap.put("鉴别诊断","");
-                                diseaseCondition.put(o.toString().replace("\"",""),diffMap);
+                                diffMap.put("鉴别诊断", "");
+                                diseaseCondition.put(o.toString().replace("\"", ""), diffMap);
                             }
                         }
                     }
                 }
             }
+            //判断急诊
+            Set<String> disSet = diseaseCondition.keySet();
+            List<String> newDis = new ArrayList<>();
+            if(disSet.size()>0){
+                for (String dis:disSet) {
+                    newDis.add("\""+dis+"\"");
+                }
+            }
+            query =propertiesUtil.getProperty("searchEmergency").replace("disList",newDis.toString());
+            result = session.run(query);
+            while (result.hasNext()) {
+                Record record = result.next();
+                String emDis = record.get("emDis").toString();
+                Map<String, String> stringStringMap = diseaseCondition.get(emDis.replace("\"", ""));
+                stringStringMap.put("急诊", "");
+                diseaseCondition.put(emDis.replace("\"", ""), stringStringMap);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
@@ -767,12 +779,13 @@ public class Neo4jAPI {
 
     /**
      * 新结构,包含关联词
+     *
      * @param keys
      * @param webDiag
      * @return
      */
-    public Map<String, Map<String,String>> getNewCondition(String[] keys,String webDiag) {
-        Map<String, Map<String,String>> diseaseCondition = new LinkedHashMap<>();
+    public Map<String, Map<String, String>> getNewCondition(String[] keys, String webDiag) {
+        Map<String, Map<String, String>> diseaseCondition = new LinkedHashMap<>();
         List<String> newList = new ArrayList<>();
         List<String> fildList = new ArrayList<>();
         List<String> startList = new ArrayList<>();
@@ -788,8 +801,9 @@ public class Neo4jAPI {
         try {
             session = driver.session(AccessMode.WRITE);
             logger.info("session 为: " + session);
-            //第一步查询是否有组合的词
+            //第一步查询输入的词所在number
             query = propertiesUtil.getProperty("searchNumColl").replace("startList", fildList.toString());
+            System.out.println("查找词所在的number \n" + query);
             result = session.run(query);
             while (result.hasNext()) {
                 Record next = result.next();
@@ -797,22 +811,23 @@ public class Neo4jAPI {
                 startList.add(v);
             }
             newList.addAll(startList);
+            int i = 1;
             while (newList.size() > 0) {
                 query = propertiesUtil.getProperty("searchNewCondition").replace("newList", newList.toString()).replace("fildList", startList.toString());
+                System.out.println("第" + i + "次查询conditon语句 \n" + query);
                 result = session.run(query);
                 newList.clear();
                 while (result.hasNext()) {
                     Record record = result.next();
                     String condition = record.get("condition").toString();
-                    String jundgement = record.get("jundgement").toString();
-                    if ("TRUE".equals(jundgement)) {
-                        newList.add(condition);
-                        startList.add(condition);
-                    }
+                    newList.add(condition);
+                    startList.add(condition);
+
                 }
             }
             //第三步查找确诊
             query = propertiesUtil.getProperty("searchDis").replace("startList", startList.toString());
+            System.out.println("查询确诊的语句 \n" + query);
             result = session.run(query);
             while (result.hasNext()) {
                 Record record = result.next();
@@ -828,11 +843,11 @@ public class Neo4jAPI {
                 Map<String, String> dis_res = new HashMap<>();
                 dis_res.put("确诊", "");
 //                diseaseCondition.put(qu, JSON.toJSONString(dis_res));
-                diseaseCondition.put(qu,dis_res);
+                diseaseCondition.put(qu, dis_res);
                 logger.info("图谱推出的诊断为: " + qu);
             }
             Set<String> queSets = diseaseCondition.keySet();
-            if(webDiag != null && webDiag.trim() != ""){
+            if (webDiag != null && webDiag.trim() != "") {
                 String[] webDiagSplits = webDiag.split(",");
                 String mainDiag = webDiagSplits[0];
                 query = propertiesUtil.getProperty("searchDifferentialDiagnose").replace("mainDis", mainDiag);
@@ -840,16 +855,16 @@ public class Neo4jAPI {
                 while (result.hasNext()) {
                     Record record = result.next();
                     List<Object> coll = record.get("coll").asList();
-                    if(coll != null && coll.size()>0){
-                        for (Object o:coll) {
-                            if(queSets.contains(o.toString().replace("\"",""))){
+                    if (coll != null && coll.size() > 0) {
+                        for (Object o : coll) {
+                            if (queSets.contains(o.toString().replace("\"", ""))) {
                                 Map<String, String> stringStringMap = diseaseCondition.get(o.toString().replace("\"", ""));
-                                stringStringMap.put("鉴别诊断","");
-                                diseaseCondition.put(o.toString().replace("\"",""),stringStringMap);
-                            }else {
+                                stringStringMap.put("鉴别诊断", "");
+                                diseaseCondition.put(o.toString().replace("\"", ""), stringStringMap);
+                            } else {
                                 Map<String, String> diffMap = new HashMap<>();
-                                diffMap.put("鉴别诊断","");
-                                diseaseCondition.put(o.toString().replace("\"",""),diffMap);
+                                diffMap.put("鉴别诊断", "");
+                                diseaseCondition.put(o.toString().replace("\"", ""), diffMap);
                             }
                         }
                     }
@@ -862,6 +877,7 @@ public class Neo4jAPI {
             return diseaseCondition;
         }
     }
+
     /**
      * 不良反应推送
      */
@@ -1408,9 +1424,9 @@ public class Neo4jAPI {
                             logger.info(diseaseName + "下面有" + stringList + "不良反应");
                             if (stringList != null && stringList.size() > 0) {
                                 List<Indicators> indicatorsList1 = new ArrayList<>();
-                                for (String de:stringList) {
+                                for (String de : stringList) {
                                     Indicators indicators1 = getAdverse(ueSet, de);
-                                    logger.info(disSet + "包含  "+de);
+                                    logger.info(disSet + "包含  " + de);
                                     indicatorsList1.add(indicators1);
                                 }
                                 filnlly.setAdverseEvent(indicatorsList1);
@@ -1720,7 +1736,7 @@ public class Neo4jAPI {
                 bigGrad.put("name", "糖尿病控制情况");
                 bigGrad.put("controltype", 0);
                 List<JSONObject> gradItemJ = new ArrayList<>();
-                String[] gradItem = { "常规管理", "强化管理" };
+                String[] gradItem = {"常规管理", "强化管理"};
                 for (String item : gradItem) {
                     JSONObject j = new JSONObject();
                     j.put("detailName", item);
@@ -2065,7 +2081,7 @@ public class Neo4jAPI {
      * @param scaleName
      * @return
      */
-    public Map<String, Object> getScale(String[] scaleItems,String scaleName) {
+    public Map<String, Object> getScale(String[] scaleItems, String scaleName) {
         Session session = driver.session(AccessMode.READ);
         StatementResult Rset;
 
@@ -2076,7 +2092,7 @@ public class Neo4jAPI {
             Rset = session.run(query);
             String type = Rset.next().get("m.type").toString().replace("\"", "");
             if (Integer.valueOf(type) == 1) {
-                scale = this.getScaleCalc2(scaleItems,scaleName);
+                scale = this.getScaleCalc2(scaleItems, scaleName);
             } else {
                 scale = this.getScaleNoCalc(scaleName);
             }
@@ -2344,7 +2360,7 @@ public class Neo4jAPI {
                     scaleStructure.put("Calc", Integer.valueOf(calc));
                 }
 
-                if (group.contains("-")){
+                if (group.contains("-")) {
                     group = group.split("-")[0];
                 }
                 if (group.contains("计算方法")) {

+ 11 - 5
graph/src/main/resources/bolt.properties

@@ -45,7 +45,9 @@ where l.name in newList\n \
 with m,fildList as data\n \
 match (n)-[r:\u8BCA\u65AD\u4F9D\u636E]->(m)\n \
 where n.name in data\n \
-return m.name as condition, count(distinct r)>=m.path as jundgement, labels(m)[0] as label
+with m.name as condition, count(distinct r) as sd,m.path as jundgement\n \
+where sd>=jundgement\n \
+return condition
 #\u67E5\u627E\u786E\u8BCA,\u62DF\u8BCA\u7684\u8BED\u53E5
 searchQuezhen=match (n)-[r:\u786E\u8BCA|:\u62DF\u8BCA]->(m:Disease)\n \
 where n.name in fildList\n \
@@ -60,13 +62,14 @@ with c.name as v,count(distinct r)>=c.path as hh\n \
 where hh =true\n \
 return v
 #\u67E5\u627E\u8BCA\u65AD\u4F9D\u636E
-searchNewCondition=with newList as data \n \
- match (l)-[r:\u8BCA\u65AD\u4F9D\u636E]->(m:Condition)\n \
-where l.name in data \n \
+searchNewCondition=match (l)-[r:\u8BCA\u65AD\u4F9D\u636E]->(m:Condition)\n \
+where l.name in newList \n \
 with m,fildList as data\n \
 match (n)-[r:\u8BCA\u65AD\u4F9D\u636E]->(m:Condition)\n \
 where n.name in data\n \
-return m.name as condition, count(distinct r)>=m.path as jundgement, labels(m)[0] as label\n";
+with m.name as condition, count(distinct r) as sd,m.path as jundgement\n \
+where sd>=jundgement\n \
+return condition
 #\u67E5\u627E\u786E\u8BCA
 searchDis=match (n:Condition)-[r:\u786E\u8BCA|:\u62DF\u8BCA]->(m:Disease)\n \
 where n.name in startList\n \
@@ -76,6 +79,9 @@ return m.name as name, labels(m)[0] as label,type(r) as relationType;
 #\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
 
+#\u5224\u65AD\u662F\u5426\u4E3A\u6025\u8BCA\u7684\u8BED\u53E5
+searchEmergency=match(d:Disease) where d.name in disList and d.emergency=1 return d.name as emDis
+
 #\u67E5\u627E\u6307\u6807\u7684\u8BED\u53E5
 searchIndication=with fildList  as data unwind data as row\n \
 match (n)-[r:\u786E\u8BCA|:\u62DF\u8BCA]->(m:Indicators)\n \