Browse Source

治疗方案添加合并症

kongwz 5 years ago
parent
commit
e45665026d
1 changed files with 146 additions and 71 deletions
  1. 146 71
      graph/src/main/java/org/diagbot/graph/medicationProcess/PushTreat.java

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

@@ -66,9 +66,46 @@ public class PushTreat {
         if(treatmentPlanList.size() == 0){
             treatmentPlanList = this.ordinaryMedicaton(disName,allFilds,driver);
         }
-        return treatmentPlanList;
+        // TODO: 2019/11/21 处理合并症 例如高热
+        List<TreatDetail> treatDetailList = this.complicationMedicaton(inputList, driver, allFilds);
+        treatDetailList.addAll(treatmentPlanList);
+
+        return treatDetailList;
     }
 
+    private List<TreatDetail> complicationMedicaton(String[] inputList,Driver driver,List<String> allFilds){
+        List<TreatDetail> disTreatDetailList = new ArrayList<>();
+        Map<String,Integer> conditionDesign = new HashMap<>();
+        Map<String,Map<String,Object>> disDrugs = new HashMap<>();
+        Map<String, String> medicaton_ji = new HashMap<>();
+        Map<String, List<String>> medicatonMap = new HashMap<>();
+        List<String> filds = new ArrayList<>();
+        if(inputList.length>0){
+            for (String fild:inputList) {
+                String s = "\'" + fild.trim() + "\'";
+                if(filds.indexOf(s)<0){
+                    filds.add(s);
+                }
+            }
+        }
+        Session  session = driver.session(AccessMode.WRITE);
+        session.writeTransaction(new TransactionWork<Integer>() {
+            @Override
+            public Integer execute(Transaction tx) {
+                String query = propertiesUtil_treat.getProperty("medicationRule").replace("filds",filds.toString());
+                logger.info("规则用药,查询语句为:\n" + query);
+                StatementResult result = tx.run(query);
+                while (result.hasNext()) {
+                    searchDrugs(result, conditionDesign, disDrugs);
+                }
+                return 1;
+            }
+        });
+        closeSession(session);
+        disTreatDetailList = this.processMedication_he(disDrugs, conditionDesign, allFilds, driver);
+
+        return disTreatDetailList;
+    }
     /**
      * 规则不匹配返回主诊断用药
      * @param disName 主诊断
@@ -117,63 +154,15 @@ public class PushTreat {
         Map<String,Integer> conditionDesign = new HashMap<>();
         Map<String,Map<String,Object>> disDrugs = new HashMap<>();
         List<String> webDiagList = processWebDiag(disName,webDiag);
-        List<String> collection =null;
-        StatementResult result;
-        Session session = null;
-        session = driver.session(AccessMode.WRITE);
+        Session  session = driver.session(AccessMode.WRITE);
         session.writeTransaction(new TransactionWork<Integer>() {
             @Override
             public Integer execute(Transaction tx) {
-                StatementResult result = null;
                 String query = propertiesUtil_treat.getProperty("medicationRule").replace("filds",webDiagList.toString());
                 logger.info("规则用药,查询语句为:\n" + query);
-                result = tx.run(query);
-
+                StatementResult result = tx.run(query);
                 while (result.hasNext()) {
-                    List<String> collection =null;
-                    int i=0;
-                    Record next = result.next();
-                    String name = next.get("name").toString().replace("\"", "");
-                    int design = next.get("design").asInt();
-                    String p = next.get("p").toString();
-                    String category = next.get("category").toString().replace("\"","");
-                    String disName = next.get("disName").toString().replace("\"","");
-                    if(design >= i){
-                        i = design;
-                        collection = (List) next.get("collection").asList();
-                    }
-                    conditionDesign.put(name,i);
-                    if(!disDrugs.containsKey(name)){
-                        Map<String, Object> designHashMap = new HashMap<>();
-                        List<String> pList = new ArrayList<>();
-                        List<String> cateList = new ArrayList<>();
-                        List<String> disList = new ArrayList<>();
-                        List<Object> collList = new ArrayList<>();
-                        pList.add(p);
-                        designHashMap.put("p",pList);
-                        cateList.add(category);
-                        designHashMap.put("cate",cateList);
-                        disList.add(disName);
-                        designHashMap.put("dis",disList);
-                        collList.add(collection);
-                        designHashMap.put("coll",collList);
-                        disDrugs.put(name,designHashMap);
-                    }else {
-                        Map<String, Object> objectMap = disDrugs.get(name);
-                        List<String> p1 = (List<String>)objectMap.get("p");
-                        p1.add(p);
-                        objectMap.put("p",p1);
-                        List<String> cate1 = (List<String>)objectMap.get("cate");
-                        cate1.add(category);
-                        objectMap.put("cate",cate1);
-                        List<String> dis1 = (List<String>)objectMap.get("dis");
-                        dis1.add(disName);
-                        objectMap.put("dis",dis1);
-                        List<Object> coll1 = (List<Object>)objectMap.get("coll");
-                        coll1.add(collection);
-                        objectMap.put("coll",coll1);
-                        disDrugs.put(name,objectMap);
-                    }
+                    searchDrugs(result, conditionDesign, disDrugs);
                 }
                 return 1;
             }
@@ -182,9 +171,55 @@ public class PushTreat {
         List<TreatDetail> treatDetailList = this.processMedication(disDrugs, conditionDesign, allFilds, driver);
         return treatDetailList;
     }
-    private List<TreatDetail> processMedication(Map<String,Map<String,Object>> disDrugs,Map<String,Integer> conditionDesign,List<String> allFilds,Driver driver){
-        List<TreatDetail> treatDetailList = new ArrayList<>();
 
+    private void searchDrugs(StatementResult result, Map<String, Integer> conditionDesign, Map<String, Map<String, Object>> disDrugs) {
+        List<String> collection =null;
+        int i=0;
+        Record next = result.next();
+        String name = next.get("name").toString().replace("\"", "");
+        int design = next.get("design").asInt();
+        String p = next.get("p").toString();
+        String category = next.get("category").toString().replace("\"","");
+        String disName = next.get("disName").toString().replace("\"","");
+        if(design >= i){
+            i = design;
+            collection = (List) next.get("collection").asList();
+        }
+        conditionDesign.put(name,i);
+        if(!disDrugs.containsKey(name)){
+            Map<String, Object> designHashMap = new HashMap<>();
+            List<String> pList = new ArrayList<>();
+            List<String> cateList = new ArrayList<>();
+            List<String> disList = new ArrayList<>();
+            List<Object> collList = new ArrayList<>();
+            pList.add(p);
+            designHashMap.put("p",pList);
+            cateList.add(category);
+            designHashMap.put("cate",cateList);
+            disList.add(disName);
+            designHashMap.put("dis",disList);
+            collList.add(collection);
+            designHashMap.put("coll",collList);
+            disDrugs.put(name,designHashMap);
+        }else {
+            Map<String, Object> objectMap = disDrugs.get(name);
+            List<String> p1 = (List<String>)objectMap.get("p");
+            p1.add(p);
+            objectMap.put("p",p1);
+            List<String> cate1 = (List<String>)objectMap.get("cate");
+            cate1.add(category);
+            objectMap.put("cate",cate1);
+            List<String> dis1 = (List<String>)objectMap.get("dis");
+            dis1.add(disName);
+            objectMap.put("dis",dis1);
+            List<Object> coll1 = (List<Object>)objectMap.get("coll");
+            coll1.add(collection);
+            objectMap.put("coll",coll1);
+            disDrugs.put(name,objectMap);
+        }
+    }
+    private List<TreatDetail> processMedication_he(Map<String,Map<String,Object>> disDrugs,Map<String,Integer> conditionDesign,List<String> allFilds,Driver driver){
+        List<TreatDetail> treatDetailList = new ArrayList<>();
         if(disDrugs != null && disDrugs.size()>0){
             for (Map.Entry<String,Map<String,Object>> ds:disDrugs.entrySet()) {
                 String key = ds.getKey();
@@ -194,26 +229,44 @@ public class PushTreat {
                 List<Object> collList = (List<Object>)values.get("coll");
 
                 if(cateList.contains("合并症")){
-                    TreatDetail treatDetail = new TreatDetail();
-                    int main = cateList.indexOf("主症");
-                    String mainDis = disList.get(main);
-                    List<String> o = (List<String>)collList.get(main);
-                    List<String> yinhao = yinhao(o);
-                    //根据类找药
-                    List<Drugs> drugs = searchMedication(yinhao,allFilds,driver);
-                    List<MeditionDetail> meditionDetails = new ArrayList<>();
-                    MeditionDetail meditionDetail = new MeditionDetail();
-                    meditionDetail.setDescription("");
-                    meditionDetail.setTreatment(drugs);
-                    meditionDetails.add(meditionDetail);
-
-                    treatDetail.setTitle(mainDis);
-                    treatDetail.setMeditionDetails(meditionDetails);
+                    List<Integer> indexList = same(cateList, "合并症");
+                    if(indexList.size()>0){
+                        for (Integer i:indexList) {
+                            TreatDetail treatDetail = new TreatDetail();
+                            String mainDis = disList.get(i);
+                            List<String> o = (List<String>)collList.get(i);
+                            List<String> yinhao = yinhao(o);
+                            //根据类找药
+                            List<Drugs> drugs = searchMedication(yinhao,allFilds,driver);
+                            List<MeditionDetail> meditionDetails = new ArrayList<>();
+                            MeditionDetail meditionDetail = new MeditionDetail();
+                            meditionDetail.setDescription("");
+                            meditionDetail.setTreatment(drugs);
+                            meditionDetails.add(meditionDetail);
+
+                            treatDetail.setTitle(mainDis);
+                            treatDetail.setMeditionDetails(meditionDetails);
+
+                            treatDetailList.add(treatDetail);
+                        }
+                    }
 
-                    treatDetailList.add(treatDetail);
+                }
+            }
+        }
+        return treatDetailList;
+    }
 
+    private List<TreatDetail> processMedication(Map<String,Map<String,Object>> disDrugs,Map<String,Integer> conditionDesign,List<String> allFilds,Driver driver){
+        List<TreatDetail> treatDetailList = new ArrayList<>();
 
-                }
+        if(disDrugs != null && disDrugs.size()>0){
+            for (Map.Entry<String,Map<String,Object>> ds:disDrugs.entrySet()) {
+                String key = ds.getKey();
+                Map<String, Object> values = ds.getValue();
+                List<String> cateList = (List<String>) values.get("cate");
+                List<String> disList = (List<String>)values.get("dis");
+                List<Object> collList = (List<Object>)values.get("coll");
                 if(cateList.contains("主症") && cateList.contains("并发症")){
                     TreatDetail treatDetail = new TreatDetail();
                     List<MeditionDetail> meditionDetails = new ArrayList<>();
@@ -660,5 +713,27 @@ public class PushTreat {
         }
         return diagList;
     }
+    public  List<Integer> same(List<String> list,String input) {
+        Map<String, String> map = new HashMap<String, String>();
+        for (int i = 0; i < list.size(); i++) {
+            String key = list.get(i);
+            String old = map.get(key);
+            if (old != null) {
+                map.put(key, old + "," + (i + 1));
+            } else {
+                map.put(key, "" + (i + 1));
+            }
+        }
+        List<Integer> indexList = new ArrayList<Integer>();
+        try {
+            String s = map.get(input);
+            String[] split = s.split(",");
+            for (String ds:split) {
+                indexList.add(Integer.parseInt(ds)-1);
+            }
+        }catch (Exception e){
 
+        }
+        return indexList;
+    }
 }