yeg
4 天以前 65667e597b24c14624304a639bd883d3e2baa71f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.battery.device.api.model;
 
import java.time.Instant;
 
/**
 * 发现结果中的一个通道。
 * {@code lastDataAt} 是来源里最近一次采样行的设备时间;它是"最近是否有新采样行写入"这一条依据的取值,
 * 与设备结束时间或通道水位线列无关。来源不提供该事实时保持为空。
 *
 * <p>{@code sourceDisplayNo} 是**来源自己的叫法**(通常是它自己软件里显示的通道号,也可能是文本):
 * 各厂商给通道编号的方式不同(新威按「单元-通道」,22 所按它界面上的 01–30),
 * 由来源在发现结果里报出来,界面与登记就用它显示,操作员才能拿它跟厂商软件对上。
 * 来源不提供时保持为空,界面回退到身份里的「单元-通道」。
 * 它只是展示名,**不参与通道身份**(身份始终是设备的存储事实),所以改它不需要迁移任何数据。
 */
public record DetectedChannel(ChannelIdentity identity, String serverIp, boolean available,
        DetectedDeviceMetadata deviceMetadata, Instant lastDataAt, String sourceDisplayNo)
{
    public DetectedChannel(ChannelIdentity identity, String serverIp, boolean available)
    {
        this(identity, serverIp, available, DetectedDeviceMetadata.empty(), null, null);
    }
 
    public DetectedChannel(ChannelIdentity identity, String serverIp, boolean available,
            DetectedDeviceMetadata deviceMetadata)
    {
        this(identity, serverIp, available, deviceMetadata, null, null);
    }
 
    /** 兼容不带来源叫法的既有适配器。 */
    public DetectedChannel(ChannelIdentity identity, String serverIp, boolean available,
            DetectedDeviceMetadata deviceMetadata, Instant lastDataAt)
    {
        this(identity, serverIp, available, deviceMetadata, lastDataAt, null);
    }
}