perf:【IoT 物联网】场景联动规则根据类型,新建 trigger、condition 包

This commit is contained in:
puhui999
2025-08-17 11:22:53 +08:00
parent 65cd56bcf7
commit 1e17e3578d
11 changed files with 37 additions and 30 deletions

View File

@@ -18,12 +18,10 @@ import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
*/
public interface IotSceneRuleMatcher {
// TODO @puhui999MatcherTypeEnum
// TODO @puhui999可以考虑根据类型新建 trigger、condition 包,然后把对应的实现类放进去哈;
/**
* 匹配器类型枚举
*/
enum MatcherType {
enum MatcherTypeEnum {
/**
* 触发器匹配器 - 用于匹配主触发条件
@@ -42,7 +40,7 @@ public interface IotSceneRuleMatcher {
*
* @return 匹配器类型
*/
MatcherType getMatcherType();
MatcherTypeEnum getMatcherType();
// TODO @puhui999【重要】有个思路IotSceneRuleMatcher 拆分成 2 种 mather 接口;然后 AbstractIotSceneRuleMatcher 是个 Helper 工具类;

View File

@@ -61,10 +61,10 @@ public class IotSceneRuleMatcherManager {
// 分离触发器匹配器和条件匹配器
List<IotSceneRuleMatcher> triggerMatchers = this.allMatchers.stream()
.filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherType.TRIGGER)
.filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherTypeEnum.TRIGGER)
.toList();
List<IotSceneRuleMatcher> conditionMatchers = this.allMatchers.stream()
.filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherType.CONDITION)
.filter(matcher -> matcher.getMatcherType() == IotSceneRuleMatcher.MatcherTypeEnum.CONDITION)
.toList();
// 构建触发器匹配器映射表

View File

@@ -1,9 +1,10 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.condition;
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.IotSceneRuleConditionTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -33,8 +34,8 @@ public class CurrentTimeConditionMatcher extends AbstractIotSceneRuleMatcher {
private static final DateTimeFormatter TIME_FORMATTER_SHORT = DateTimeFormatter.ofPattern("HH:mm");
@Override
public MatcherType getMatcherType() {
return MatcherType.CONDITION;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.CONDITION;
}
@Override

View File

@@ -1,9 +1,10 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.condition;
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.IotSceneRuleConditionTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -17,8 +18,8 @@ import org.springframework.stereotype.Component;
public class DevicePropertyConditionMatcher extends AbstractIotSceneRuleMatcher {
@Override
public MatcherType getMatcherType() {
return MatcherType.CONDITION;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.CONDITION;
}
@Override

View File

@@ -1,8 +1,9 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.condition;
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.IotSceneRuleConditionTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -16,8 +17,8 @@ import org.springframework.stereotype.Component;
public class DeviceStateConditionMatcher extends AbstractIotSceneRuleMatcher {
@Override
public MatcherType getMatcherType() {
return MatcherType.CONDITION;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.CONDITION;
}
@Override

View File

@@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.trigger;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum;
@@ -6,6 +6,7 @@ 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.IotSceneRuleTriggerTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -24,8 +25,8 @@ public class DeviceEventPostTriggerMatcher extends AbstractIotSceneRuleMatcher {
private static final String DEVICE_EVENT_POST_METHOD = IotDeviceMessageMethodEnum.EVENT_POST.getMethod();
@Override
public MatcherType getMatcherType() {
return MatcherType.TRIGGER;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.TRIGGER;
}
@Override

View File

@@ -1,10 +1,11 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.trigger;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum;
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.IotSceneRuleTriggerTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -24,8 +25,8 @@ public class DevicePropertyPostTriggerMatcher extends AbstractIotSceneRuleMatche
private static final String DEVICE_PROPERTY_POST_METHOD = IotDeviceMessageMethodEnum.PROPERTY_POST.getMethod();
@Override
public MatcherType getMatcherType() {
return MatcherType.TRIGGER;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.TRIGGER;
}
@Override

View File

@@ -1,10 +1,11 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.trigger;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum;
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.IotSceneRuleTriggerTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -23,8 +24,8 @@ public class DeviceServiceInvokeTriggerMatcher extends AbstractIotSceneRuleMatch
private static final String DEVICE_SERVICE_INVOKE_METHOD = IotDeviceMessageMethodEnum.SERVICE_INVOKE.getMethod();
@Override
public MatcherType getMatcherType() {
return MatcherType.TRIGGER;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.TRIGGER;
}
@Override

View File

@@ -1,9 +1,10 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.trigger;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum;
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.IotSceneRuleTriggerTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -23,8 +24,8 @@ public class DeviceStateUpdateTriggerMatcher extends AbstractIotSceneRuleMatcher
private static final String DEVICE_STATE_UPDATE_METHOD = IotDeviceMessageMethodEnum.STATE_UPDATE.getMethod();
@Override
public MatcherType getMatcherType() {
return MatcherType.TRIGGER;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.TRIGGER;
}
@Override

View File

@@ -1,9 +1,10 @@
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher;
package cn.iocoder.yudao.module.iot.service.rule.scene.matcher.trigger;
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.IotSceneRuleTriggerTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.AbstractIotSceneRuleMatcher;
import org.springframework.stereotype.Component;
/**
@@ -18,8 +19,8 @@ import org.springframework.stereotype.Component;
public class TimerTriggerMatcher extends AbstractIotSceneRuleMatcher {
@Override
public MatcherType getMatcherType() {
return MatcherType.TRIGGER;
public MatcherTypeEnum getMatcherType() {
return MatcherTypeEnum.TRIGGER;
}
@Override

View File

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
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.IotSceneRuleTriggerTypeEnum;
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.trigger.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;