refactor(iot): 移除属性保存中的同步规则处理

规则处理已迁移到独立消息订阅者 IotCleanRuleMessageHandler
通过订阅同一消息总线的 Topic 异步处理,不再阻塞属性保存主流程

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
lzh
2026-01-25 09:38:28 +08:00
parent 2a2cfb9030
commit 0a5fe13e68

View File

@@ -85,14 +85,8 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService {
@Resource
private IntegrationEventPublisher integrationEventPublisher;
@Resource
private com.viewsh.module.iot.service.rule.clean.processor.TrafficThresholdRuleProcessor trafficThresholdRuleProcessor;
@Resource
private com.viewsh.module.iot.service.rule.clean.processor.BeaconDetectionRuleProcessor beaconDetectionRuleProcessor;
@Resource
private com.viewsh.module.iot.service.rule.clean.processor.ButtonEventRuleProcessor buttonEventRuleProcessor;
// 注意:保洁规则处理器已迁移到独立的消息订阅者 IotCleanRuleMessageHandler
// 不再在此同步调用,避免阻塞属性保存主流程
// ========== 设备属性相关操作 ==========
@@ -180,45 +174,14 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService {
IotDevicePropertyDO.builder().value(entry.getValue()).updateTime(message.getReportTime()).build());
deviceDataRedisDAO.putAll(device.getId(), properties2);
// 2.3 调用规则处理器(保洁工单集成)
processRuleProcessors(device, properties);
// 注意:保洁规则处理已迁移到独立消息订阅者 IotCleanRuleMessageHandler
// 通过订阅同一消息总线的 Topic 异步处理,不再阻塞属性保存主流程
// 2.4 发布属性消息到 Redis Stream供其他模块如 Ops 订阅)
// 2.3 发布属性消息到 Redis Stream供其他模块如 Ops 订阅)
// TODO: 暂停发布,后续根据需要开启
// publishPropertyMessage(device, properties, message.getReportTime());
}
/**
* 处理规则处理器(保洁工单集成)
* <p>
* 在设备属性上报处理流程中调用,检测是否满足工单创建/到岗/完成条件
*
* @param device 设备信息
* @param properties 属性数据
*/
private void processRuleProcessors(IotDeviceDO device, Map<String, Object> properties) {
try {
// 遍历所有属性,调用规则处理器
for (Map.Entry<String, Object> entry : properties.entrySet()) {
String identifier = entry.getKey();
Object value = entry.getValue();
// 调用客流阈值规则处理器
trafficThresholdRuleProcessor.processPropertyChange(device.getId(), identifier, value);
// 调用蓝牙信标检测规则处理器
beaconDetectionRuleProcessor.processPropertyChange(device.getId(), identifier, value);
// 调用按键事件规则处理器
buttonEventRuleProcessor.processPropertyChange(device.getId(), identifier, value);
}
} catch (Exception e) {
// 规则处理器异常不应阻塞属性上报主流程
log.error("[processRuleProcessors] 规则处理器调用失败: deviceId={}, properties={}",
device.getId(), properties.keySet(), e);
}
}
/**
* 发布设备属性消息
* <p>