From ec3308617909c8d6280e0d00ffb18350e372fbdf Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期日, 30 八月 2026 17:36:29 +0800
Subject: [PATCH] 实现采集器断线恢复与来源异常持久化
---
ruoyi-admin/src/main/java/com/ruoyi/config/DevelopmentCollectorStatusSynchronizer.java | 18 ++++++++++++++++--
1 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/config/DevelopmentCollectorStatusSynchronizer.java b/ruoyi-admin/src/main/java/com/ruoyi/config/DevelopmentCollectorStatusSynchronizer.java
index 431da82..e827d08 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/config/DevelopmentCollectorStatusSynchronizer.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/config/DevelopmentCollectorStatusSynchronizer.java
@@ -10,6 +10,7 @@
import com.ruoyi.device.discovery.DeviceDiscoveryCandidateStore;
import com.ruoyi.device.discovery.DeviceDiscoveryCandidateStore.CollectorCandidate;
import com.ruoyi.system.mapper.TCollectorMapper;
+import com.ruoyi.system.service.ICollectorDisconnectRecoveryService;
/** 将模拟采集器的发现写入 Redis,并同步已登记采集器的实时在线事实。 */
@Component
@@ -18,14 +19,24 @@
private final BtsDevelopmentSimulator simulator;
private final DeviceDiscoveryCandidateStore candidateStore;
private final TCollectorMapper collectorMapper;
+ private final ICollectorDisconnectRecoveryService disconnectRecovery;
@Autowired
public DevelopmentCollectorStatusSynchronizer(BtsDevelopmentSimulator simulator,
- DeviceDiscoveryCandidateStore candidateStore, TCollectorMapper collectorMapper)
+ DeviceDiscoveryCandidateStore candidateStore, TCollectorMapper collectorMapper,
+ ICollectorDisconnectRecoveryService disconnectRecovery)
{
this.simulator = simulator;
this.candidateStore = candidateStore;
this.collectorMapper = collectorMapper;
+ this.disconnectRecovery = disconnectRecovery;
+ }
+
+ /** 保留单元测试及独立模拟器装配使用的旧构造入口。 */
+ public DevelopmentCollectorStatusSynchronizer(BtsDevelopmentSimulator simulator,
+ DeviceDiscoveryCandidateStore candidateStore, TCollectorMapper collectorMapper)
+ {
+ this(simulator, candidateStore, collectorMapper, (codes, at) -> { });
}
/** 完整替换 dev-sim 采集器快照,删除配置后候选立即消失。 */
@@ -33,7 +44,8 @@
public synchronized void synchronizeOnlineStatus()
{
Instant observedAt = Instant.now();
- List<CollectorCandidate> candidates = simulator.snapshot().collectors().stream()
+ var simulatorState = simulator.snapshot();
+ List<CollectorCandidate> candidates = simulatorState.collectors().stream()
.map(item -> new CollectorCandidate(BtsDevelopmentSimulator.ADAPTER_CODE, item.deviceCode(),
item.ip(), item.mac(), item.name(),
item.manufacturer(), item.model(), item.channelCount(), item.online(), observedAt,
@@ -42,5 +54,7 @@
candidateStore.replaceCollectors(BtsDevelopmentSimulator.ADAPTER_CODE, candidates);
candidates.forEach(candidate -> collectorMapper.updateRegisteredObservation(candidate.deviceCode(),
candidate.online() ? "ONLINE" : "OFFLINE"));
+ disconnectRecovery.reconcile(simulatorState.collectors().stream()
+ .filter(item -> item.online()).map(item -> item.deviceCode()).collect(java.util.stream.Collectors.toSet()), observedAt);
}
}
--
Gitblit v1.7.1