فهرست منبع

处理主诊断+其他+其他的治疗方案

kongwz 5 سال پیش
والد
کامیت
0423bf0cdf

+ 23 - 1
graph-web/src/main/java/org/diagbot/graphWeb/work/GraphCalculate.java

@@ -55,6 +55,7 @@ public class GraphCalculate {
         logger.info("前端传来的年龄为 :"+age+" 前端传来的性别为 :"+sex);
         Map<String, Map<String, String>> sexAgeCache = CacheUtil.getSexAgeCache();
         Map<String, Map<String, String>> inputs = searchData.getGraphInputs();
+        List<String> exculdDiagFilds = this.exculdDiagFilds(inputs);
         //从大数据解析分词
         Set<String> ss = processParticiple(inputs);
         logger.info("从分词系统接收到的词 :" + ss);
@@ -96,7 +97,7 @@ public class GraphCalculate {
         //走治疗
         if (StringUtils.isNotEmpty(diseaseName) && featureTypeList.contains(Constants.feature_type_treat)) {
             PushTreat pushTreat = new PushTreat();
-            Treat treat = pushTreat.processTreat(diseaseName,webDiag,diseaseType, driver, (String[]) inputList.toArray(new String[inputList.size()]), crisisDetails);
+            Treat treat = pushTreat.processTreat(diseaseName,webDiag,diseaseType, driver, (String[]) inputList.toArray(new String[inputList.size()]),exculdDiagFilds, crisisDetails);
 //            Map<String, List<String>> disUE = pushTreat.getDisUE(diseaseName,1,driver);
 //            Map<String,String> ue = pushTreat.getUe((String[]) inputList.toArray(new String[inputList.size()]),driver);
             //走平常诊断治疗
@@ -265,4 +266,25 @@ public class GraphCalculate {
         }
         return sc;
     }
+    private List<String> exculdDiagFilds(Map<String, Map<String, String>> inputs){
+        List<String> exculdDiagFilds = new ArrayList<>();
+        if(inputs != null && inputs.size()>0){
+            String fildName ="";
+            for (Map.Entry<String, Map<String, String>> fild:inputs.entrySet()) {
+                fildName = fild.getKey();
+                Map<String, String> value = fild.getValue();
+                String propertys = value.get("property");
+                List<String> stringList = Arrays.asList(propertys.split(","));
+                if(stringList.contains("18") || stringList.contains("55")){
+                    continue;
+                }else {
+                    fildName = "'"+fildName+"'";
+                    if(!exculdDiagFilds.contains(fildName)){
+                        exculdDiagFilds.add(fildName);
+                    }
+                }
+            }
+        }
+        return exculdDiagFilds;
+    }
 }

+ 57 - 6
graph/src/main/java/org/diagbot/graph/medicationProcess/PushTreat.java

@@ -26,7 +26,7 @@ public class PushTreat {
      * @param crisisDetails 规则返回结果
      * @return
      */
-    public Treat processTreat(String disName,String webDiag,Integer diseaseType,Driver driver,String[] keys,Map<String, List<CrisisDetail>> crisisDetails){
+    public Treat processTreat(String disName,String webDiag,Integer diseaseType,Driver driver,String[] keys,List<String> exculdDiagFilds,Map<String, List<CrisisDetail>> crisisDetails){
         Treat treat =new Treat();
 
         // TODO: 2019/11/20
@@ -42,7 +42,7 @@ public class PushTreat {
 
         // TODO: 2019/11/20
         //具体用药
-        List<TreatDetail> treatmentPlan = this.getTreatmentPlan(disName,webDiag, keys, crisisDetails,ueSet,driver);
+        List<TreatDetail> treatmentPlan = this.getTreatmentPlan(disName,webDiag, keys,exculdDiagFilds, crisisDetails,ueSet,driver);
         treat.setTreatmentPlan(treatmentPlan);
 
 
@@ -56,12 +56,21 @@ public class PushTreat {
      * @param crisisDetails 规则结果
      * @return
      */
-    private List<TreatDetail> getTreatmentPlan(String disName,String webDiag,String[] inputList,Map<String, List<CrisisDetail>> crisisDetails, Map<String, String> ueSet,Driver driver){
+    private List<TreatDetail> getTreatmentPlan(String disName,String webDiag,String[] inputList,List<String> exculdDiagFilds,Map<String, List<CrisisDetail>> crisisDetails, Map<String, String> ueSet,Driver driver){
         List<TreatDetail> treatmentPlanList = new ArrayList<>();
         //获取全部字段
         List<String> allFilds = this.getAllFilds(webDiag, crisisDetails, inputList, ueSet);
+
         // TODO: 2019/11/19     匹配规则用药,判断是否满足规则
-        treatmentPlanList = this.ruleMedicaton(disName,webDiag,allFilds, driver);
+        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;
+        }
         // TODO: 2019/11/19     规则不满足的情况下,返回主诊断的用药情况
         if(treatmentPlanList.size() == 0){
             treatmentPlanList = this.ordinaryMedicaton(disName,allFilds,driver);
@@ -150,6 +159,37 @@ public class PushTreat {
         disTreatDetailList.add(treatDetail);
         return disTreatDetailList;
     }
+    //匹配规则,主症+其他+其他
+    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<>();
+        Set<String> disSet = new HashSet<>();
+        excludeDiagFilds.add("'"+disName+"'");
+        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",excludeDiagFilds.toString());
+                logger.info("规则用药,查询语句为:\n" + query);
+                StatementResult result = tx.run(query);
+                while (result.hasNext()) {
+                    searchDrugs(result, conditionDesign, disDrugs,disSet);
+                }
+                return 1;
+            }
+        });
+        closeSession(session);
+        List<TreatDetail> treatDetailList =new ArrayList<>();
+        if(!disSet.contains(disName)){
+            //规则不匹配,返回主诊断治疗方案
+            treatDetailList =  this.ordinaryMedicaton(disName,allFilds,driver);
+        }else {
+            treatDetailList = this.processMedication(disDrugs, conditionDesign, allFilds, driver);
+
+        }
+
+        return treatDetailList;
+    }
     //匹配规则,推荐用药
     private List<TreatDetail> ruleMedicaton(String disName,String webDiag,List<String> allFilds,Driver driver){
         Map<String,Integer> conditionDesign = new HashMap<>();
@@ -160,8 +200,8 @@ public class PushTreat {
         session.writeTransaction(new TransactionWork<Integer>() {
             @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());
+                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()) {
@@ -173,9 +213,11 @@ public class PushTreat {
         closeSession(session);
         List<TreatDetail> treatDetailList =new ArrayList<>();
         if(!disSet.contains(disName)){
+            //规则不匹配,返回主诊断治疗方案
             treatDetailList =  this.ordinaryMedicaton(disName,allFilds,driver);
         }else {
             treatDetailList = this.processMedication(disDrugs, conditionDesign, allFilds, driver);
+
         }
 
         return treatDetailList;
@@ -512,6 +554,15 @@ public class PushTreat {
 
         return filds;
     }
+    private List<String> getAllFilds(String[] inputList){
+        List<String> filds = new ArrayList<>();
+        if(inputList.length>0){
+            for (String fild:inputList) {
+                filds.add("\'"+fild.trim()+"\'");
+            }
+        }
+        return filds;
+    }
 
 
     //不良反应set