perf: 优化比较器校验

dev
huangfeng 1 year ago
parent 3831bd1399
commit a889a3e4f4

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

@ -1,6 +1,10 @@
package com.xydl.cac.comparator; package com.xydl.cac.comparator;
import com.xydl.cac.exception.BusinessException;
import java.util.LinkedHashMap;
public class FloatCompare extends Comparator { public class FloatCompare extends Comparator {
private float IgnoreValueN = -0.00001f; private float IgnoreValueN = -0.00001f;
@ -15,7 +19,14 @@ public class FloatCompare extends Comparator {
String[] strs = threshold.split(","); String[] strs = threshold.split(",");
float t1 = Float.parseFloat(strs[0]); float t1 = Float.parseFloat(strs[0]);
float t3 = Float.parseFloat(strs[1]); 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; return true;
} }
} else { } else {
@ -51,4 +62,30 @@ public class FloatCompare extends Comparator {
} }
return false; 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; package com.xydl.cac.comparator;
import com.xydl.cac.exception.BusinessException;
import java.util.LinkedHashMap;
public class IntCompare extends Comparator { public class IntCompare extends Comparator {
@Override @Override
@ -12,7 +16,14 @@ public class IntCompare extends Comparator {
String[] strs = threshold.split(","); String[] strs = threshold.split(",");
int t1 = Integer.parseInt(strs[0]); int t1 = Integer.parseInt(strs[0]);
int t3 = Integer.parseInt(strs[1]); 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; return true;
} }
} else { } else {
@ -35,4 +46,30 @@ public class IntCompare extends Comparator {
} }
return false; 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; package com.xydl.cac.controller;
import com.xydl.cac.comparator.Comparator;
import com.xydl.cac.comparator.FloatCompare; import com.xydl.cac.comparator.FloatCompare;
import com.xydl.cac.comparator.IntCompare; import com.xydl.cac.comparator.IntCompare;
import com.xydl.cac.entity.WarnRule; import com.xydl.cac.entity.WarnRule;
@ -49,13 +50,18 @@ public class WarnRuleController extends BasicController {
@GetMapping("listOperator") @GetMapping("listOperator")
@ApiOperation("查询比较符") @ApiOperation("查询比较符")
public Response<Map<String, String>> listOperator(String name) throws Exception { 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)) { if (FloatCompare.equalsIgnoreCase(name)) {
result = floatCompare.supportedOperator(); return floatCompare;
} else if (IntCompare.equalsIgnoreCase(name)) { } else if (IntCompare.equalsIgnoreCase(name)) {
result = intCompare.supportedOperator(); return intCompare;
} else {
throw new BusinessException("未找到该比较器");
} }
return Response.success(result);
} }
@GetMapping("listAll") @GetMapping("listAll")
@ -68,6 +74,8 @@ public class WarnRuleController extends BasicController {
@PostMapping("add") @PostMapping("add")
@ApiOperation("新增") @ApiOperation("新增")
public Response<WarnRule> add(@Validated @RequestBody WarnRule item) throws Exception { 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); WarnRule result = service.add(item);
return Response.success(result); return Response.success(result);
} }
@ -78,6 +86,8 @@ public class WarnRuleController extends BasicController {
if (item.getId() == null) { if (item.getId() == null) {
throw new BusinessException("ID不能为空!"); throw new BusinessException("ID不能为空!");
} }
Comparator comparator = this.getComparator(item.getComparator());
comparator.valid(item.getOperator(), item.getThreshold());
service.update(item); service.update(item);
return Response.success("OK"); return Response.success("OK");
} }

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

Loading…
Cancel
Save