Parcourir la source

Merge remote-tracking branch 'origin/push-dev-edite' into push-debug

hujing il y a 5 ans
Parent
commit
19df4a9668

+ 13 - 8
graph-web/src/main/java/org/diagbot/graphWeb/work/ScaleCalculate.java

@@ -2,6 +2,7 @@ package org.diagbot.graphWeb.work;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
 
 import java.text.DecimalFormat;
 import java.util.ArrayList;
@@ -154,6 +155,8 @@ public class ScaleCalculate {
     public Map<String, Object> scaleCalcMethod(JSONObject jsonObject) throws Exception {
         Map<String, Object> scaleCalcResult = new HashMap<>();
         Map<String, Object> data = (Map<String, Object>) jsonObject.get("data");
+        JSONObject valueResult = new JSONObject();
+        JSONObject nameResult = new JSONObject();
         int type = (int) data.get("type");
         if (type == 2) {
             Map<String, Object> content = (Map<String, Object>) data.get("content");
@@ -167,7 +170,7 @@ public class ScaleCalculate {
                 for (int i = 0; i < mapList.size(); i++) {
                     Map<String, Object> detailSub = mapList.get(i);
                     if ("年龄".equals(detailSub.get("name"))) {
-                        if ("".equals(detailSub.get("value"))) {
+                        if (StringUtils.isEmpty(detailSub.get("value").toString())) {
                             //如果拿到的年龄为空,
                             break;
                         } else {
@@ -214,9 +217,7 @@ public class ScaleCalculate {
                 double eGFR3 = 141 * Math.pow((scr / k), a) * Math.pow(0.993, age) * denger;
                 String unit = "ml/min•1.73m2";
                 String text = null;
-                if (eGFR3 <= 0) {
-                    text = "指标值缺少";
-                } else if (eGFR3 > 0 && eGFR3 < 15) {
+                if(eGFR3 > 0 && eGFR3 < 15) {
                     text = "肾功能衰竭";
                 } else if (eGFR3 >= 15 && eGFR3 <= 29) {
                     text = "重度下降";
@@ -227,12 +228,16 @@ public class ScaleCalculate {
                 } else if (eGFR3 > 89) {
                     text = "正常或肾损伤代偿期";
                 }
-                JSONObject valueResult = new JSONObject();
-                JSONObject nameResult = new JSONObject();
+
                 valueResult.put("name", "GFR值");
-                valueResult.put("text", new DecimalFormat("0.00").format(eGFR3) + " " + unit);
                 nameResult.put("name", "评估结论");
-                nameResult.put("text", text);
+                if (eGFR3 <= 0 || Double.POSITIVE_INFINITY == eGFR3){
+                    valueResult.put("text", "");
+                    nameResult.put("text", "");
+                } else {
+                    valueResult.put("text", new DecimalFormat("0.00").format(eGFR3) + " " + unit);
+                    nameResult.put("text", text);
+                }
                 //                scaleCalcResult.put("text", text);
                 //                scaleCalcResult.put("unit", unit);
                 //                scaleCalcResult.put("value", new DecimalFormat("#.00").format(eGFR3));

+ 72 - 53
graph/src/main/java/org/diagbot/graph/medicationProcess/PushTreat.java

@@ -62,25 +62,17 @@ public class PushTreat {
         List<String> allFilds = this.getAllFilds(webDiag, crisisDetails, inputList, ueSet);
 
         // TODO: 2019/11/19     匹配规则用药,判断是否满足规则
-        List<TreatDetail> treatDetailList_rule = this.ruleMedicaton(disName, webDiag, allFilds, driver);
-        String name = treatDetailList_rule.get(0).getTitle().substring(0, treatDetailList_rule.get(0).getTitle().indexOf("治疗方案"));
-        if(treatDetailList_rule.size() == 1 && disName.equals(name)){
-            // TODO: 2019/11/28  匹配主症+其他+其他
-//            List<TreatDetail> treatmentPlanList_otherrule = this.otherRuleMedicaton(disName, exculdDiagFilds, allFilds, driver);
-//            treatmentPlanList = treatmentPlanList_otherrule;
-
-        }else if(treatDetailList_rule.size() == 1 && !disName.equals(name)){
-            treatmentPlanList =treatDetailList_rule;
-        }else {
-            treatmentPlanList = treatDetailList_rule;
-        }
+        treatmentPlanList= this.ruleMedicaton(disName, webDiag, allFilds, driver);
+
         // TODO: 2019/11/28  匹配主症+其他+其他
         List<TreatDetail> treatmentPlanList_otherrule = this.otherRuleMedicaton(disName, exculdDiagFilds, allFilds, driver);
         treatmentPlanList.addAll(treatmentPlanList_otherrule);
+
         // TODO: 2019/11/19     规则不满足的情况下,返回主诊断的用药情况
         if(treatmentPlanList.size() == 0){
             treatmentPlanList = this.ordinaryMedicaton(disName,allFilds,driver);
         }
+
         // TODO: 2019/11/21 处理合并症 例如高热
         List<TreatDetail> treatDetailList = this.complicationMedicaton(inputList, driver, allFilds);
         treatmentPlanList.addAll(treatDetailList);
@@ -94,6 +86,7 @@ public class PushTreat {
         Map<String,Map<String,Object>> disDrugs = new HashMap<>();
         Map<String, String> medicaton_ji = new HashMap<>();
         Map<String, List<String>> medicatonMap = new HashMap<>();
+        Map<String,List<String>> condiTypedis = new HashMap<>();
         Set<String> disSet = new HashSet<>();
         List<String> filds = new ArrayList<>();
         if(inputList.length>0){
@@ -112,14 +105,14 @@ public class PushTreat {
                 logger.info("规则用药,查询语句为:\n" + query);
                 StatementResult result = tx.run(query);
                 while (result.hasNext()) {
-                    searchDrugs(result, conditionDesign, disDrugs,disSet);
+                    searchDrugs(condiTypedis,result, conditionDesign, disDrugs,disSet);
                 }
                 return 1;
             }
         });
         closeSession(session);
+        addColl(condiTypedis,disDrugs);
         disTreatDetailList = this.processMedication_he(disDrugs, conditionDesign, allFilds, driver);
-
         return disTreatDetailList;
     }
     /**
@@ -134,7 +127,7 @@ public class PushTreat {
 
         List<Drugs> dList = new ArrayList<>();
         Map<String, String> medicaton_ji = new HashMap<>();
-        Map<String, List<String>> medicatonMap = new HashMap<>();
+        Map<String, List<String>> medicatonMap = new LinkedHashMap<>();
 
         Session session = driver.session(AccessMode.WRITE);
         session.writeTransaction(new TransactionWork<Integer>() {
@@ -169,6 +162,7 @@ public class PushTreat {
     private List<TreatDetail> otherRuleMedicaton(String disName,List<String> excludeDiagFilds,List<String> allFilds,Driver driver){
         Map<String,Integer> conditionDesign = new HashMap<>();
         Map<String,Map<String,Object>> disDrugs = new HashMap<>();
+        Map<String,List<String>> condiTypedis = new HashMap<>();
         Set<String> disSet = new HashSet<>();
         excludeDiagFilds.add("'"+disName+"'");
         Session  session = driver.session(AccessMode.WRITE);
@@ -179,21 +173,15 @@ public class PushTreat {
                 logger.info("规则用药,查询语句为:\n" + query);
                 StatementResult result = tx.run(query);
                 while (result.hasNext()) {
-                    searchDrugs(result, conditionDesign, disDrugs,disSet);
+                    searchDrugs(condiTypedis,result, conditionDesign, disDrugs,disSet);
                 }
                 return 1;
             }
         });
         closeSession(session);
+        addColl(condiTypedis,disDrugs);
         List<TreatDetail> treatDetailList =new ArrayList<>();
-//        if(!disSet.contains(disName)){
-//            //规则不匹配,返回主诊断治疗方案
-//            treatDetailList =  this.ordinaryMedicaton(disName,allFilds,driver);
-//        }else {
-            treatDetailList = this.processMedication_otherrule(disName,disDrugs, conditionDesign, allFilds, driver);
-
-//        }
-
+        treatDetailList = this.processMedication_otherrule(disName,disDrugs, conditionDesign, allFilds, driver);
         return treatDetailList;
     }
 
@@ -201,6 +189,7 @@ public class PushTreat {
     private List<TreatDetail> ruleMedicaton(String disName,String webDiag,List<String> allFilds,Driver driver){
         Map<String,Integer> conditionDesign = new HashMap<>();
         Map<String,Map<String,Object>> disDrugs = new HashMap<>();
+        Map<String,List<String>> condiTypedis = new HashMap<>();
         Set<String> disSet = new HashSet<>();
         List<String> webDiagList = processWebDiag(disName,webDiag);
         Session  session = driver.session(AccessMode.WRITE);
@@ -208,30 +197,53 @@ public class PushTreat {
             @Override
             public Integer execute(Transaction tx) {
                 String query = propertiesUtil_treat.getProperty("medicationRule").replace("filds",webDiagList.toString());
-//                String query = propertiesUtil_treat.getProperty("medicationRule").replace("filds",allFilds.toString());
                 logger.info("规则用药,查询语句为:\n" + query);
                 StatementResult result = tx.run(query);
                 while (result.hasNext()) {
-                    searchDrugs(result, conditionDesign, disDrugs,disSet);
+                    searchDrugs(condiTypedis,result, conditionDesign, disDrugs,disSet);
                 }
                 return 1;
             }
         });
         closeSession(session);
+        addColl(condiTypedis,disDrugs);
         List<TreatDetail> treatDetailList =new ArrayList<>();
-        if(!disSet.contains(disName)){
-            //规则不匹配,返回主诊断治疗方案
-            treatDetailList =  this.ordinaryMedicaton(disName,allFilds,driver);
-        }else {
-            treatDetailList = this.processMedication(disName,disDrugs, conditionDesign, allFilds, driver);
+        treatDetailList = this.processMedication(disName,disDrugs, conditionDesign, allFilds, driver);
+        return treatDetailList;
+    }
+    private void addColl(Map<String,List<String>> condiTypedis,Map<String,Map<String,Object>> disDrugs){
+        if(condiTypedis!= null &&condiTypedis.size()>0){
+            for (Map.Entry<String,List<String>> ctd:condiTypedis.entrySet()) {
+                String name = ctd.getKey().split("&")[1];
+                String type = ctd.getKey().split("&")[0];//主症或并发症
+                if(disDrugs.containsKey(name)){
+
+                    Map<String, Object> objectMap = disDrugs.get(name);
+                    List<String> cateList = (List<String>) objectMap.get("cate");
+                    int index = cateList.indexOf(type);
+                    if(objectMap.containsKey("coll")){
+                        List<Object> list = (List<Object>) objectMap.get("coll");
+                        List<String> v = new ArrayList<>();
+                        v.addAll(ctd.getValue());
+                        list.add(index,v);
+                        objectMap.put("coll",list);
+                    }else {
+                        List<Object> list = new ArrayList<>();
+                        List<String> v = new ArrayList<>();
+                        v.addAll(ctd.getValue());
+                        list.add(v);
+                        objectMap.put("coll",list);
+                    }
+                    disDrugs.put(name,objectMap);
+                }
 
+            }
         }
 
-        return treatDetailList;
-    }
 
-    private void searchDrugs(StatementResult result, Map<String, Integer> conditionDesign, Map<String, Map<String, Object>> disDrugs,Set<String> disSet) {
-        List<String> collection =null;
+    }
+    private void searchDrugs(Map<String,List<String>> condiTypedis,StatementResult result, Map<String, Integer> conditionDesign, Map<String, Map<String, Object>> disDrugs,Set<String> disSet) {
+        String collection =null;
         int i=0;
         Record next = result.next();
         String name = next.get("name").toString().replace("\"", "");
@@ -242,38 +254,45 @@ public class PushTreat {
         disSet.add(disName);
         if(design >= i){
             i = design;
-            collection = (List) next.get("collection").asList();
+            collection = next.get("collection").toString().replace("\"", "");
         }
         conditionDesign.put(name,i);
+        String ncd =category+"&"+ name + "&" + disName;
+        if(condiTypedis.containsKey(ncd)){
+            List<String> list = condiTypedis.get(ncd);
+            list.add(collection);
+            condiTypedis.put(ncd,list);
+        }else {
+            List<String> list = new ArrayList<>();
+            list.add(collection);
+            condiTypedis.put(ncd,list);
+        }
+
         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);
+            if(!cateList.contains(category)){
+                cateList.add(category);
+            }
             designHashMap.put("cate",cateList);
-            disList.add(disName);
+            if(!disList.contains(disName)){
+                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);
+            if(!cate1.contains(category)){
+                cate1.add(category);
+            }
             objectMap.put("cate",cate1);
             List<String> dis1 = (List<String>)objectMap.get("dis");
-            dis1.add(disName);
+            if(!dis1.contains(disName)){
+                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);
         }
     }
@@ -446,7 +465,7 @@ public class PushTreat {
     private List<Drugs> searchMedication(List<String> drugs,List<String> allFilds,Driver driver){
         List<Drugs> dList = new ArrayList<>();
         Map<String, String> medicaton_ji = new HashMap<>();
-        Map<String, List<String>> medicatonMap = new HashMap<>();
+        Map<String, List<String>> medicatonMap = new LinkedHashMap<>();
 
         Session session = driver.session(AccessMode.WRITE);
         session.writeTransaction(new TransactionWork<Integer>() {

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

@@ -10,16 +10,16 @@ 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.name as name,c.design as design,r.p as p,r.category as category,r.disName as disName,collect(t.name) as collection order by p
+return c.name as name,c.design as design,r.p as p,r.category as category,r.disName as disName,t.name as collection order by p
 #\u89C4\u5219\u627E\u836F
-searchMedication_rule=match(m:Medicine)-[r:\u5C5E\u4E8E]->(d:Drugs) where d.name in drugs \n \
+searchMedication_rule=unwind drugs as row match(m:Medicine)-[r:\u5C5E\u4E8E]->(d:Drugs) where d.name=row \n \
 with m,d \n \
 match(m:Medicine)-[r:\u5C5E\u4E8E]->(h:Drugs) where d.bigDrugs=h.name \n \
 with h,d,m \n \
 match(m)<-[R:\u614E\u7528|:\u5FCC\u7528]-(i) where i.name in filds \n \
 return h.name as big,d.name as sub,m.name as med,type(R) as ty \n \
 union \n \
-match(m:Medicine)-[r:\u5C5E\u4E8E]->(d:Drugs) where d.name in drugs \n \
+unwind drugs as row match(m:Medicine)-[r:\u5C5E\u4E8E]->(d:Drugs) where d.name=row \n \
 with m,d \n \
 match(m:Medicine)-[r:\u5C5E\u4E8E]->(h:Drugs) where d.bigDrugs=h.name \n \
 return h.name as big,d.name as sub,m.name as med,null as ty