Преглед на файлове

修改治疗用药的逻辑

kongwz преди 6 години
родител
ревизия
1dc4e418f6
променени са 2 файла, в които са добавени 19 реда и са изтрити 214 реда
  1. 0 1
      graph-web/src/main/java/org/diagbot/graphWeb/controller/gdbcontroller.java
  2. 19 213
      graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

+ 0 - 1
graph-web/src/main/java/org/diagbot/graphWeb/controller/gdbcontroller.java

@@ -43,7 +43,6 @@ public class gdbcontroller extends BaseController {
         Response<GdbResponse> response = new Response<>();
         GdbResponse gdbdata = new GdbResponse();
         String name = null;
-//        Map<String,String> RSet = null;
         Map<String,String> RSet = null;
         String disease = null;
         try {

+ 19 - 213
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -72,7 +72,6 @@ public class Neo4jAPI {
         }
         finally {
             CloseSession(session);
-
             return Res;
         }
     }
@@ -113,7 +112,6 @@ public class Neo4jAPI {
         }
         finally {
             CloseSession(session);
-
             return Res;
         }
     }
@@ -275,7 +273,6 @@ public class Neo4jAPI {
         }
         finally {
             CloseSession(session);
-
             return Res;
         }
     }
@@ -375,7 +372,6 @@ public class Neo4jAPI {
         }
         finally {
             CloseSession(session);
-
             return Res;
         }
     }
@@ -562,7 +558,6 @@ public class Neo4jAPI {
         }
         finally {
             CloseSession(session);
-
             return Res;
         }
     }
@@ -802,161 +797,7 @@ public class Neo4jAPI {
             return conditionMap;
         }
     }
-  /*  *//**
-     * 治疗查询
-     * @param disease
-     * @param filds
-     * @return
-     *//*
-    public Map<String, String> GetTreat(String disease,String filds){
-        Session session = null;
-        Map<String, String> resultMap = new HashMap<>();
-        try {
-            session = driver.session(AccessMode.WRITE);
-            session.writeTransaction(new TransactionWork<Integer>() {
-                @Override
-                public Integer execute(Transaction tx) {
-                    StatementResult result = null;
-                    String query = "";
-                    StringBuffer s1 = new StringBuffer();
-                    s1.append("match (d:Disease{name:'" + disease + "'})-[r0:推荐]->(m:Drugs)-[:包含]->(n:Medicine),(d)-[r1:推荐]->(n)");
-                    s1.append("\n");
-                    s1.append("return m.name as 类, r0.p as sort, n.name as 药物, r1.rate as a");
-                    s1.append("\n").append("union").append("\n");
-                    s1.append("match p=(d:Disease{name:'" + disease + "'})-[r0:推荐]->(m:Drugs)-[:包含]->(n:Medicine)");
-                    s1.append("\n");
-                    s1.append("where not (d)-[:推荐]->(n)").append("\n");
-                    s1.append("return m.name as 类, r0.p as sort, n.name as 药物, 0 as a");
-                    query = s1.toString();
-                    result = tx.run(query);
-                    HashMap<String, String> contentMap = new HashMap<>();
-                    HashMap<String, HashMap<String, String>> contentMap1 = new HashMap<>();
-                    while (result.hasNext()) {
-                        Record record = result.next();
-                        String[] splits = record.values().toString().split(",");
-                        String drugs = splits[0].replace("[", "").replace("\"", "");
-                        if (contentMap1.containsKey(drugs)) {
-                            HashMap<String, String> stringStringHashMap = contentMap1.get(drugs);
-                            stringStringHashMap.put(splits[2].replace("\"", ""), splits[3].replace("]", ""));
-                            contentMap1.put(drugs, stringStringHashMap);
-                        } else {
-                            HashMap<String, String> sa = new HashMap<>();
-                            sa.put(splits[2].replace("\"", ""), splits[3].replace("]", ""));
-                            contentMap1.put(drugs, sa);
-                        }
-                    }
 
-                    List<String> drugTree = new ArrayList<>();
-                    query = "match (d:Disease{name:'" + disease + "'})-[r:推荐]->(s:Drugs)   return s  order by r.p";
-                    result = tx.run(query);
-                    while (result.hasNext()) {
-                        Record record = result.next();
-                        Node node = record.get(0).asNode();
-                        String coll = node.get("name").toString();
-                        drugTree.add(coll);
-                    }
-                    LinkedHashMap<String, HashMap<String, String>> contentSortMap1 = new LinkedHashMap<>();
-                    for (String drug : drugTree) {
-                        contentSortMap1.put(drug.replace("\"", ""), contentMap1.get(drug.replace("\"", "")));
-                    }
-                    //排序后的map
-                    LinkedHashMap<String, LinkedHashMap<String, String>> mapSortValue = new LinkedHashMap<>();
-
-                    for (Map.Entry<String, HashMap<String, String>> e : contentSortMap1.entrySet()
-                            ) {
-                        HashMap<String, String> value = e.getValue();
-                        mapSortValue.put(e.getKey(), mapSortByValue(value));
-                    }
-
-                    HashMap<String, String> shortLargeMap = new HashMap<>();
-                    //大项查询
-                    query = "match (n:Disease{name:'" + disease + "'})-[:推荐]->(d:Drugs)<-[:包含]-(m) return d.name as short,m.name as large";
-                    result = tx.run(query);
-                    while (result.hasNext()) {
-                        Record record = result.next();
-                        String aShort = record.get("short").toString().replace("\"", "");
-                        String large = record.get("large").toString().replace("\"", "");
-                        shortLargeMap.put(aShort, large + "(" + aShort + ")");
-                    }
-                    LinkedHashMap<String, LinkedHashMap<String, String>> mapSortValueDa = new LinkedHashMap<>();
-                    for (Map.Entry<String, LinkedHashMap<String, String>> f : mapSortValue.entrySet()
-                            ) {
-                        String key = f.getKey();
-                        if (shortLargeMap.get(key) != null) {
-                            mapSortValueDa.put(shortLargeMap.get(key), mapSortValue.get(key));
-                        } else {
-                            mapSortValueDa.put(key, mapSortValue.get(key));
-                        }
-                    }
-
-                    ArrayList<String> fildList = new ArrayList<>();
-                    String[] splits = filds.split(",");
-                    for (String fild : splits) {
-                        fildList.add("'" + fild + "'");
-                    }
-                    Map<String, String> medicationUseMap = new HashMap<>();//key:药名 value:禁忌(慎用)
-                    StringBuffer fildBuffer = new StringBuffer();
-                    fildBuffer.append("match (n:Disease{name:'" + disease + "'})-[:推荐]->(d)<-[r0:忌用]-(m)").append("\n");
-                    fildBuffer.append("where m.name in " + fildList + "").append("\n");
-                    fildBuffer.append("return d.name as ff,type(r0) as hh").append("\n").append("union\n");
-                    fildBuffer.append("match (n:Disease{name:'" + disease + "'})-[:推荐]->(d)<-[r0:慎用]-(m)\n");
-                    fildBuffer.append("where m.name in " + fildList + "").append("\n");
-                    fildBuffer.append("return d.name as ff,type(r0) as hh");
-                    query = fildBuffer.toString();
-                    result = tx.run(query);
-                    while (result.hasNext()) {
-                        Record next = result.next();
-                        String name = next.get("ff").toString().replace("\"", "");
-                        String type = next.get("hh").toString().replace("\"", "");
-                        medicationUseMap.put(name, type);
-                    }
-                    //大对象集合
-                    ArrayList<Drugs> drugs = new ArrayList<Drugs>();
-                    for (Map.Entry<String, LinkedHashMap<String, String>> w : mapSortValueDa.entrySet()) {
-                        Drugs drugs1 = new Drugs();
-                        drugs1.setDrugsName(w.getKey().trim());//药类
-                        LinkedList<Medicition> medicitions = new LinkedList<>();
-                        LinkedHashMap<String, String> value = w.getValue();
-                        for (Map.Entry<String, String> d : value.entrySet()) {
-//                        System.out.println(w.getKey()+" "+d.getKey()+" "+d.getValue());
-                            Medicition medicition = new Medicition();
-                            medicition.setMedicitionName(d.getKey().trim());//药名
-                            medicition.setRate(d.getValue().trim());//使用率
-                            if ("0".equals(d.getValue().trim())) {
-                                medicition.setIsShow(0);//不展示
-                            } else {
-                                medicition.setIsShow(1);//展示
-                            }
-                            if ("忌用".equals(medicationUseMap.get(d.getKey().trim()))) {
-                                medicition.setForbidden(2);
-                            } else if ("慎用".equals(medicationUseMap.get(d.getKey().trim()))) {
-                                medicition.setForbidden(1);
-                            } else {
-                                medicition.setForbidden(0);
-                            }
-                            medicitions.add(medicition);
-                        }
-                        drugs1.setMedicitionsList(medicitions);
-                        drugs.add(drugs1);
-                    }
-                    Filnlly filnlly = new Filnlly();
-                    filnlly.setTreatment(drugs);
-
-                    String s = JSON.toJSONString(filnlly);
-                    resultMap.put("des", s);
-                    return 1;
-                }
-            });
-        }catch (Exception e){
-            e.printStackTrace();
-            session.close();
-        }
-        finally {
-            session.close();
-            return resultMap;
-        }
-    }
-*/
     /**
      * 多疾病下治疗方案
      * @param disease
@@ -997,63 +838,27 @@ public class Neo4jAPI {
                             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("match (d:Disease{name:'"+disease+"'})-[r0:推荐]->(m:Drugs)-[:包含]->(n:Medicine),(d)-[r1:推荐]->(n)");
                             s1.append("\n");
-                            s1.append("return m.name as 类, r0.p as sort, n.name as 药物, r1.rate as a");
-                            s1.append("\n").append("union").append("\n");
-                            s1.append("match p=(d:Disease{name:'" + diseaseName + "'})-[r0:推荐]->(m:Drugs)-[:包含]->(n:Medicine)");
-                            s1.append("\n");
-                            s1.append("where not (d)-[:推荐]->(n)").append("\n");
-                            s1.append("return m.name as 类, r0.p as sort, n.name as 药物, 0 as a");
+                            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();
                             result = tx.run(query);
-                            HashMap<String, String> contentMap = new HashMap<>();
-                            HashMap<String, HashMap<String, String>> contentMap1 = new HashMap<>();
+                            LinkedHashMap<String, LinkedHashMap<String,String>> contentMap = new  LinkedHashMap<>();
                             while (result.hasNext()) {
                                 Record record = result.next();
                                 String[] splits = record.values().toString().split(",");
                                 String drugs = splits[0].replace("[", "").replace("\"", "");
-                                if (contentMap1.containsKey(drugs)) {
-                                    HashMap<String, String> stringStringHashMap = contentMap1.get(drugs);
+                                if (contentMap.containsKey(drugs)) {
+                                    LinkedHashMap<String, String> stringStringHashMap = contentMap.get(drugs);
                                     stringStringHashMap.put(splits[2].replace("\"", ""), splits[3].replace("]", ""));
-                                    contentMap1.put(drugs, stringStringHashMap);
+                                    contentMap.put(drugs, stringStringHashMap);
                                 } else {
-                                    HashMap<String, String> sa = new HashMap<>();
+                                    LinkedHashMap<String, String> sa = new LinkedHashMap<>();
                                     sa.put(splits[2].replace("\"", ""), splits[3].replace("]", ""));
-                                    contentMap1.put(drugs, sa);
+                                    contentMap.put(drugs, sa);
                                 }
                             }
-                            /** contentMap1存的数据结构
-                             * 支气管扩张剂  二羟丙茶碱  0.92
-                             * 支气管扩张剂  多索茶碱  0.94
-                             */
-                            List<String> drugTree = new ArrayList<>();
-                            query = "match (d:Disease{name:'" + diseaseName + "'})-[r:推荐]->(s:Drugs)   return s  order by r.p";
-                            result = tx.run(query);
-                            while (result.hasNext()) {
-                                Record record = result.next();
-                                Node node = record.get(0).asNode();
-                                String coll = node.get("name").toString();
-                                drugTree.add(coll);
-                            }
-                            LinkedHashMap<String, HashMap<String, String>> contentSortMap1 = new LinkedHashMap<>();
-                            for (String drug : drugTree) {
-                                contentSortMap1.put(drug.replace("\"", ""), contentMap1.get(drug.replace("\"", "")));
-                            }
-                            //排序后的map
-                            LinkedHashMap<String, LinkedHashMap<String, String>> mapSortValue = new LinkedHashMap<>();
-
-                            for (Map.Entry<String, HashMap<String, String>> e : contentSortMap1.entrySet()
-                                    ) {
-                                HashMap<String, String> value1 = e.getValue();
-                                mapSortValue.put(e.getKey(), mapSortByValue(value1));
-                            }
-                            /**
-                             * mapSortValue是已经排好顺序的
-                             * 根除Hp 治疗  胶体果胶铋  0.51
-                             * 根除Hp 治疗  阿莫西林  0.5
-                             * 根除Hp 治疗  克拉霉素  0.32
-                             */
 
                             HashMap<String, String> shortLargeMap = new HashMap<>();
                             //大项查询
@@ -1066,13 +871,13 @@ public class Neo4jAPI {
                                 shortLargeMap.put(aShort, large + "(" + aShort + ")");
                             }
                             LinkedHashMap<String, LinkedHashMap<String, String>> mapSortValueDa = new LinkedHashMap<>();
-                            for (Map.Entry<String, LinkedHashMap<String, String>> f : mapSortValue.entrySet()
+                            for (Map.Entry<String, LinkedHashMap<String, String>> f : contentMap.entrySet()
                                     ) {
                                 String key = f.getKey();
                                 if (shortLargeMap.get(key) != null) {
-                                    mapSortValueDa.put(shortLargeMap.get(key), mapSortValue.get(key));
+                                    mapSortValueDa.put(shortLargeMap.get(key), contentMap.get(key));
                                 } else {
-                                    mapSortValueDa.put(key, mapSortValue.get(key));
+                                    mapSortValueDa.put(key, contentMap.get(key));
                                 }
                             }
                             /**
@@ -1082,10 +887,10 @@ public class Neo4jAPI {
 
                             Map<String, String> medicationUseMap = new HashMap<>();//key:药名 value:禁忌(慎用)
                             StringBuffer fildBuffer = new StringBuffer();
-                            fildBuffer.append("match (n:Disease{name:'" + diseaseName + "'})-[:推荐]->(d)<-[r0:用]-(m)").append("\n");
+                            fildBuffer.append("match (n:Disease{name:'" + diseaseName + "'})-[:推荐]->(d)<-[r0:用]-(m)").append("\n");
                             fildBuffer.append("where m.name in " + value + "").append("\n");
                             fildBuffer.append("return d.name as ff,type(r0) as hh").append("\n").append("union\n");
-                            fildBuffer.append("match (n:Disease{name:'" + diseaseName + "'})-[:推荐]->(d)<-[r0:用]-(m)\n");
+                            fildBuffer.append("match (n:Disease{name:'" + diseaseName + "'})-[:推荐]->(d)<-[r0:用]-(m)\n");
                             fildBuffer.append("where m.name in " + value + "").append("\n");
                             fildBuffer.append("return d.name as ff,type(r0) as hh");
                             query = fildBuffer.toString();
@@ -1099,6 +904,7 @@ public class Neo4jAPI {
                             //大对象集合
                             ArrayList<Drugs> drugs = new ArrayList<Drugs>();
                             for (Map.Entry<String, LinkedHashMap<String, String>> w : mapSortValueDa.entrySet()) {
+                                int i = 0;
                                 Drugs drugs1 = new Drugs();
                                 drugs1.setDrugsName(w.getKey().trim());//药类
                                 LinkedList<Medicition> medicitions = new LinkedList<>();
@@ -1108,10 +914,11 @@ public class Neo4jAPI {
                                     Medicition medicition = new Medicition();
                                     medicition.setMedicitionName(d.getKey().trim());//药名
                                     medicition.setRate(nf.format(Double.parseDouble(d.getValue().trim())));//使用率
-                                    if ("0".equals(d.getValue().trim())) {
-                                        medicition.setIsShow(0);//不展示
-                                    } else {
+                                    i++;
+                                    if (i<2) {
                                         medicition.setIsShow(1);//展示
+                                    } else {
+                                        medicition.setIsShow(0);//不展示
                                     }
                                     if ("忌用".equals(medicationUseMap.get(d.getKey().trim()))) {
                                         medicition.setForbidden(2);
@@ -1334,7 +1141,6 @@ public class Neo4jAPI {
         }
         finally {
             CloseSession(session);
-
             return reslist;
         }
     }