kongwz 5 лет назад
Родитель
Сommit
2c451e61d1

+ 120 - 71
graph/src/main/java/org/diagbot/graph/medicationProcess/PushTreat.java

@@ -64,12 +64,53 @@ public class PushTreat {
         treatmentPlanList = this.ruleMedicaton(disName,webDiag,allFilds, driver);
         // TODO: 2019/11/19     规则不满足的情况下,返回主诊断的用药情况
         if(treatmentPlanList.size() == 0){
-
+            treatmentPlanList = this.ordinaryMedicaton(disName,allFilds,driver);
         }
+        return treatmentPlanList;
+    }
 
+    /**
+     * 规则不匹配返回主诊断用药
+     * @param disName 主诊断
+     * @param allFilds 其他条件
+     * @param driver
+     * @return
+     */
+    private List<TreatDetail> ordinaryMedicaton(String disName,List<String> allFilds,Driver driver){
+        List<TreatDetail> disTreatDetailList = new ArrayList<>();
 
+        List<Drugs> dList = new ArrayList<>();
+        Map<String, String> medicaton_ji = new HashMap<>();
+        Map<String, List<String>> medicatonMap = new HashMap<>();
 
-        return treatmentPlanList;
+        Session session = driver.session(AccessMode.WRITE);
+        session.writeTransaction(new TransactionWork<Integer>() {
+            @Override
+            public Integer execute(Transaction tx) {
+                String query = propertiesUtil_treat.getProperty("searchMedication").replace("disName", "\'" + disName + "\'").replace("filds", allFilds.toString());
+                logger.info("规则通过类找药:\n" + query);
+                StatementResult result  = tx.run(query);
+                while (result.hasNext()) {
+                    Record record = result.next();
+                    searchAllMedication(record, medicatonMap, medicaton_ji);
+                }
+                medicationList(medicatonMap, medicaton_ji, dList);
+                return 1;
+            }
+        });
+        closeSession(session);
+
+        TreatDetail treatDetail = new TreatDetail();
+        List<MeditionDetail> mList = new ArrayList<>();
+        MeditionDetail meditionDetail = new MeditionDetail();
+        meditionDetail.setDescription("");
+        meditionDetail.setTreatment(dList);
+        mList.add(meditionDetail);
+
+        treatDetail.setTitle(disName+"治疗方案");
+        treatDetail.setMeditionDetails(mList);
+        disTreatDetailList.add(treatDetail);
+        return disTreatDetailList;
     }
     //匹配规则,推荐用药
     private List<TreatDetail> ruleMedicaton(String disName,String webDiag,List<String> allFilds,Driver driver){
@@ -206,88 +247,96 @@ public class PushTreat {
         session.writeTransaction(new TransactionWork<Integer>() {
             @Override
             public Integer execute(Transaction tx) {
-                StatementResult result = null;
                 String query = propertiesUtil_treat.getProperty("searchMedication_rule").replace("drugs",drugs.toString()).replace("filds",allFilds.toString());
                 logger.info("规则通过类找药:\n" + query);
-                result = tx.run(query);
+                StatementResult result  = tx.run(query);
                 while (result.hasNext()) {
                     Record record = result.next();
-                    String big = record.get("big").toString().replace("\"", "");
-                    String sub = record.get("sub").toString().replace("\"", "");
-                    String med = record.get("med").toString().replace("\"", "");
-                    String ty = record.get("ty").toString().replace("\"", "");
-                    if ("NULL".equals(ty)) {
-                        if (medicatonMap.containsKey(big + "$" + sub)) {
-                            List<String> ml = medicatonMap.get(big + "$" + sub);
-                            ml.add(med);
-                            medicatonMap.put(big + "$" + sub, ml);
-                        } else {
-                            List<String> ml = new ArrayList<>();
-                            ml.add(med);
-                            medicatonMap.put(big + "$" + sub, ml);
-                        }
-                    } else {
-                        if (medicaton_ji.containsKey(med)) {
-                            if (medicaton_ji.get(med).equals("慎用") && ty.equals("忌用")) {
-                                medicaton_ji.put(med, "忌用");
+                    searchAllMedication(record, medicatonMap, medicaton_ji);
+                }
+                medicationList(medicatonMap, medicaton_ji, dList);
+                return 1;
+            }
+        });
+        closeSession(session);
+        return dList;
+    }
+
+    private void medicationList(Map<String, List<String>> medicatonMap, Map<String, String> medicaton_ji, List<Drugs> dList) {
+        if (medicatonMap != null && medicatonMap.size() > 0) {
+            for (Map.Entry<String, List<String>> fd : medicatonMap.entrySet()) {
+                int i = 0;
+                String big = "", sub = "";
+                String big_sub = fd.getKey();//大小类
+                List<String> medications = fd.getValue();//药的集合
+                String[] splits = big_sub.split("\\$");
+                Drugs drugs = new Drugs();
+                if (splits[0].equals(splits[1])) {
+                    sub = "";
+                    big = splits[0];
+                } else {
+                    big = splits[0];
+                    sub = splits[1];
+                }
+                LinkedList<Medicition> mes = new LinkedList<>();
+                if (medications != null && medications.size() > 0) {
+                    for (String m : medications) {
+                        Medicition medicition = new Medicition();
+                        medicition.setMedicitionName(m);
+                        if (medicaton_ji.containsKey(m)) {
+                            String s = medicaton_ji.get(m);
+                            if (s.equals("忌用")) {
+                                medicition.setForbidden(2);
+                            } else {
+                                medicition.setForbidden(1);
                             }
                         } else {
-                            medicaton_ji.put(med, ty);
+                            medicition.setForbidden(0);
                         }
-                    }
-                }
-                if (medicatonMap != null && medicatonMap.size() > 0) {
-                    for (Map.Entry<String, List<String>> fd : medicatonMap.entrySet()) {
-                        int i = 0;
-                        String big = "", sub = "";
-                        String big_sub = fd.getKey();//大小类
-                        List<String> medications = fd.getValue();//药的集合
-                        String[] splits = big_sub.split("\\$");
-                        Drugs drugs = new Drugs();
-                        if (splits[0].equals(splits[1])) {
-                            sub = "";
-                            big = splits[0];
+                        if (i < 3) {
+                            medicition.setIsShow(1);
+                            i++;
                         } else {
-                            big = splits[0];
-                            sub = splits[1];
-                        }
-                        LinkedList<Medicition> mes = new LinkedList<>();
-                        if (medications != null && medications.size() > 0) {
-                            for (String m : medications) {
-                                Medicition medicition = new Medicition();
-                                medicition.setMedicitionName(m);
-                                if (medicaton_ji.containsKey(m)) {
-                                    String s = medicaton_ji.get(m);
-                                    if (s.equals("忌用")) {
-                                        medicition.setForbidden(2);
-                                    } else {
-                                        medicition.setForbidden(1);
-                                    }
-                                } else {
-                                    medicition.setForbidden(0);
-                                }
-                                if (i < 3) {
-                                    medicition.setIsShow(1);
-                                    i++;
-                                } else {
-                                    medicition.setIsShow(0);
-                                }
-                                mes.add(medicition);
-                            }
+                            medicition.setIsShow(0);
                         }
-                        drugs.setBigdrugsName(big);
-                        drugs.setSubdrugsName(sub);
-                        drugs.setDrugsForbidden(0);
-                        drugs.setMedicitionsList(mes);
-                        dList.add(drugs);
+                        mes.add(medicition);
                     }
                 }
-                return 1;
+                drugs.setBigdrugsName(big);
+                drugs.setSubdrugsName(sub);
+                drugs.setDrugsForbidden(0);
+                drugs.setMedicitionsList(mes);
+                dList.add(drugs);
             }
-        });
-        closeSession(session);
-        return dList;
+        }
     }
+
+    private void searchAllMedication(Record record, Map<String, List<String>> medicatonMap, Map<String, String> medicaton_ji) {
+        String big = record.get("big").toString().replace("\"", "");
+        String sub = record.get("sub").toString().replace("\"", "");
+        String med = record.get("med").toString().replace("\"", "");
+        String ty = record.get("ty").toString().replace("\"", "");
+        if ("NULL".equals(ty)) {
+            if (medicatonMap.containsKey(big + "$" + sub)) {
+                List<String> ml = medicatonMap.get(big + "$" + sub);
+                ml.add(med);
+                medicatonMap.put(big + "$" + sub, ml);
+            } else {
+                List<String> ml = new ArrayList<>();
+                ml.add(med);
+                medicatonMap.put(big + "$" + sub, ml);
+            }
+        } else {
+            if (medicaton_ji.containsKey(med)) {
+                if (medicaton_ji.get(med).equals("慎用") && ty.equals("忌用")) {
+                    medicaton_ji.put(med, "忌用");
+                }
+            } else {
+                medicaton_ji.put(med, ty);
+            }
+        }
+    }
+
     //查找主诊断
     private String mainDisease(String disName,Driver driver){
         String main_dis = "";

+ 2 - 2
graph/src/main/resources/pushTreat.properties

@@ -27,7 +27,7 @@ return h.name as big,d.name as sub,m.name as med,null as ty
 searchMedication=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 \
-where d.name=h.bigDrugs and h.name in drugsList\n \
+where d.name=h.bigDrugs \n \
 with t,m,d,h\n \
 match(m)<-[R:\u614E\u7528|:\u5FCC\u7528]-(i) where i.name in filds\n \
 return t.name as treat,d.name as big,h.name as sub,m.name as med,type(R) as ty\n \
@@ -36,6 +36,6 @@ union\n \
 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 \
-where d.name=h.bigDrugs and h.name in drugsList\n \
+where d.name=h.bigDrugs \n \
 return t.name as treat,d.name as big,h.name as sub, m.name as med,null as ty\n \
 order by h.p