perf: 优化比较器校验

dev
huangfeng 1 year ago
parent 3831bd1399
commit a889a3e4f4

@ -1,8 +1,6 @@
package com.xydl.cac.comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.LinkedHashMap;
/**
* Created by hf
@ -20,14 +18,10 @@ public abstract class Comparator {
public abstract boolean compare(Object source, String threshold);
// 支持的比较符
public Map<String, String> supportedOperator() {
Map<String, String> map = new HashMap<String, String>();
map.put("LSS", "小于");
map.put("LEQ", "小等于");
map.put("GTR", "大于");
map.put("GEQ", "大等于");
return map;
}
public abstract LinkedHashMap<String, String> supportedOperator();
// 校验阈值
public abstract void valid(String operator, String threshold) throws Exception;
public String getOperator() {
return operator;

@ -1,6 +1,10 @@
package com.xydl.cac.comparator;
import com.xydl.cac.exception.BusinessException;
import java.util.LinkedHashMap;
public class FloatCompare extends Comparator {
private float IgnoreValueN = -0.00001f;
@ -15,7 +19,14 @@ public class FloatCompare extends Comparator {
String[] strs = threshold.split(",");
float t1 = Float.parseFloat(strs[0]);
float t3 = Float.parseFloat(strs[1]);
if (t1 < s1 && s1 < t3) {
if (t1 <= s1 && s1 <= t3) {
return true;
}
} else if ("NTW".equalsIgnoreCase(operator)) {
String[] strs = threshold.split(",");
float t1 = Float.parseFloat(strs[0]);
float t3 = Float.parseFloat(strs[1]);
if (t1 > s1 || s1 > t3) {
return true;
}
} else {
@ -51,4 +62,30 @@ public class FloatCompare extends Comparator {
}
return false;
}
@Override
public LinkedHashMap<String, String> supportedOperator() {
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
map.put("GTR", "大于");
map.put("GEQ", "大等于");
map.put("LSS", "小于");
map.put("LEQ", "小等于");
map.put("BTW", "介于A-B之间");
map.put("NTW", "在A-B之外");
return map;
}
@Override
public void valid(String operator, String threshold) throws Exception {
if ("BTW".equalsIgnoreCase(operator)) {
if (!threshold.contains(",")) {
throw new BusinessException("阈值不正确");
}
} else if ("NTW".equalsIgnoreCase(operator)) {
if (!threshold.contains(",")) {
throw new BusinessException("阈值不正确");
}
}
}
}

@ -1,6 +1,10 @@
package com.xydl.cac.comparator;
import com.xydl.cac.exception.BusinessException;
import java.util.LinkedHashMap;
public class IntCompare extends Comparator {
@Override
@ -12,7 +16,14 @@ public class IntCompare extends Comparator {
String[] strs = threshold.split(",");
int t1 = Integer.parseInt(strs[0]);
int t3 = Integer.parseInt(strs[1]);
if (t1 < s1 && s1 < t3) {
if (t1 <= s1 && s1 <= t3) {
return true;
}
} else if ("NTW".equalsIgnoreCase(operator)) {
String[] strs = threshold.split(",");
float t1 = Float.parseFloat(strs[0]);
float t3 = Float.parseFloat(strs[1]);
if (t1 > s1 || s1 > t3) {
return true;
}
} else {
@ -35,4 +46,30 @@ public class IntCompare extends Comparator {
}
return false;
}
@Override
public LinkedHashMap<String, String> supportedOperator() {
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
map.put("GTR", "大于");
map.put("GEQ", "大等于");
map.put("LSS", "小于");
map.put("LEQ", "小等于");
map.put("BTW", "介于A-B之间");
map.put("NTW", "在A-B之外");
return map;
}
@Override
public void valid(String operator, String threshold) throws Exception {
if ("BTW".equalsIgnoreCase(operator)) {
if (!threshold.contains(",")) {
throw new BusinessException("阈值不正确");
}
} else if ("NTW".equalsIgnoreCase(operator)) {
if (!threshold.contains(",")) {
throw new BusinessException("阈值不正确");
}
}
}
}

@ -1,5 +1,6 @@
package com.xydl.cac.controller;
import com.xydl.cac.comparator.Comparator;
import com.xydl.cac.comparator.FloatCompare;
import com.xydl.cac.comparator.IntCompare;
import com.xydl.cac.entity.WarnRule;
@ -49,13 +50,18 @@ public class WarnRuleController extends BasicController {
@GetMapping("listOperator")
@ApiOperation("查询比较符")
public Response<Map<String, String>> listOperator(String name) throws Exception {
Map<String, String> result = new HashMap<>();
Comparator comparator = this.getComparator(name);
return Response.success(comparator.supportedOperator());
}
private Comparator getComparator(String name) throws BusinessException {
if (FloatCompare.equalsIgnoreCase(name)) {
result = floatCompare.supportedOperator();
return floatCompare;
} else if (IntCompare.equalsIgnoreCase(name)) {
result = intCompare.supportedOperator();
return intCompare;
} else {
throw new BusinessException("未找到该比较器");
}
return Response.success(result);
}
@GetMapping("listAll")
@ -68,6 +74,8 @@ public class WarnRuleController extends BasicController {
@PostMapping("add")
@ApiOperation("新增")
public Response<WarnRule> add(@Validated @RequestBody WarnRule item) throws Exception {
Comparator comparator = this.getComparator(item.getComparator());
comparator.valid(item.getOperator(), item.getThreshold());
WarnRule result = service.add(item);
return Response.success(result);
}
@ -78,6 +86,8 @@ public class WarnRuleController extends BasicController {
if (item.getId() == null) {
throw new BusinessException("ID不能为空!");
}
Comparator comparator = this.getComparator(item.getComparator());
comparator.valid(item.getOperator(), item.getThreshold());
service.update(item);
return Response.success("OK");
}

@ -44,17 +44,17 @@ public class WarnRule {
@Column(name = "modevtype_point_id")
private Integer modevtypePointId;
@NotBlank(message = "阈值")
@NotBlank(message = "阈值不能为空")
@ApiModelProperty("阈值")
@Column(name = "threshold")
private String threshold;
@NotBlank(message = "比较器")
@NotBlank(message = "比较器不能为空")
@ApiModelProperty("比较器")
@Column(name = "comparator")
private String comparator;
@NotBlank(message = "比较符")
@NotBlank(message = "比较符不能为空")
@ApiModelProperty("比较符")
@Column(name = "operator")
private String operator;

Loading…
Cancel
Save