Commit 23d1ec291079f19557bbf3f6c1c215d6c0af60d9

Authored by xp.Huang
1 parent d790dcb8

fix: 场景联动事件触发,选择全部时未触发

@@ -808,13 +808,13 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev @@ -808,13 +808,13 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
808 } 808 }
809 809
810 @Override 810 @Override
811 - public String getTbDeviceIdByDeviceNameAndGateWayId(String tenantId, String name,String gateWayId) { 811 + public DeviceDTO getDeviceByDeviceNameOrIdAndGateWayId(String tenantId, String nameOrTbDeviceId, String gateWayId) {
812 TkDeviceEntity entity = 812 TkDeviceEntity entity =
813 baseMapper.selectOne(new LambdaQueryWrapper<TkDeviceEntity>() 813 baseMapper.selectOne(new LambdaQueryWrapper<TkDeviceEntity>()
814 .eq(TkDeviceEntity::getTenantId, tenantId) 814 .eq(TkDeviceEntity::getTenantId, tenantId)
815 - .eq(TkDeviceEntity::getName, name)  
816 - .eq(TkDeviceEntity::getGatewayId,gateWayId));  
817 - return Optional.ofNullable(entity).map(obj->obj.getTbDeviceId()).orElse(null); 815 + .eq(TkDeviceEntity::getGatewayId,gateWayId)
  816 + .eq(TkDeviceEntity::getName, nameOrTbDeviceId).or().eq(TkDeviceEntity::getTbDeviceId,nameOrTbDeviceId));
  817 + return Optional.ofNullable(entity).map(obj->obj.getDTO(DeviceDTO.class)).orElse(null);
818 } 818 }
819 @Override 819 @Override
820 @Transactional 820 @Transactional
@@ -244,13 +244,13 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> { @@ -244,13 +244,13 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> {
244 boolean updateDeviceStateByTbDeviceId(String tenantId, String tbDeviceId, DeviceState deviceState); 244 boolean updateDeviceStateByTbDeviceId(String tenantId, String tbDeviceId, DeviceState deviceState);
245 245
246 /** 246 /**
247 - * 根据租户ID和设备名称查询该设备的TBDeviceId 247 + * 根据租户ID和设备名称或设备ID查询该设备的信息
248 * @param tenantId 租户ID 248 * @param tenantId 租户ID
249 - * @param name 设备名称 249 + * @param nameOrTbDeviceId 设备名称或TBDeviceId
250 * @param gateWayId Tb网关ID 250 * @param gateWayId Tb网关ID
251 * @return TBDeviceId 251 * @return TBDeviceId
252 */ 252 */
253 - String getTbDeviceIdByDeviceNameAndGateWayId(String tenantId, String name,String gateWayId); 253 + DeviceDTO getDeviceByDeviceNameOrIdAndGateWayId(String tenantId, String nameOrTbDeviceId, String gateWayId);
254 254
255 /** 255 /**
256 * 修改设备的产品ID(profileId) 256 * 修改设备的产品ID(profileId)
@@ -22,9 +22,11 @@ import org.thingsboard.rule.engine.telemetry.TelemetryNodeCallback; @@ -22,9 +22,11 @@ import org.thingsboard.rule.engine.telemetry.TelemetryNodeCallback;
22 import org.thingsboard.server.common.data.DeviceProfile; 22 import org.thingsboard.server.common.data.DeviceProfile;
23 import org.thingsboard.server.common.data.StringUtils; 23 import org.thingsboard.server.common.data.StringUtils;
24 import org.thingsboard.server.common.data.id.DeviceId; 24 import org.thingsboard.server.common.data.id.DeviceId;
  25 +import org.thingsboard.server.common.data.id.DeviceProfileId;
25 import org.thingsboard.server.common.data.id.TenantId; 26 import org.thingsboard.server.common.data.id.TenantId;
26 import org.thingsboard.server.common.data.plugin.ComponentType; 27 import org.thingsboard.server.common.data.plugin.ComponentType;
27 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; 28 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  29 +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
28 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry; 30 import org.thingsboard.server.common.data.yunteng.dto.TkEventKvEntry;
29 import org.thingsboard.server.common.data.yunteng.dto.TkThingsModel; 31 import org.thingsboard.server.common.data.yunteng.dto.TkThingsModel;
30 import org.thingsboard.server.common.data.yunteng.enums.FunctionTypeEnum; 32 import org.thingsboard.server.common.data.yunteng.enums.FunctionTypeEnum;
@@ -33,6 +35,7 @@ import org.thingsboard.server.common.msg.session.SessionMsgType; @@ -33,6 +35,7 @@ import org.thingsboard.server.common.msg.session.SessionMsgType;
33 35
34 import java.util.ArrayList; 36 import java.util.ArrayList;
35 import java.util.List; 37 import java.util.List;
  38 +import java.util.UUID;
36 import java.util.stream.Collectors; 39 import java.util.stream.Collectors;
37 40
38 41
@@ -68,12 +71,19 @@ public class TkMsgEventNode implements TbNode { @@ -68,12 +71,19 @@ public class TkMsgEventNode implements TbNode {
68 String deviceIdStr = msg.getMetaData().getValue("deviceId"); 71 String deviceIdStr = msg.getMetaData().getValue("deviceId");
69 TenantId tenantId = ctx.getTenantId(); 72 TenantId tenantId = ctx.getTenantId();
70 if(selfData.equals(FastIotConstants.NO)){ 73 if(selfData.equals(FastIotConstants.NO)){
71 - String tbDeviceId = ctx.getTkDeviceService()  
72 - .getTbDeviceIdByDeviceNameAndGateWayId(tenantId.toString(),deviceIdStr, 74 + DeviceDTO device = ctx.getTkDeviceService()
  75 + .getDeviceByDeviceNameOrIdAndGateWayId(tenantId.toString(),deviceIdStr,
73 msg.getOriginator().toString()); 76 msg.getOriginator().toString());
74 - if(StringUtils.isNotEmpty(tbDeviceId)){  
75 - deviceIdStr = tbDeviceId; 77 + //设备为null代表使用的设备ID,作为topic进行的上报
  78 + if(null !=device && StringUtils.isNotEmpty(device.getTbDeviceId())){
  79 + deviceIdStr = device.getTbDeviceId();
76 msg.getMetaData().putValue("deviceId",deviceIdStr); 80 msg.getMetaData().putValue("deviceId",deviceIdStr);
  81 + msg.getMetaData().putValue("deviceName",device.getName());
  82 + DeviceProfile deviceProfile = ctx.getDeviceProfileCache().get(tenantId,new DeviceProfileId(UUID.fromString(device.getProfileId())));
  83 + if(null != deviceProfile){
  84 + msg.getMetaData().putValue("deviceProfileId",deviceProfile.getId().toString());
  85 + msg.getMetaData().putValue("deviceType",deviceProfile.getName());
  86 + }
77 } 87 }
78 } 88 }
79 DeviceId deviceId = DeviceId.fromString(deviceIdStr); 89 DeviceId deviceId = DeviceId.fromString(deviceIdStr);
@@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
17 import java.util.List; 17 import java.util.List;
18 import java.util.Map; 18 import java.util.Map;
19 import java.util.Optional; 19 import java.util.Optional;
  20 +import java.util.UUID;
20 import java.util.concurrent.ConcurrentHashMap; 21 import java.util.concurrent.ConcurrentHashMap;
21 import lombok.extern.slf4j.Slf4j; 22 import lombok.extern.slf4j.Slf4j;
22 import org.thingsboard.rule.engine.api.*; 23 import org.thingsboard.rule.engine.api.*;
@@ -24,7 +25,9 @@ import org.thingsboard.rule.engine.api.util.TbNodeUtils; @@ -24,7 +25,9 @@ import org.thingsboard.rule.engine.api.util.TbNodeUtils;
24 import org.thingsboard.rule.engine.filter.TbCheckAlarmStatusNodeConfig; 25 import org.thingsboard.rule.engine.filter.TbCheckAlarmStatusNodeConfig;
25 import org.thingsboard.rule.engine.profile.SnapshotUpdate; 26 import org.thingsboard.rule.engine.profile.SnapshotUpdate;
26 import org.thingsboard.rule.engine.yunteng.utils.TriggerRuleState; 27 import org.thingsboard.rule.engine.yunteng.utils.TriggerRuleState;
  28 +import org.thingsboard.server.common.data.DeviceProfile;
27 import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType; 29 import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType;
  30 +import org.thingsboard.server.common.data.id.DeviceId;
28 import org.thingsboard.server.common.data.plugin.ComponentType; 31 import org.thingsboard.server.common.data.plugin.ComponentType;
29 import org.thingsboard.server.common.data.yunteng.dto.scene.RuleFilterDTO; 32 import org.thingsboard.server.common.data.yunteng.dto.scene.RuleFilterDTO;
30 import org.thingsboard.server.common.msg.TbMsg; 33 import org.thingsboard.server.common.msg.TbMsg;
@@ -60,6 +63,10 @@ public class TbSceneReactNode implements TbNode { @@ -60,6 +63,10 @@ public class TbSceneReactNode implements TbNode {
60 String deviceId; 63 String deviceId;
61 if(msg.getType().equals("POST_EVENT_REQUEST")){ 64 if(msg.getType().equals("POST_EVENT_REQUEST")){
62 deviceId = msg.getMetaData().getData().get("deviceId"); 65 deviceId = msg.getMetaData().getData().get("deviceId");
  66 + DeviceProfile cache = ctx.getDeviceProfileCache().get(ctx.getTenantId(),new DeviceId(UUID.fromString(deviceId)));
  67 + if(null != cache){
  68 + msg.getMetaData().putValue("deviceProfileId",cache.getId().toString());
  69 + }
63 }else{ 70 }else{
64 deviceId = msg.getOriginator().getId().toString(); 71 deviceId = msg.getOriginator().getId().toString();
65 } 72 }