Commit 77d50fd47f88bd153c9723540486e61d91edf69e

Authored by xp.Huang
2 parents a80b79e0 cff4b20e

Merge branch '20220319' into 'master'

fix: 场景联动不存在激活时500异常

See merge request huang/thingsboard3.3.2!70
@@ -56,6 +56,7 @@ public enum ErrorMessage { @@ -56,6 +56,7 @@ public enum ErrorMessage {
56 STORE_FILE_FAILED(400037,"文件存储失败"), 56 STORE_FILE_FAILED(400037,"文件存储失败"),
57 NOT_BELONG_CURRENT_TENANT(400038,"不属于当前租户"), 57 NOT_BELONG_CURRENT_TENANT(400038,"不属于当前租户"),
58 DEVICE_LOSED(400039,"设备相关参数丢失"), 58 DEVICE_LOSED(400039,"设备相关参数丢失"),
  59 + SCENE_REACT_NOT_EXTIED(400040,"场景联动不存在"),
59 HAVE_NO_PERMISSION(500002,"没有修改权限"); 60 HAVE_NO_PERMISSION(500002,"没有修改权限");
60 private final int code; 61 private final int code;
61 private String message; 62 private String message;
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.JsonNode; @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.JsonNode;
7 import com.fasterxml.jackson.databind.node.ObjectNode; 7 import com.fasterxml.jackson.databind.node.ObjectNode;
8 import lombok.RequiredArgsConstructor; 8 import lombok.RequiredArgsConstructor;
9 import org.apache.commons.lang3.StringUtils; 9 import org.apache.commons.lang3.StringUtils;
  10 +import org.springframework.scheduling.annotation.Async;
10 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
11 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
12 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; 13 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
@@ -366,6 +367,9 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap @@ -366,6 +367,9 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
366 sceneInform.put(item.getId(), item.getName()); 367 sceneInform.put(item.getId(), item.getName());
367 } 368 }
368 SceneLinkage self = baseMapper.selectById(currentSceneId); 369 SceneLinkage self = baseMapper.selectById(currentSceneId);
  370 + if (self == null) {
  371 + throw new YtDataValidationException(ErrorMessage.SCENE_REACT_NOT_EXTIED.getMessage());
  372 + }
369 if (state == FastIotConstants.StateValue.DISABLE) { 373 if (state == FastIotConstants.StateValue.DISABLE) {
370 enableIds.remove(currentSceneId); 374 enableIds.remove(currentSceneId);
371 sceneInform.remove(currentSceneId); 375 sceneInform.remove(currentSceneId);
@@ -394,33 +398,18 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap @@ -394,33 +398,18 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
394 String scenId = trigger.getSceneLinkageId(); 398 String scenId = trigger.getSceneLinkageId();
395 List<String> devices = trigger.getEntityId(); 399 List<String> devices = trigger.getEntityId();
396 if (ScopeEnum.ALL.equals(trigger.getEntityType()) && currentSceneId.equals(scenId)) { 400 if (ScopeEnum.ALL.equals(trigger.getEntityType()) && currentSceneId.equals(scenId)) {
397 - trigger.setEntityId(allDevices);  
398 - triggerMapper.updateById(trigger);  
399 devices = allDevices; 401 devices = allDevices;
400 } 402 }
401 deviceSceneMap(matchedDevices, devices, scenId); 403 deviceSceneMap(matchedDevices, devices, scenId);
402 }); 404 });
403 405
404 - List<DoCondition> conditions = doConditionMapper.selectList(new QueryWrapper<DoCondition>().lambda().eq(DoCondition::getSceneLinkageId, currentSceneId).eq(DoCondition::getEntityType, ScopeEnum.ALL));  
405 - conditions.forEach(item -> {  
406 - if (currentSceneId.equals(item.getSceneLinkageId())) {  
407 - item.setEntityId(allDevices);  
408 - doConditionMapper.updateById(item);  
409 - }  
410 - });  
411 -  
412 - List<DoAction> actions = doActionMapper.selectList(new QueryWrapper<DoAction>().lambda().eq(DoAction::getSceneLinkageId, currentSceneId).eq(DoAction::getEntityType, ScopeEnum.ALL));  
413 - actions.forEach(item -> {  
414 - if (currentSceneId.equals(item.getSceneLinkageId())) {  
415 - item.setDeviceId(allDevices);  
416 - doActionMapper.updateById(item);  
417 - }  
418 - });  
419 406
420 if (matchedDevices.isEmpty()) { 407 if (matchedDevices.isEmpty()) {
421 return null; 408 return null;
422 } 409 }
423 410
  411 + freshEntityIds(currentSceneId, allDevices, triggers);
  412 +
424 Map<String, Map> engineConfig = new HashMap<>(); 413 Map<String, Map> engineConfig = new HashMap<>();
425 engineConfig.put("scenes", matchedDevices); 414 engineConfig.put("scenes", matchedDevices);
426 engineConfig.put("names", sceneInform); 415 engineConfig.put("names", sceneInform);
@@ -430,6 +419,39 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap @@ -430,6 +419,39 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
430 } 419 }
431 420
432 /** 421 /**
  422 + * 异步刷新场景联动的设备ID
  423 + *
  424 + * @param sceneId
  425 + * @param allDevices
  426 + * @param triggers
  427 + */
  428 + @Async
  429 + public void freshEntityIds(String sceneId, List<String> allDevices, List<Trigger> triggers) {
  430 + triggers.forEach(trigger -> {
  431 + if (ScopeEnum.ALL.equals(trigger.getEntityType()) && sceneId.equals(trigger.getSceneLinkageId())) {
  432 + trigger.setEntityId(allDevices);
  433 + triggerMapper.updateById(trigger);
  434 + }
  435 + });
  436 +
  437 + List<DoCondition> conditions = doConditionMapper.selectList(new QueryWrapper<DoCondition>().lambda().eq(DoCondition::getSceneLinkageId, sceneId).eq(DoCondition::getEntityType, ScopeEnum.ALL));
  438 + conditions.forEach(item -> {
  439 + if (sceneId.equals(item.getSceneLinkageId())) {
  440 + item.setEntityId(allDevices);
  441 + doConditionMapper.updateById(item);
  442 + }
  443 + });
  444 +
  445 + List<DoAction> actions = doActionMapper.selectList(new QueryWrapper<DoAction>().lambda().eq(DoAction::getSceneLinkageId, sceneId).eq(DoAction::getEntityType, ScopeEnum.ALL));
  446 + actions.forEach(item -> {
  447 + if (sceneId.equals(item.getSceneLinkageId())) {
  448 + item.setDeviceId(allDevices);
  449 + doActionMapper.updateById(item);
  450 + }
  451 + });
  452 + }
  453 +
  454 + /**
433 * 设备与场景联动的映射集合 455 * 设备与场景联动的映射集合
434 * 456 *
435 * @param resultMap 缓存设备和场景联动映射结果的集合 457 * @param resultMap 缓存设备和场景联动映射结果的集合