From a04222c873e5e55f48c8d33b5c0bc46fa524ac8d Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 08 十月 2026 13:20:39 +0800
Subject: [PATCH] 界面显示号改为来源自报,并给出无歧义的来源定位
---
battery-device-api/src/main/java/com/battery/device/api/discovery/DeviceDiscoveryCandidateStore.java | 38 +++++++++++++++++++++++++++++++++++---
1 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/battery-device-api/src/main/java/com/battery/device/api/discovery/DeviceDiscoveryCandidateStore.java b/battery-device-api/src/main/java/com/battery/device/api/discovery/DeviceDiscoveryCandidateStore.java
index 54e5663..7bb842c 100644
--- a/battery-device-api/src/main/java/com/battery/device/api/discovery/DeviceDiscoveryCandidateStore.java
+++ b/battery-device-api/src/main/java/com/battery/device/api/discovery/DeviceDiscoveryCandidateStore.java
@@ -43,22 +43,54 @@
}
}
+ /**
+ * 未登记的候选设备。{@code lastDataAt} 取该设备各通道最近的采样行时间,
+ * 供操作员判断哪几台设备现在真的在产出数据;它不改变候选的取舍,登记范围由操作员决定。
+ */
record CabinetCandidate(String adapterCode, Long adapterId, String deviceCode, int devtype, int devid,
String ip, String mac, String name, String manufacturer, String model,
- List<ChannelCandidate> channels, Instant observedAt, Instant expiresAt)
+ List<ChannelCandidate> channels, Instant observedAt, Instant expiresAt, Instant lastDataAt)
{
public CabinetCandidate { channels = List.copyOf(channels); }
public boolean online() { return channels.stream().anyMatch(ChannelCandidate::online); }
+
+ /** 兼容不含最近数据时间的既有候选。 */
+ public CabinetCandidate(String adapterCode, Long adapterId, String deviceCode, int devtype, int devid,
+ String ip, String mac, String name, String manufacturer, String model,
+ List<ChannelCandidate> channels, Instant observedAt, Instant expiresAt)
+ {
+ this(adapterCode, adapterId, deviceCode, devtype, devid, ip, mac, name, manufacturer, model,
+ channels, observedAt, expiresAt, null);
+ }
}
+ /**
+ * 通道候选;{@code lastDataAt} 是该通道来源里最近一次采样行的设备时间。
+ * {@code sourceDisplayNo} 是来源自己的通道叫法(见 {@code DetectedChannel}),
+ * 只用于界面与登记显示,不参与通道身份。
+ */
record ChannelCandidate(ChannelIdentity identity, boolean online, DeviceWorkStatus workStatus,
- Instant observedAt, RealtimeSnapshot latestSnapshot)
+ Instant observedAt, RealtimeSnapshot latestSnapshot, Instant lastDataAt, String sourceDisplayNo)
{
/** 兼容仅有状态的旧发现候选。 */
public ChannelCandidate(ChannelIdentity identity, boolean online, DeviceWorkStatus workStatus,
Instant observedAt)
{
- this(identity, online, workStatus, observedAt, null);
+ this(identity, online, workStatus, observedAt, null, null, null);
+ }
+
+ /** 兼容不含最近数据时间的既有候选。 */
+ public ChannelCandidate(ChannelIdentity identity, boolean online, DeviceWorkStatus workStatus,
+ Instant observedAt, RealtimeSnapshot latestSnapshot)
+ {
+ this(identity, online, workStatus, observedAt, latestSnapshot, null, null);
+ }
+
+ /** 兼容不带来源通道叫法的既有候选。 */
+ public ChannelCandidate(ChannelIdentity identity, boolean online, DeviceWorkStatus workStatus,
+ Instant observedAt, RealtimeSnapshot latestSnapshot, Instant lastDataAt)
+ {
+ this(identity, online, workStatus, observedAt, latestSnapshot, lastDataAt, null);
}
}
--
Gitblit v1.7.1