package com.battery.business.runtime;
|
|
import java.util.List;
|
import java.util.Set;
|
import java.time.Instant;
|
import org.springframework.stereotype.Service;
|
import com.battery.device.api.discovery.DeviceDiscoveryCandidateStore;
|
import com.battery.business.domain.vo.DiscoveredCollectorVo;
|
import com.battery.business.service.ICollectorDiscoveryService;
|
import com.battery.business.service.ITCollectorService;
|
|
/** 在应用装配边界将临时模拟采集器暴露给现有采集器页面。 */
|
@Service
|
public class DevelopmentCollectorDiscoveryService implements ICollectorDiscoveryService
|
{
|
private final DeviceDiscoveryCandidateStore candidateStore;
|
private final ITCollectorService collectorService;
|
|
public DevelopmentCollectorDiscoveryService(DeviceDiscoveryCandidateStore candidateStore,
|
ITCollectorService collectorService)
|
{
|
this.candidateStore = candidateStore;
|
this.collectorService = collectorService;
|
}
|
|
/** 返回未过期且未登记的采集器,离线事实不影响发现展示或登记资格。 */
|
@Override
|
public List<DiscoveredCollectorVo> selectDiscoveredCollectorList()
|
{
|
Set<String> registeredCodes = collectorService.selectRegisteredCollectorCodes();
|
return candidateStore.snapshot(Instant.now()).collectors().stream()
|
.filter(collector -> !registeredCodes.contains(collector.deviceCode()))
|
.map(collector -> new DiscoveredCollectorVo(collector.deviceCode(), collector.ip(), collector.mac(),
|
collector.name(), collector.manufacturer(), collector.model(), collector.channelCount(),
|
collector.online() ? "在线" : "离线", "空闲", "-"))
|
.toList();
|
}
|
}
|