From 1c26cdb81070af7f29df4462d3bfc1ae588ff8f3 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期日, 30 八月 2026 14:11:34 +0800
Subject: [PATCH] 模拟器优化

---
 ruoyi-admin/src/main/java/com/ruoyi/config/RedisBtsSimulatorStateStore.java |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/config/RedisBtsSimulatorStateStore.java b/ruoyi-admin/src/main/java/com/ruoyi/config/RedisBtsSimulatorStateStore.java
index 1733bf7..f151ea6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/config/RedisBtsSimulatorStateStore.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/config/RedisBtsSimulatorStateStore.java
@@ -14,6 +14,7 @@
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.device.simulator.BtsSimulatorStateStore;
+import com.ruoyi.device.simulator.BtsSimulatorStateStore.BtsDeviceProfile;
 import com.ruoyi.device.model.DeviceWorkStatus;
 
 /** 将开发模拟器完整状态写入 Redis,主状态不设置普通 TTL。 */
@@ -266,8 +267,20 @@
         JSONObject object = jsonObject(value);
         List<ChannelState> channels = new ArrayList<>();
         requiredArray(object, "channels").forEach(item -> channels.add(channelState(item)));
+        BtsDeviceProfile profile = object.containsKey("profile") ? deviceProfile(object.getJSONObject("profile")) : null;
         return new DeviceState(requiredInteger(object, "deviceId"), object.getString("ip"),
-                object.getBooleanValue("online"), channels);
+                object.getBooleanValue("online"), channels, profile);
+    }
+
+    private BtsDeviceProfile deviceProfile(JSONObject object)
+    {
+        if (object == null) throw new IllegalStateException("Invalid BTS simulator device profile");
+        return new BtsDeviceProfile(requiredInteger(object, "devtype"), requiredInteger(object, "subDeviceId"),
+                object.getString("name"), object.getString("manufacturer"), object.getString("model"),
+                object.getString("serialNumber"), object.getString("firmwareVersion"),
+                requiredInteger(object, "channelCount"), requiredDecimal(object, "currentMinA"),
+                requiredDecimal(object, "currentMaxA"), requiredDecimal(object, "voltageMinV"),
+                requiredDecimal(object, "voltageMaxV"), requiredInteger(object, "sampleIntervalMs"));
     }
 
     private List<CollectorMeasurementRecord> embeddedCollectorHistory(JSONObject object)
@@ -405,6 +418,13 @@
         return value;
     }
 
+    private BigDecimal requiredDecimal(JSONObject object, String field)
+    {
+        BigDecimal value = object.getBigDecimal(field);
+        if (value == null) throw new IllegalStateException("Missing BTS simulator state field: " + field);
+        return value;
+    }
+
     private Instant requiredInstant(JSONObject object, String field)
     {
         Instant value = optionalInstant(object, field);

--
Gitblit v1.7.1