|
@@ -1207,20 +1207,30 @@ public class Neo4jAPI {
|
|
|
if (diseFilds != null && diseFilds.size() > 0) {
|
|
|
for (Map.Entry<String, ArrayList> df : diseFilds.entrySet()) {
|
|
|
//大对象集合
|
|
|
- ArrayList<Drugs> drugsList;
|
|
|
+ List<Drugs> drugsList;
|
|
|
+ TreatCate treatCate = null;
|
|
|
Map<String, String> medicaton_ji = new HashMap<>();//药的忌用和慎用集合
|
|
|
Map<String, List<String>> medicatonMap = new LinkedHashMap<>();//全部的药集合
|
|
|
String diseaseName = df.getKey();//疾病
|
|
|
ArrayList value = df.getValue();//其他条件
|
|
|
// TODO: 2019/11/12 处理规则判断的用药情况
|
|
|
-
|
|
|
- drugsList = allMedication(tx,medicaton_ji, medicatonMap, diseaseName, value);
|
|
|
+ JSONObject jsonObject = medicationRule(tx, medicaton_ji, medicatonMap,diseaseName,value);
|
|
|
+ drugsList = (List<Drugs>)jsonObject.get("drugs");
|
|
|
+ treatCate = (TreatCate)jsonObject.get("treatCate");
|
|
|
+ if(treatCate.getType() == null){
|
|
|
+ treatCate = null;
|
|
|
+ }
|
|
|
+ //规则不成立,返回全部用药
|
|
|
+ if(drugsList == null || drugsList.size() == 0){
|
|
|
+ drugsList = allMedication(tx,medicaton_ji, medicatonMap, diseaseName, value,1,null);
|
|
|
+ }
|
|
|
Filnlly filnlly = new Filnlly();
|
|
|
//显示不良反应
|
|
|
if (diseaseType != null && 1 == diseaseType) {
|
|
|
List<Indicators> indicators = sideEffect(diseaseName, disUE, ueSet, crisisDetails, disSet);
|
|
|
filnlly.setAdverseEvent(indicators);
|
|
|
}
|
|
|
+ filnlly.setTreatCate(treatCate);
|
|
|
filnlly.setTreatment(drugsList);
|
|
|
newTret.put(diseaseName, filnlly);
|
|
|
}
|
|
@@ -1236,11 +1246,16 @@ public class Neo4jAPI {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private ArrayList<Drugs> allMedication(Transaction tx, Map<String, String> medicaton_ji, Map<String, List<String>> medicatonMap, String diseaseName, ArrayList value) {
|
|
|
- ArrayList<Drugs> drugsList = new ArrayList<Drugs>();
|
|
|
- String query;
|
|
|
+ private List<Drugs> allMedication(Transaction tx, Map<String, String> medicaton_ji, Map<String, List<String>> medicatonMap, String diseaseName, ArrayList value,int sign,List<String> drugslist) {
|
|
|
+ List<Drugs> drugsList = new ArrayList<Drugs>();
|
|
|
+ String query = null;
|
|
|
StatementResult result;
|
|
|
- query = propertiesUtil.getProperty("searchTreat").replace("disName", "\'" + diseaseName + "\'").replace("filds", value.toString());
|
|
|
+ if(sign == 1){
|
|
|
+ query = propertiesUtil.getProperty("searchTreat").replace("disName", "\'" + diseaseName + "\'").replace("filds", value.toString());
|
|
|
+ }else if(sign == 2){
|
|
|
+ query = propertiesUtil.getProperty("searchRuleMedicaton").replace("disName", "\'" + diseaseName + "\'").replace("filds", value.toString()).replace("drugsList",drugslist.toString());
|
|
|
+ }
|
|
|
+
|
|
|
logger.info("查找诊断对应的类和药物,包括类的排序,查找语句为:\n" + query);
|
|
|
result = tx.run(query);
|
|
|
while (result.hasNext()) {
|
|
@@ -1337,12 +1352,70 @@ public class Neo4jAPI {
|
|
|
/**
|
|
|
* 用药规则处理
|
|
|
* @param diseaseName
|
|
|
- * @param values
|
|
|
+ * @param
|
|
|
*/
|
|
|
- public void medicationRule(String diseaseName,List values,Session session){
|
|
|
-
|
|
|
+ private JSONObject medicationRule(Transaction tx,Map<String, String> medicaton_ji, Map<String, List<String>> medicatonMap,String diseaseName, ArrayList value){
|
|
|
+ String query;
|
|
|
+ StatementResult result;
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ TreatCate treatCate = new TreatCate();
|
|
|
+ List<Drugs> drugs = new ArrayList<>();
|
|
|
+ // TODO: 2019/11/13 开始匹配规则
|
|
|
+ query=propertiesUtil.getProperty("medicationRule").replace("filds",value.toString());
|
|
|
+ result = tx.run(query);
|
|
|
+ int i=0;
|
|
|
+ List<String> collection =null;
|
|
|
+ while (result.hasNext()) {
|
|
|
+ Record record = result.next();
|
|
|
+ int j = record.get("design").asInt();
|
|
|
+ if(j>i){
|
|
|
+ i = j;
|
|
|
+ collection = (List) record.get("collection").asList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> medictionDrugs =null;
|
|
|
+ if(collection != null){
|
|
|
+ medictionDrugs = new ArrayList<>();
|
|
|
+ for (String drugsp:collection) {
|
|
|
+ String[] splits = drugsp.replace("\"", "").split("\\+");
|
|
|
+ for (String drug:splits) {
|
|
|
+ if(medictionDrugs.contains("'"+drug+"'")){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ medictionDrugs.add("'"+drug+"'");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //根据类找药
|
|
|
+ try {
|
|
|
+ drugs = allMedication(tx, medicaton_ji, medicatonMap, diseaseName, value, 2, medictionDrugs);
|
|
|
+ }catch (Exception e){
|
|
|
+ drugs = null;
|
|
|
+ }
|
|
|
+ treatCate.setType(switchType(i));
|
|
|
+ treatCate.setName(collection);
|
|
|
+ jsonObject.put("drugs",drugs);
|
|
|
+ jsonObject.put("treatCate",treatCate);
|
|
|
+ return jsonObject;
|
|
|
|
|
|
}
|
|
|
+ //单、双药、胰岛素药
|
|
|
+ private String switchType(int i) {
|
|
|
+ String type;
|
|
|
+ switch (i){
|
|
|
+ case 1:
|
|
|
+ type = "单药治疗";
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ type = "双药治疗";
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ type = "胰岛素治疗";
|
|
|
+ break;
|
|
|
+ default:type = null;
|
|
|
+ }
|
|
|
+ return type;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 治疗方案,取每个诊断对应的filds
|