Commit 4e028640cbbf7f4f667ddb74b271ca34099fe1d7

Authored by 芯火源
1 parent 9dc13b91

fix(DEFECT-1505): 场景联动问题修复

1、修复触发器逻辑问题
2、告警详情内容调整
@@ -180,7 +180,9 @@ public interface FastIotConstants { @@ -180,7 +180,9 @@ public interface FastIotConstants {
180 /**遥测指标标识符*/ 180 /**遥测指标标识符*/
181 public static String KEY = "key"; 181 public static String KEY = "key";
182 /**遥测指标值*/ 182 /**遥测指标值*/
183 - public static String VALUE = "value"; 183 + public static String VALUE = "realValue";
  184 + /**遥测指标值*/
  185 + public static String PREDICATE_VALUE = "logicValue";
184 /**触发器逻辑关系*/ 186 /**触发器逻辑关系*/
185 public static String PREDICATE = "logic"; 187 public static String PREDICATE = "logic";
186 /**触发器*/ 188 /**触发器*/
@@ -119,48 +119,51 @@ class ReactState { @@ -119,48 +119,51 @@ class ReactState {
119 ytDeviceService.findTbDeviceIdsByDeviceProfileId( 119 ytDeviceService.findTbDeviceIdsByDeviceProfileId(
120 tkProjectId, trigger.getTenantId()); 120 tkProjectId, trigger.getTenantId());
121 } 121 }
122 - triggerMatched.set(  
123 - trifggerDevices.stream()  
124 - .anyMatch(  
125 - devId -> {  
126 - TriggerState triggerState =  
127 - getOrCreateTriggerState(trigger, tkProjectId, devId);  
128 - if (triggerState == null) {  
129 - return false;  
130 - }  
131 - try {  
132 - boolean fresh = false;  
133 - if (trigger.getId().equals(prefixId)  
134 - && msg.getOriginator().getId().toString().equals(devId)) {  
135 - fresh = true;  
136 - }  
137 - ObjectNode result = triggerState.process(ctx, msg, fresh);  
138 - log.error(  
139 - String.format(  
140 - "触发器【%s】刷新【%s】结果【%s】触发器设备【%s】数据设备【%s】数据内容【%s】",  
141 - trigger.getId(),  
142 - fresh,  
143 - result,  
144 - devId,  
145 - msg.getOriginator(),  
146 - msg.getData()));  
147 - if (!result.isEmpty()) {  
148 - detail.set(FastIotConstants.Alarm.TRIGGER,result);  
149 - return true;  
150 - } else if (currentAlarms.containsKey(deviceId)) {  
151 - // 清除设备告警  
152 - for (AlarmConditionFilterKey entityKey :  
153 - triggerState.getEntityKeys()) {  
154 - clearAlarm(ctx, msg, deviceId, entityKey.getKey());  
155 - }  
156 - }  
157 - } catch (ExecutionException e) {  
158 - throw new RuntimeException(e);  
159 - } catch (InterruptedException e) {  
160 - throw new RuntimeException(e);  
161 - }  
162 - return false;  
163 - })); 122 + boolean matched =
  123 + trifggerDevices.stream()
  124 + .anyMatch(
  125 + devId -> {
  126 + TriggerState triggerState =
  127 + getOrCreateTriggerState(trigger, tkProjectId, devId);
  128 + if (triggerState == null) {
  129 + return false;
  130 + }
  131 + try {
  132 + boolean fresh = false;
  133 + if (trigger.getId().equals(prefixId)
  134 + && msg.getOriginator().getId().toString().equals(devId)) {
  135 + fresh = true;
  136 + }
  137 + ObjectNode result = triggerState.process(ctx, msg, fresh);
  138 + log.error(
  139 + String.format(
  140 + "触发器【%s】刷新【%s】结果【%s】触发器设备【%s】数据设备【%s】数据内容【%s】",
  141 + trigger.getId(),
  142 + fresh,
  143 + result,
  144 + devId,
  145 + msg.getOriginator(),
  146 + msg.getData()));
  147 + if (!result.isEmpty()) {
  148 + detail.set(devId,result);
  149 + return true;
  150 + } else if (currentAlarms.containsKey(deviceId)) {
  151 + // 清除设备告警
  152 + for (AlarmConditionFilterKey entityKey :
  153 + triggerState.getEntityKeys()) {
  154 + clearAlarm(ctx, msg, deviceId, entityKey.getKey());
  155 + }
  156 + }
  157 + } catch (ExecutionException e) {
  158 + throw new RuntimeException(e);
  159 + } catch (InterruptedException e) {
  160 + throw new RuntimeException(e);
  161 + }
  162 + return false;
  163 + });
  164 + if(matched){
  165 + triggerMatched.set(matched);
  166 + }
164 }); 167 });
165 }); 168 });
166 169
@@ -193,7 +196,7 @@ class ReactState { @@ -193,7 +196,7 @@ class ReactState {
193 fresh = true; 196 fresh = true;
194 } 197 }
195 ObjectNode result = conditionState.process(ctx, msg, fresh); 198 ObjectNode result = conditionState.process(ctx, msg, fresh);
196 - log.warn( 199 + log.debug(
197 String.format( 200 String.format(
198 "执行器【%s】刷新【%s】结果【%s】执行器设备【%s】数据设备【%s】数据内容【%s】", 201 "执行器【%s】刷新【%s】结果【%s】执行器设备【%s】数据设备【%s】数据内容【%s】",
199 condition.getId(), 202 condition.getId(),
@@ -203,7 +206,7 @@ class ReactState { @@ -203,7 +206,7 @@ class ReactState {
203 msg.getOriginator(), 206 msg.getOriginator(),
204 msg.getData())); 207 msg.getData()));
205 if (!result.isEmpty()) { 208 if (!result.isEmpty()) {
206 - detail.set(FastIotConstants.Alarm.CONDITION,result); 209 + detail.set(devId,result);
207 return true; 210 return true;
208 } 211 }
209 } catch (ExecutionException e) { 212 } catch (ExecutionException e) {
@@ -217,7 +220,7 @@ class ReactState { @@ -217,7 +220,7 @@ class ReactState {
217 }); 220 });
218 221
219 if (triggerMatched.get() && conditionMatched.get()) { 222 if (triggerMatched.get() && conditionMatched.get()) {
220 - log.error(String.format("设备【%s】的消息内容【%s】触发动作", deviceId, msg.getData())); 223 + log.debug(String.format("设备【%s】的消息内容【%s】触发动作", deviceId, msg.getData()));
221 for (TkDoActionEntity item : actions) { 224 for (TkDoActionEntity item : actions) {
222 if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) { 225 if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) {
223 noticeMsg(ctx, msg, item, deviceId, detail, msg.getTs()); 226 noticeMsg(ctx, msg, item, deviceId, detail, msg.getTs());
@@ -362,7 +362,8 @@ public class TriggerRuleState { @@ -362,7 +362,8 @@ public class TriggerRuleState {
362 if (predicateValue == null) { 362 if (predicateValue == null) {
363 return false; 363 return false;
364 } 364 }
365 - detailInform.put(FastIotConstants.Alarm.VALUE,predicateValue); 365 + detailInform.put(FastIotConstants.Alarm.VALUE,val);
  366 + detailInform.put(FastIotConstants.Alarm.PREDICATE_VALUE,predicateValue);
366 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString()); 367 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString());
367 switch (predicate.getOperation()) { 368 switch (predicate.getOperation()) {
368 case EQUAL: 369 case EQUAL:
@@ -383,7 +384,8 @@ public class TriggerRuleState { @@ -383,7 +384,8 @@ public class TriggerRuleState {
383 if (predicateValue == null) { 384 if (predicateValue == null) {
384 return false; 385 return false;
385 } 386 }
386 - detailInform.put(FastIotConstants.Alarm.VALUE,predicateValue); 387 + detailInform.put(FastIotConstants.Alarm.VALUE,val);
  388 + detailInform.put(FastIotConstants.Alarm.PREDICATE_VALUE,predicateValue);
387 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString()); 389 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString());
388 switch (predicate.getOperation()) { 390 switch (predicate.getOperation()) {
389 case NOT_EQUAL: 391 case NOT_EQUAL:
@@ -416,7 +418,8 @@ public class TriggerRuleState { @@ -416,7 +418,8 @@ public class TriggerRuleState {
416 val = val.toLowerCase(); 418 val = val.toLowerCase();
417 predicateValue = predicateValue.toLowerCase(); 419 predicateValue = predicateValue.toLowerCase();
418 } 420 }
419 - detailInform.put(FastIotConstants.Alarm.VALUE,predicateValue); 421 + detailInform.put(FastIotConstants.Alarm.VALUE,val);
  422 + detailInform.put(FastIotConstants.Alarm.PREDICATE_VALUE,predicateValue);
420 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString()); 423 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString());
421 switch (predicate.getOperation()) { 424 switch (predicate.getOperation()) {
422 case CONTAINS: 425 case CONTAINS: