|
@@ -1,9 +1,15 @@
|
|
|
package org.diagbot.push.convert;
|
|
|
|
|
|
+import org.diagbot.bigdata.common.ApplicationCacheUtil;
|
|
|
+import org.diagbot.common.javabean.MedicalIndication;
|
|
|
+import org.diagbot.common.javabean.Rule;
|
|
|
import org.diagbot.common.work.LisDetail;
|
|
|
+import org.diagbot.common.work.ResponseData;
|
|
|
import org.diagbot.common.work.SearchData;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
public class PreProcess {
|
|
@@ -34,6 +40,122 @@ public class PreProcess {
|
|
|
return sData;
|
|
|
}
|
|
|
|
|
|
+ public ResponseData applyrules(SearchData sData) {
|
|
|
+
|
|
|
+ ResponseData ruleResponse = new ResponseData();
|
|
|
+
|
|
|
+ List<MedicalIndication> reminder;
|
|
|
+ try {
|
|
|
+ Map<String, List<Rule>> rule = ApplicationCacheUtil.get_rule_filter_map();
|
|
|
+
|
|
|
+ reminder = applytolis(sData, rule);
|
|
|
+
|
|
|
+ ruleResponse.setMedicalIndications(reminder);
|
|
|
+
|
|
|
+ } catch (Exception ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ return ruleResponse;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<MedicalIndication> applytolis(SearchData sData, Map<String, List<Rule>> rule) {
|
|
|
+
|
|
|
+ List<MedicalIndication> reminder = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ List<LisDetail> lisarr = sData.getLisArr();
|
|
|
+ String name;
|
|
|
+ String detail;
|
|
|
+
|
|
|
+ for (LisDetail lis : lisarr) {
|
|
|
+ detail = lis.getDetailName();
|
|
|
+// name = lis.getName();
|
|
|
+ String key = detail;
|
|
|
+ if (rule.get(key) != null) {
|
|
|
+ reminder.addAll(compare(rule.get(key), lis));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ return reminder;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<MedicalIndication> compare(List<Rule> rules, LisDetail lis) {
|
|
|
+ List<MedicalIndication> reminder = new ArrayList<>();
|
|
|
+ boolean minmatch, maxmatch;
|
|
|
+ Double minval, maxval;
|
|
|
+ String minop, maxop, minunit, maxunit;
|
|
|
+
|
|
|
+ try {
|
|
|
+ String detailname = lis.getDetailName();
|
|
|
+ Double numval = lis.getValue();
|
|
|
+ String unit = lis.getUnits();
|
|
|
+ String otherval = lis.getOtherValue();
|
|
|
+
|
|
|
+ if (null == numval && otherval.trim().length() > 0) {
|
|
|
+ for (Rule rule : rules) {
|
|
|
+ if (rule.getMin_operator().equals("=") && otherval.contains(rule.getMin_value())) {
|
|
|
+ MedicalIndication medind = new MedicalIndication();
|
|
|
+ medind.setName(rule.getRemind());
|
|
|
+ medind.setRule(detailname + ": " + otherval);
|
|
|
+ reminder.add(medind);
|
|
|
+
|
|
|
+ System.out.println(medind.getRule() + " -> " + medind.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (String.valueOf(numval).trim().length() > 0 && unit.length() > 0){
|
|
|
+ for (Rule rule : rules) {
|
|
|
+ minmatch = maxmatch = false;
|
|
|
+ minval = (rule.getMin_value().length()==0)?0:Double.valueOf(rule.getMin_value());
|
|
|
+ maxval = (rule.getMax_value().length()==0)?0:Double.valueOf(rule.getMax_value());
|
|
|
+ minunit = rule.getMin_unit();
|
|
|
+ maxunit = rule.getMax_unit();
|
|
|
+ minop = rule.getMin_operator();
|
|
|
+ maxop = rule.getMax_operator();
|
|
|
+
|
|
|
+ if ( String.valueOf(minval).trim().length() > 0 && minunit.equals(unit) ) {
|
|
|
+ switch (minop) {
|
|
|
+ case ">":
|
|
|
+ if (numval > minval) { minmatch = true; }
|
|
|
+ break;
|
|
|
+ case ">=":
|
|
|
+ if (numval >= minval) { minmatch = true; }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else { minmatch = true; }
|
|
|
+
|
|
|
+ if (String.valueOf(maxval).trim().length() > 0 && maxunit.equals(unit) ) {
|
|
|
+ switch (maxop) {
|
|
|
+ case "<":
|
|
|
+ if (numval < maxval) { maxmatch = true; }
|
|
|
+ break;
|
|
|
+ case "<=":
|
|
|
+ if (numval <= maxval) { maxmatch = true; }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else { maxmatch = true; }
|
|
|
+
|
|
|
+ if (minmatch && maxmatch) {
|
|
|
+ MedicalIndication medind = new MedicalIndication();
|
|
|
+ medind.setName(rule.getRemind());
|
|
|
+ medind.setRule(detailname + ": " + numval + " " + unit);
|
|
|
+ reminder.add(medind);
|
|
|
+
|
|
|
+ System.out.println(medind.getRule() + " -> " + medind.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ return reminder;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private List<LisDetail> processLis(List<LisDetail> lisArr) {
|
|
|
if (lisArr.size() == 0) {
|
|
|
return lisArr;
|