Commit 3fe61e069524e575ef9fbf4392a2e13a2fecd393

Authored by xp.Huang
2 parents a0145707 de92b737

Merge branch '20220228' into 'master'

20220228

See merge request huang/thingsboard3.3.2!51
... ... @@ -397,6 +397,9 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
397 397 enableIds.remove(sceneId);
398 398 }
399 399
  400 + if(enableIds.size() <= 0){
  401 + return null;
  402 + }
400 403 List<Trigger> triggers = triggerMapper.selectList(
401 404 new QueryWrapper<Trigger>()
402 405 .lambda()
... ...
... ... @@ -10,6 +10,8 @@ import org.thingsboard.server.dao.yunteng.mapper.TriggerMapper;
10 10 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
11 11 import org.thingsboard.server.dao.yunteng.service.TriggerService;
12 12
  13 +import java.util.Optional;
  14 +
13 15 /**
14 16 * @Description
15 17 * @Author cxy
... ... @@ -26,6 +28,11 @@ public class TriggerServiceImpl extends AbstractBaseService<TriggerMapper, Trigg
26 28 LambdaQueryWrapper filter = new QueryWrapper<Trigger>().lambda()
27 29 .eq(Trigger::getSceneLinkageId, sceneId)
28 30 .eq(Trigger::getEntityId, deviceId);
29   - return triggerMapper.selectOne(filter).getDTO(TriggerDTO.class);
  31 + Trigger trigger = triggerMapper.selectOne(filter);
  32 + if(trigger == null){
  33 + return null;
  34 + }
  35 +
  36 + return trigger.getDTO(TriggerDTO.class);
30 37 }
31 38 }
... ...
... ... @@ -14,9 +14,11 @@ import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter;
14 14 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey;
15 15 import org.thingsboard.server.common.data.rule.RuleNodeState;
16 16 import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO;
  17 +import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum;
17 18 import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils;
18 19 import org.thingsboard.server.common.msg.TbMsg;
19 20 import org.thingsboard.server.common.msg.TbMsgMetaData;
  21 +import org.thingsboard.server.common.msg.queue.ServiceQueue;
20 22 import org.thingsboard.server.dao.yunteng.entities.DoAction;
21 23 import org.thingsboard.server.dao.yunteng.entities.DoCondition;
22 24 import org.thingsboard.server.dao.yunteng.service.DoActionService;
... ... @@ -78,9 +80,8 @@ class ReactState {
78 80 }
79 81
80 82 if(matched){
81   - // TODO 输出动作
82 83 for(DoAction item: actions){
83   -// pushMsg();
  84 + pushMsg(ctx, msg, item);
84 85 }
85 86 }
86 87
... ... @@ -110,26 +111,43 @@ class ReactState {
110 111 return null;
111 112 }
112 113
113   - private void pushMsg(TbContext ctx, TbMsg msg, TbAlarmResult alarmResult,DoAction action) {
114   - JsonNode jsonNodes = JacksonUtil.valueToTree(alarmResult.getAlarm());
115   - String data = jsonNodes.toString();
  114 + private void pushMsg(TbContext ctx, TbMsg msg, DoAction action) {
116 115 TbMsgMetaData metaData = //lastMsgMetaData != null ? lastMsgMetaData.copy() :
117 116 new TbMsgMetaData();
118   - String relationType;
119   - if (alarmResult.isCreated()) {
120   - relationType = "Alarm Created";
121   - metaData.putValue(DataConstants.IS_NEW_ALARM, Boolean.TRUE.toString());
122   - } else if (alarmResult.isUpdated()) {
123   - relationType = "Alarm Updated";
124   - metaData.putValue(DataConstants.IS_EXISTING_ALARM, Boolean.TRUE.toString());
125   - } else if (alarmResult.isSeverityUpdated()) {
126   - relationType = "Alarm Severity Updated";
127   - metaData.putValue(DataConstants.IS_EXISTING_ALARM, Boolean.TRUE.toString());
128   - metaData.putValue(DataConstants.IS_SEVERITY_UPDATED_ALARM, Boolean.TRUE.toString());
129   - } else {
130   - relationType = "Alarm Cleared";
131   - metaData.putValue(DataConstants.IS_CLEARED_ALARM, Boolean.TRUE.toString());
  117 + String relationType = "";
  118 + TbMsg newMsg = null;
  119 + switch(action.getOutTarget()){
  120 + case DEVICE_OUT:
  121 + relationType = "RPC Request";
  122 + newMsg = rpcMsg(ctx,msg,action.getDoContext());
  123 + break;
  124 + case SCENE_ACT:
  125 + //TODO: 场景联动关联场景联动
  126 + relationType = "Alarm Updated";
  127 + break;
  128 + case MSG_NOTIFY:
  129 + relationType = "Message";
  130 + break;
  131 + default:
  132 + ctx.tellSuccess(msg);
  133 + break;
132 134 }
133   - ctx.tellNext(msg, relationType);
  135 +
  136 + if(newMsg != null){
  137 + ctx.tellNext(newMsg, relationType);
  138 + }
  139 + }
  140 +
  141 + private TbMsg rpcMsg(TbContext ctx, TbMsg msg,String context){
  142 + String lastMsgQueueName = msg.getQueueName();
  143 + TbMsgMetaData metaData = msg.getMetaData();
  144 + metaData.putValue(DataConstants.IS_CLEARED_ALARM, Boolean.TRUE.toString());
  145 + TbMsg newMsg = ctx.newMsg(lastMsgQueueName != null ? lastMsgQueueName : ServiceQueue.MAIN
  146 + , msg.getType()
  147 + , msg.getOriginator()
  148 + , msg != null ? msg.getCustomerId() : null
  149 + , metaData
  150 + , context);
  151 + return newMsg;
134 152 }
135 153 }
... ...
... ... @@ -67,7 +67,7 @@ class TriggerState {
67 67 private volatile Alarm currentAlarm;
68 68 private volatile boolean initialFetchDone;
69 69 private volatile TbMsgMetaData lastMsgMetaData;
70   - private volatile String lastMsgQueueName;
  70 +
71 71 private final DynamicPredicateValueCtx dynamicPredicateValueCtx;
72 72 private DataSnapshot latestValues;
73 73
... ... @@ -87,7 +87,6 @@ class TriggerState {
87 87 latestValues = fetchLatestValues(ctx, originator);
88 88 }
89 89 lastMsgMetaData = msg.getMetaData();
90   - lastMsgQueueName = msg.getQueueName();
91 90 SnapshotUpdate update = null;
92 91 if(msg.getType().equals(SessionMsgType.POST_TELEMETRY_REQUEST.name())){
93 92 update = processTelemetry(ctx,msg);
... ...