From 42d4112bd9aa6a48f29dc95c3e9b6ee3ba5ed576 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 31 May 2026 09:26:59 +0800 Subject: [PATCH] fix(iot):单测报错问题 --- yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherHelper.java | 12 ++++++++++-- yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleTimerConditionIntegrationTest.java | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherHelper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherHelper.java index 74e66e6..84cbbf9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherHelper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/matcher/IotSceneRuleMatcherHelper.java @@ -261,9 +261,17 @@ public final class IotSceneRuleMatcherHelper { * @return 校验结果 */ public static boolean productAndDeviceNotMatched(IotDeviceMessage message, Long productId, Long deviceId) { + if (message == null || message.getDeviceId() == null) { + return false; + } + if (deviceId != null && !IotDeviceDO.DEVICE_ID_ALL.equals(deviceId)) { + return ObjectUtil.notEqual(message.getDeviceId(), deviceId); + } + if (productId == null) { + return false; + } IotDeviceDO device = SpringUtils.getBean(IotDeviceService.class).getDeviceFromCache(message.getDeviceId()); - return IotDeviceDO.DEVICE_ID_ALL.equals(deviceId) ? ObjectUtil.notEqual(device.getProductId(), productId) - : ObjectUtil.notEqual(message.getDeviceId(), deviceId); + return device == null || ObjectUtil.notEqual(device.getProductId(), productId); } } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleTimerConditionIntegrationTest.java b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleTimerConditionIntegrationTest.java index 479ba40..a760bf7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleTimerConditionIntegrationTest.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/scene/IotSceneRuleTimerConditionIntegrationTest.java @@ -1,7 +1,9 @@ package cn.iocoder.yudao.module.iot.service.rule.scene; import cn.hutool.core.collection.ListUtil; +import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.module.iot.core.enums.device.IotDeviceStateEnum; import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; @@ -21,6 +23,9 @@ import cn.iocoder.yudao.module.iot.service.product.IotProductService; import org.junit.jupiter.api.*; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import java.lang.reflect.Field; import java.util.*; @@ -43,8 +48,23 @@ import static org.mockito.Mockito.*; * * @author HUIHUI */ +@SpringJUnitConfig(classes = IotSceneRuleTimerConditionIntegrationTest.TestConfig.class) public class IotSceneRuleTimerConditionIntegrationTest extends BaseMockitoUnitTest { + /** + * 注入一下 SpringUtil,解析 EL 表达式时需要 + * {@link SpringExpressionUtils#parseExpression} + */ + @Configuration + static class TestConfig { + + @Bean + public SpringUtil springUtil() { + return new SpringUtil(); + } + + } + @InjectMocks private IotSceneRuleServiceImpl sceneRuleService; -- libgit2 0.21.4