Commit 82bb0c36260a78523767b27dfae3ae24c20bcaa2

Authored by 云中非
1 parent 747ce36b

refactor: 告警清除规则切换为数组

@@ -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 TriggerDTO clearRule; 26 + private List<TriggerDTO> clearRule;
27 27
28 } 28 }
@@ -133,7 +133,9 @@ class ReactState { @@ -133,7 +133,9 @@ class ReactState {
133 } 133 }
134 } else if (currentAlarms.containsKey(deviceId) && this.alarmAction != null) { 134 } else if (currentAlarms.containsKey(deviceId) && this.alarmAction != null) {
135 //清除设备告警 135 //清除设备告警
136 - clearAlarm(ctx, msg, deviceId); 136 + for (AlarmConditionFilterKey entityKey : triggerState.getEntityKeys()) {
  137 + clearAlarm(ctx, msg, deviceId, entityKey.getKey());
  138 + }
137 } 139 }
138 } 140 }
139 } 141 }
@@ -192,15 +194,28 @@ class ReactState { @@ -192,15 +194,28 @@ class ReactState {
192 194
193 } 195 }
194 196
195 - protected TriggerState getOrCreateClearState(String deviceId) { 197 + protected TriggerState getOrCreateClearState(String deviceId,String key) {
  198 + String cacheKey = deviceId+key;
196 if (triggerState.containsKey(deviceId)) { 199 if (triggerState.containsKey(deviceId)) {
197 - return triggerState.get(deviceId); 200 + return triggerState.get(cacheKey);
198 } 201 }
199 if (alarmAction.getDeviceId().contains(deviceId)) { 202 if (alarmAction.getDeviceId().contains(deviceId)) {
  203 + TriggerState state = null;
200 ActionAlarmDTO alarm = JacksonUtil.convertValue(alarmAction.getDoContext(), ActionAlarmDTO.class); 204 ActionAlarmDTO alarm = JacksonUtil.convertValue(alarmAction.getDoContext(), ActionAlarmDTO.class);
201 if (alarm != null && alarm.getClearRule() != null) { 205 if (alarm != null && alarm.getClearRule() != null) {
202 - TriggerState state = createTriggerState(deviceId, alarm.getClearRule().getTriggerCondition());  
203 - triggerState.put(deviceId, state); 206 + for(TriggerDTO rule:alarm.getClearRule()){
  207 + for (AlarmConditionFilter filter : rule.getTriggerCondition().getCondition().getCondition()) {
  208 + String tempKey =filter.getKey().getKey();
  209 + if(key.equals(tempKey)){
  210 + state = createTriggerState(deviceId, rule.getTriggerCondition());
  211 + triggerState.put(cacheKey, state);
  212 + break;
  213 + }
  214 + }
  215 + if(state != null){
  216 + break;
  217 + }
  218 + }
204 return state; 219 return state;
205 } 220 }
206 } 221 }
@@ -320,8 +335,8 @@ class ReactState { @@ -320,8 +335,8 @@ class ReactState {
320 noticeService.alert(action.getAlarmProfileId(), formData); 335 noticeService.alert(action.getAlarmProfileId(), formData);
321 } 336 }
322 337
323 - private void clearAlarm(TbContext ctx, TbMsg msg, String deviceId) throws ExecutionException, InterruptedException {  
324 - TriggerState clearState = getOrCreateClearState(deviceId); 338 + private void clearAlarm(TbContext ctx, TbMsg msg, String deviceId,String key) throws ExecutionException, InterruptedException {
  339 + TriggerState clearState = getOrCreateClearState(deviceId,key);
325 if (clearState.process(ctx, msg)) { 340 if (clearState.process(ctx, msg)) {
326 ctx.getAlarmService().clearAlarmForResult(ctx.getTenantId(), currentAlarms.get(deviceId).getId(), null, System.currentTimeMillis()); 341 ctx.getAlarmService().clearAlarmForResult(ctx.getTenantId(), currentAlarms.get(deviceId).getId(), null, System.currentTimeMillis());
327 ytDeviceService.freshAlarmStatus(new DeviceId(UUID.fromString(deviceId)), 0); 342 ytDeviceService.freshAlarmStatus(new DeviceId(UUID.fromString(deviceId)), 0);