From 7ab0e426264707fb85ee38d0a9a73caf41899635 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期六, 29 八月 2026 13:11:40 +0800
Subject: [PATCH] 实现采集器独立实时与历史采样模拟

---
 ruoyi-device/src/main/java/com/ruoyi/device/simulator/BtsSimulatorStateStore.java |   48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/ruoyi-device/src/main/java/com/ruoyi/device/simulator/BtsSimulatorStateStore.java b/ruoyi-device/src/main/java/com/ruoyi/device/simulator/BtsSimulatorStateStore.java
index c1525db..1902705 100644
--- a/ruoyi-device/src/main/java/com/ruoyi/device/simulator/BtsSimulatorStateStore.java
+++ b/ruoyi-device/src/main/java/com/ruoyi/device/simulator/BtsSimulatorStateStore.java
@@ -1,5 +1,6 @@
 package com.ruoyi.device.simulator;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.util.List;
 import com.ruoyi.device.model.DeviceWorkStatus;
@@ -43,7 +44,52 @@
     }
 
     record CollectorState(int collectorId, String deviceCode, String ip, String mac, String name,
-            String manufacturer, String model, int channelCount, boolean online) { }
+            String manufacturer, String model, int channelCount, boolean online, int sampleIntervalMs,
+            long nextSequence, Instant lastSampledAt, List<CollectorChannelState> channels,
+            List<CollectorMeasurementRecord> history, CollectorHistoryFaults historyFaults)
+    {
+        public CollectorState
+        {
+            channels = List.copyOf(channels);
+            history = List.copyOf(history);
+            historyFaults = historyFaults == null ? CollectorHistoryFaults.none() : historyFaults;
+        }
+
+        /** 兼容只包含发现配置的旧模拟状态;Redis 读取边界会补齐采样合同。 */
+        public CollectorState(int collectorId, String deviceCode, String ip, String mac, String name,
+                String manufacturer, String model, int channelCount, boolean online)
+        {
+            this(collectorId, deviceCode, ip, mac, name, manufacturer, model, channelCount, online,
+                    DevelopmentCollectorSimulation.DEFAULT_SAMPLE_INTERVAL_MS, 1L, null,
+                    DevelopmentCollectorSimulation.defaultChannels(channelCount), List.of(),
+                    CollectorHistoryFaults.none());
+        }
+    }
+
+    record CollectorChannelState(String channelCode, List<CollectorMetricState> metrics)
+    {
+        public CollectorChannelState { metrics = List.copyOf(metrics); }
+    }
+
+    record CollectorMetricState(String metricCode, BigDecimal value, String unit) { }
+
+    record CollectorMeasurementRecord(String adapterCode, String collectorCode, String channelCode,
+            long sequenceId, Instant deviceTime, String deviceTimeRaw, Instant serverReceivedAt,
+            String metricCode, BigDecimal value, String unit) { }
+
+    record CollectorHistoryFaults(List<Long> missingSequences, Long duplicateSequence,
+            Long conflictingSequence, boolean outOfOrder)
+    {
+        public CollectorHistoryFaults
+        {
+            missingSequences = missingSequences == null ? List.of() : List.copyOf(missingSequences);
+        }
+
+        public static CollectorHistoryFaults none()
+        {
+            return new CollectorHistoryFaults(List.of(), null, null, false);
+        }
+    }
 
     record ChannelState(int channelId, boolean online, DeviceWorkStatus workStatus) { }
 

--
Gitblit v1.7.1