From a889a3e4f4afbace9bab24a86591c547d830620b Mon Sep 17 00:00:00 2001 From: huangfeng Date: Mon, 27 May 2024 15:17:31 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=AF=94=E8=BE=83?= =?UTF-8?q?=E5=99=A8=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xydl/cac/comparator/Comparator.java | 16 +++----- .../com/xydl/cac/comparator/FloatCompare.java | 39 ++++++++++++++++++- .../com/xydl/cac/comparator/IntCompare.java | 39 ++++++++++++++++++- .../cac/controller/WarnRuleController.java | 18 +++++++-- .../java/com/xydl/cac/entity/WarnRule.java | 6 +-- 5 files changed, 98 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/xydl/cac/comparator/Comparator.java b/src/main/java/com/xydl/cac/comparator/Comparator.java index b4b1b35..400ecef 100644 --- a/src/main/java/com/xydl/cac/comparator/Comparator.java +++ b/src/main/java/com/xydl/cac/comparator/Comparator.java @@ -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 supportedOperator() { - Map map = new HashMap(); - map.put("LSS", "小于"); - map.put("LEQ", "小等于"); - map.put("GTR", "大于"); - map.put("GEQ", "大等于"); - return map; - } + public abstract LinkedHashMap supportedOperator(); + + // 校验阈值 + public abstract void valid(String operator, String threshold) throws Exception; public String getOperator() { return operator; diff --git a/src/main/java/com/xydl/cac/comparator/FloatCompare.java b/src/main/java/com/xydl/cac/comparator/FloatCompare.java index 7a9b5ba..864e5f6 100644 --- a/src/main/java/com/xydl/cac/comparator/FloatCompare.java +++ b/src/main/java/com/xydl/cac/comparator/FloatCompare.java @@ -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 supportedOperator() { + LinkedHashMap map = new LinkedHashMap(); + 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("阈值不正确"); + } + } + } + } diff --git a/src/main/java/com/xydl/cac/comparator/IntCompare.java b/src/main/java/com/xydl/cac/comparator/IntCompare.java index 39b3744..4499c43 100644 --- a/src/main/java/com/xydl/cac/comparator/IntCompare.java +++ b/src/main/java/com/xydl/cac/comparator/IntCompare.java @@ -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 supportedOperator() { + LinkedHashMap map = new LinkedHashMap(); + 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("阈值不正确"); + } + } + } + } diff --git a/src/main/java/com/xydl/cac/controller/WarnRuleController.java b/src/main/java/com/xydl/cac/controller/WarnRuleController.java index 0d7bc1f..d37cff7 100644 --- a/src/main/java/com/xydl/cac/controller/WarnRuleController.java +++ b/src/main/java/com/xydl/cac/controller/WarnRuleController.java @@ -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> listOperator(String name) throws Exception { - Map 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 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"); } diff --git a/src/main/java/com/xydl/cac/entity/WarnRule.java b/src/main/java/com/xydl/cac/entity/WarnRule.java index cdd10a7..2506b63 100644 --- a/src/main/java/com/xydl/cac/entity/WarnRule.java +++ b/src/main/java/com/xydl/cac/entity/WarnRule.java @@ -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;