Commit af14d025cc2d61467ecacf212089dff23d352bc4

Authored by 云中非
1 parent 5d4e69ba

fix: 告警清除DTO对象调整

@@ -23,6 +23,6 @@ public class ActionAlarmDTO extends TenantDTO { @@ -23,6 +23,6 @@ public class ActionAlarmDTO extends TenantDTO {
23 private AlarmSeverity alarmLevel; 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,22 +3,20 @@ package org.thingsboard.server.common.data.yunteng.dto;
3 import io.swagger.annotations.ApiModelProperty; 3 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 4 import lombok.Data;
5 import lombok.EqualsAndHashCode; 5 import lombok.EqualsAndHashCode;
6 -import org.thingsboard.server.common.data.device.profile.AlarmCondition;  
7 import org.thingsboard.server.common.data.device.profile.AlarmRule; 6 import org.thingsboard.server.common.data.device.profile.AlarmRule;
8 -import org.thingsboard.server.common.data.device.profile.AlarmSchedule;  
9 import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; 7 import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum;
10 import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum; 8 import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum;
11 9
12 import java.util.List; 10 import java.util.List;
13 11
14 /** 12 /**
15 - * @Description 场景联动触发器数据传输表 13 + * @Description 场景联动触发器数据传输表
16 * @Author cxy 14 * @Author cxy
17 * @Date 2021/11/24 17:32 15 * @Date 2021/11/24 17:32
18 */ 16 */
19 @Data 17 @Data
20 @EqualsAndHashCode(callSuper = true) 18 @EqualsAndHashCode(callSuper = true)
21 -public class TriggerDTO extends TenantDTO{ 19 +public class TriggerDTO extends TenantDTO {
22 20
23 @ApiModelProperty(value = "触发器类型") 21 @ApiModelProperty(value = "触发器类型")
24 private TriggerTypeEnum triggerType; 22 private TriggerTypeEnum triggerType;
@@ -31,7 +29,6 @@ public class TriggerDTO extends TenantDTO{ @@ -31,7 +29,6 @@ public class TriggerDTO extends TenantDTO{
31 private AlarmRule triggerCondition; 29 private AlarmRule triggerCondition;
32 30
33 31
34 -  
35 @ApiModelProperty(value = "场景联动id") 32 @ApiModelProperty(value = "场景联动id")
36 private String sceneLinkageId; 33 private String sceneLinkageId;
37 34
@@ -5,25 +5,18 @@ package org.thingsboard.rule.engine.yunteng.scene; @@ -5,25 +5,18 @@ package org.thingsboard.rule.engine.yunteng.scene;
5 5
6 import com.fasterxml.jackson.databind.JsonNode; 6 import com.fasterxml.jackson.databind.JsonNode;
7 import com.fasterxml.jackson.databind.node.ObjectNode; 7 import com.fasterxml.jackson.databind.node.ObjectNode;
8 -import com.google.common.util.concurrent.ListenableFuture;  
9 import lombok.extern.slf4j.Slf4j; 8 import lombok.extern.slf4j.Slf4j;
10 -import org.apache.commons.lang3.StringUtils;  
11 import org.jetbrains.annotations.NotNull; 9 import org.jetbrains.annotations.NotNull;
12 -import org.thingsboard.common.util.DonAsynchron;  
13 -import org.thingsboard.rule.engine.action.TbAlarmResult;  
14 import org.thingsboard.rule.engine.api.TbContext; 10 import org.thingsboard.rule.engine.api.TbContext;
15 import org.thingsboard.server.common.data.DataConstants; 11 import org.thingsboard.server.common.data.DataConstants;
16 import org.thingsboard.server.common.data.alarm.Alarm; 12 import org.thingsboard.server.common.data.alarm.Alarm;
17 import org.thingsboard.server.common.data.alarm.AlarmStatus; 13 import org.thingsboard.server.common.data.alarm.AlarmStatus;
18 -import org.thingsboard.server.common.data.device.profile.AlarmCondition;  
19 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter; 14 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter;
20 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey; 15 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey;
21 import org.thingsboard.server.common.data.device.profile.AlarmRule; 16 import org.thingsboard.server.common.data.device.profile.AlarmRule;
22 import org.thingsboard.server.common.data.id.DeviceId; 17 import org.thingsboard.server.common.data.id.DeviceId;
23 -import org.thingsboard.server.common.data.rule.RuleNodeState;  
24 import org.thingsboard.server.common.data.yunteng.dto.ActionAlarmDTO; 18 import org.thingsboard.server.common.data.yunteng.dto.ActionAlarmDTO;
25 import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO; 19 import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO;
26 -import org.thingsboard.server.common.data.yunteng.dto.DoActionDTO;  
27 import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; 20 import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO;
28 import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum; 21 import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum;
29 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil; 22 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
@@ -31,13 +24,14 @@ import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils; @@ -31,13 +24,14 @@ import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils;
31 import org.thingsboard.server.common.msg.TbMsg; 24 import org.thingsboard.server.common.msg.TbMsg;
32 import org.thingsboard.server.common.msg.TbMsgMetaData; 25 import org.thingsboard.server.common.msg.TbMsgMetaData;
33 import org.thingsboard.server.common.msg.queue.ServiceQueue; 26 import org.thingsboard.server.common.msg.queue.ServiceQueue;
34 -import org.thingsboard.server.dao.alarm.AlarmOperationResult;  
35 import org.thingsboard.server.dao.yunteng.entities.DoAction; 27 import org.thingsboard.server.dao.yunteng.entities.DoAction;
36 import org.thingsboard.server.dao.yunteng.entities.DoCondition; 28 import org.thingsboard.server.dao.yunteng.entities.DoCondition;
37 import org.thingsboard.server.dao.yunteng.service.*; 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 import java.util.concurrent.ConcurrentHashMap; 35 import java.util.concurrent.ConcurrentHashMap;
42 import java.util.concurrent.ExecutionException; 36 import java.util.concurrent.ExecutionException;
43 37
@@ -68,7 +62,7 @@ class ReactState { @@ -68,7 +62,7 @@ class ReactState {
68 * 键:设备ID为键 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,7 +86,6 @@ class ReactState {
92 private YtDeviceService ytDeviceService; 86 private YtDeviceService ytDeviceService;
93 87
94 88
95 -  
96 ReactState(String reactId, TbContext ctx, TbSceneReactNodeConfig config) { 89 ReactState(String reactId, TbContext ctx, TbSceneReactNodeConfig config) {
97 this.reactId = reactId; 90 this.reactId = reactId;
98 this.reactName = config.getNames().get(reactId); 91 this.reactName = config.getNames().get(reactId);
@@ -102,9 +95,9 @@ class ReactState { @@ -102,9 +95,9 @@ class ReactState {
102 this.conditions = conditionService.getConditions(reactId); 95 this.conditions = conditionService.getConditions(reactId);
103 DoActionService actionService = SpringBeanUtils.getBean(DoActionService.class); 96 DoActionService actionService = SpringBeanUtils.getBean(DoActionService.class);
104 this.actions = actionService.getActions(reactId); 97 this.actions = actionService.getActions(reactId);
105 - for(DoAction action: actions){ 98 + for (DoAction action : actions) {
106 /**动作中只有1个告警通知*/ 99 /**动作中只有1个告警通知*/
107 - if(ActionTypeEnum.MSG_NOTIFY.equals(action.getOutTarget())){ 100 + if (ActionTypeEnum.MSG_NOTIFY.equals(action.getOutTarget())) {
108 this.alarmAction = action; 101 this.alarmAction = action;
109 break; 102 break;
110 } 103 }
@@ -132,10 +125,10 @@ class ReactState { @@ -132,10 +125,10 @@ class ReactState {
132 matched = triggerState.process(ctx, msg); 125 matched = triggerState.process(ctx, msg);
133 if (matched) { 126 if (matched) {
134 detail.append(triggerState.getAlarmDetails()); 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 clearAlarm(ctx, msg, deviceId); 133 clearAlarm(ctx, msg, deviceId);
141 } 134 }
@@ -169,10 +162,10 @@ class ReactState { @@ -169,10 +162,10 @@ class ReactState {
169 162
170 if (matched) { 163 if (matched) {
171 for (DoAction item : actions) { 164 for (DoAction item : actions) {
172 - if(ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())){ 165 + if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) {
173 continue; 166 continue;
174 } 167 }
175 - pushMsg(ctx, msg, item,detail.toString()); 168 + pushMsg(ctx, msg, item, detail.toString());
176 } 169 }
177 } else { 170 } else {
178 ctx.tellSuccess(msg); 171 ctx.tellSuccess(msg);
@@ -201,9 +194,9 @@ class ReactState { @@ -201,9 +194,9 @@ class ReactState {
201 return triggerState.get(deviceId); 194 return triggerState.get(deviceId);
202 } 195 }
203 if (alarmAction.getDeviceId().contains(deviceId)) { 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 triggerState.put(deviceId, state); 200 triggerState.put(deviceId, state);
208 return state; 201 return state;
209 } 202 }
@@ -230,12 +223,12 @@ class ReactState { @@ -230,12 +223,12 @@ class ReactState {
230 for (AlarmConditionFilter filter : rule.getCondition().getCondition()) { 223 for (AlarmConditionFilter filter : rule.getCondition().getCondition()) {
231 filterKeys.add(filter.getKey()); 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 return state; 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 TbMsgMetaData metaData = //lastMsgMetaData != null ? lastMsgMetaData.copy() : 232 TbMsgMetaData metaData = //lastMsgMetaData != null ? lastMsgMetaData.copy() :
240 new TbMsgMetaData(); 233 new TbMsgMetaData();
241 String relationType = ""; 234 String relationType = "";
@@ -282,10 +275,10 @@ class ReactState { @@ -282,10 +275,10 @@ class ReactState {
282 * @param msg 275 * @param msg
283 * @param action 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 DeviceId entityId = new DeviceId(UUID.fromString(deviceId)); 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 Alarm currentAlarm = new Alarm(); 284 Alarm currentAlarm = new Alarm();
@@ -298,8 +291,8 @@ class ReactState { @@ -298,8 +291,8 @@ class ReactState {
298 currentAlarm.setStartTs(startTs); 291 currentAlarm.setStartTs(startTs);
299 currentAlarm.setEndTs(currentAlarm.getStartTs()); 292 currentAlarm.setEndTs(currentAlarm.getStartTs());
300 ObjectNode detailData = JacksonUtil.newObjectNode(); 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 currentAlarm.setDetails(detailData); 296 currentAlarm.setDetails(detailData);
304 currentAlarm.setOriginator(entityId); 297 currentAlarm.setOriginator(entityId);
305 currentAlarm.setTenantId(ctx.getTenantId()); 298 currentAlarm.setTenantId(ctx.getTenantId());
@@ -307,8 +300,7 @@ class ReactState { @@ -307,8 +300,7 @@ class ReactState {
307 300
308 currentAlarm = ctx.getAlarmService().createOrUpdateAlarm(currentAlarm); 301 currentAlarm = ctx.getAlarmService().createOrUpdateAlarm(currentAlarm);
309 ytDeviceService.freshAlarmStatus(entityId, 1); 302 ytDeviceService.freshAlarmStatus(entityId, 1);
310 - currentAlarms.put(deviceId,currentAlarm);  
311 - 303 + currentAlarms.put(deviceId, currentAlarm);
312 304
313 305
314 AlarmInfoDTO formData = new AlarmInfoDTO(); 306 AlarmInfoDTO formData = new AlarmInfoDTO();
@@ -322,12 +314,12 @@ class ReactState { @@ -322,12 +314,12 @@ class ReactState {
322 formData.setDeviceId(deviceId); 314 formData.setDeviceId(deviceId);
323 formData.setTenantId(currentAlarm.getTenantId().getId().toString()); 315 formData.setTenantId(currentAlarm.getTenantId().getId().toString());
324 formData.setSeverity(actionAlarm.getAlarmLevel().name()); 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 ctx.getAlarmService().clearAlarmForResult(ctx.getTenantId(), currentAlarms.get(deviceId).getId(), null, System.currentTimeMillis()); 323 ctx.getAlarmService().clearAlarmForResult(ctx.getTenantId(), currentAlarms.get(deviceId).getId(), null, System.currentTimeMillis());
332 ytDeviceService.freshAlarmStatus(new DeviceId(UUID.fromString(deviceId)), 0); 324 ytDeviceService.freshAlarmStatus(new DeviceId(UUID.fromString(deviceId)), 0);
333 currentAlarms.remove(deviceId); 325 currentAlarms.remove(deviceId);