From cd04aa8b887e82ec664e42f0bc353c079be1d2c5 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 17:57:19 +0800
Subject: [PATCH] fix: filter auto tune out station limits

---
 src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java b/src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java
index 2e4a75d..d1b62d8 100644
--- a/src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java
+++ b/src/test/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImplTest.java
@@ -2,7 +2,10 @@
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.zy.asrs.entity.BasStation;
+import com.zy.asrs.entity.StationFlowCapacity;
 import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasStationService;
+import com.zy.asrs.service.StationFlowCapacityService;
 import com.zy.asrs.service.WrkMastService;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -18,6 +21,7 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -61,10 +65,61 @@
         assertTrue(normalizedSqlSegment.contains("OR wrk_sts IS NULL"));
     }
 
+    @Test
+    void loadStationOutTaskLimitsOnlyQueriesConfiguredOutDirectionStations() {
+        BasStationService basStationService = mock(BasStationService.class);
+        StationFlowCapacityService stationFlowCapacityService = mock(StationFlowCapacityService.class);
+        ReflectionTestUtils.setField(service, "basStationService", basStationService);
+        ReflectionTestUtils.setField(service, "stationFlowCapacityService", stationFlowCapacityService);
+        when(stationFlowCapacityService.list(any(Wrapper.class))).thenReturn(Arrays.asList(
+                capacity(101, "OUT"),
+                capacity(102, "OUT")
+        ));
+        when(basStationService.list(any(Wrapper.class))).thenReturn(Arrays.asList(
+                station(101, 2),
+                station(102, 3)
+        ));
+
+        Map<String, Integer> result = ReflectionTestUtils.invokeMethod(service, "loadStationOutTaskLimits");
+
+        assertEquals(2, result.size());
+        assertEquals(2, result.get("101"));
+        assertEquals(3, result.get("102"));
+
+        ArgumentCaptor<Wrapper<StationFlowCapacity>> capacityWrapperCaptor = ArgumentCaptor.forClass(Wrapper.class);
+        verify(stationFlowCapacityService).list(capacityWrapperCaptor.capture());
+        assertTrue(capacityWrapperCaptor.getValue().getSqlSegment().contains("direction_code ="));
+
+        ArgumentCaptor<Wrapper<BasStation>> stationWrapperCaptor = ArgumentCaptor.forClass(Wrapper.class);
+        verify(basStationService).list(stationWrapperCaptor.capture());
+        assertTrue(stationWrapperCaptor.getValue().getSqlSegment().contains("station_id IN"));
+    }
+
+    @Test
+    void loadStationOutTaskLimitsDoesNotQueryStationsWhenNoOutCapacityExists() {
+        BasStationService basStationService = mock(BasStationService.class);
+        StationFlowCapacityService stationFlowCapacityService = mock(StationFlowCapacityService.class);
+        ReflectionTestUtils.setField(service, "basStationService", basStationService);
+        ReflectionTestUtils.setField(service, "stationFlowCapacityService", stationFlowCapacityService);
+        when(stationFlowCapacityService.list(any(Wrapper.class))).thenReturn(Collections.emptyList());
+
+        Map<String, Integer> result = ReflectionTestUtils.invokeMethod(service, "loadStationOutTaskLimits");
+
+        assertTrue(result.isEmpty());
+        verify(basStationService, never()).list(any(Wrapper.class));
+    }
+
     private BasStation station(Integer stationId, Integer outTaskLimit) {
         BasStation station = new BasStation();
         station.setStationId(stationId);
         station.setOutTaskLimit(outTaskLimit);
         return station;
     }
+
+    private StationFlowCapacity capacity(Integer stationId, String directionCode) {
+        StationFlowCapacity capacity = new StationFlowCapacity();
+        capacity.setStationId(stationId);
+        capacity.setDirectionCode(directionCode);
+        return capacity;
+    }
 }

--
Gitblit v1.9.1