Commit 4e028640cbbf7f4f667ddb74b271ca34099fe1d7

Authored by 芯火源
1 parent 9dc13b91

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

1、修复触发器逻辑问题
2、告警详情内容调整
... ... @@ -180,7 +180,9 @@ public interface FastIotConstants {
180 180 /**遥测指标标识符*/
181 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 187 public static String PREDICATE = "logic";
186 188 /**触发器*/
... ...
... ... @@ -119,48 +119,51 @@ class ReactState {
119 119 ytDeviceService.findTbDeviceIdsByDeviceProfileId(
120 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 196 fresh = true;
194 197 }
195 198 ObjectNode result = conditionState.process(ctx, msg, fresh);
196   - log.warn(
  199 + log.debug(
197 200 String.format(
198 201 "执行器【%s】刷新【%s】结果【%s】执行器设备【%s】数据设备【%s】数据内容【%s】",
199 202 condition.getId(),
... ... @@ -203,7 +206,7 @@ class ReactState {
203 206 msg.getOriginator(),
204 207 msg.getData()));
205 208 if (!result.isEmpty()) {
206   - detail.set(FastIotConstants.Alarm.CONDITION,result);
  209 + detail.set(devId,result);
207 210 return true;
208 211 }
209 212 } catch (ExecutionException e) {
... ... @@ -217,7 +220,7 @@ class ReactState {
217 220 });
218 221
219 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 224 for (TkDoActionEntity item : actions) {
222 225 if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) {
223 226 noticeMsg(ctx, msg, item, deviceId, detail, msg.getTs());
... ...
... ... @@ -362,7 +362,8 @@ public class TriggerRuleState {
362 362 if (predicateValue == null) {
363 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 367 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString());
367 368 switch (predicate.getOperation()) {
368 369 case EQUAL:
... ... @@ -383,7 +384,8 @@ public class TriggerRuleState {
383 384 if (predicateValue == null) {
384 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 389 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString());
388 390 switch (predicate.getOperation()) {
389 391 case NOT_EQUAL:
... ... @@ -416,7 +418,8 @@ public class TriggerRuleState {
416 418 val = val.toLowerCase();
417 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 423 detailInform.put(FastIotConstants.Alarm.PREDICATE,predicate.getOperation().toString());
421 424 switch (predicate.getOperation()) {
422 425 case CONTAINS:
... ...