|
@@ -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;
|
|
|
+ }
|
|
|
}
|