Ver código fonte

慢病治疗方案一

kongwz 5 anos atrás
pai
commit
ec8ec554d5

+ 21 - 4
common-push/src/main/java/org/diagbot/common/push/bean/neo4j/Filnlly.java

@@ -6,8 +6,9 @@ import java.util.List;
 public class Filnlly {
     private List<Indicators> adverseEvent;//不良反应
     private List<Drugs> treatment;//具体用药
-    private TreatCate treatCate;//规则匹配用药情况(单药、双药、胰岛素药)
-    private List<TreatCate> compli_cate;
+    private List<TreatCate> treatCate;//规则匹配用药情况(单药、双药、胰岛素药)
+    private List<TreatCate> compli_cate;//并发症规则匹配用药情况
+    private List<Drugs> compli_treatment;//并发症具体用药
 
 
 
@@ -27,11 +28,27 @@ public class Filnlly {
         this.treatment = treatment;
     }
 
-    public TreatCate getTreatCate() {
+    public List<TreatCate> getTreatCate() {
         return treatCate;
     }
 
-    public void setTreatCate(TreatCate treatCate) {
+    public void setTreatCate(List<TreatCate> treatCate) {
         this.treatCate = treatCate;
     }
+
+    public List<TreatCate> getCompli_cate() {
+        return compli_cate;
+    }
+
+    public void setCompli_cate(List<TreatCate> compli_cate) {
+        this.compli_cate = compli_cate;
+    }
+
+    public List<Drugs> getCompli_treatment() {
+        return compli_treatment;
+    }
+
+    public void setCompli_treatment(List<Drugs> compli_treatment) {
+        this.compli_treatment = compli_treatment;
+    }
 }

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

@@ -109,9 +109,17 @@ public class GraphCalculate {
                 }
             }
         }
-        Set<String> diseaseSet =null;
+        Set<String> diseaseSet =new HashSet<>();
         if(condition != null){
-            diseaseSet = condition.keySet();
+            Map<String, Map<String,String>> allCondition = (Map<String, Map<String,String>>)condition.get("全部诊断");
+            if(allCondition != null && allCondition.size()>0){
+                for (Map.Entry<String, Map<String,String>> sd:allCondition.entrySet()) {
+                    Set<String> keyset = sd.getValue().keySet();
+                    if(keyset.contains("拟诊") || keyset.contains("确诊")){
+                        diseaseSet.add(sd.getKey());
+                    }
+                }
+            }
             logger.info("diseaseSet :" + diseaseSet);
         }
         Integer diseaseType = searchData.getDisType();

+ 67 - 30
graph/src/main/java/org/diagbot/graph/jdbc/Neo4jAPI.java

@@ -1208,7 +1208,7 @@ public class Neo4jAPI {
                         for (Map.Entry<String, ArrayList> df : diseFilds.entrySet()) {
                             //大对象集合
                             List<Drugs> drugsList;
-                            TreatCate treatCate = null;
+                            List<TreatCate> treatCate = null;
                             Map<String, String> medicaton_ji = new HashMap<>();//药的忌用和慎用集合
                             Map<String, List<String>> medicatonMap = new LinkedHashMap<>();//全部的药集合
                             String diseaseName = df.getKey();//疾病
@@ -1217,11 +1217,7 @@ public class Neo4jAPI {
                             // TODO: 2019/11/12 处理规则判断的用药情况
                             JSONObject jsonObject = medicationRule(tx, medicaton_ji, medicatonMap,diseaseName,value);
                             drugsList = (List<Drugs>)jsonObject.get("drugs");
-                            treatCate = (TreatCate)jsonObject.get("treatCate");
-                            if(treatCate.getType() == null){
-                                treatCate = null;
-                            }
-
+                            treatCate = (List<TreatCate>)jsonObject.get("treatCate");
                             //规则不成立,返回全部用药
                             if(drugsList == null || drugsList.size() == 0){
                                 drugsList = allMedication(tx,medicaton_ji, medicatonMap, diseaseName, value,1,null);
@@ -1240,7 +1236,7 @@ public class Neo4jAPI {
                             newTret.put(diseaseName, filnlly);
                         }
                     }
-                    return 1;
+                     return 1;
                 }
             });
         } catch (Exception e) {
@@ -1256,8 +1252,10 @@ public class Neo4jAPI {
         String query = null;
         StatementResult result;
         if(sign == 1){
+            //不经过规则,全部数据
             query = propertiesUtil.getProperty("searchTreat").replace("disName", "\'" + diseaseName + "\'").replace("filds", value.toString());
         }else if(sign == 2){
+            //规则匹配
             query = propertiesUtil.getProperty("searchRuleMedicaton").replace("disName", "\'" + diseaseName + "\'").replace("filds", value.toString()).replace("drugsList",drugslist.toString());
         }
 
@@ -1363,8 +1361,12 @@ public class Neo4jAPI {
         String query;
         StatementResult result;
         JSONObject jsonObject = new JSONObject();
-        TreatCate treatCate = new TreatCate();
-        List<Drugs> drugs = new ArrayList<>();
+        List<TreatCate> treatCateList = new ArrayList<>();
+        List<TreatCate> compliCateList = new ArrayList<>();
+
+
+        Map<String,List<String>> bingdisDrugs = new LinkedHashMap<>();//并发症
+        Map<String,List<String>> zhudisDrugs =new LinkedHashMap<>();//主症
         // TODO: 2019/11/13 开始匹配规则
         query=propertiesUtil.getProperty("medicationRule").replace("filds",value.toString());
         result = tx.run(query);
@@ -1373,37 +1375,66 @@ public class Neo4jAPI {
         while (result.hasNext()) {
             Record record = result.next();
             int j = record.get("design").asInt();
-            if(j>i){
+            String p = record.get("p").toString();
+            String category = record.get("category").toString().replace("\"","");
+            String disName = record.get("disName").toString().replace("\"","");
+            if(j>=i){
                 i = j;
                 collection = (List) record.get("collection").asList();
             }
-        }
-        List<String> medictionDrugs =null;
-        if(collection != null){
-            medictionDrugs = new ArrayList<>();
-            for (String drugsp:collection) {
-                String[] splits = drugsp.replace("\"", "").split("\\+");
-                for (String drug:splits) {
-                    if(medictionDrugs.contains("'"+drug+"'")){
-                       continue;
-                    }
-                    medictionDrugs.add("'"+drug+"'");
-                }
+            if(!"NULL".equals(p)){
+                bingdisDrugs.put(disName,collection);
+            }else {
+                zhudisDrugs.put(disName,collection);
             }
         }
+        // TODO: 2019/11/18 处理主症
+        List<String> medictionDrugs =null;
+        medictionDrugs =processDisDrugs(zhudisDrugs);
         //根据类找药
-        try {
-            drugs = allMedication(tx, medicaton_ji, medicatonMap, diseaseName, value, 2, medictionDrugs);
-        }catch (Exception e){
-            drugs = null;
-        }
+        List<Drugs> zhu_drugs = allMedication(tx, medicaton_ji, medicatonMap, diseaseName, value, 2, medictionDrugs);
+        TreatCate treatCate = new TreatCate();
         treatCate.setType(switchType(i));
         treatCate.setName(collection);
-        jsonObject.put("drugs",drugs);
-        jsonObject.put("treatCate",treatCate);
+        treatCateList.add(treatCate);
+        jsonObject.put("drugs",zhu_drugs);
+        jsonObject.put("treatCate",treatCateList);
+
+        // TODO: 2019/11/18 处理并发症
+        List<String> fdf = processDisDrugs(bingdisDrugs);
+        List<Drugs> bing_drugs = allMedication(tx, medicaton_ji, medicatonMap, diseaseName, value, 2, fdf);
+        for (Map.Entry<String,List<String>>db:bingdisDrugs.entrySet()
+             ) {
+            TreatCate treatCa = new TreatCate();
+            treatCa.setType(db.getKey());
+            treatCa.setName(db.getValue());
+            compliCateList.add(treatCa);
+        }
+        jsonObject.put("compli_cate",compliCateList);
+        jsonObject.put("compli_treatment",bing_drugs);
         return  jsonObject;
 
     }
+
+    public  List<String> processDisDrugs(Map<String,List<String>> disDrugs){
+        List<String> drugsList = new ArrayList<>();
+        if(disDrugs != null && disDrugs.size()>0){
+            for (Map.Entry<String,List<String>> dd:disDrugs.entrySet()) {
+                List<String> value = dd.getValue();
+                for (String drugsp:value) {
+                    String[] splits = drugsp.replace("\"", "").split("\\+");
+                    for (String drug:splits) {
+                        if(drugsList.contains("'"+drug+"'")){
+                            continue;
+                        }
+                        drugsList.add("'"+drug+"'");
+                    }
+                }
+            }
+        }
+        return drugsList;
+    }
+
    //单、双药、胰岛素药
     private String switchType(int i) {
         String type;
@@ -1446,6 +1477,12 @@ public class Neo4jAPI {
         for (String fild : fildsArray) {
             fildsList.add("\'" + fild + "\'");
         }
+        if(diseaseList != null && diseaseList.size()>0){
+            for (String dis:diseaseList
+                 ) {
+                fildsList.add("\'" + dis + "\'");
+            }
+        }
         if (disSet != null && disSet.size() > 0) {
             for (String yizhen : disSet) {
                 fildsList.add("\'" + yizhen + "\'");
@@ -1465,7 +1502,7 @@ public class Neo4jAPI {
         }
         if(details != null && details.size() >0){
             for (Map.Entry<String,String> de:details.entrySet()) {
-                fildsList.add("\'"+de.getValue()+de.getKey()+"\'");
+                fildsList.add("\'"+de.getValue().trim()+de.getKey().trim()+"\'");
             }
         }
         diseFilds.put(disName, fildsList);

+ 1 - 1
graph/src/main/resources/bolt.properties

@@ -119,7 +119,7 @@ with c,count(distinct r)>=c.path as hh \n \
 where hh =true \n \
 with c \n \
 match(c)-[r:\u63A8\u8350]->(t:TreatCollection) \n \
-return c.design as design,collect(t.name) as collection
+return c.design as design,r.p as p,r.category as category,r.disName as disName,collect(t.name) as collection order by p
 searchRuleMedicaton=match(h:Disease{name:disName})-[r:\u6CBB\u7597\u65B9\u6848]->(t:Treat)-[r2:\u63A8\u8350]->(m:Medicine)-[r1:\u5C5E\u4E8E]->(d:Drugs)\n \
 with t,m,d\n \
 match(t)-[r:\u63A8\u8350]->(m)-[r1:\u5C5E\u4E8E]->(h:Drugs)\n \