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.IotSceneRuleMatcherHelper;
|
import org.quartz.CronExpression;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* 定时触发器匹配器:处理定时触发的触发器匹配逻辑
|
*
|
* 注意:定时触发器不依赖设备消息,主要用于定时任务场景
|
*
|
* @author HUIHUI
|
*/
|
@Component
|
public class IotTimerTriggerMatcher implements IotSceneRuleTriggerMatcher {
|
|
@Override
|
public IotSceneRuleTriggerTypeEnum getSupportedTriggerType() {
|
return IotSceneRuleTriggerTypeEnum.TIMER;
|
}
|
|
@Override
|
public boolean matches(IotDeviceMessage message, IotSceneRuleDO.Trigger trigger) {
|
// 1.1 基础参数校验
|
if (!IotSceneRuleMatcherHelper.isBasicTriggerValid(trigger)) {
|
IotSceneRuleMatcherHelper.logTriggerMatchFailure(message, trigger, "触发器基础参数无效");
|
return false;
|
}
|
|
// 1.2 检查 CRON 表达式是否存在
|
if (StrUtil.isBlank(trigger.getCronExpression())) {
|
IotSceneRuleMatcherHelper.logTriggerMatchFailure(message, trigger, "定时触发器缺少 CRON 表达式");
|
return false;
|
}
|
|
// 1.3 定时触发器通常不依赖具体的设备消息
|
// 它是通过定时任务调度器触发的,这里主要是验证配置的有效性
|
if (!CronExpression.isValidExpression(trigger.getCronExpression())) {
|
IotSceneRuleMatcherHelper.logTriggerMatchFailure(message, trigger, "CRON 表达式格式无效: " + trigger.getCronExpression());
|
return false;
|
}
|
|
IotSceneRuleMatcherHelper.logTriggerMatchSuccess(message, trigger);
|
return true;
|
}
|
|
@Override
|
public int getPriority() {
|
return 50; // 最低优先级,因为定时触发器不依赖消息
|
}
|
|
}
|