mirror of
https://gitee.com/zhijiantianya/ruoyi-vue-pro.git
synced 2025-12-26 08:26:44 +08:00
perf:【IoT 物联网】场景规则匹配优化
This commit is contained in:
parent
93aaffddfe
commit
378cf1e997
@ -1,74 +0,0 @@
|
||||
package cn.iocoder.yudao.module.iot.enums.rule;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* IoT 场景规则条件层级枚举
|
||||
* <p>
|
||||
* 用于区分主条件(触发器级别)和子条件(条件分组级别)
|
||||
*
|
||||
* @author HUIHUI
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum IotSceneRuleConditionLevelEnum {
|
||||
|
||||
/**
|
||||
* 主条件 - 触发器级别的条件
|
||||
* 用于判断触发器本身是否匹配(如消息类型、设备标识等)
|
||||
*/
|
||||
PRIMARY(1, "主条件"),
|
||||
|
||||
/**
|
||||
* 子条件 - 条件分组级别的条件
|
||||
* 用于判断具体的业务条件(如设备状态、属性值、时间条件等)
|
||||
*/
|
||||
SECONDARY(2, "子条件");
|
||||
|
||||
/**
|
||||
* 条件层级
|
||||
*/
|
||||
private final Integer level;
|
||||
|
||||
/**
|
||||
* 条件层级名称
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* 根据层级值获取枚举
|
||||
*
|
||||
* @param level 层级值
|
||||
* @return 条件层级枚举
|
||||
*/
|
||||
public static IotSceneRuleConditionLevelEnum levelOf(Integer level) {
|
||||
if (level == null) {
|
||||
return null;
|
||||
}
|
||||
for (IotSceneRuleConditionLevelEnum levelEnum : values()) {
|
||||
if (levelEnum.getLevel().equals(level)) {
|
||||
return levelEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为主条件
|
||||
*
|
||||
* @return 是否为主条件
|
||||
*/
|
||||
public boolean isPrimary() {
|
||||
return this == PRIMARY;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为子条件
|
||||
*
|
||||
* @return 是否为子条件
|
||||
*/
|
||||
public boolean isSecondary() {
|
||||
return this == SECONDARY;
|
||||
}
|
||||
}
|
||||
@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -43,11 +42,6 @@ public class CurrentTimeConditionMatcher extends AbstractIotSceneRuleMatcher {
|
||||
return IotSceneRuleConditionTypeEnum.CURRENT_TIME;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
|
||||
return IotSceneRuleConditionLevelEnum.SECONDARY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition) {
|
||||
// 1. 基础参数校验
|
||||
|
||||
@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
|
||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||
import cn.iocoder.yudao.module.iot.core.util.IotDeviceMessageUtils;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -27,11 +26,6 @@ public class DevicePropertyConditionMatcher extends AbstractIotSceneRuleMatcher
|
||||
return IotSceneRuleConditionTypeEnum.DEVICE_PROPERTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
|
||||
return IotSceneRuleConditionLevelEnum.SECONDARY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition) {
|
||||
// 1. 基础参数校验
|
||||
|
||||
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
|
||||
|
||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -26,11 +25,6 @@ public class DeviceStateConditionMatcher extends AbstractIotSceneRuleMatcher {
|
||||
return IotSceneRuleConditionTypeEnum.DEVICE_STATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
|
||||
return IotSceneRuleConditionLevelEnum.SECONDARY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMatched(IotDeviceMessage message, IotSceneRuleDO.TriggerCondition condition) {
|
||||
// 1. 基础参数校验
|
||||
|
||||
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
|
||||
|
||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
|
||||
|
||||
@ -58,15 +57,6 @@ public interface IotSceneRuleMatcher {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支持的条件层级(仅条件匹配器需要实现)
|
||||
*
|
||||
* @return 条件层级枚举,触发器匹配器返回 null
|
||||
*/
|
||||
default IotSceneRuleConditionLevelEnum getSupportedConditionLevel() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查触发器是否匹配消息(仅触发器匹配器需要实现)
|
||||
*
|
||||
|
||||
@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionLevelEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleConditionTypeEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -107,8 +106,8 @@ public class IotSceneRuleMatcherManager {
|
||||
|
||||
// 记录条件匹配器详情
|
||||
this.conditionMatcherMap.forEach((type, matcher) ->
|
||||
log.info("[IotSceneRuleMatcherManager][条件匹配器] 类型: {}, 匹配器: {}, 优先级: {}, 层级: {}",
|
||||
type, matcher.getMatcherName(), matcher.getPriority(), matcher.getSupportedConditionLevel()));
|
||||
log.info("[IotSceneRuleMatcherManager][条件匹配器] 类型: {}, 匹配器: {}, 优先级: {}",
|
||||
type, matcher.getMatcherName(), matcher.getPriority()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -232,19 +231,6 @@ public class IotSceneRuleMatcherManager {
|
||||
return conditionMatcherMap.get(conditionType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据条件层级获取匹配器列表
|
||||
*
|
||||
* @param level 条件层级
|
||||
* @return 匹配器列表
|
||||
*/
|
||||
public List<IotSceneRuleMatcher> getMatchersByLevel(IotSceneRuleConditionLevelEnum level) {
|
||||
return allMatchers.stream()
|
||||
.filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherType.CONDITION)
|
||||
.filter(matcher -> matcher.getSupportedConditionLevel() == level)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有匹配器的统计信息
|
||||
*
|
||||
@ -258,15 +244,6 @@ public class IotSceneRuleMatcherManager {
|
||||
statistics.put("supportedTriggerTypes", getSupportedTriggerTypes());
|
||||
statistics.put("supportedConditionTypes", getSupportedConditionTypes());
|
||||
|
||||
// 按层级统计条件匹配器
|
||||
Map<IotSceneRuleConditionLevelEnum, Long> levelStats = allMatchers.stream()
|
||||
.filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherType.CONDITION)
|
||||
.collect(Collectors.groupingBy(
|
||||
IotSceneRuleMatcher::getSupportedConditionLevel,
|
||||
Collectors.counting()
|
||||
));
|
||||
statistics.put("conditionLevelStatistics", levelStats);
|
||||
|
||||
// 触发器匹配器详情
|
||||
Map<String, Object> triggerMatcherDetails = new HashMap<>();
|
||||
triggerMatcherMap.forEach((type, matcher) -> {
|
||||
@ -284,7 +261,6 @@ public class IotSceneRuleMatcherManager {
|
||||
Map<String, Object> detail = new HashMap<>();
|
||||
detail.put("matcherName", matcher.getMatcherName());
|
||||
detail.put("priority", matcher.getPriority());
|
||||
detail.put("level", matcher.getSupportedConditionLevel());
|
||||
detail.put("enabled", matcher.isEnabled());
|
||||
conditionMatcherDetails.put(type.name(), detail);
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user