...
|
...
|
@@ -440,8 +440,7 @@ public class TkSceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageM |
440
|
440
|
String currentSceneId, String tenantId, String customerId, Integer state) {
|
441
|
441
|
List<TkSceneLinkageEntity> runningScenes =
|
442
|
442
|
baseMapper.selectList(
|
443
|
|
- new QueryWrapper<TkSceneLinkageEntity>()
|
444
|
|
- .lambda()
|
|
443
|
+ new LambdaQueryWrapper<TkSceneLinkageEntity>()
|
445
|
444
|
.eq(TkSceneLinkageEntity::getTenantId, tenantId)
|
446
|
445
|
.eq(TkSceneLinkageEntity::getStatus, FastIotConstants.StateValue.ENABLE));
|
447
|
446
|
Set<String> enableIds = new HashSet<>();
|
...
|
...
|
@@ -468,17 +467,7 @@ public class TkSceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageM |
468
|
467
|
|
469
|
468
|
List<DeviceDTO> organizationDevices =
|
470
|
469
|
findDeviceList(self.getOrganizationId(), tenantId, customerId,new ArrayList<>());
|
471
|
|
- List<String> allDevices = new ArrayList<>();
|
472
|
|
- List<String> rpcDevices = new ArrayList<>();
|
473
|
|
- if(organizationDevices != null && !organizationDevices.isEmpty()){
|
474
|
|
- for (DeviceDTO item : organizationDevices) {
|
475
|
|
- allDevices.add(item.getTbDeviceId());
|
476
|
|
- DeviceTypeEnum deviceType = item.getDeviceType();
|
477
|
|
- if(!DeviceTypeEnum.SENSOR.equals(deviceType)){
|
478
|
|
- rpcDevices.add(item.getTbDeviceId());
|
479
|
|
- }
|
480
|
|
- }
|
481
|
|
- }
|
|
470
|
+
|
482
|
471
|
|
483
|
472
|
Map<String, List<String>> matchedDevices = new HashMap<>();
|
484
|
473
|
|
...
|
...
|
@@ -495,6 +484,7 @@ public class TkSceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageM |
495
|
484
|
String scenId = trigger.getSceneLinkageId();
|
496
|
485
|
List<String> devices = trigger.getEntityId();
|
497
|
486
|
if(currentSceneId.equals(scenId)){
|
|
487
|
+ List<String> allDevices = filterDevice(organizationDevices,trigger.getDeviceProfileId(),false);
|
498
|
488
|
if (ScopeEnum.ALL.equals(trigger.getEntityType()) ) {
|
499
|
489
|
devices = allDevices;
|
500
|
490
|
}else{
|
...
|
...
|
@@ -516,7 +506,7 @@ public class TkSceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageM |
516
|
506
|
Executors.newScheduledThreadPool(1)
|
517
|
507
|
.schedule(
|
518
|
508
|
() -> {
|
519
|
|
- freshEntityIds(currentSceneId, allDevices,rpcDevices, triggers);
|
|
509
|
+ freshEntityIds(currentSceneId, organizationDevices, triggers);
|
520
|
510
|
},
|
521
|
511
|
1,
|
522
|
512
|
TimeUnit.SECONDS);
|
...
|
...
|
@@ -528,51 +518,65 @@ public class TkSceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageM |
528
|
518
|
return JacksonUtil.convertValue(engineConfig, JsonNode.class);
|
529
|
519
|
}
|
530
|
520
|
|
|
521
|
+ private List<String> filterDevice(List<DeviceDTO> organizationDevices,String profileId,boolean rpc){
|
|
522
|
+ List<String> allDevices = new ArrayList<>();
|
|
523
|
+ if(organizationDevices != null && !organizationDevices.isEmpty()){
|
|
524
|
+ for (DeviceDTO item : organizationDevices) {
|
|
525
|
+ if(!item.getDeviceProfileId().equals(profileId)){
|
|
526
|
+ continue;
|
|
527
|
+ }
|
|
528
|
+ DeviceTypeEnum deviceType = item.getDeviceType();
|
|
529
|
+ if(rpc && DeviceTypeEnum.SENSOR.equals(deviceType)){
|
|
530
|
+ allDevices.add(item.getGatewayId());
|
|
531
|
+ continue;
|
|
532
|
+ }
|
|
533
|
+ allDevices.add(item.getTbDeviceId());
|
|
534
|
+ }
|
|
535
|
+ }
|
|
536
|
+ return allDevices;
|
|
537
|
+ }
|
|
538
|
+
|
531
|
539
|
/**
|
532
|
540
|
* 异步刷新场景联动的设备ID
|
533
|
541
|
*
|
534
|
542
|
* @param sceneId
|
535
|
|
- * @param allDevices
|
|
543
|
+ * @param organizationDevices
|
536
|
544
|
* @param triggers
|
537
|
545
|
*/
|
538
|
|
- public void freshEntityIds(String sceneId, List<String> allDevices,List<String> rpcDevices, List<TkTriggerEntity> triggers) {
|
|
546
|
+ public void freshEntityIds(String sceneId, List<DeviceDTO> organizationDevices,List<TkTriggerEntity> triggers) {
|
539
|
547
|
triggers.forEach(
|
540
|
548
|
trigger -> {
|
541
|
549
|
if (ScopeEnum.ALL.equals(trigger.getEntityType())
|
542
|
550
|
&& sceneId.equals(trigger.getSceneLinkageId())) {
|
543
|
|
- trigger.setEntityId(allDevices);
|
|
551
|
+ List<String> ids = filterDevice(organizationDevices,trigger.getDeviceProfileId(),false);
|
|
552
|
+ trigger.setEntityId(ids);
|
544
|
553
|
triggerMapper.updateById(trigger);
|
545
|
554
|
}
|
546
|
555
|
});
|
547
|
556
|
|
548
|
557
|
List<TkDoConditionEntity> conditions =
|
549
|
558
|
doConditionMapper.selectList(
|
550
|
|
- new QueryWrapper<TkDoConditionEntity>()
|
551
|
|
- .lambda()
|
|
559
|
+ new LambdaQueryWrapper<TkDoConditionEntity>()
|
552
|
560
|
.eq(TkDoConditionEntity::getSceneLinkageId, sceneId)
|
553
|
561
|
.eq(TkDoConditionEntity::getEntityType, ScopeEnum.ALL));
|
554
|
562
|
conditions.forEach(
|
555
|
563
|
item -> {
|
556
|
564
|
if (sceneId.equals(item.getSceneLinkageId())) {
|
557
|
|
- item.setEntityId(allDevices);
|
|
565
|
+ List<String> ids = filterDevice(organizationDevices,item.getDeviceProfileId(),false);
|
|
566
|
+ item.setEntityId(ids);
|
558
|
567
|
doConditionMapper.updateById(item);
|
559
|
568
|
}
|
560
|
569
|
});
|
561
|
570
|
|
562
|
571
|
List<TkDoActionEntity> actions =
|
563
|
572
|
doActionMapper.selectList(
|
564
|
|
- new QueryWrapper<TkDoActionEntity>()
|
565
|
|
- .lambda()
|
566
|
|
- .eq(TkDoActionEntity::getSceneLinkageId, sceneId)
|
567
|
|
- .eq(TkDoActionEntity::getEntityType, ScopeEnum.ALL));
|
|
573
|
+ new LambdaQueryWrapper<TkDoActionEntity>()
|
|
574
|
+ .eq(TkDoActionEntity::getSceneLinkageId, sceneId));
|
568
|
575
|
actions.forEach(
|
569
|
576
|
item -> {
|
570
|
577
|
if (sceneId.equals(item.getSceneLinkageId())) {
|
571
|
|
- if(ActionTypeEnum.DEVICE_OUT.equals(item.getOutTarget())){
|
572
|
|
- item.setDeviceId(rpcDevices);
|
573
|
|
- }else{
|
574
|
|
- item.setDeviceId(allDevices);
|
575
|
|
- }
|
|
578
|
+ List<String> ids = filterDevice(organizationDevices,item.getDeviceProfileId(),ActionTypeEnum.DEVICE_OUT.equals(item.getOutTarget())?true:false);
|
|
579
|
+ item.setDeviceId(ids);
|
576
|
580
|
|
577
|
581
|
doActionMapper.updateById(item);
|
578
|
582
|
}
|
...
|
...
|
|