Commit b223dceb7515b14ce5e45d32e6f82e70084a3c4b

Authored by 云中非
1 parent e5f2c6e1

fix: 场景联动启用配置信息错误

... ... @@ -31,8 +31,7 @@ import java.util.stream.Collectors;
31 31 */
32 32 @Service
33 33 @RequiredArgsConstructor
34   -public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMapper, SceneLinkage>
35   - implements SceneLinkageService {
  34 +public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMapper, SceneLinkage> implements SceneLinkageService {
36 35
37 36 private final SceneLinkageMapper sceneLinkageMapper;
38 37 private final DeviceMapper deviceMapper;
... ... @@ -43,7 +42,6 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
43 42 private final TriggerService triggerService;
44 43 private final DoConditionService doConditionService;
45 44 private final DoActionService doActionService;
46   - private final UserMapper userMapper;
47 45
48 46 /**
49 47 * 增加场景联动,触发器可以多个,执行条件可以多个,执行动作可以多个
... ... @@ -89,29 +87,15 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
89 87 @Override
90 88 @Transactional
91 89 public void deleteSceneLinkage(Set<String> ids, String tenantId, String currentUserId) {
92   - LambdaQueryWrapper<SceneLinkage> Wrapper =
93   - new QueryWrapper<SceneLinkage>()
94   - .lambda()
95   - .eq(SceneLinkage::getTenantId, tenantId)
96   - .eq(SceneLinkage::getCreator, currentUserId)
97   - .in(SceneLinkage::getId, ids);
  90 + LambdaQueryWrapper<SceneLinkage> Wrapper = new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getTenantId, tenantId).eq(SceneLinkage::getCreator, currentUserId).in(SceneLinkage::getId, ids);
98 91 int result = sceneLinkageMapper.delete(Wrapper);
99 92 if (result != ids.size()) {
100 93 throw new YtDataValidationException("存在非当前用户创建的场景联动");
101 94 }
102 95 // 删除场景,一并删除数据库触发器,执行条件,执行动作的数据
103   - triggerMapper.delete(
104   - new LambdaQueryWrapper<Trigger>()
105   - .eq(Trigger::getTenantId, tenantId)
106   - .in(Trigger::getSceneLinkageId, ids));
107   - doConditionMapper.delete(
108   - new LambdaQueryWrapper<DoCondition>()
109   - .eq(DoCondition::getTenantId, tenantId)
110   - .in(DoCondition::getSceneLinkageId, ids));
111   - doActionMapper.delete(
112   - new LambdaQueryWrapper<DoAction>()
113   - .eq(DoAction::getTenantId, tenantId)
114   - .in(DoAction::getSceneLinkageId, ids));
  96 + triggerMapper.delete(new LambdaQueryWrapper<Trigger>().eq(Trigger::getTenantId, tenantId).in(Trigger::getSceneLinkageId, ids));
  97 + doConditionMapper.delete(new LambdaQueryWrapper<DoCondition>().eq(DoCondition::getTenantId, tenantId).in(DoCondition::getSceneLinkageId, ids));
  98 + doActionMapper.delete(new LambdaQueryWrapper<DoAction>().eq(DoAction::getTenantId, tenantId).in(DoAction::getSceneLinkageId, ids));
115 99 }
116 100
117 101 /**
... ... @@ -180,22 +164,16 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
180 164 }
181 165
182 166 // 先删除触发器
183   - triggerMapper.delete(
184   - new QueryWrapper<Trigger>()
185   - .lambda()
186   - .eq(StringUtils.isNoneBlank(sceneLinkage.getId()), Trigger::getSceneLinkageId, sceneLinkage.getId()));
  167 + triggerMapper.delete(new QueryWrapper<Trigger>().lambda().eq(StringUtils.isNoneBlank(sceneLinkage.getId()), Trigger::getSceneLinkageId, sceneLinkage.getId()));
187 168
188 169
189 170 // 如果获取的触发器不为空,进行添加操作
190   - if(triggerDTOS != null && !triggerDTOS.isEmpty()){
191   - List<Trigger> triggers =
192   - triggerDTOS.stream()
193   - .map(triggerDTO -> {
194   - triggerDTO.setTenantId(sceneLinkage.getTenantId());
195   - triggerDTO.setSceneLinkageId(sceneLinkage.getId());
196   - return triggerDTO.getEntity(Trigger.class);
197   - })
198   - .collect(Collectors.toList());
  171 + if (triggerDTOS != null && !triggerDTOS.isEmpty()) {
  172 + List<Trigger> triggers = triggerDTOS.stream().map(triggerDTO -> {
  173 + triggerDTO.setTenantId(sceneLinkage.getTenantId());
  174 + triggerDTO.setSceneLinkageId(sceneLinkage.getId());
  175 + return triggerDTO.getEntity(Trigger.class);
  176 + }).collect(Collectors.toList());
199 177 triggerService.insertBatch(triggers, 1000);
200 178 }
201 179 }
... ... @@ -228,26 +206,20 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
228 206 }
229 207 }
230 208
231   - doActionMapper.delete(
232   - new QueryWrapper<DoAction>()
233   - .lambda()
234   - .eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoAction::getSceneLinkageId, sceneLinkageDTO.getId()));
  209 + doActionMapper.delete(new QueryWrapper<DoAction>().lambda().eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoAction::getSceneLinkageId, sceneLinkageDTO.getId()));
235 210
236 211 if (actionDTOS != null && !actionDTOS.isEmpty()) {
237   - List<DoAction> collectA =
238   - actionDTOS.stream()
239   - .map(doActionDTO -> {
240   - doActionDTO.setTenantId(sceneLinkageDTO.getTenantId());
241   - doActionDTO.setSceneLinkageId(sceneLinkageDTO.getId());
242   - if (ActionTypeEnum.DEVICE_OUT.equals(doActionDTO.getOutTarget())) {
243   - ObjectNode doContext = JacksonUtil.newObjectNode();
244   - doContext.put("method", "methodThingskit");
245   - doContext.put("params", doActionDTO.getDoContext());
246   - doActionDTO.setDoContext(doContext);
247   - }
248   - return doActionDTO.getEntity(DoAction.class);
249   - })
250   - .collect(Collectors.toList());
  212 + List<DoAction> collectA = actionDTOS.stream().map(doActionDTO -> {
  213 + doActionDTO.setTenantId(sceneLinkageDTO.getTenantId());
  214 + doActionDTO.setSceneLinkageId(sceneLinkageDTO.getId());
  215 + if (ActionTypeEnum.DEVICE_OUT.equals(doActionDTO.getOutTarget())) {
  216 + ObjectNode doContext = JacksonUtil.newObjectNode();
  217 + doContext.put("method", "methodThingskit");
  218 + doContext.put("params", doActionDTO.getDoContext());
  219 + doActionDTO.setDoContext(doContext);
  220 + }
  221 + return doActionDTO.getEntity(DoAction.class);
  222 + }).collect(Collectors.toList());
251 223 doActionService.insertBatch(collectA, 1000);
252 224
253 225 }
... ... @@ -283,24 +255,17 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
283 255 }
284 256 }
285 257
286   - doConditionMapper.delete(
287   - new QueryWrapper<DoCondition>()
288   - .lambda()
289   - .eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoCondition::getSceneLinkageId, sceneLinkageDTO.getId()));
  258 + doConditionMapper.delete(new QueryWrapper<DoCondition>().lambda().eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoCondition::getSceneLinkageId, sceneLinkageDTO.getId()));
290 259
291 260
292 261 // 4.批量新增执行条件
293 262 if (conditionDTOS != null && !conditionDTOS.isEmpty()) {
294   - List<DoCondition> collectC =
295   - conditionDTOS.stream()
296   - .map(doConditionDTO -> {
297   -
298   - doConditionDTO.setTenantId(sceneLinkageDTO.getTenantId());
299   - doConditionDTO.setSceneLinkageId(sceneLinkageDTO.getId());
300   - return doConditionDTO.getEntity(DoCondition.class);
301   - }
302   - )
303   - .collect(Collectors.toList());
  263 + List<DoCondition> collectC = conditionDTOS.stream().map(doConditionDTO -> {
  264 +
  265 + doConditionDTO.setTenantId(sceneLinkageDTO.getTenantId());
  266 + doConditionDTO.setSceneLinkageId(sceneLinkageDTO.getId());
  267 + return doConditionDTO.getEntity(DoCondition.class);
  268 + }).collect(Collectors.toList());
304 269 doConditionService.insertBatch(collectC, 1000);
305 270
306 271 }
... ... @@ -334,14 +299,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
334 299 */
335 300 @Override
336 301 public List<SceneLinkageDTO> findSceneLinkage(SceneLinkageDTO sceneLinkageDTO, String tenantId) {
337   - List<SceneLinkage> scenelinkageList =
338   - baseMapper.selectList(
339   - new QueryWrapper<SceneLinkage>()
340   - .lambda()
341   - .eq(SceneLinkage::getTenantId, tenantId)
342   - .like(SceneLinkage::getName, sceneLinkageDTO.getName())
343   - .like(SceneLinkage::getOrganizationId, sceneLinkageDTO.getOrganizationId())
344   - .like(SceneLinkage::getStatus, sceneLinkageDTO.getStatus()));
  302 + List<SceneLinkage> scenelinkageList = baseMapper.selectList(new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getTenantId, tenantId).like(SceneLinkage::getName, sceneLinkageDTO.getName()).like(SceneLinkage::getOrganizationId, sceneLinkageDTO.getOrganizationId()).like(SceneLinkage::getStatus, sceneLinkageDTO.getStatus()));
345 303 return ReflectUtils.sourceToTarget(scenelinkageList, SceneLinkageDTO.class);
346 304 }
347 305
... ... @@ -354,17 +312,10 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
354 312 @Override
355 313 @Transactional(rollbackFor = Exception.class)
356 314 public void updateSceneStatus(String sceneLinkageId, int status, String tenantId) {
357   - Optional.ofNullable(
358   - baseMapper.selectOne(
359   - new QueryWrapper<SceneLinkage>()
360   - .lambda()
361   - .eq(SceneLinkage::getId, sceneLinkageId)
362   - .eq(SceneLinkage::getTenantId, tenantId)))
363   - .ifPresent(
364   - sceneLinkage -> {
365   - sceneLinkage.setStatus(status);
366   - baseMapper.updateById(sceneLinkage);
367   - });
  315 + Optional.ofNullable(baseMapper.selectOne(new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getId, sceneLinkageId).eq(SceneLinkage::getTenantId, tenantId))).ifPresent(sceneLinkage -> {
  316 + sceneLinkage.setStatus(status);
  317 + baseMapper.updateById(sceneLinkage);
  318 + });
368 319 }
369 320
370 321 /**
... ... @@ -374,32 +325,23 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
374 325 * @return 设备集合
375 326 */
376 327 @Override
377   - public List<DeviceDTO> findDeviceList(
378   - String organizationId, String tenantId, String customerId) {
  328 + public List<DeviceDTO> findDeviceList(String organizationId, String tenantId, String customerId) {
379 329 List<String> organizationFilter = new ArrayList<>();
380 330 organizationFilter.add(organizationId);
381 331 // 查询该组织的所有子类
382   - List<String> orgIds =
383   - organizationMapper.findOrganizationTreeList(tenantId, organizationFilter).stream()
384   - .map(organization -> organization.getId())
385   - .collect(Collectors.toList());
  332 + List<String> orgIds = organizationMapper.findOrganizationTreeList(tenantId, organizationFilter).stream().map(organization -> organization.getId()).collect(Collectors.toList());
386 333 // 拿到当前组织ids所包含的设备集合
387 334 if (orgIds.isEmpty()) {
388 335 throw new YtDataValidationException(ErrorMessage.ORGANIZATION_NOT_EXTIED.getMessage());
389 336 }
390   - List<YtDevice> orgDevices =
391   - deviceMapper.selectList(
392   - new QueryWrapper<YtDevice>().lambda().in(YtDevice::getOrganizationId, orgIds));
  337 + List<YtDevice> orgDevices = deviceMapper.selectList(new QueryWrapper<YtDevice>().lambda().in(YtDevice::getOrganizationId, orgIds));
393 338
394 339
395 340 List<String> customerDevices = deviceMapper.findDeviceIdsByCustomerId(customerId);
396 341 if (customerDevices == null || customerDevices.isEmpty()) {
397 342 return null;
398 343 }
399   - List<DeviceDTO> result = orgDevices.stream()
400   - .filter(f -> customerDevices.contains(f.getTbDeviceId()))
401   - .map(device -> device.getDTO(DeviceDTO.class))
402   - .collect(Collectors.toList());
  344 + List<DeviceDTO> result = orgDevices.stream().filter(f -> customerDevices.contains(f.getTbDeviceId())).map(device -> device.getDTO(DeviceDTO.class)).collect(Collectors.toList());
403 345
404 346
405 347 return result;
... ... @@ -416,29 +358,26 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
416 358 */
417 359 @Override
418 360 public JsonNode getRuleNodeConfig(String currentSceneId, String tenantId, String customerId, Integer state) {
419   - String ruleTyp = "org.thingsboard.rule.engine.filter.TbSceneReactNode";
420   - List<SceneLinkage> runningScenes = baseMapper.selectList(
421   - new QueryWrapper<SceneLinkage>()
422   - .lambda()
423   - .eq(SceneLinkage::getTenantId, tenantId)
424   - .eq(SceneLinkage::getStatus, FastIotConstants.StateValue.ENABLE)
425   - );
  361 + List<SceneLinkage> runningScenes = baseMapper.selectList(new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getTenantId, tenantId).eq(SceneLinkage::getStatus, FastIotConstants.StateValue.ENABLE));
426 362 Set<String> enableIds = new HashSet<>();
427 363 Map<String, String> sceneInform = new HashMap<>();
428 364 for (SceneLinkage item : runningScenes) {
429 365 enableIds.add(item.getId());
430   - sceneInform.put(item.getId(),item.getName());
  366 + sceneInform.put(item.getId(), item.getName());
431 367 }
432   - enableIds.add(currentSceneId);
  368 + SceneLinkage self = baseMapper.selectById(currentSceneId);
433 369 if (state == FastIotConstants.StateValue.DISABLE) {
434 370 enableIds.remove(currentSceneId);
  371 + sceneInform.remove(currentSceneId);
  372 + } else {
  373 + enableIds.add(currentSceneId);
  374 + sceneInform.put(currentSceneId, self.getName());
435 375 }
436 376
437 377 if (enableIds.size() <= 0) {
438 378 return null;
439 379 }
440 380
441   - SceneLinkage self = baseMapper.selectById(currentSceneId);
442 381 List<DeviceDTO> organizationDevices = findDeviceList(self.getOrganizationId(), tenantId, customerId);
443 382 List<String> allDevices = new ArrayList<>();
444 383 for (DeviceDTO item : organizationDevices) {
... ... @@ -448,40 +387,34 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
448 387
449 388 Map<String, List<String>> matchedDevices = new HashMap<>();
450 389
451   - List<Trigger> triggers = triggerMapper.selectList(
452   - new QueryWrapper<Trigger>()
453   - .lambda()
454   - .eq(Trigger::getTenantId, tenantId)
455   - .eq(Trigger::getTriggerType, TriggerTypeEnum.DEVICE_TRIGGER)
456   - .in(Trigger::getSceneLinkageId, enableIds)
457   - );
  390 + List<Trigger> triggers = triggerMapper.selectList(new QueryWrapper<Trigger>().lambda().eq(Trigger::getTenantId, tenantId).eq(Trigger::getTriggerType, TriggerTypeEnum.DEVICE_TRIGGER).in(Trigger::getSceneLinkageId, enableIds));
458 391
459 392
460   - triggers.forEach(trigger ->{
  393 + triggers.forEach(trigger -> {
461 394 String scenId = trigger.getSceneLinkageId();
462 395 List<String> devices = trigger.getEntityId();
463   - if(ScopeEnum.ALL.equals(trigger)){
  396 + if (ScopeEnum.ALL.equals(trigger.getEntityType()) && currentSceneId.equals(scenId)) {
464 397 trigger.setEntityId(allDevices);
465 398 triggerMapper.updateById(trigger);
466 399 devices = allDevices;
467 400 }
468   - deviceSceneMap(matchedDevices,devices , scenId);
  401 + deviceSceneMap(matchedDevices, devices, scenId);
469 402 });
470 403
471   - List<DoCondition> conditions = doConditionMapper.selectList(new QueryWrapper<DoCondition>().lambda()
472   - .eq(DoCondition::getSceneLinkageId, currentSceneId)
473   - .eq(DoCondition::getEntityType,ScopeEnum.ALL));
  404 + List<DoCondition> conditions = doConditionMapper.selectList(new QueryWrapper<DoCondition>().lambda().eq(DoCondition::getSceneLinkageId, currentSceneId).eq(DoCondition::getEntityType, ScopeEnum.ALL));
474 405 conditions.forEach(item -> {
475   - item.setEntityId(allDevices);
476   - doConditionMapper.updateById(item);
  406 + if (currentSceneId.equals(item.getSceneLinkageId())) {
  407 + item.setEntityId(allDevices);
  408 + doConditionMapper.updateById(item);
  409 + }
477 410 });
478 411
479   - List<DoAction> actions = doActionMapper.selectList(new QueryWrapper<DoAction>().lambda()
480   - .eq(DoAction::getSceneLinkageId, currentSceneId)
481   - .eq(DoAction::getEntityType,ScopeEnum.ALL));
  412 + List<DoAction> actions = doActionMapper.selectList(new QueryWrapper<DoAction>().lambda().eq(DoAction::getSceneLinkageId, currentSceneId).eq(DoAction::getEntityType, ScopeEnum.ALL));
482 413 actions.forEach(item -> {
483   - item.setDeviceId(allDevices);
484   - doActionMapper.updateById(item);
  414 + if (currentSceneId.equals(item.getSceneLinkageId())) {
  415 + item.setDeviceId(allDevices);
  416 + doActionMapper.updateById(item);
  417 + }
485 418 });
486 419
487 420 if (matchedDevices.isEmpty()) {
... ... @@ -493,8 +426,6 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
493 426 engineConfig.put("names", sceneInform);
494 427
495 428
496   -
497   -
498 429 return JacksonUtil.convertValue(engineConfig, JsonNode.class);
499 430 }
500 431
... ... @@ -521,8 +452,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap
521 452
522 453 private List<String> getQueryOrganizationIds(String tenantId, List<String> organizationIds) {
523 454 // 查询该组织的所有子类
524   - List<OrganizationDTO> organizationDTOS =
525   - organizationMapper.findOrganizationTreeList(tenantId, organizationIds);
  455 + List<OrganizationDTO> organizationDTOS = organizationMapper.findOrganizationTreeList(tenantId, organizationIds);
526 456 // 遍历组织id
527 457 List<String> queryOrganizationIds = new ArrayList<>();
528 458 organizationDTOS.forEach(item -> queryOrganizationIds.add(item.getId()));
... ...