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 直连取数与逐行接收

---
 ruoyi-admin/src/main/java/com/battery/business/runtime/RedisDeviceDiscoveryCandidateStore.java |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/battery/business/runtime/RedisDeviceDiscoveryCandidateStore.java b/ruoyi-admin/src/main/java/com/battery/business/runtime/RedisDeviceDiscoveryCandidateStore.java
index 4357819..a21b4b2 100644
--- a/ruoyi-admin/src/main/java/com/battery/business/runtime/RedisDeviceDiscoveryCandidateStore.java
+++ b/ruoyi-admin/src/main/java/com/battery/business/runtime/RedisDeviceDiscoveryCandidateStore.java
@@ -129,7 +129,8 @@
                 object.getString("deviceCode"), object.getIntValue("devtype"), object.getIntValue("devid"),
                 object.getString("ip"), object.getString("mac"), object.getString("name"),
                 object.getString("manufacturer"), object.getString("model"), channels,
-                requiredInstant(object, "observedAt"), requiredInstant(object, "expiresAt"));
+                requiredInstant(object, "observedAt"), requiredInstant(object, "expiresAt"),
+                optionalInstant(object, "lastDataAt"));
     }
 
     private ChannelCandidate channelCandidate(Object value)
@@ -141,7 +142,8 @@
                 identity.getIntValue("subdevid"), identity.getIntValue("chlid"));
         RealtimeSnapshot latestSnapshot = object.getObject("latestSnapshot", RealtimeSnapshot.class);
         return new ChannelCandidate(channelIdentity, object.getBooleanValue("online"),
-                DeviceWorkStatus.valueOf(object.getString("workStatus")), requiredInstant(object, "observedAt"), latestSnapshot);
+                DeviceWorkStatus.valueOf(object.getString("workStatus")), requiredInstant(object, "observedAt"),
+                latestSnapshot, optionalInstant(object, "lastDataAt"));
     }
 
     private CollectorCandidate collectorCandidate(Object value)
@@ -161,6 +163,12 @@
         return value;
     }
 
+    /** 最近数据时间只在厂商存储来源上存在,缺失是正常取值。 */
+    private Instant optionalInstant(JSONObject object, String field)
+    {
+        return object.getObject(field, Instant.class);
+    }
+
     private void save(StoredState state)
     {
         redisTemplate.opsForValue().set(STATE_KEY, JSON.toJSONString(state));

--
Gitblit v1.7.1