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,6 +397,9 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
397 enableIds.remove(sceneId); 397 enableIds.remove(sceneId);
398 } 398 }
399 399
  400 + if(enableIds.size() <= 0){
  401 + return null;
  402 + }
400 List<Trigger> triggers = triggerMapper.selectList( 403 List<Trigger> triggers = triggerMapper.selectList(
401 new QueryWrapper<Trigger>() 404 new QueryWrapper<Trigger>()
402 .lambda() 405 .lambda()
@@ -10,6 +10,8 @@ import org.thingsboard.server.dao.yunteng.mapper.TriggerMapper; @@ -10,6 +10,8 @@ import org.thingsboard.server.dao.yunteng.mapper.TriggerMapper;
10 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 10 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
11 import org.thingsboard.server.dao.yunteng.service.TriggerService; 11 import org.thingsboard.server.dao.yunteng.service.TriggerService;
12 12
  13 +import java.util.Optional;
  14 +
13 /** 15 /**
14 * @Description 16 * @Description
15 * @Author cxy 17 * @Author cxy
@@ -26,6 +28,11 @@ public class TriggerServiceImpl extends AbstractBaseService<TriggerMapper, Trigg @@ -26,6 +28,11 @@ public class TriggerServiceImpl extends AbstractBaseService<TriggerMapper, Trigg
26 LambdaQueryWrapper filter = new QueryWrapper<Trigger>().lambda() 28 LambdaQueryWrapper filter = new QueryWrapper<Trigger>().lambda()
27 .eq(Trigger::getSceneLinkageId, sceneId) 29 .eq(Trigger::getSceneLinkageId, sceneId)
28 .eq(Trigger::getEntityId, deviceId); 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,9 +14,11 @@ import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter;
14 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey; 14 import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey;
15 import org.thingsboard.server.common.data.rule.RuleNodeState; 15 import org.thingsboard.server.common.data.rule.RuleNodeState;
16 import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; 16 import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO;
  17 +import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum;
17 import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils; 18 import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils;
18 import org.thingsboard.server.common.msg.TbMsg; 19 import org.thingsboard.server.common.msg.TbMsg;
19 import org.thingsboard.server.common.msg.TbMsgMetaData; 20 import org.thingsboard.server.common.msg.TbMsgMetaData;
  21 +import org.thingsboard.server.common.msg.queue.ServiceQueue;
20 import org.thingsboard.server.dao.yunteng.entities.DoAction; 22 import org.thingsboard.server.dao.yunteng.entities.DoAction;
21 import org.thingsboard.server.dao.yunteng.entities.DoCondition; 23 import org.thingsboard.server.dao.yunteng.entities.DoCondition;
22 import org.thingsboard.server.dao.yunteng.service.DoActionService; 24 import org.thingsboard.server.dao.yunteng.service.DoActionService;
@@ -78,9 +80,8 @@ class ReactState { @@ -78,9 +80,8 @@ class ReactState {
78 } 80 }
79 81
80 if(matched){ 82 if(matched){
81 - // TODO 输出动作  
82 for(DoAction item: actions){ 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,26 +111,43 @@ class ReactState {
110 return null; 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 TbMsgMetaData metaData = //lastMsgMetaData != null ? lastMsgMetaData.copy() : 115 TbMsgMetaData metaData = //lastMsgMetaData != null ? lastMsgMetaData.copy() :
117 new TbMsgMetaData(); 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,7 +67,7 @@ class TriggerState {
67 private volatile Alarm currentAlarm; 67 private volatile Alarm currentAlarm;
68 private volatile boolean initialFetchDone; 68 private volatile boolean initialFetchDone;
69 private volatile TbMsgMetaData lastMsgMetaData; 69 private volatile TbMsgMetaData lastMsgMetaData;
70 - private volatile String lastMsgQueueName; 70 +
71 private final DynamicPredicateValueCtx dynamicPredicateValueCtx; 71 private final DynamicPredicateValueCtx dynamicPredicateValueCtx;
72 private DataSnapshot latestValues; 72 private DataSnapshot latestValues;
73 73
@@ -87,7 +87,6 @@ class TriggerState { @@ -87,7 +87,6 @@ class TriggerState {
87 latestValues = fetchLatestValues(ctx, originator); 87 latestValues = fetchLatestValues(ctx, originator);
88 } 88 }
89 lastMsgMetaData = msg.getMetaData(); 89 lastMsgMetaData = msg.getMetaData();
90 - lastMsgQueueName = msg.getQueueName();  
91 SnapshotUpdate update = null; 90 SnapshotUpdate update = null;
92 if(msg.getType().equals(SessionMsgType.POST_TELEMETRY_REQUEST.name())){ 91 if(msg.getType().equals(SessionMsgType.POST_TELEMETRY_REQUEST.name())){
93 update = processTelemetry(ctx,msg); 92 update = processTelemetry(ctx,msg);