From 147428971be43eed90a79f3849f15000d3855390 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期一, 28 九月 2026 15:15:22 +0800
Subject: [PATCH] 实现新威 7.6 直连取数与逐行接收
---
battery-device-simulator/src/main/java/com/battery/device/simulator/BtsDevelopmentSimulator.java | 43 ++++++++++++++++++++++++++++++++++++++++---
1 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/battery-device-simulator/src/main/java/com/battery/device/simulator/BtsDevelopmentSimulator.java b/battery-device-simulator/src/main/java/com/battery/device/simulator/BtsDevelopmentSimulator.java
index a7728ba..5fa4690 100644
--- a/battery-device-simulator/src/main/java/com/battery/device/simulator/BtsDevelopmentSimulator.java
+++ b/battery-device-simulator/src/main/java/com/battery/device/simulator/BtsDevelopmentSimulator.java
@@ -7,10 +7,14 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
+import com.battery.device.api.DeviceAdapter;
import com.battery.device.api.model.DeviceWorkStatus;
import com.battery.device.api.model.DeviceConnectionStatus;
import com.battery.device.api.model.DeviceIdentity;
@@ -19,6 +23,7 @@
import com.battery.device.api.model.DetectedDeviceMetadata;
import com.battery.device.api.model.ChannelIdentity;
import com.battery.device.api.model.AdapterCapabilities;
+import com.battery.device.api.model.RealtimeSnapshot;
import com.battery.device.api.DeviceObservationAdapter;
import com.battery.device.api.TestDataObservationAdapter;
import com.battery.device.simulator.BtsSimulatorStateStore;
@@ -37,8 +42,12 @@
import com.battery.device.simulator.DevelopmentCollectorSimulation;
import com.battery.device.simulator.DevelopmentCollectorSimulation.CollectorRealtimeSnapshot;
-/** 提供由开发后端托管的临时只读 BTS 模拟端点。 */
-public final class BtsDevelopmentSimulator implements TestDataObservationAdapter
+/**
+ * 提供由开发后端托管的临时只读 BTS 模拟端点。
+ * 同时实现发现与测试数据观测契约:模拟器直接暴露自身状态,因此发现与取数按同一实例解析,
+ * 不再需要单独注入一个扩展观测 Bean。TCP 端点仍保留给协议层测试使用。
+ */
+public final class BtsDevelopmentSimulator implements DeviceAdapter, TestDataObservationAdapter
{
public static final String HOST = "127.0.0.1";
public static final int DEFAULT_PORT = 15020;
@@ -102,6 +111,34 @@
for (ChannelIdentity requested : channels) result.put(requested, observation(requested));
recordRequest("observe", channels.toString(), result.toString());
return java.util.Map.copyOf(result);
+ }
+
+ /** 直接提供模拟器实时快照;不可观测通道不出现在结果里,与 BTS 协议解析后的语义一致。 */
+ @Override
+ public synchronized Map<ChannelIdentity, RealtimeSnapshot> inquire(Set<ChannelIdentity> channels)
+ {
+ if (channels == null || channels.isEmpty()) return Map.of();
+ Map<ChannelIdentity, RealtimeSnapshot> result = new LinkedHashMap<>();
+ for (ChannelIdentity requested : channels)
+ {
+ if (!canObserve(requested)) continue;
+ CabinetRealtime measurement = cabinetMeasurement(requested);
+ if (measurement == null) continue;
+ DeviceObservation observed = observation(requested);
+ result.put(requested, new RealtimeSnapshot(requested, observed.workStatus(), measurement.cycleNo(),
+ measurement.stepNo(), measurement.stepType(), null, BigDecimal.valueOf(measurement.currentA()),
+ BigDecimal.valueOf(measurement.voltageV()), BigDecimal.valueOf(measurement.capacityAh()),
+ BigDecimal.valueOf(measurement.energyWh()), totalTimeSeconds(requested),
+ measurement.relativeTimeSeconds(), null, measurement.serverReceivedAt(), Map.of(),
+ DeviceConnectionStatus.ONLINE, measurement.deviceTime(), List.of(), null));
+ }
+ recordRequest("inquire", channels.toString(), result.toString());
+ return Map.copyOf(result);
+ }
+
+ private long totalTimeSeconds(ChannelIdentity identity)
+ {
+ return requireDevice(identity.devid()).channels().get(identity.chlid() - 1).configuration().totalTimeSeconds();
}
private DeviceObservation observation(ChannelIdentity requested)
@@ -368,7 +405,7 @@
/** 请求采集器当前配置值;软件不可访问或设备离线时返回空测量。 */
@Override
- public synchronized CollectorRealtime latestCollector(String collectorCode)
+ public synchronized CollectorRealtime latestCollector(String adapterCode, String collectorCode)
{
CollectorState collector = state.collectors().stream().filter(item -> item.deviceCode().equals(collectorCode))
.findFirst().orElse(null);
--
Gitblit v1.7.1