From de98fe81cca90dd855e0519f065e77fce56333ef Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 26 八月 2026 16:28:30 +0800
Subject: [PATCH] fix(device): address adapter discovery review
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImpl.java | 36 +++++++++++++++++++++++++-----------
1 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImpl.java
index 5b06844..6d26688 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImpl.java
@@ -3,16 +3,21 @@
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.device.api.DeviceAdapterException;
-import com.ruoyi.device.bts.BtsProtocolException;
-import com.ruoyi.device.bts.BtsTransportException;
import com.ruoyi.device.model.AdapterCapabilities;
+import com.ruoyi.device.model.ChannelIdentity;
+import com.ruoyi.device.model.DetectedChannel;
+import com.ruoyi.device.model.RealtimeSnapshot;
import com.ruoyi.device.registry.AdapterInstanceConfig;
import com.ruoyi.device.registry.AdapterRegistryException;
import com.ruoyi.device.registry.DeviceAdapterRegistry;
@@ -110,21 +115,25 @@
try
{
registry.synchronize(toRuntimeConfig(adapter));
- List<com.ruoyi.device.model.DetectedChannel> channels = registry.require(adapter.getAdapterCode()).discoverChannels();
+ DiscoveryObservation observation = registry.execute(adapter.getAdapterCode(), runtime -> {
+ List<DetectedChannel> channels = runtime.discoverChannels();
+ Set<ChannelIdentity> available = channels.stream()
+ .filter(DetectedChannel::available)
+ .map(DetectedChannel::identity)
+ .collect(Collectors.toCollection(LinkedHashSet::new));
+ return new DiscoveryObservation(channels, runtime.inquire(available));
+ });
Instant observedAt = Instant.now();
- AdapterDiscoveryResult result = persistence.persist(adapter, channels, observedAt);
+ AdapterDiscoveryResult result = persistence.persist(adapter, observation.channels(),
+ observation.snapshots(), observedAt);
mapper.updateDiscoverySuccess(adapterId, observedAt);
return result;
}
- catch (BtsTransportException exception)
+ catch (DeviceAdapterException exception)
{
- return failDiscovery(adapterId, exception.reason().name(), exception);
+ return failDiscovery(adapterId, exception.failureCode(), exception);
}
- catch (BtsProtocolException exception)
- {
- return failDiscovery(adapterId, exception.reason().name(), exception);
- }
- catch (DeviceAdapterException | AdapterRegistryException exception)
+ catch (AdapterRegistryException exception)
{
return failDiscovery(adapterId, "ADAPTER_FAILURE", exception);
}
@@ -196,4 +205,9 @@
}
private ServiceException error(String message, int code) { return new ServiceException(message, code); }
+
+ private record DiscoveryObservation(List<DetectedChannel> channels,
+ Map<ChannelIdentity, RealtimeSnapshot> snapshots)
+ {
+ }
}
--
Gitblit v1.7.1