Commit 378cf1e997611e9330ab33ba8244f65b2bace0a3

Authored by puhui999
1 parent 93aaffdd

perf:【IoT 物联网】场景规则匹配优化

yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotSceneRuleConditionLevelEnum.java deleted
1   -package cn.iocoder.yudao.module.iot.enums.rule;
2   -
3   -import lombok.AllArgsConstructor;
4   -import lombok.Getter;
5   -
6   -/**
7   - * IoT 场景规则条件层级枚举
8   - * <p>
9   - * 用于区分主条件(触发器级别)和子条件(条件分组级别)
10   - *
11   - * @author HUIHUI
12   - */
13   -@AllArgsConstructor
14   -@Getter
15   -public enum IotSceneRuleConditionLevelEnum {
16   -
17   - /**
18   - * 主条件 - 触发器级别的条件
19   - * 用于判断触发器本身是否匹配(如消息类型、设备标识等)
20   - */
21   - PRIMARY(1, "主条件"),
22   -
23   - /**
24   - * 子条件 - 条件分组级别的条件
25   - * 用于判断具体的业务条件(如设备状态、属性值、时间条件等)
26   - */
27   - SECONDARY(2, "子条件");
28   -
29   - /**
30   - * 条件层级
31   - */
32   - private final Integer level;
33   -
34   - /**
35   - * 条件层级名称
36   - */
37   - private final String name;
38   -
39   - /**
40   - * 根据层级值获取枚举
41   - *
42   - * @param level 层级值
43   - * @return 条件层级枚举
44   - */
45   - public static IotSceneRuleConditionLevelEnum levelOf(Integer level) {
46   - if (level == null) {
47   - return null;
48   - }
49   - for (IotSceneRuleConditionLevelEnum levelEnum : values()) {
50   - if (levelEnum.getLevel().equals(level)) {
51   - return levelEnum;
52   - }
53   - }
54   - return null;
55   - }
56   -
57   - /**
58   - * 判断是否为主条件
59   - *
60   - * @return 是否为主条件
61   - */
62   - public boolean isPrimary() {
63   - return this == PRIMARY;
64   - }
65   -
66   - /**
67   - * 判断是否为子条件
68   - *
69   - * @return 是否为子条件
70   - */
71   - public boolean isSecondary() {
72   - return this == SECONDARY;
73   - }
74   -}
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/CurrentTimeConditionMatcher.java
... ... @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
3 3 import cn.hutool.core.util.StrUtil;
4 4 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
5 5 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
6   -import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
7 6 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
8 7 import lombok.extern.slf4j.Slf4j;
9 8 import org.springframework.stereotype.Component;
... ... @@ -44,11 +43,6 @@ public class CurrentTimeConditionMatcher extends AbstractIotSceneRuleMatcher {
44 43 }
45 44  
46 45 @Override
47   - public IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
48   - return IotSceneRuleConditionLevelEnum.SECONDARY;
49   - }
50   -
51   - @Override
52 46 public boolean isMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition) {
53 47 // 1. 基础参数校验
54 48 if (!isBasicConditionValid(condition)) {
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/DevicePropertyConditionMatcher.java
... ... @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
3 3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
4 4 import cn.iocoder.yudao.module.iot.core.util.IotDeviceMessageUtils;
5 5 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
6   -import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
7 6 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
8 7 import org.springframework.stereotype.Component;
9 8  
... ... @@ -28,11 +27,6 @@ public class DevicePropertyConditionMatcher extends AbstractIotSceneRuleMatcher
28 27 }
29 28  
30 29 @Override
31   - public IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
32   - return IotSceneRuleConditionLevelEnum.SECONDARY;
33   - }
34   -
35   - @Override
36 30 public boolean isMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition) {
37 31 // 1. 基础参数校验
38 32 if (!isBasicConditionValid(condition)) {
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/DeviceStateConditionMatcher.java
... ... @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
2 2  
3 3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
4 4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
5   -import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
6 5 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
7 6 import org.springframework.stereotype.Component;
8 7  
... ... @@ -27,11 +26,6 @@ public class DeviceStateConditionMatcher extends AbstractIotSceneRuleMatcher {
27 26 }
28 27  
29 28 @Override
30   - public IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
31   - return IotSceneRuleConditionLevelEnum.SECONDARY;
32   - }
33   -
34   - @Override
35 29 public boolean isMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition) {
36 30 // 1. 基础参数校验
37 31 if (!isBasicConditionValid(condition)) {
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcher.java
... ... @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
2 2  
3 3 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
4 4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
5   -import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
6 5 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
7 6 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
8 7  
... ... @@ -59,15 +58,6 @@ public interface IotSceneRuleMatcher {
59 58 }
60 59  
61 60 /**
62   - * 获取支持的条件层级(仅条件匹配器需要实现)
63   - *
64   - * @return 条件层级枚举,触发器匹配器返回 null
65   - */
66   - default IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
67   - return null;
68   - }
69   -
70   - /**
71 61 * 检查触发器是否匹配消息(仅触发器匹配器需要实现)
72 62 *
73 63 * @param message 设备消息
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherManager.java
... ... @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
5 5 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
6   -import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
7 6 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
8 7 import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
9 8 import lombok.extern.slf4j.Slf4j;
... ... @@ -107,8 +106,8 @@ public class IotSceneRuleMatcherManager {
107 106  
108 107 // 记录条件匹配器详情
109 108 this.conditionMatcherMap.forEach((type, matcher) ->
110   - log.info("[IotSceneRuleMatcherManager][条件匹配器] 类型: {}, 匹配器: {}, 优先级: {}, 层级: {}",
111   - type, matcher.getMatcherName(), matcher.getPriority(), matcher.getSupportedConditionLevel()));
  109 + log.info("[IotSceneRuleMatcherManager][条件匹配器] 类型: {}, 匹配器: {}, 优先级: {}",
  110 + type, matcher.getMatcherName(), matcher.getPriority()));
112 111 }
113 112  
114 113 /**
... ... @@ -233,19 +232,6 @@ public class IotSceneRuleMatcherManager {
233 232 }
234 233  
235 234 /**
236   - * 根据条件层级获取匹配器列表
237   - *
238   - * @param level 条件层级
239   - * @return 匹配器列表
240   - */
241   - public List<IotSceneRuleMatcher> getMatchersByLevel(IotSceneRuleConditionLevelEnum level) {
242   - return allMatchers.stream()
243   - .filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherType.CONDITION)
244   - .filter(matcher -> matcher.getSupportedConditionLevel() == level)
245   - .collect(Collectors.toList());
246   - }
247   -
248   - /**
249 235 * 获取所有匹配器的统计信息
250 236 *
251 237 * @return 统计信息映射表
... ... @@ -258,15 +244,6 @@ public class IotSceneRuleMatcherManager {
258 244 statistics.put("supportedTriggerTypes", getSupportedTriggerTypes());
259 245 statistics.put("supportedConditionTypes", getSupportedConditionTypes());
260 246  
261   - // 按层级统计条件匹配器
262   - Map<IotSceneRuleConditionLevelEnum, Long> levelStats = allMatchers.stream()
263   - .filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherType.CONDITION)
264   - .collect(Collectors.groupingBy(
265   - IotSceneRuleMatcher::getSupportedConditionLevel,
266   - Collectors.counting()
267   - ));
268   - statistics.put("conditionLevelStatistics", levelStats);
269   -
270 247 // 触发器匹配器详情
271 248 Map<String, Object> triggerMatcherDetails = new HashMap<>();
272 249 triggerMatcherMap.forEach((type, matcher) -> {
... ... @@ -284,7 +261,6 @@ public class IotSceneRuleMatcherManager {
284 261 Map<String, Object> detail = new HashMap<>();
285 262 detail.put("matcherName", matcher.getMatcherName());
286 263 detail.put("priority", matcher.getPriority());
287   - detail.put("level", matcher.getSupportedConditionLevel());
288 264 detail.put("enabled", matcher.isEnabled());
289 265 conditionMatcherDetails.put(type.name(), detail);
290 266 });
... ...