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 selectDiscoveredCollectorList() { Set 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(); } }