Commit af14d025cc2d61467ecacf212089dff23d352bc4

Authored by 云中非
1 parent 5d4e69ba

fix: 告警清除DTO对象调整

... ... @@ -23,6 +23,6 @@ public class ActionAlarmDTO extends TenantDTO {
23 23 private AlarmSeverity alarmLevel;
24 24
25 25
26   - private AlarmRule clearRule;
  26 + private TriggerDTO clearRule;
27 27
28 28 }
... ...
... ... @@ -3,22 +3,20 @@ package org.thingsboard.server.common.data.yunteng.dto;
3 3 import io.swagger.annotations.ApiModelProperty;
4 4 import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6   -import org.thingsboard.server.common.data.device.profile.AlarmCondition;
7 6 import org.thingsboard.server.common.data.device.profile.AlarmRule;
8   -import org.thingsboard.server.common.data.device.profile.AlarmSchedule;
9 7 import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum;
10 8 import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum;
11 9
12 10 import java.util.List;
13 11
14 12 /**
15   - * @Description 场景联动触发器数据传输表
  13 + * @Description 场景联动触发器数据传输表
16 14 * @Author cxy
17 15 * @Date 2021/11/24 17:32
18 16 */
19 17 @Data
20 18 @EqualsAndHashCode(callSuper = true)
21   -public class TriggerDTO extends TenantDTO{
  19 +public class TriggerDTO extends TenantDTO {
22 20
23 21 @ApiModelProperty(value = "触发器类型")
24 22 private TriggerTypeEnum triggerType;
... ... @@ -31,7 +29,6 @@ public class TriggerDTO extends TenantDTO{
31 29 private AlarmRule triggerCondition;
32 30
33 31
34   -
35 32 @ApiModelProperty(value = "场景联动id")
36 33 private String sceneLinkageId;
37 34
... ...
... ... @@ -5,25 +5,18 @@ package org.thingsboard.rule.engine.yunteng.scene;
5 5
6 6 import com.fasterxml.jackson.databind.JsonNode;
7 7 import com.fasterxml.jackson.databind.node.ObjectNode;
8   -import com.google.common.util.concurrent.ListenableFuture;
9 8 import lombok.extern.slf4j.Slf4j;
10   -import org.apache.commons.lang3.StringUtils;
11 9 import org.jetbrains.annotations.NotNull;
12   -import org.thingsboard.common.util.DonAsynchron;
13   -import org.thingsboard.rule.engine.action.TbAlarmResult;
14 10 import org.thingsboard.rule.engine.api.TbContext;
15 11 import org.thingsboard.server.common.data.DataConstants;
16 12 import org.thingsboard.server.common.data.alarm.Alarm;
17 13 import org.thingsboard.server.common.data.alarm.AlarmStatus;
18   -import org.thingsboard.server.common.data.device.profile.AlarmCondition;
19 14 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter;
20 15 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey;
21 16 import org.thingsboard.server.common.data.device.profile.AlarmRule;
22 17 import org.thingsboard.server.common.data.id.DeviceId;
23   -import org.thingsboard.server.common.data.rule.RuleNodeState;
24 18 import org.thingsboard.server.common.data.yunteng.dto.ActionAlarmDTO;
25 19 import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
26   -import org.thingsboard.server.common.data.yunteng.dto.DoActionDTO;
27 20 import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO;
28 21 import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum;
29 22 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
... ... @@ -31,13 +24,14 @@ import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils;
31 24 import org.thingsboard.server.common.msg.TbMsg;
32 25 import org.thingsboard.server.common.msg.TbMsgMetaData;
33 26 import org.thingsboard.server.common.msg.queue.ServiceQueue;
34   -import org.thingsboard.server.dao.alarm.AlarmOperationResult;
35 27 import org.thingsboard.server.dao.yunteng.entities.DoAction;
36 28 import org.thingsboard.server.dao.yunteng.entities.DoCondition;
37 29 import org.thingsboard.server.dao.yunteng.service.*;
38 30
39   -import java.net.InetAddress;
40   -import java.util.*;
  31 +import java.util.HashSet;
  32 +import java.util.List;
  33 +import java.util.Set;
  34 +import java.util.UUID;
41 35 import java.util.concurrent.ConcurrentHashMap;
42 36 import java.util.concurrent.ExecutionException;
43 37
... ... @@ -68,7 +62,7 @@ class ReactState {
68 62 * 键:设备ID为键
69 63 * 值:设备最新告警信息
70 64 */
71   - private ConcurrentHashMap<String, Alarm> currentAlarms =new ConcurrentHashMap<>();
  65 + private ConcurrentHashMap<String, Alarm> currentAlarms = new ConcurrentHashMap<>();
72 66
73 67 /**
74 68 * 场景联动的执行条件状态
... ... @@ -92,7 +86,6 @@ class ReactState {
92 86 private YtDeviceService ytDeviceService;
93 87
94 88
95   -
96 89 ReactState(String reactId, TbContext ctx, TbSceneReactNodeConfig config) {
97 90 this.reactId = reactId;
98 91 this.reactName = config.getNames().get(reactId);
... ... @@ -102,9 +95,9 @@ class ReactState {
102 95 this.conditions = conditionService.getConditions(reactId);
103 96 DoActionService actionService = SpringBeanUtils.getBean(DoActionService.class);
104 97 this.actions = actionService.getActions(reactId);
105   - for(DoAction action: actions){
  98 + for (DoAction action : actions) {
106 99 /**动作中只有1个告警通知*/
107   - if(ActionTypeEnum.MSG_NOTIFY.equals(action.getOutTarget())){
  100 + if (ActionTypeEnum.MSG_NOTIFY.equals(action.getOutTarget())) {
108 101 this.alarmAction = action;
109 102 break;
110 103 }
... ... @@ -132,10 +125,10 @@ class ReactState {
132 125 matched = triggerState.process(ctx, msg);
133 126 if (matched) {
134 127 detail.append(triggerState.getAlarmDetails());
135   - if(this.alarmAction != null){
136   - noticeMsg(ctx, msg, alarmAction,deviceId,triggerState.getAlarmDetails(),triggerState.getLatestValues().getTs());
  128 + if (this.alarmAction != null) {
  129 + noticeMsg(ctx, msg, alarmAction, deviceId, triggerState.getAlarmDetails(), triggerState.getLatestValues().getTs());
137 130 }
138   - }else if(currentAlarms.containsKey(deviceId) && this.alarmAction != null){
  131 + } else if (currentAlarms.containsKey(deviceId) && this.alarmAction != null) {
139 132 //清除设备告警
140 133 clearAlarm(ctx, msg, deviceId);
141 134 }
... ... @@ -169,10 +162,10 @@ class ReactState {
169 162
170 163 if (matched) {
171 164 for (DoAction item : actions) {
172   - if(ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())){
  165 + if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) {
173 166 continue;
174 167 }
175   - pushMsg(ctx, msg, item,detail.toString());
  168 + pushMsg(ctx, msg, item, detail.toString());
176 169 }
177 170 } else {
178 171 ctx.tellSuccess(msg);
... ... @@ -201,9 +194,9 @@ class ReactState {
201 194 return triggerState.get(deviceId);
202 195 }
203 196 if (alarmAction.getDeviceId().contains(deviceId)) {
204   - ActionAlarmDTO alarm = JacksonUtil.convertValue(alarmAction.getDoContext(),ActionAlarmDTO.class);
205   - if(alarm != null && alarm.getClearRule()!=null){
206   - TriggerState state = createTriggerState(deviceId, alarm.getClearRule());
  197 + ActionAlarmDTO alarm = JacksonUtil.convertValue(alarmAction.getDoContext(), ActionAlarmDTO.class);
  198 + if (alarm != null && alarm.getClearRule() != null) {
  199 + TriggerState state = createTriggerState(deviceId, alarm.getClearRule().getTriggerCondition());
207 200 triggerState.put(deviceId, state);
208 201 return state;
209 202 }
... ... @@ -230,12 +223,12 @@ class ReactState {
230 223 for (AlarmConditionFilter filter : rule.getCondition().getCondition()) {
231 224 filterKeys.add(filter.getKey());
232 225 }
233   - TriggerState state = new TriggerState(deviceId, rule, filterKeys, rule.getAlarmDetails(),null);
  226 + TriggerState state = new TriggerState(deviceId, rule, filterKeys, rule.getAlarmDetails(), null);
234 227
235 228 return state;
236 229 }
237 230
238   - private void pushMsg(TbContext ctx, TbMsg msg, DoAction action,String detail) {
  231 + private void pushMsg(TbContext ctx, TbMsg msg, DoAction action, String detail) {
239 232 TbMsgMetaData metaData = //lastMsgMetaData != null ? lastMsgMetaData.copy() :
240 233 new TbMsgMetaData();
241 234 String relationType = "";
... ... @@ -282,10 +275,10 @@ class ReactState {
282 275 * @param msg
283 276 * @param action
284 277 */
285   - private void noticeMsg(TbContext ctx, TbMsg msg, DoAction action,String deviceId,String detailStr,long startTs) {
  278 + private void noticeMsg(TbContext ctx, TbMsg msg, DoAction action, String deviceId, String detailStr, long startTs) {
286 279
287 280 DeviceId entityId = new DeviceId(UUID.fromString(deviceId));
288   - ActionAlarmDTO actionAlarm = JacksonUtil.convertValue(action.getDoContext(),ActionAlarmDTO.class);
  281 + ActionAlarmDTO actionAlarm = JacksonUtil.convertValue(action.getDoContext(), ActionAlarmDTO.class);
289 282
290 283
291 284 Alarm currentAlarm = new Alarm();
... ... @@ -298,8 +291,8 @@ class ReactState {
298 291 currentAlarm.setStartTs(startTs);
299 292 currentAlarm.setEndTs(currentAlarm.getStartTs());
300 293 ObjectNode detailData = JacksonUtil.newObjectNode();
301   - detailData.put("msg",detailStr);
302   - detailData.put("data",JacksonUtil.toJsonNode(msg.getData()));
  294 + detailData.put("msg", detailStr);
  295 + detailData.put("data", JacksonUtil.toJsonNode(msg.getData()));
303 296 currentAlarm.setDetails(detailData);
304 297 currentAlarm.setOriginator(entityId);
305 298 currentAlarm.setTenantId(ctx.getTenantId());
... ... @@ -307,8 +300,7 @@ class ReactState {
307 300
308 301 currentAlarm = ctx.getAlarmService().createOrUpdateAlarm(currentAlarm);
309 302 ytDeviceService.freshAlarmStatus(entityId, 1);
310   - currentAlarms.put(deviceId,currentAlarm);
311   -
  303 + currentAlarms.put(deviceId, currentAlarm);
312 304
313 305
314 306 AlarmInfoDTO formData = new AlarmInfoDTO();
... ... @@ -322,12 +314,12 @@ class ReactState {
322 314 formData.setDeviceId(deviceId);
323 315 formData.setTenantId(currentAlarm.getTenantId().getId().toString());
324 316 formData.setSeverity(actionAlarm.getAlarmLevel().name());
325   - noticeService.alert(action.getAlarmProfileId(),formData);
  317 + noticeService.alert(action.getAlarmProfileId(), formData);
326 318 }
327 319
328   - private void clearAlarm(TbContext ctx, TbMsg msg,String deviceId) throws ExecutionException, InterruptedException {
329   - TriggerState clearStete = getOrCreateClearState(deviceId);
330   - if(clearStete.process(ctx, msg)){
  320 + private void clearAlarm(TbContext ctx, TbMsg msg, String deviceId) throws ExecutionException, InterruptedException {
  321 + TriggerState clearState = getOrCreateClearState(deviceId);
  322 + if (clearState.process(ctx, msg)) {
331 323 ctx.getAlarmService().clearAlarmForResult(ctx.getTenantId(), currentAlarms.get(deviceId).getId(), null, System.currentTimeMillis());
332 324 ytDeviceService.freshAlarmStatus(new DeviceId(UUID.fromString(deviceId)), 0);
333 325 currentAlarms.remove(deviceId);
... ...