Commit 9e675fcc970dc6d333f94df8c3b80ced7911d1ee
1 parent
c276e67d
refactor: 场景联动逻辑调整
1、触发器内部逻辑为或 2、执行条件的逻辑为且 3、触发器和执行条件的逻辑为且
Showing
26 changed files
with
142 additions
and
86 deletions
@@ -17,8 +17,8 @@ import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; | @@ -17,8 +17,8 @@ import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; | ||
17 | import org.thingsboard.server.common.data.yunteng.common.UpdateGroup; | 17 | import org.thingsboard.server.common.data.yunteng.common.UpdateGroup; |
18 | import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; | 18 | import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; |
19 | import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; | 19 | import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; |
20 | -import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; | ||
21 | -import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | 20 | +import org.thingsboard.server.common.data.yunteng.dto.scene.SceneLinkageDTO; |
21 | +import org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO; | ||
22 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 22 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
23 | import org.thingsboard.server.common.data.yunteng.id.SceneId; | 23 | import org.thingsboard.server.common.data.yunteng.id.SceneId; |
24 | import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; | 24 | import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; |
@@ -3,6 +3,7 @@ package org.thingsboard.server.common.data.yunteng.dto; | @@ -3,6 +3,7 @@ package org.thingsboard.server.common.data.yunteng.dto; | ||
3 | import io.swagger.annotations.ApiModelProperty; | 3 | import io.swagger.annotations.ApiModelProperty; |
4 | import lombok.Data; | 4 | import lombok.Data; |
5 | import org.thingsboard.server.common.data.alarm.AlarmSeverity; | 5 | import org.thingsboard.server.common.data.alarm.AlarmSeverity; |
6 | +import org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO; | ||
6 | 7 | ||
7 | import java.util.List; | 8 | import java.util.List; |
8 | 9 |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/scene/DoActionDTO.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/DoActionDTO.java
1 | -package org.thingsboard.server.common.data.yunteng.dto; | 1 | +package org.thingsboard.server.common.data.yunteng.dto.scene; |
2 | 2 | ||
3 | import com.fasterxml.jackson.databind.JsonNode; | 3 | import com.fasterxml.jackson.databind.JsonNode; |
4 | import io.swagger.annotations.ApiModelProperty; | 4 | import io.swagger.annotations.ApiModelProperty; |
5 | import lombok.Data; | 5 | import lombok.Data; |
6 | import lombok.EqualsAndHashCode; | 6 | import lombok.EqualsAndHashCode; |
7 | +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; | ||
7 | import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum; | 8 | import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum; |
8 | import org.thingsboard.server.common.data.yunteng.enums.CallTypeEnum; | 9 | import org.thingsboard.server.common.data.yunteng.enums.CallTypeEnum; |
9 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 10 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/scene/DoConditionDTO.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/DoConditionDTO.java
1 | -package org.thingsboard.server.common.data.yunteng.dto; | 1 | +package org.thingsboard.server.common.data.yunteng.dto.scene; |
2 | 2 | ||
3 | import io.swagger.annotations.ApiModelProperty; | 3 | import io.swagger.annotations.ApiModelProperty; |
4 | +import java.util.List; | ||
4 | import lombok.Data; | 5 | import lombok.Data; |
5 | import lombok.EqualsAndHashCode; | 6 | import lombok.EqualsAndHashCode; |
6 | -import org.thingsboard.server.common.data.device.profile.AlarmCondition; | ||
7 | import org.thingsboard.server.common.data.device.profile.AlarmRule; | 7 | import org.thingsboard.server.common.data.device.profile.AlarmRule; |
8 | +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; | ||
8 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 9 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
9 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; | 10 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; |
10 | import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum; | 11 | import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum; |
11 | 12 | ||
12 | -import java.util.List; | ||
13 | - | ||
14 | /** | 13 | /** |
15 | * @Description 场景联动执行条件数据传输表 @Author cxy @Date 2021/11/24 17:33 | 14 | * @Description 场景联动执行条件数据传输表 @Author cxy @Date 2021/11/24 17:33 |
16 | */ | 15 | */ |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/scene/RuleFilterDTO.java
0 → 100644
1 | +package org.thingsboard.server.common.data.yunteng.dto.scene; | ||
2 | + | ||
3 | +import com.fasterxml.jackson.databind.JsonNode; | ||
4 | +import io.swagger.annotations.ApiModelProperty; | ||
5 | + | ||
6 | +import java.io.Serializable; | ||
7 | +import java.util.List; | ||
8 | +import lombok.Data; | ||
9 | +import lombok.EqualsAndHashCode; | ||
10 | +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; | ||
11 | +import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum; | ||
12 | +import org.thingsboard.server.common.data.yunteng.enums.CallTypeEnum; | ||
13 | +import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | ||
14 | +import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; | ||
15 | + | ||
16 | +/** | ||
17 | + * @Description 场景联动执行动作数据传输表 @Author cxy @Date 2021/11/24 17:32 | ||
18 | + */ | ||
19 | +@Data | ||
20 | +public class RuleFilterDTO implements Serializable { | ||
21 | + | ||
22 | + @ApiModelProperty(value = "触发条件ID") | ||
23 | + private String ruleId; | ||
24 | + | ||
25 | + @ApiModelProperty(value = "场景联动ID") | ||
26 | + private String scenId; | ||
27 | + | ||
28 | +} |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/scene/SceneLinkageDTO.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/SceneLinkageDTO.java
1 | -package org.thingsboard.server.common.data.yunteng.dto; | 1 | +package org.thingsboard.server.common.data.yunteng.dto.scene; |
2 | 2 | ||
3 | import io.swagger.annotations.ApiModelProperty; | 3 | import io.swagger.annotations.ApiModelProperty; |
4 | import lombok.Data; | 4 | import lombok.Data; |
5 | import lombok.EqualsAndHashCode; | 5 | import lombok.EqualsAndHashCode; |
6 | import org.thingsboard.server.common.data.HasName; | 6 | import org.thingsboard.server.common.data.HasName; |
7 | import org.thingsboard.server.common.data.yunteng.common.AddGroup; | 7 | import org.thingsboard.server.common.data.yunteng.common.AddGroup; |
8 | +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; | ||
8 | 9 | ||
9 | import javax.validation.constraints.NotEmpty; | 10 | import javax.validation.constraints.NotEmpty; |
10 | import java.util.List; | 11 | import java.util.List; |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/scene/TriggerDTO.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TriggerDTO.java
1 | -package org.thingsboard.server.common.data.yunteng.dto; | 1 | +package org.thingsboard.server.common.data.yunteng.dto.scene; |
2 | 2 | ||
3 | import io.swagger.annotations.ApiModelProperty; | 3 | import io.swagger.annotations.ApiModelProperty; |
4 | import lombok.Data; | 4 | import lombok.Data; |
5 | import lombok.EqualsAndHashCode; | 5 | import lombok.EqualsAndHashCode; |
6 | import org.thingsboard.server.common.data.device.profile.AlarmRule; | 6 | import org.thingsboard.server.common.data.device.profile.AlarmRule; |
7 | +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; | ||
7 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 8 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
8 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; | 9 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; |
9 | import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum; | 10 | import org.thingsboard.server.common.data.yunteng.enums.TriggerTypeEnum; |
@@ -13,6 +13,7 @@ import org.thingsboard.server.common.data.yunteng.core.exception.NoneTenantAsset | @@ -13,6 +13,7 @@ import org.thingsboard.server.common.data.yunteng.core.exception.NoneTenantAsset | ||
13 | import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; | 13 | import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; |
14 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; | 14 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
15 | import org.thingsboard.server.common.data.yunteng.dto.*; | 15 | import org.thingsboard.server.common.data.yunteng.dto.*; |
16 | +import org.thingsboard.server.common.data.yunteng.dto.scene.DoActionDTO; | ||
16 | import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; | 17 | import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; |
17 | import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; | 18 | import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; |
18 | import org.thingsboard.server.dao.yunteng.entities.TkAlarmProfileEntity; | 19 | import org.thingsboard.server.dao.yunteng.entities.TkAlarmProfileEntity; |
@@ -7,7 +7,7 @@ import java.util.Set; | @@ -7,7 +7,7 @@ import java.util.Set; | ||
7 | import java.util.stream.Collectors; | 7 | import java.util.stream.Collectors; |
8 | import lombok.RequiredArgsConstructor; | 8 | import lombok.RequiredArgsConstructor; |
9 | import org.springframework.stereotype.Service; | 9 | import org.springframework.stereotype.Service; |
10 | -import org.thingsboard.server.common.data.yunteng.dto.DoActionDTO; | 10 | +import org.thingsboard.server.common.data.yunteng.dto.scene.DoActionDTO; |
11 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; | 11 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; |
12 | import org.thingsboard.server.dao.yunteng.entities.TenantBaseEntity; | 12 | import org.thingsboard.server.dao.yunteng.entities.TenantBaseEntity; |
13 | import org.thingsboard.server.dao.yunteng.entities.TkDeviceEntity; | 13 | import org.thingsboard.server.dao.yunteng.entities.TkDeviceEntity; |
@@ -18,6 +18,7 @@ import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | @@ -18,6 +18,7 @@ import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; | ||
18 | import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; | 18 | import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; |
19 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; | 19 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
20 | import org.thingsboard.server.common.data.yunteng.dto.*; | 20 | import org.thingsboard.server.common.data.yunteng.dto.*; |
21 | +import org.thingsboard.server.common.data.yunteng.dto.scene.*; | ||
21 | import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum; | 22 | import org.thingsboard.server.common.data.yunteng.enums.ActionTypeEnum; |
22 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 23 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
23 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; | 24 | import org.thingsboard.server.common.data.yunteng.enums.ScopeEnum; |
@@ -495,9 +496,10 @@ public class TkSceneLinkageServiceImpl | @@ -495,9 +496,10 @@ public class TkSceneLinkageServiceImpl | ||
495 | return null; | 496 | return null; |
496 | } | 497 | } |
497 | 498 | ||
498 | - Map<String, List<String>> matchedDevices = new HashMap<>(); | ||
499 | - Map<String, List<String>> matchedProjectes = new HashMap<>(); | 499 | + Map<String, List<RuleFilterDTO>> matchedDevices = new HashMap<>(); |
500 | + Map<String, List<RuleFilterDTO>> matchedProjectes = new HashMap<>(); | ||
500 | 501 | ||
502 | + Set<String> projectFilter = new HashSet<>(); | ||
501 | List<TkTriggerEntity> triggers = | 503 | List<TkTriggerEntity> triggers = |
502 | triggerMapper.selectList( | 504 | triggerMapper.selectList( |
503 | new QueryWrapper<TkTriggerEntity>() | 505 | new QueryWrapper<TkTriggerEntity>() |
@@ -507,9 +509,11 @@ public class TkSceneLinkageServiceImpl | @@ -507,9 +509,11 @@ public class TkSceneLinkageServiceImpl | ||
507 | .in(TkTriggerEntity::getSceneLinkageId, enableIds)); | 509 | .in(TkTriggerEntity::getSceneLinkageId, enableIds)); |
508 | triggers.forEach( | 510 | triggers.forEach( |
509 | trigger -> { | 511 | trigger -> { |
512 | + projectFilter.add(trigger.getDeviceProfileId()); | ||
510 | deviceSceneMap( | 513 | deviceSceneMap( |
511 | matchedProjectes, | 514 | matchedProjectes, |
512 | matchedDevices, | 515 | matchedDevices, |
516 | + trigger.getId(), | ||
513 | trigger.getSceneLinkageId(), | 517 | trigger.getSceneLinkageId(), |
514 | trigger.getEntityType(), | 518 | trigger.getEntityType(), |
515 | trigger.getDeviceProfileId(), | 519 | trigger.getDeviceProfileId(), |
@@ -525,9 +529,11 @@ public class TkSceneLinkageServiceImpl | @@ -525,9 +529,11 @@ public class TkSceneLinkageServiceImpl | ||
525 | .in(TkDoConditionEntity::getSceneLinkageId, enableIds)); | 529 | .in(TkDoConditionEntity::getSceneLinkageId, enableIds)); |
526 | conditions.forEach( | 530 | conditions.forEach( |
527 | condition -> { | 531 | condition -> { |
532 | + projectFilter.add(condition.getDeviceProfileId()); | ||
528 | deviceSceneMap( | 533 | deviceSceneMap( |
529 | matchedProjectes, | 534 | matchedProjectes, |
530 | matchedDevices, | 535 | matchedDevices, |
536 | + condition.getId(), | ||
531 | condition.getSceneLinkageId(), | 537 | condition.getSceneLinkageId(), |
532 | condition.getEntityType(), | 538 | condition.getEntityType(), |
533 | condition.getDeviceProfileId(), | 539 | condition.getDeviceProfileId(), |
@@ -538,10 +544,12 @@ public class TkSceneLinkageServiceImpl | @@ -538,10 +544,12 @@ public class TkSceneLinkageServiceImpl | ||
538 | return null; | 544 | return null; |
539 | } | 545 | } |
540 | 546 | ||
547 | + | ||
548 | + | ||
541 | List<TkDeviceProfileEntity> profiles = | 549 | List<TkDeviceProfileEntity> profiles = |
542 | profileMapper.selectList( | 550 | profileMapper.selectList( |
543 | new LambdaQueryWrapper<TkDeviceProfileEntity>() | 551 | new LambdaQueryWrapper<TkDeviceProfileEntity>() |
544 | - .eq(TkDeviceProfileEntity::getTenantId, tenantId)); | 552 | + .eq(TkDeviceProfileEntity::getTenantId, tenantId).in(TkDeviceProfileEntity::getId, projectFilter)); |
545 | Map<String, String> projects = new HashMap<>(); | 553 | Map<String, String> projects = new HashMap<>(); |
546 | profiles.forEach(f -> projects.put(f.getTbProfileId(), f.getId())); | 554 | profiles.forEach(f -> projects.put(f.getTbProfileId(), f.getId())); |
547 | 555 | ||
@@ -556,8 +564,8 @@ public class TkSceneLinkageServiceImpl | @@ -556,8 +564,8 @@ public class TkSceneLinkageServiceImpl | ||
556 | } | 564 | } |
557 | 565 | ||
558 | private void deviceSceneMap( | 566 | private void deviceSceneMap( |
559 | - Map<String, List<String>> matchedProjectes, | ||
560 | - Map<String, List<String>> matchedDevices, | 567 | + Map<String, List<RuleFilterDTO>> matchedProjectes, |
568 | + Map<String, List<RuleFilterDTO>> matchedDevices,String ruleId, | ||
561 | String scenId, | 569 | String scenId, |
562 | ScopeEnum scope, | 570 | ScopeEnum scope, |
563 | String profileId, | 571 | String profileId, |
@@ -565,9 +573,9 @@ public class TkSceneLinkageServiceImpl | @@ -565,9 +573,9 @@ public class TkSceneLinkageServiceImpl | ||
565 | if (ScopeEnum.ALL.equals(scope)) { | 573 | if (ScopeEnum.ALL.equals(scope)) { |
566 | List<String> profileIds = new ArrayList<>(); | 574 | List<String> profileIds = new ArrayList<>(); |
567 | profileIds.add(profileId); | 575 | profileIds.add(profileId); |
568 | - deviceSceneMap(matchedProjectes, profileIds, scenId); | 576 | + deviceSceneMap(matchedProjectes, profileIds,ruleId, scenId); |
569 | } else { | 577 | } else { |
570 | - deviceSceneMap(matchedDevices, deviceIds, scenId); | 578 | + deviceSceneMap(matchedDevices, deviceIds,ruleId, scenId); |
571 | } | 579 | } |
572 | } | 580 | } |
573 | 581 | ||
@@ -575,15 +583,18 @@ public class TkSceneLinkageServiceImpl | @@ -575,15 +583,18 @@ public class TkSceneLinkageServiceImpl | ||
575 | * 设备与场景联动的映射集合 | 583 | * 设备与场景联动的映射集合 |
576 | * | 584 | * |
577 | * @param resultMap 缓存设备和场景联动映射结果的集合 | 585 | * @param resultMap 缓存设备和场景联动映射结果的集合 |
578 | - * @param triggerIds 设备或产品主键集合 | 586 | + * @param postfixIds 设备或产品主键集合 |
579 | * @param scenId 场景联动主键 | 587 | * @param scenId 场景联动主键 |
580 | */ | 588 | */ |
581 | private void deviceSceneMap( | 589 | private void deviceSceneMap( |
582 | - Map<String, List<String>> resultMap, List<String> triggerIds, String scenId) { | ||
583 | - for (String deviceId : triggerIds) { | ||
584 | - List<String> scenes = resultMap.computeIfAbsent(deviceId, k -> new ArrayList<String>()); | ||
585 | - if (!scenes.contains(scenId)) { | ||
586 | - scenes.add(scenId); | 590 | + Map<String, List<RuleFilterDTO>> resultMap, List<String> postfixIds, String prefixId, String scenId) { |
591 | + for (String deviceId : postfixIds) { | ||
592 | + List<RuleFilterDTO> scenes = resultMap.computeIfAbsent(deviceId, k -> new ArrayList<RuleFilterDTO>()); | ||
593 | + RuleFilterDTO filter = new RuleFilterDTO(); | ||
594 | + filter.setRuleId(prefixId); | ||
595 | + filter.setScenId(scenId); | ||
596 | + if (!scenes.contains(filter)) { | ||
597 | + scenes.add(filter); | ||
587 | } | 598 | } |
588 | resultMap.put(deviceId, scenes); | 599 | resultMap.put(deviceId, scenes); |
589 | } | 600 | } |
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||
4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
5 | import lombok.RequiredArgsConstructor; | 5 | import lombok.RequiredArgsConstructor; |
6 | import org.springframework.stereotype.Service; | 6 | import org.springframework.stereotype.Service; |
7 | -import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | 7 | +import org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO; |
8 | import org.thingsboard.server.dao.yunteng.entities.TkTriggerEntity; | 8 | import org.thingsboard.server.dao.yunteng.entities.TkTriggerEntity; |
9 | import org.thingsboard.server.dao.yunteng.mapper.TriggerMapper; | 9 | import org.thingsboard.server.dao.yunteng.mapper.TriggerMapper; |
10 | import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; | 10 | import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; |
@@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.mapper; | @@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.mapper; | ||
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
4 | import org.apache.ibatis.annotations.Mapper; | 4 | import org.apache.ibatis.annotations.Mapper; |
5 | import org.apache.ibatis.annotations.Param; | 5 | import org.apache.ibatis.annotations.Param; |
6 | -import org.thingsboard.server.common.data.yunteng.dto.DoActionDTO; | 6 | +import org.thingsboard.server.common.data.yunteng.dto.scene.DoActionDTO; |
7 | import org.thingsboard.server.dao.yunteng.entities.TkDoActionEntity; | 7 | import org.thingsboard.server.dao.yunteng.entities.TkDoActionEntity; |
8 | 8 | ||
9 | import java.util.List; | 9 | import java.util.List; |
@@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.mapper; | @@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.mapper; | ||
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
4 | import org.apache.ibatis.annotations.Mapper; | 4 | import org.apache.ibatis.annotations.Mapper; |
5 | import org.apache.ibatis.annotations.Param; | 5 | import org.apache.ibatis.annotations.Param; |
6 | -import org.thingsboard.server.common.data.yunteng.dto.DoConditionDTO; | 6 | +import org.thingsboard.server.common.data.yunteng.dto.scene.DoConditionDTO; |
7 | import org.thingsboard.server.dao.yunteng.entities.TkDoConditionEntity; | 7 | import org.thingsboard.server.dao.yunteng.entities.TkDoConditionEntity; |
8 | 8 | ||
9 | import java.util.List; | 9 | import java.util.List; |
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
4 | import com.baomidou.mybatisplus.core.metadata.IPage; | 4 | import com.baomidou.mybatisplus.core.metadata.IPage; |
5 | import org.apache.ibatis.annotations.Mapper; | 5 | import org.apache.ibatis.annotations.Mapper; |
6 | import org.apache.ibatis.annotations.Param; | 6 | import org.apache.ibatis.annotations.Param; |
7 | -import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; | 7 | +import org.thingsboard.server.common.data.yunteng.dto.scene.SceneLinkageDTO; |
8 | import org.thingsboard.server.dao.yunteng.entities.TkSceneLinkageEntity; | 8 | import org.thingsboard.server.dao.yunteng.entities.TkSceneLinkageEntity; |
9 | 9 | ||
10 | import java.util.Map; | 10 | import java.util.Map; |
@@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.mapper; | @@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.mapper; | ||
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
4 | import org.apache.ibatis.annotations.Mapper; | 4 | import org.apache.ibatis.annotations.Mapper; |
5 | import org.apache.ibatis.annotations.Param; | 5 | import org.apache.ibatis.annotations.Param; |
6 | -import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | 6 | +import org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO; |
7 | import org.thingsboard.server.dao.yunteng.entities.TkTriggerEntity; | 7 | import org.thingsboard.server.dao.yunteng.entities.TkTriggerEntity; |
8 | 8 | ||
9 | import java.util.List; | 9 | import java.util.List; |
1 | package org.thingsboard.server.dao.yunteng.service; | 1 | package org.thingsboard.server.dao.yunteng.service; |
2 | 2 | ||
3 | -import org.thingsboard.server.common.data.yunteng.dto.DoActionDTO; | 3 | +import org.thingsboard.server.common.data.yunteng.dto.scene.DoActionDTO; |
4 | import org.thingsboard.server.dao.yunteng.entities.TkDoActionEntity; | 4 | import org.thingsboard.server.dao.yunteng.entities.TkDoActionEntity; |
5 | 5 | ||
6 | import java.util.List; | 6 | import java.util.List; |
1 | package org.thingsboard.server.dao.yunteng.service; | 1 | package org.thingsboard.server.dao.yunteng.service; |
2 | import com.fasterxml.jackson.databind.JsonNode; | 2 | import com.fasterxml.jackson.databind.JsonNode; |
3 | import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; | 3 | import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO; |
4 | -import org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO; | 4 | +import org.thingsboard.server.common.data.yunteng.dto.scene.SceneLinkageDTO; |
5 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; | 5 | import org.thingsboard.server.common.data.yunteng.enums.DeviceTypeEnum; |
6 | import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; | 6 | import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; |
7 | import org.thingsboard.server.dao.yunteng.entities.TkSceneLinkageEntity; | 7 | import org.thingsboard.server.dao.yunteng.entities.TkSceneLinkageEntity; |
1 | package org.thingsboard.server.dao.yunteng.service; | 1 | package org.thingsboard.server.dao.yunteng.service; |
2 | 2 | ||
3 | -import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | 3 | +import org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO; |
4 | import org.thingsboard.server.dao.yunteng.entities.TkTriggerEntity; | 4 | import org.thingsboard.server.dao.yunteng.entities.TkTriggerEntity; |
5 | 5 | ||
6 | import java.util.List; | 6 | import java.util.List; |
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
3 | 3 | ||
4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.DoActionMapper"> | 4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.DoActionMapper"> |
5 | - <resultMap id="actionDTO" type="org.thingsboard.server.common.data.yunteng.dto.DoActionDTO"> | 5 | + <resultMap id="actionDTO" type="org.thingsboard.server.common.data.yunteng.dto.scene.DoActionDTO"> |
6 | <result property="id" column="id"/> | 6 | <result property="id" column="id"/> |
7 | <result property="deviceId" column="device_id" | 7 | <result property="deviceId" column="device_id" |
8 | typeHandler="org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler"/> | 8 | typeHandler="org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler"/> |
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
3 | 3 | ||
4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.DoConditionMapper"> | 4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.DoConditionMapper"> |
5 | - <resultMap id="conditionDTO" type="org.thingsboard.server.common.data.yunteng.dto.DoConditionDTO"> | 5 | + <resultMap id="conditionDTO" type="org.thingsboard.server.common.data.yunteng.dto.scene.DoConditionDTO"> |
6 | <result property="id" column="id"/> | 6 | <result property="id" column="id"/> |
7 | <result property="entityId" column="entity_id" | 7 | <result property="entityId" column="entity_id" |
8 | typeHandler="org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler"/> | 8 | typeHandler="org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler"/> |
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
3 | 3 | ||
4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.SceneLinkageMapper"> | 4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.SceneLinkageMapper"> |
5 | - <resultMap id="sceneLinkageMap" type="org.thingsboard.server.common.data.yunteng.dto.SceneLinkageDTO"> | 5 | + <resultMap id="sceneLinkageMap" type="org.thingsboard.server.common.data.yunteng.dto.scene.SceneLinkageDTO"> |
6 | <result property="id" column="id"/> | 6 | <result property="id" column="id"/> |
7 | <result property="name" column="name"/> | 7 | <result property="name" column="name"/> |
8 | <result property="organizationId" column="organization_id"/> | 8 | <result property="organizationId" column="organization_id"/> |
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
3 | 3 | ||
4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.TriggerMapper"> | 4 | <mapper namespace="org.thingsboard.server.dao.yunteng.mapper.TriggerMapper"> |
5 | - <resultMap id="triggerDTO" type="org.thingsboard.server.common.data.yunteng.dto.TriggerDTO"> | 5 | + <resultMap id="triggerDTO" type="org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO"> |
6 | <result property="id" column="id"/> | 6 | <result property="id" column="id"/> |
7 | <result property="entityId" column="entity_id" | 7 | <result property="entityId" column="entity_id" |
8 | typeHandler="org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler"/> | 8 | typeHandler="org.thingsboard.server.dao.yunteng.mapper.ListStringTypeHandler"/> |
@@ -21,7 +21,7 @@ import org.thingsboard.server.common.data.id.DeviceId; | @@ -21,7 +21,7 @@ import org.thingsboard.server.common.data.id.DeviceId; | ||
21 | import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; | 21 | import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; |
22 | import org.thingsboard.server.common.data.yunteng.dto.ActionAlarmDTO; | 22 | import org.thingsboard.server.common.data.yunteng.dto.ActionAlarmDTO; |
23 | import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO; | 23 | import org.thingsboard.server.common.data.yunteng.dto.AlarmInfoDTO; |
24 | -import org.thingsboard.server.common.data.yunteng.dto.TriggerDTO; | 24 | +import org.thingsboard.server.common.data.yunteng.dto.scene.TriggerDTO; |
25 | import org.thingsboard.server.common.data.yunteng.enums.*; | 25 | import org.thingsboard.server.common.data.yunteng.enums.*; |
26 | import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil; | 26 | import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil; |
27 | import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils; | 27 | import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils; |
@@ -93,7 +93,7 @@ class ReactState { | @@ -93,7 +93,7 @@ class ReactState { | ||
93 | * @throws ExecutionException | 93 | * @throws ExecutionException |
94 | * @throws InterruptedException | 94 | * @throws InterruptedException |
95 | */ | 95 | */ |
96 | - public void process(TbContext ctx, TbMsg msg, String deviceId) | 96 | + public void process(TbContext ctx, TbMsg msg, String prefixId,String deviceId) |
97 | throws ExecutionException, InterruptedException { | 97 | throws ExecutionException, InterruptedException { |
98 | 98 | ||
99 | StringBuilder detail = new StringBuilder(); | 99 | StringBuilder detail = new StringBuilder(); |
@@ -126,7 +126,13 @@ class ReactState { | @@ -126,7 +126,13 @@ class ReactState { | ||
126 | return false; | 126 | return false; |
127 | } | 127 | } |
128 | try { | 128 | try { |
129 | - if (triggerState.process(ctx, msg)) { | 129 | + boolean fresh = false; |
130 | + if(trigger.getId().equals(prefixId)&&msg.getOriginator().getId().toString().equals(id)){ | ||
131 | + fresh=true; | ||
132 | + } | ||
133 | + boolean result = triggerState.process(ctx, msg,fresh); | ||
134 | + log.error(String.format("触发器【%s】刷新【%s】结果【%s】触发器设备【%s】数据设备【%s】数据内容【%s】",trigger.getId(),fresh,result,id,msg.getOriginator(),msg.getData())); | ||
135 | + if (result) { | ||
130 | detail.append( | 136 | detail.append( |
131 | triggerState.getAlarmDetails() == null | 137 | triggerState.getAlarmDetails() == null |
132 | ? "" | 138 | ? "" |
@@ -150,41 +156,45 @@ class ReactState { | @@ -150,41 +156,45 @@ class ReactState { | ||
150 | }); | 156 | }); |
151 | 157 | ||
152 | /** 执行条件的所有设备都满足才为true */ | 158 | /** 执行条件的所有设备都满足才为true */ |
153 | - AtomicBoolean conditionMatched = new AtomicBoolean(false); | ||
154 | - if (triggerMatched.get()) { | ||
155 | - conditionMatched.set(true); | ||
156 | - Optional.ofNullable(conditions) | ||
157 | - .ifPresent( | ||
158 | - t -> { | ||
159 | - t.forEach( | ||
160 | - condition -> { | ||
161 | - ScopeEnum entityType = condition.getEntityType(); | ||
162 | - List<String> conditionDevices = condition.getEntityId(); | ||
163 | - String tkProjectId = condition.getDeviceProfileId(); | ||
164 | - if (ScopeEnum.ALL.equals(entityType)) { | ||
165 | - conditionDevices = | ||
166 | - ytDeviceService.findTbDeviceIdsByDeviceProfileId( | ||
167 | - tkProjectId, condition.getTenantId()); | ||
168 | - } | ||
169 | - conditionMatched.set( | ||
170 | - !conditionDevices.stream() | ||
171 | - .anyMatch( | ||
172 | - id -> { | ||
173 | - TriggerState conditionState = | ||
174 | - getOrCreateConditionState(condition, tkProjectId, id); | ||
175 | - try { | ||
176 | - return !conditionState.process(ctx, msg); | ||
177 | - } catch (ExecutionException e) { | ||
178 | - throw new RuntimeException(e); | ||
179 | - } catch (InterruptedException e) { | ||
180 | - throw new RuntimeException(e); | ||
181 | - } | ||
182 | - })); | 159 | + AtomicBoolean conditionMatched = new AtomicBoolean(true); |
160 | + Optional.ofNullable(conditions) | ||
161 | + .ifPresent( | ||
162 | + t -> { | ||
163 | + t.forEach( | ||
164 | + condition -> { | ||
165 | + ScopeEnum entityType = condition.getEntityType(); | ||
166 | + List<String> conditionDevices = condition.getEntityId(); | ||
167 | + String tkProjectId = condition.getDeviceProfileId(); | ||
168 | + if (ScopeEnum.ALL.equals(entityType)) { | ||
169 | + conditionDevices = | ||
170 | + ytDeviceService.findTbDeviceIdsByDeviceProfileId( | ||
171 | + tkProjectId, condition.getTenantId()); | ||
172 | + } | ||
173 | + conditionMatched.set( | ||
174 | + !conditionDevices.stream() | ||
175 | + .anyMatch( | ||
176 | + id -> { | ||
177 | + TriggerState conditionState = | ||
178 | + getOrCreateConditionState(condition, tkProjectId, id); | ||
179 | + try { | ||
180 | + boolean fresh = false; | ||
181 | + if(msg.getOriginator().getId().toString().equals(id)){ | ||
182 | + fresh=true; | ||
183 | + } | ||
184 | + boolean result = conditionState.process(ctx, msg,fresh); | ||
185 | + log.warn(String.format("执行器【%s】刷新【%s】结果【%s】执行器设备【%s】数据设备【%s】数据内容【%s】",condition.getId(),fresh,result,id,msg.getOriginator(),msg.getData())); | ||
186 | + return !result; | ||
187 | + } catch (ExecutionException e) { | ||
188 | + throw new RuntimeException(e); | ||
189 | + } catch (InterruptedException e) { | ||
190 | + throw new RuntimeException(e); | ||
191 | + } | ||
192 | + })); | ||
193 | + }); | ||
183 | }); | 194 | }); |
184 | - }); | ||
185 | - } | ||
186 | 195 | ||
187 | if (triggerMatched.get() && conditionMatched.get()) { | 196 | if (triggerMatched.get() && conditionMatched.get()) { |
197 | + log.error(String.format("设备【%s】的消息内容【%s】触发动作",deviceId,msg.getData())); | ||
188 | for (TkDoActionEntity item : actions) { | 198 | for (TkDoActionEntity item : actions) { |
189 | if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) { | 199 | if (ActionTypeEnum.MSG_NOTIFY.equals(item.getOutTarget())) { |
190 | noticeMsg(ctx, msg, item, deviceId, detail.toString(), msg.getTs()); | 200 | noticeMsg(ctx, msg, item, deviceId, detail.toString(), msg.getTs()); |
@@ -216,6 +226,7 @@ class ReactState { | @@ -216,6 +226,7 @@ class ReactState { | ||
216 | || (trigger.getEntityType().equals(ScopeEnum.ALL) | 226 | || (trigger.getEntityType().equals(ScopeEnum.ALL) |
217 | && trigger.getDeviceProfileId().equals(profileId))) { | 227 | && trigger.getDeviceProfileId().equals(profileId))) { |
218 | TriggerState state = createTriggerState(deviceId, trigger.getTriggerCondition()); | 228 | TriggerState state = createTriggerState(deviceId, trigger.getTriggerCondition()); |
229 | + log.error(String.format("新建设备【%s】的触发器",deviceId)); | ||
219 | triggerState.put(cacheKey, state); | 230 | triggerState.put(cacheKey, state); |
220 | return state; | 231 | return state; |
221 | } | 232 | } |
@@ -267,7 +278,7 @@ class ReactState { | @@ -267,7 +278,7 @@ class ReactState { | ||
267 | || (condition.getEntityType().equals(ScopeEnum.ALL) | 278 | || (condition.getEntityType().equals(ScopeEnum.ALL) |
268 | && condition.getDeviceProfileId().equals(profileId))) { | 279 | && condition.getDeviceProfileId().equals(profileId))) { |
269 | TriggerState state = createTriggerState(deviceId, condition.getTriggerCondition()); | 280 | TriggerState state = createTriggerState(deviceId, condition.getTriggerCondition()); |
270 | - triggerState.put(cacheKey, state); | 281 | + conditionState.put(cacheKey, state); |
271 | return state; | 282 | return state; |
272 | } | 283 | } |
273 | return null; | 284 | return null; |
@@ -397,7 +408,7 @@ class ReactState { | @@ -397,7 +408,7 @@ class ReactState { | ||
397 | private void clearAlarm(TbContext ctx, TbMsg msg, String deviceId, String key) | 408 | private void clearAlarm(TbContext ctx, TbMsg msg, String deviceId, String key) |
398 | throws ExecutionException, InterruptedException { | 409 | throws ExecutionException, InterruptedException { |
399 | TriggerState clearState = getOrCreateClearState(deviceId, key); | 410 | TriggerState clearState = getOrCreateClearState(deviceId, key); |
400 | - if (clearState != null && clearState.process(ctx, msg)) { | 411 | + if (clearState != null && clearState.process(ctx, msg,true)) { |
401 | ctx.getAlarmService() | 412 | ctx.getAlarmService() |
402 | .clearAlarmForResult( | 413 | .clearAlarmForResult( |
403 | ctx.getTenantId(), | 414 | ctx.getTenantId(), |
@@ -25,6 +25,7 @@ import org.thingsboard.rule.engine.profile.SnapshotUpdate; | @@ -25,6 +25,7 @@ import org.thingsboard.rule.engine.profile.SnapshotUpdate; | ||
25 | import org.thingsboard.rule.engine.yunteng.utils.TriggerRuleState; | 25 | import org.thingsboard.rule.engine.yunteng.utils.TriggerRuleState; |
26 | import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType; | 26 | import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType; |
27 | import org.thingsboard.server.common.data.plugin.ComponentType; | 27 | import org.thingsboard.server.common.data.plugin.ComponentType; |
28 | +import org.thingsboard.server.common.data.yunteng.dto.scene.RuleFilterDTO; | ||
28 | import org.thingsboard.server.common.msg.TbMsg; | 29 | import org.thingsboard.server.common.msg.TbMsg; |
29 | import org.thingsboard.server.common.msg.queue.PartitionChangeMsg; | 30 | import org.thingsboard.server.common.msg.queue.PartitionChangeMsg; |
30 | 31 | ||
@@ -64,30 +65,30 @@ public class TbSceneReactNode implements TbNode { | @@ -64,30 +65,30 @@ public class TbSceneReactNode implements TbNode { | ||
64 | ctx.tellSuccess(msg); | 65 | ctx.tellSuccess(msg); |
65 | return; | 66 | return; |
66 | } | 67 | } |
67 | - List<String> devScence = config.getScenes().get(deviceId); | 68 | + List<RuleFilterDTO> devScence = config.getScenes().get(deviceId); |
68 | if (devScence != null && !devScence.isEmpty()) { | 69 | if (devScence != null && !devScence.isEmpty()) { |
69 | devScence.stream() | 70 | devScence.stream() |
70 | .forEach( | 71 | .forEach( |
71 | t -> { | 72 | t -> { |
72 | - ReactState react = getOrCreateReactState(ctx, config, t); | 73 | + ReactState react = getOrCreateReactState(ctx, config, t.getScenId()); |
73 | if (react != null) { | 74 | if (react != null) { |
74 | try { | 75 | try { |
75 | - react.process(ctx, msg, deviceId); | 76 | + react.process(ctx, msg,t.getRuleId(), deviceId); |
76 | } catch (Exception e) { | 77 | } catch (Exception e) { |
77 | ctx.tellFailure(msg, e); | 78 | ctx.tellFailure(msg, e); |
78 | } | 79 | } |
79 | } | 80 | } |
80 | }); | 81 | }); |
81 | } | 82 | } |
82 | - List<String> projectScence = config.getProject().get(projectId); | 83 | + List<RuleFilterDTO> projectScence = config.getProject().get(projectId); |
83 | if (projectScence != null && !projectScence.isEmpty()) { | 84 | if (projectScence != null && !projectScence.isEmpty()) { |
84 | projectScence.stream() | 85 | projectScence.stream() |
85 | .forEach( | 86 | .forEach( |
86 | t -> { | 87 | t -> { |
87 | - ReactState react = getOrCreateReactState(ctx, config, t); | 88 | + ReactState react = getOrCreateReactState(ctx, config, t.getScenId()); |
88 | if (react != null) { | 89 | if (react != null) { |
89 | try { | 90 | try { |
90 | - react.process(ctx, msg, deviceId); | 91 | + react.process(ctx, msg,t.getRuleId(), deviceId); |
91 | } catch (Exception e) { | 92 | } catch (Exception e) { |
92 | ctx.tellFailure(msg, e); | 93 | ctx.tellFailure(msg, e); |
93 | } | 94 | } |
@@ -6,16 +6,17 @@ import java.util.List; | @@ -6,16 +6,17 @@ import java.util.List; | ||
6 | import java.util.Map; | 6 | import java.util.Map; |
7 | import lombok.Data; | 7 | import lombok.Data; |
8 | import org.thingsboard.rule.engine.api.NodeConfiguration; | 8 | import org.thingsboard.rule.engine.api.NodeConfiguration; |
9 | +import org.thingsboard.server.common.data.yunteng.dto.scene.RuleFilterDTO; | ||
9 | 10 | ||
10 | @Data | 11 | @Data |
11 | public class TbSceneReactNodeConfig implements NodeConfiguration<TbSceneReactNodeConfig> { | 12 | public class TbSceneReactNodeConfig implements NodeConfiguration<TbSceneReactNodeConfig> { |
12 | 13 | ||
13 | /** 【TB设备配置ID,TK产品ID】产品信息 */ | 14 | /** 【TB设备配置ID,TK产品ID】产品信息 */ |
14 | private Map<String, String> profile; | 15 | private Map<String, String> profile; |
15 | - /** 【触发器的TK产品ID,场景】哪些产品会触发场景联动 */ | ||
16 | - private Map<String, List<String>> project; | ||
17 | - /** 【触发器的TB设备ID,场景】哪些设备会触发场景联动 */ | ||
18 | - private Map<String, List<String>> scenes; | 16 | + /** 【TK产品ID,场景】哪些产品会触发场景联动 */ |
17 | + private Map<String, List<RuleFilterDTO>> project; | ||
18 | + /** 【TB设备ID,场景】哪些设备会触发场景联动 */ | ||
19 | + private Map<String, List<RuleFilterDTO>> scenes; | ||
19 | /** 【TK场景ID,场景名称】场景联动信息 */ | 20 | /** 【TK场景ID,场景名称】场景联动信息 */ |
20 | private Map<String, String> names; | 21 | private Map<String, String> names; |
21 | /** 【TK场景ID,组织ID】场景联动所属组织信息 */ | 22 | /** 【TK场景ID,组织ID】场景联动所属组织信息 */ |
@@ -24,8 +25,8 @@ public class TbSceneReactNodeConfig implements NodeConfiguration<TbSceneReactNod | @@ -24,8 +25,8 @@ public class TbSceneReactNodeConfig implements NodeConfiguration<TbSceneReactNod | ||
24 | @Override | 25 | @Override |
25 | public TbSceneReactNodeConfig defaultConfiguration() { | 26 | public TbSceneReactNodeConfig defaultConfiguration() { |
26 | TbSceneReactNodeConfig config = new TbSceneReactNodeConfig(); | 27 | TbSceneReactNodeConfig config = new TbSceneReactNodeConfig(); |
27 | - Map<String, List<String>> sceneMap = new HashMap<>(); | ||
28 | - Map<String, List<String>> projectScenes = new HashMap<>(); | 28 | + Map<String, List<RuleFilterDTO>> sceneMap = new HashMap<>(); |
29 | + Map<String, List<RuleFilterDTO>> projectScenes = new HashMap<>(); | ||
29 | 30 | ||
30 | config.setScenes(sceneMap); | 31 | config.setScenes(sceneMap); |
31 | config.setProject(projectScenes); | 32 | config.setProject(projectScenes); |
@@ -73,8 +73,8 @@ class TriggerState { | @@ -73,8 +73,8 @@ class TriggerState { | ||
73 | this.alarmDetails = alarmDetails; | 73 | this.alarmDetails = alarmDetails; |
74 | } | 74 | } |
75 | 75 | ||
76 | - public boolean process(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException { | ||
77 | - if (!msg.getOriginator().getId().toString().equals(originator)) { | 76 | + public boolean process(TbContext ctx, TbMsg msg,boolean needFresh) throws ExecutionException, InterruptedException { |
77 | + if (!needFresh) { | ||
78 | return ruleMatched; | 78 | return ruleMatched; |
79 | } | 79 | } |
80 | if (latestValues == null) { | 80 | if (latestValues == null) { |