| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 未登记的候选设备。{@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); |
| | | } |
| | | } |
| | | |