From 1677aacaf8f6c86fc6b4e75056b4f771a6f1d6c4 Mon Sep 17 00:00:00 2001 From: huangfeng Date: Thu, 27 Jun 2024 14:08:34 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=B0=83=E6=95=B4=E8=A7=84=E5=88=99?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E6=A3=80=E6=B5=8B=E5=A4=9A=E7=BB=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xydl/cac/entity/WarnRule.java | 31 ++++++++++++++++++- .../java/com/xydl/cac/model/TriggerModel.java | 11 +++++++ .../java/com/xydl/cac/task/RuleCheckTask.java | 27 ++++++---------- 3 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/xydl/cac/model/TriggerModel.java diff --git a/src/main/java/com/xydl/cac/entity/WarnRule.java b/src/main/java/com/xydl/cac/entity/WarnRule.java index adf043b..498908f 100644 --- a/src/main/java/com/xydl/cac/entity/WarnRule.java +++ b/src/main/java/com/xydl/cac/entity/WarnRule.java @@ -6,6 +6,8 @@ import com.xydl.cac.comparator.Comparator; import com.xydl.cac.comparator.FloatCompare; import com.xydl.cac.comparator.IntCompare; import com.xydl.cac.entity.constants.Constants; +import com.xydl.cac.model.TriggerModel; +import com.xydl.cac.util.DateUtil; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -13,11 +15,15 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; import javax.persistence.*; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.util.ArrayList; import java.util.Date; +import java.util.List; +import java.util.Map; @JsonInclude(JsonInclude.Include.NON_NULL) @Data @@ -118,8 +124,31 @@ public class WarnRule { return false; } - // 是否触发 + // 单个数据是否触发 public boolean triggerRule(Object value) { return actualComp.compare(value, threshold); } + + // 多数据触发返回告警数据 + public List checkData(List> list) throws Exception { + List result = null; + if (CollectionUtils.isEmpty(list)) { + + } else { + result = new ArrayList<>(); + for (Map map : list) { + String str = (String) map.get("acquisitionTime"); + lastDTime = DateUtil.parse(str); + Object value = map.get(typePoint.getField()); + boolean r = this.triggerRule(value); + if (r) { + TriggerModel model = new TriggerModel(); + model.setDate(lastDTime); + model.setValue(String.valueOf(value)); + result.add(model); + } + } + } + return result; + } } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/model/TriggerModel.java b/src/main/java/com/xydl/cac/model/TriggerModel.java new file mode 100644 index 0000000..35b61d5 --- /dev/null +++ b/src/main/java/com/xydl/cac/model/TriggerModel.java @@ -0,0 +1,11 @@ +package com.xydl.cac.model; + +import lombok.Data; + +import java.util.Date; + +@Data +public class TriggerModel { + private Date date; + private String value; +} diff --git a/src/main/java/com/xydl/cac/task/RuleCheckTask.java b/src/main/java/com/xydl/cac/task/RuleCheckTask.java index d93ba3f..075d2a4 100644 --- a/src/main/java/com/xydl/cac/task/RuleCheckTask.java +++ b/src/main/java/com/xydl/cac/task/RuleCheckTask.java @@ -4,6 +4,7 @@ import com.xydl.cac.entity.ModevTypePoint; import com.xydl.cac.entity.NSensor; import com.xydl.cac.entity.WarnRule; import com.xydl.cac.entity.Warning; +import com.xydl.cac.model.TriggerModel; import com.xydl.cac.repository.WarnRuleRepository; import com.xydl.cac.repository.WarningRepository; import com.xydl.cac.service.DataService; @@ -13,7 +14,6 @@ import com.xydl.cac.util.DingTalkPushUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; @@ -55,26 +55,19 @@ public class RuleCheckTask { List points = new ArrayList<>(); points.add(typePoint); List> list = dataService.getLatestData(sensor, points, rule.getLastDTime()); - if (!CollectionUtils.isEmpty(list)) { - Date date = null; - for (Map map : list) { - String str = (String) map.get("acquisitionTime"); - date = DateUtil.parse(str); - Object value = map.get(typePoint.getField()); - boolean r = rule.triggerRule(value); - if (r) { - this.sendWarning(rule, date, str, String.valueOf(value)); - } - } - rule.setLastDTime(date); + List warnList = rule.checkData(list); + if (warnList != null) { ruleRepository.save(rule); + for (TriggerModel model : warnList) { + this.sendWarning(rule, model); + } } } catch (Exception e) { log.error("RuleCheckTask.ruleCheck error.", e); } } - private void sendWarning(WarnRule rule, Date date, String dateStr, String value) throws Exception { + private void sendWarning(WarnRule rule, TriggerModel model) throws Exception { NSensor sensor = rule.getNSensor(); ModevTypePoint typePoint = rule.getTypePoint(); Warning warning = Warning.builder() @@ -83,9 +76,9 @@ public class RuleCheckTask { .zsbName(sensor.getZsbName()) .ruleId(rule.getId()) .field(typePoint.getField()) - .dTime(date) + .dTime(model.getDate()) .threshold(rule.getThreshold()) - .warnValue(value) + .warnValue(model.getValue()) .warnLevel(rule.getLevel()) .state("1") .warnDesc(sensor.getName() + " " + typePoint.getFieldDesc() + " 告警") @@ -95,7 +88,7 @@ public class RuleCheckTask { .build(); warningRepository.save(warning); String str = warning.getZsbName() + "-" + warning.getWarnDesc() - + ", 采集时间:" + dateStr + ", 当前值:" + value + " " + warning.getTriggerDesc(); + + ", 采集时间:" + DateUtil.format(model.getDate()) + ", 当前值:" + model.getValue() + " " + warning.getTriggerDesc(); log.warn("触发规则告警: " + str); webSocketServer.sendMessage(str); dingTalkPushUtil.pushText(str);