Commit bd4b3f4707085ec68b08ac2965b644552d8a8351

Authored by xp.Huang
2 parents d542bbe5 62e29baa

Merge branch '20221201' into 'master'

20221201

See merge request huang/thingsboard3.3.2!145
... ... @@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.yunteng.dto.TkDeviceScriptDTO;
38 38 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
39 39 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
40 40 import org.thingsboard.server.common.msg.queue.ServiceQueue;
  41 +import org.thingsboard.server.common.yunteng.script.YtScriptFactory;
41 42 import org.thingsboard.server.common.yunteng.script.YtScriptInvokeService;
42 43 import org.thingsboard.server.common.yunteng.script.YtScriptType;
43 44 import org.thingsboard.server.controller.BaseController;
... ... @@ -73,16 +74,7 @@ public class TkDeviceScriptController extends BaseController {
73 74 String tenantId = getCurrentUser().getCurrentTenantId();
74 75 scriptDTO.setTenantId(tenantId);
75 76 scriptService.validateFormdata(scriptDTO, created);
76   - /** 业务流程 1/3.编辑时同步刷新相关的设备配置 2/3.处理TB业务逻辑 3/3.处理业务平台的业务逻辑 */
77   - if (!created) {
78   - List<DeviceProfileDTO> usedProfiles = ytDeviceProfileService.findDeviceProfile(tenantId, id);
79   - for (DeviceProfileDTO profile : usedProfiles) {
80   - DeviceProfile tbDeviceProfile =
81   - buildTbDeviceProfileFromDeviceProfileDTO(
82   - profile, scriptDTO.getTenantId(), scriptDTO.getConvertJs());
83   - updateTbDeviceProfile(tbDeviceProfile);
84   - }
85   - }
  77 +
86 78
87 79 String creator = getCurrentUser().getCurrentUserId();
88 80 scriptDTO.setCreator(creator);
... ... @@ -96,9 +88,30 @@ public class TkDeviceScriptController extends BaseController {
96 88 public ResponseEntity<Boolean> updateScriptStatus(
97 89 @PathVariable("id") String id, @PathVariable("status") Integer status)
98 90 throws ThingsboardException {
  91 + /** 业务流程 1/3.编辑时同步刷新相关的设备配置 2/3.处理TB业务逻辑 3/3.处理业务平台的业务逻辑 */
  92 + String tenantId = getCurrentUser().getCurrentTenantId();
  93 + TkDeviceScriptDTO scriptDTO = scriptService.getDeviceScript(tenantId,id).get();
  94 + if(scriptDTO ==null || scriptDTO.getStatus().equals(status)){
  95 + return ResponseEntity.ok(false);
  96 + }
  97 + String convertJs = YtScriptFactory.INCLUD_ORIGINAL_DATA;
99 98
100   - return ResponseEntity.ok(
101   - scriptService.updateScriptStatus(getCurrentUser().getCurrentTenantId(), id, status));
  99 + if(1 == status){
  100 + if(scriptDTO.isSaveOriginalData()){
  101 + convertJs += scriptDTO.getConvertJs();
  102 + }else{
  103 + convertJs = scriptDTO.getConvertJs();
  104 + }
  105 + }
  106 + List<DeviceProfileDTO> usedProfiles = ytDeviceProfileService.findDeviceProfile(tenantId, id);
  107 + for (DeviceProfileDTO profile : usedProfiles) {
  108 + DeviceProfile tbDeviceProfile =
  109 + buildTbDeviceProfileFromDeviceProfileDTO(
  110 + profile, tenantId, convertJs);
  111 + updateTbDeviceProfile(tbDeviceProfile);
  112 + }
  113 + scriptService.updateScriptStatus(tenantId, id, status);
  114 + return ResponseEntity.ok(true);
102 115 }
103 116
104 117 /**
... ...
... ... @@ -98,6 +98,7 @@ import org.thingsboard.server.queue.common.TbProtoQueueMsg;
98 98 import org.thingsboard.server.queue.util.TbCoreComponent;
99 99 import org.thingsboard.server.service.apiusage.TbApiUsageStateService;
100 100 import org.thingsboard.server.service.executors.DbCallbackExecutorService;
  101 +import org.thingsboard.server.service.install.DefaultSystemDataLoaderService;
101 102 import org.thingsboard.server.service.profile.TbDeviceProfileCache;
102 103 import org.thingsboard.server.service.resource.TbResourceService;
103 104
... ... @@ -303,7 +304,7 @@ public class DefaultTransportApiService implements TransportApiService {
303 304 device.setName(requestMsg.getDeviceName());
304 305 device.setType(requestMsg.getDeviceType());
305 306 device.setCustomerId(gateway.getCustomerId());
306   - DeviceProfile deviceProfile = deviceProfileCache.findOrCreateDeviceProfile(gateway.getTenantId(), requestMsg.getDeviceType());
  307 + DeviceProfile deviceProfile = deviceProfileCache.findOrCreateDeviceProfile(gateway.getTenantId(), DefaultSystemDataLoaderService.DEFAULT_DEVICE_TYPE);
307 308 device.setDeviceProfileId(deviceProfile.getId());
308 309 ObjectNode additionalInfo = JacksonUtil.newObjectNode();
309 310 additionalInfo.put(DataConstants.LAST_CONNECTED_GATEWAY, gatewayId.toString());
... ... @@ -312,7 +313,7 @@ public class DefaultTransportApiService implements TransportApiService {
312 313
313 314
314 315 //Thingskit function
315   - ytDeviceService.saveSlaveDevice(savedDevice.getId().getId().toString(), savedDevice.getName(), gateway.getId().getId().toString(),gateway.getCreatedTime());
  316 + ytDeviceService.saveSlaveDevice(savedDevice.getId().getId().toString(), savedDevice.getName(),deviceProfile.getId().getId().toString(), gateway.getId().getId().toString(),gateway.getCreatedTime());
316 317
317 318
318 319 tbClusterService.onDeviceUpdated(savedDevice, null);
... ...
... ... @@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
26 26 import org.thingsboard.server.common.data.yunteng.enums.TcpDataTypeEnum;
27 27 import org.thingsboard.server.common.transport.auth.TransportDeviceInfo;
28 28 import org.thingsboard.server.common.transport.session.DeviceAwareSessionContext;
  29 +import org.thingsboard.server.common.yunteng.script.YtScriptFactory;
29 30 import org.thingsboard.server.gen.transport.TransportProtos;
30 31 import org.thingsboard.server.transport.tcp.TcpTransportContext;
31 32 import org.thingsboard.server.transport.tcp.adaptors.TcpTransportAdaptor;
... ... @@ -122,7 +123,7 @@ public abstract class TcpDeviceWareSessionContext extends DeviceAwareSessionCont
122 123 this.toDeviceRpcResponseTopicFilter = tcpConfiguration.getRpcTopic();
123 124 String scriptBody = tcpConfiguration.getScriptText();
124 125 try {
125   - this.scriptId = this.adaptor.getJsScriptEngineFunctionId(scriptBody);
  126 + this.scriptId = this.adaptor.getJsScriptEngineFunctionId(scriptBody==null? YtScriptFactory.INCLUD_ORIGINAL_DATA:scriptBody);
126 127 } catch (ExecutionException e) {
127 128 log.warn("设备配置【{}】的脚本【{}】解析异常",deviceProfile.getSearchText(),scriptBody);
128 129 throw new RuntimeException(e);
... ...
... ... @@ -21,6 +21,7 @@ public class YtScriptFactory {
21 21
22 22 public static final String RULE_NODE_FUNCTION_NAME = "tcpTransportFunc";
23 23
  24 + public static final String INCLUD_ORIGINAL_DATA = "out.source=params;";
24 25 private static final String JS_WRAPPER_PREFIX_TEMPLATE = "function %s(params) { " +
25 26 " var out = new Object(); " +
26 27 " return JSON.stringify(%s(params));" +
... ...
... ... @@ -83,7 +83,7 @@ public class TkDeviceScriptServiceImpl
83 83 @Override
84 84 @Transactional
85 85 public boolean updateScriptStatus(String tenantId, String id, Integer status) {
86   - if (StringUtils.isEmpty(tenantId) || StringUtils.isEmpty(id) || null != status) {
  86 + if (StringUtils.isEmpty(tenantId) || StringUtils.isEmpty(id) || null == status) {
87 87 throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
88 88 }
89 89 TkDeviceScriptEntity entity = baseMapper.selectById(id);
... ...
... ... @@ -44,6 +44,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
44 44 implements TkDeviceService {
45 45
46 46 private final DeviceProfileDao deviceProfileDao;
  47 + private final TkDeviceProfileMapper tkProfileMapper;
47 48
48 49 private final OrganizationMapper tkOrganizationMapper;
49 50 private final SceneLinkageMapper sceneLinkageMapper;
... ... @@ -491,7 +492,7 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
491 492
492 493 @Override
493 494 public boolean saveSlaveDevice(
494   - String slaveId, String slaveName, String gatewayId, Long createTime) {
  495 + String slaveId, String slaveName, String tbProfileId, String gatewayId, Long createTime) {
495 496 LambdaQueryWrapper<TkDeviceEntity> deviceFilter =
496 497 new QueryWrapper<TkDeviceEntity>().lambda().eq(TkDeviceEntity::getTbDeviceId, gatewayId);
497 498 TkDeviceEntity gateway = baseMapper.selectOne(deviceFilter);
... ... @@ -505,7 +506,9 @@ public class TkDeviceServiceImpl extends AbstractBaseService<DeviceMapper, TkDev
505 506 JacksonUtil.toJsonNode(
506 507 "{\"avatar\": \"\",\"longitude\": \"\",\"latitude\": \"\",\"address\": \"\"}"));
507 508
508   - slaveDevice.setProfileId(gateway.getProfileId());
  509 + DeviceProfileDTO profileDTO = tkProfileMapper.selectDetail(gateway.getTenantId(),tbProfileId);
  510 + slaveDevice.setProfileId(profileDTO.getTbProfileId());
  511 + slaveDevice.setDeviceProfileId(profileDTO.getId());
509 512 slaveDevice.setGatewayId(gateway.getId());
510 513 slaveDevice.setOrganizationId(gateway.getOrganizationId());
511 514 slaveDevice.setTenantId(gateway.getTenantId());
... ...
... ... @@ -156,7 +156,7 @@ public interface TkDeviceService extends BaseService<TkDeviceEntity> {
156 156 * @param gatewayId 网关设备TB平台的ID
157 157 * @return
158 158 */
159   - boolean saveSlaveDevice(String slaveId, String slaveName, String gatewayId, Long createTime);
  159 + boolean saveSlaveDevice(String slaveId, String slaveName, String tbProfileId,String gatewayId, Long createTime);
160 160
161 161 /**
162 162 * 通过设备ids查询设备信息列表
... ...