From 20b346ef9d4fcbbbe05abfe08e4f4f0303b0812e Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期日, 30 八月 2026 20:37:45 +0800
Subject: [PATCH] 实现 Ticket12 人工结束与顺序接入

---
 ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImplTest.java |   31 ++++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImplTest.java b/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImplTest.java
index 8001b0d..4f1d265 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImplTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/DeviceAdapterServiceImplTest.java
@@ -39,6 +39,7 @@
 import com.ruoyi.system.domain.TDetectionChannel;
 import com.ruoyi.system.domain.TDeviceAdapter;
 import com.ruoyi.system.mapper.TDeviceAdapterMapper;
+import com.ruoyi.system.mapper.TDetectionCabinetMapper;
 import com.ruoyi.system.service.DeviceAdapterErrorCodes;
 
 @ExtendWith(MockitoExtension.class)
@@ -53,6 +54,9 @@
     @Mock
     private DeviceAdapter deviceAdapter;
 
+    @Mock
+    private TDetectionCabinetMapper detectionCabinetMapper;
+
     private DeviceAdapterServiceImpl service;
     private TDeviceAdapter adapter;
     private InMemoryDeviceDiscoveryCandidateStore candidateStore;
@@ -62,7 +66,7 @@
     {
         candidateStore = new InMemoryDeviceDiscoveryCandidateStore();
         service = new DeviceAdapterServiceImpl(adapterMapper, registry,
-                new DeviceDiscoveryPersistenceService(candidateStore), candidateStore);
+                new DeviceDiscoveryPersistenceService(candidateStore, detectionCabinetMapper), candidateStore);
         adapter = new TDeviceAdapter();
         adapter.setAdapterId(7L);
         adapter.setAdapterCode("lab-bts");
@@ -162,6 +166,10 @@
 
         var channel = candidateStore.snapshot(Instant.now()).cabinets().get(0).channels().get(0);
         assertEquals(DeviceWorkStatus.WORKING, channel.workStatus());
+        verify(detectionCabinetMapper).updateRegisteredChannelObservation(eq("lab-bts"), eq(22), eq(1), eq(2),
+                eq(3), eq("ONLINE"), eq("WORKING"), any(), eq(true));
+        verify(detectionCabinetMapper).updateRegisteredCabinetObservation(eq("lab-bts"), eq(22), eq(1),
+                eq("ONLINE"), any(), eq(true));
     }
 
     @Test
@@ -179,6 +187,27 @@
         verify(deviceAdapter, never()).inquire(any());
         assertEquals(false, cabinet.online());
         assertTrue(cabinet.channels().stream().noneMatch(channel -> channel.online()));
+        verify(detectionCabinetMapper).updateRegisteredChannelObservation(eq("lab-bts"), eq(22), eq(1), eq(1),
+                eq(1), eq("OFFLINE"), eq("UNKNOWN"), any(), eq(false));
+        verify(detectionCabinetMapper).updateRegisteredCabinetObservation(eq("lab-bts"), eq(22), eq(1),
+                eq("OFFLINE"), any(), eq(false));
+    }
+
+    @Test
+    void availableChannelWithoutSuccessfulSnapshotCannotAdvanceLastSeenBoundary()
+    {
+        ChannelIdentity identity = new ChannelIdentity("lab-bts", 22, 1, 1, 1);
+        when(adapterMapper.selectDeviceAdapterById(7L)).thenReturn(adapter);
+        when(deviceAdapter.discoverChannels()).thenReturn(List.of(new DetectedChannel(identity, "127.0.0.1", true)));
+        when(deviceAdapter.inquire(Set.of(identity))).thenReturn(Map.of());
+        stubRegistryExecution();
+
+        service.discover(7L);
+
+        verify(detectionCabinetMapper).updateRegisteredChannelObservation(eq("lab-bts"), eq(22), eq(1), eq(1),
+                eq(1), eq("ONLINE"), eq("UNKNOWN"), any(), eq(false));
+        verify(detectionCabinetMapper).updateRegisteredCabinetObservation(eq("lab-bts"), eq(22), eq(1),
+                eq("ONLINE"), any(), eq(false));
     }
 
     @Test

--
Gitblit v1.7.1