|
@@ -3,12 +3,15 @@ package org.diagbot.common.push.filter.rule;
|
|
|
|
|
|
import org.diagbot.common.push.bean.PreResult;
|
|
|
import org.diagbot.common.push.bean.ResponseData;
|
|
|
+import org.diagbot.common.push.bean.Rule;
|
|
|
import org.diagbot.common.push.bean.SearchData;
|
|
|
+import org.diagbot.common.push.cache.ApplicationCacheUtil;
|
|
|
import org.diagbot.common.push.filter.pretreat.*;
|
|
|
import org.diagbot.pub.Constants;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
@@ -16,31 +19,34 @@ public class PretreatmentRule {
|
|
|
public void rule(SearchData searchData) throws java.io.IOException {
|
|
|
//症状数据
|
|
|
if (!StringUtils.isEmpty(searchData.getSymptom())) {
|
|
|
- searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom"));
|
|
|
+ searchData.setSymptom(add2PreResultList(new PretreatmentSymptom(), searchData.getSymptom(), "symptom", searchData));
|
|
|
}
|
|
|
//体征数据
|
|
|
if (!StringUtils.isEmpty(searchData.getVital())) {
|
|
|
- searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), "vital"));
|
|
|
+ searchData.setVital(add2PreResultList(new PretreatmentVital(), searchData.getVital(), "vital", searchData));
|
|
|
}
|
|
|
//lis结构化信息
|
|
|
if (searchData.getLisArr() != null && searchData.getLisArr().size() > 0) {
|
|
|
- searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis"));
|
|
|
+ searchData.setLis(add2PreResultList(searchData.getLisArr(), searchData.getLis(), "lis", searchData));
|
|
|
} else if (!StringUtils.isEmpty(searchData.getLis())) {
|
|
|
- searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis"));
|
|
|
+ searchData.setLis(add2PreResultList(new PretreatmentLis(), searchData.getLis(), "lis", searchData));
|
|
|
}
|
|
|
//pacs数据
|
|
|
if (!StringUtils.isEmpty(searchData.getPacs())) {
|
|
|
- searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs"));
|
|
|
+ searchData.setPacs(add2PreResultList(new PretreatmentPacs(), searchData.getPacs(), "pacs", searchData));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType) throws java.io.IOException {
|
|
|
+ private String add2PreResultList(Pretreatment pretreatment, String content, String ruleType, SearchData searchData) throws java.io.IOException {
|
|
|
List<PreResult> preResultList = pretreatment.analyze(content);
|
|
|
- return add2PreResultList(preResultList, content, ruleType);
|
|
|
+ return add2PreResultList(preResultList, content, ruleType, searchData);
|
|
|
}
|
|
|
|
|
|
- private String add2PreResultList(List<PreResult> preResultList, String content, String ruleType) throws java.io.IOException {
|
|
|
+ private String add2PreResultList(List<PreResult> preResultList, String content, String ruleType, SearchData searchData) throws java.io.IOException {
|
|
|
Map<String, List<Rule>> kl_rule_filter_map = ApplicationCacheUtil.getKl_rule_filter_map();
|
|
|
+ //符合条件的规则
|
|
|
+ Map<String, List<Rule>> accord_rule_map = new HashMap<>();
|
|
|
+ List<Rule> accord_rules = null;
|
|
|
if (preResultList != null) {
|
|
|
for (PreResult result : preResultList) {
|
|
|
//规则库中匹配
|
|
@@ -50,15 +56,31 @@ public class PretreatmentRule {
|
|
|
continue;
|
|
|
}
|
|
|
for (Rule rule : rules) {
|
|
|
- if (Constants.COMMON_STRING_1.equals(rule.getSet_status())) { //需要匹配大类
|
|
|
+ if (!Constants.COMMON_STRING_1.equals(rule.getSet_name_check())) {
|
|
|
if (StringUtils.isEmpty(rule.getSet_name()) || !result.getName().equals(rule.getSet_name())) {
|
|
|
continue;
|
|
|
}
|
|
|
- }
|
|
|
- content = conceptConvert(result, rule, content);
|
|
|
- //危急值提醒
|
|
|
- if (Constants.COMMON_STRING_1.equals(rule.getType_value())) {
|
|
|
- conceptCrisis(result, rule, allCrisisDetailList);
|
|
|
+ content = conceptConvert(result, rule, content);
|
|
|
+ rule.setOriginText(result.getDetailName() + ":" + result.getValue() + result.getUnits());
|
|
|
+ if (accord_rule_map.get(ruleType) == null) {
|
|
|
+ accord_rules = new ArrayList<>();
|
|
|
+ } else {
|
|
|
+ accord_rules = accord_rule_map.get(ruleType);
|
|
|
+ }
|
|
|
+ accord_rules.add(rule);
|
|
|
+ accord_rule_map.put(ruleType, accord_rules);
|
|
|
+ searchData.setRules(accord_rule_map);
|
|
|
+ } else {
|
|
|
+ content = conceptConvert(result, rule, content);
|
|
|
+ rule.setOriginText(result.getDetailName() + ":" + result.getValue() + result.getUnits());
|
|
|
+ if (accord_rule_map.get(ruleType) == null) {
|
|
|
+ accord_rules = new ArrayList<>();
|
|
|
+ } else {
|
|
|
+ accord_rules = accord_rule_map.get(ruleType);
|
|
|
+ }
|
|
|
+ accord_rules.add(rule);
|
|
|
+ accord_rule_map.put(ruleType, accord_rules);
|
|
|
+ searchData.setRules(accord_rule_map);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -69,42 +91,20 @@ public class PretreatmentRule {
|
|
|
}
|
|
|
|
|
|
private String conceptConvert(PreResult result, Rule rule, String content) {
|
|
|
- //标准值最优先匹配 暂时忽略单位
|
|
|
- if (compareEqual(result.getValue(), rule.getSet_value())) {
|
|
|
- content = content + rule.getSet_concept_text()==null?"":rule.getSet_concept_text();
|
|
|
- }
|
|
|
- if (compareMin(result.getValue(), rule.getMin_value())) {
|
|
|
- content = content + rule.getMin_concept_text()==null?"":rule.getMin_concept_text();
|
|
|
- }
|
|
|
- if (compareMax(result.getValue(), rule.getMax_value())) {
|
|
|
- content = content + rule.getMax_concept_text()==null?"":rule.getMax_concept_text();
|
|
|
+ //标准值最优先匹配
|
|
|
+ if (compareEqual(result.getValue(), rule.getEq_value())) {
|
|
|
+ content = content + rule.getRemind() == null ? "" : rule.getRemind();
|
|
|
+ } else if (compareMin(result.getValue(), rule.getMin_value()) && compareMax(result.getValue(), rule.getMax_value())
|
|
|
+ && result.getUnits().equals(rule.getMin_operator()) && result.getUnits().equals(rule.getMax_operator())) {
|
|
|
+ content = content + rule.getRemind() == null ? "" : rule.getRemind();
|
|
|
+ } else if (compareMin(result.getValue(), rule.getMin_value()) && result.getUnits().equals(rule.getMin_operator())) {
|
|
|
+ content = content + rule.getRemind() == null ? "" : rule.getRemind();
|
|
|
+ } else if (compareMax(result.getValue(), rule.getMax_value()) && result.getUnits().equals(rule.getMin_operator())) {
|
|
|
+ content = content + rule.getRemind() == null ? "" : rule.getRemind();
|
|
|
}
|
|
|
return content;
|
|
|
}
|
|
|
|
|
|
- private void conceptCrisis(PreResult result, Rule rule, List<CrisisDetail> allCrisisDetailList) {
|
|
|
- boolean crisis = false;
|
|
|
- CrisisDetail crisisDetail = new CrisisDetail();
|
|
|
- crisisDetail.setOriginText(result.getDetailName() + " : " + result.getValue() + result.getUnits());
|
|
|
- if (compareEqual(result.getValue(), rule.getSet_value())) {
|
|
|
- crisisDetail.setStandardText(result.getDetailName() + " : " + rule.getSet_value() + rule.getUnit());
|
|
|
- crisisDetail.setRemindText(rule.getSetRemind());
|
|
|
- crisis = true;
|
|
|
- }
|
|
|
- if (compareMin(result.getValue(), rule.getMin_value())) {
|
|
|
- crisisDetail.setStandardText(result.getDetailName() + " <= " + rule.getMin_value() + rule.getUnit());
|
|
|
- crisisDetail.setRemindText(rule.getMinRemind());
|
|
|
- crisis = true;
|
|
|
- }
|
|
|
- if (compareMax(result.getValue(), rule.getMax_value())) {
|
|
|
- crisisDetail.setStandardText(result.getDetailName() + " >= " + rule.getMax_value() + rule.getUnit());
|
|
|
- crisisDetail.setRemindText(rule.getMaxRemind());
|
|
|
- crisis = true;
|
|
|
- }
|
|
|
- if (crisis) {
|
|
|
- allCrisisDetailList.add(crisisDetail);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
private boolean compareEqual(String c1, String c2) {
|
|
|
if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)
|
|
@@ -129,7 +129,8 @@ public class PretreatmentRule {
|
|
|
if (!StringUtils.isEmpty(c1) && !StringUtils.isEmpty(c2)) {
|
|
|
try {
|
|
|
return Double.valueOf(c1) > Double.valueOf(c2);
|
|
|
- } catch (Exception e) {}
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
}
|
|
|
return false;
|
|
|
}
|