From dc3f9cc91759823ce59486f19b138be4b296a0f1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 28 四月 2026 09:43:28 +0800
Subject: [PATCH] #

---
 src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java |   99 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 67 insertions(+), 32 deletions(-)

diff --git a/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java b/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
index 864c535..1620f70 100644
--- a/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
+++ b/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
@@ -10,12 +10,10 @@
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.BasDualCrnp;
 import com.zy.asrs.entity.BasStation;
-import com.zy.asrs.entity.StationFlowCapacity;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.BasCrnpService;
 import com.zy.asrs.service.BasDualCrnpService;
 import com.zy.asrs.service.BasStationService;
-import com.zy.asrs.service.StationFlowCapacityService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.enums.RedisKeyType;
@@ -79,8 +77,6 @@
     @Mock
     private BasDualCrnpService basDualCrnpService;
     @Mock
-    private StationFlowCapacityService stationFlowCapacityService;
-    @Mock
     private WrkMastService wrkMastService;
     @Mock
     private RedisUtil redisUtil;
@@ -96,7 +92,6 @@
         ReflectionTestUtils.setField(service, "basStationService", basStationService);
         ReflectionTestUtils.setField(service, "basCrnpService", basCrnpService);
         ReflectionTestUtils.setField(service, "basDualCrnpService", basDualCrnpService);
-        ReflectionTestUtils.setField(service, "stationFlowCapacityService", stationFlowCapacityService);
         ReflectionTestUtils.setField(service, "wrkMastService", wrkMastService);
         ReflectionTestUtils.setField(service, "transactionManager", transactionManager);
         ReflectionTestUtils.setField(service, "redisUtil", redisUtil);
@@ -168,41 +163,78 @@
     }
 
     @Test
-    void rejectCrnOutBatchRunningLimitRangeAndStepCases() {
+    void crnOutBatchRunningLimitAllowsStepThreeAndRejectsRangeAndStepCases() {
         when(configService.getOne(any(Wrapper.class))).thenReturn(config("crnOutBatchRunningLimit", "10"));
 
         service.apply(request(true,
                 command("sys_config", null, "crnOutBatchRunningLimit", "13"),
+                command("sys_config", null, "crnOutBatchRunningLimit", "14"),
                 command("sys_config", null, "crnOutBatchRunningLimit", "21")
         ));
 
         List<AiAutoTuneChange> changes = savedChanges();
-        assertEquals("rejected", changes.get(0).getResultStatus());
-        assertTrue(changes.get(0).getRejectReason().contains("姝ラ暱涓嶈兘瓒呰繃 2"));
+        assertEquals("dry_run", changes.get(0).getResultStatus());
+        assertEquals("13", changes.get(0).getRequestedValue());
         assertEquals("rejected", changes.get(1).getResultStatus());
-        assertTrue(changes.get(1).getRejectReason().contains("1~20"));
+        assertTrue(changes.get(1).getRejectReason().contains("姝ラ暱涓嶈兘瓒呰繃 3"));
+        assertEquals("rejected", changes.get(2).getResultStatus());
+        assertTrue(changes.get(2).getRejectReason().contains("1~20"));
     }
 
     @Test
-    void rejectMaxInTaskRangeAndStepCases() {
+    void maxInTaskAllowsStepThreeAndRejectsRangeAndStepCases() {
         when(basCrnpService.getById(1)).thenReturn(crn(1, 1, 5));
 
         service.apply(request(true,
-                command("crn", "1", "maxInTask", "7"),
+                command("crn", "1", "maxInTask", "8"),
+                command("crn", "1", "maxInTask", "9"),
                 command("crn", "1", "maxInTask", "11")
         ));
 
         List<AiAutoTuneChange> changes = savedChanges();
-        assertEquals("rejected", changes.get(0).getResultStatus());
-        assertTrue(changes.get(0).getRejectReason().contains("姝ラ暱涓嶈兘瓒呰繃 1"));
+        assertEquals("dry_run", changes.get(0).getResultStatus());
+        assertEquals("8", changes.get(0).getRequestedValue());
         assertEquals("rejected", changes.get(1).getResultStatus());
-        assertTrue(changes.get(1).getRejectReason().contains("0~10"));
+        assertTrue(changes.get(1).getRejectReason().contains("姝ラ暱涓嶈兘瓒呰繃 3"));
+        assertEquals("rejected", changes.get(2).getResultStatus());
+        assertTrue(changes.get(2).getRejectReason().contains("0~10"));
+    }
+
+    @Test
+    void maxOutTaskAllowsStepThreeAndRejectsStepFour() {
+        when(basCrnpService.getById(1)).thenReturn(crn(1, 1, 1));
+
+        service.apply(request(true,
+                command("crn", "1", "maxOutTask", "4"),
+                command("crn", "1", "maxOutTask", "5")
+        ));
+
+        List<AiAutoTuneChange> changes = savedChanges();
+        assertEquals("dry_run", changes.get(0).getResultStatus());
+        assertEquals("4", changes.get(0).getRequestedValue());
+        assertEquals("rejected", changes.get(1).getResultStatus());
+        assertTrue(changes.get(1).getRejectReason().contains("姝ラ暱涓嶈兘瓒呰繃 3"));
+    }
+
+    @Test
+    void dualCrnMaxOutTaskAllowsStepThreeAndRejectsStepFour() {
+        when(basDualCrnpService.getById(2)).thenReturn(dualCrn(2, 1, 1));
+
+        service.apply(request(true,
+                command("dual_crn", "2", "maxOutTask", "4"),
+                command("dual_crn", "2", "maxOutTask", "5")
+        ));
+
+        List<AiAutoTuneChange> changes = savedChanges();
+        assertEquals("dry_run", changes.get(0).getResultStatus());
+        assertEquals("4", changes.get(0).getRequestedValue());
+        assertEquals("rejected", changes.get(1).getResultStatus());
+        assertTrue(changes.get(1).getRejectReason().contains("姝ラ暱涓嶈兘瓒呰繃 3"));
     }
 
     @Test
     void rejectStationOutTaskLimitAboveDirectionalBufferCapacity() {
-        when(basStationService.getById(101)).thenReturn(station(101, 1));
-        when(stationFlowCapacityService.getOne(any(Wrapper.class))).thenReturn(capacity(101, "OUT", 2));
+        when(basStationService.getById(101)).thenReturn(station(101, 1, 2));
 
         service.apply(request(true, command("station", "101", "outTaskLimit", "3")));
 
@@ -220,7 +252,6 @@
         List<AiAutoTuneChange> changes = savedChanges();
         assertEquals("rejected", changes.get(0).getResultStatus());
         assertTrue(changes.get(0).getRejectReason().contains("闇�瑕佷汉宸ュ厛鍒濆鍖栦负鏈夐檺鍊�"));
-        verify(stationFlowCapacityService, never()).getOne(any(Wrapper.class));
     }
 
     @Test
@@ -232,13 +263,11 @@
         List<AiAutoTuneChange> changes = savedChanges();
         assertEquals("rejected", changes.get(0).getResultStatus());
         assertTrue(changes.get(0).getRejectReason().contains("闇�瑕佷汉宸ュ厛鍒濆鍖栦负鏈夐檺鍊�"));
-        verify(stationFlowCapacityService, never()).getOne(any(Wrapper.class));
     }
 
     @Test
     void allowStationOutTaskLimitZeroToOneAsFiniteStep() {
-        when(basStationService.getById(101)).thenReturn(station(101, 0));
-        when(stationFlowCapacityService.getOne(any(Wrapper.class))).thenReturn(capacity(101, "OUT", 1));
+        when(basStationService.getById(101)).thenReturn(station(101, 0, 1));
 
         AutoTuneApplyResult result = service.apply(request(true, command("station", "101", "outTaskLimit", "1")));
 
@@ -247,6 +276,17 @@
         assertEquals("dry_run", changes.get(0).getResultStatus());
         assertEquals("0", changes.get(0).getOldValue());
         assertEquals("1", changes.get(0).getRequestedValue());
+    }
+
+    @Test
+    void rejectStationOutTaskLimitWithoutOutBufferCapacity() {
+        when(basStationService.getById(101)).thenReturn(station(101, 0));
+
+        service.apply(request(true, command("station", "101", "outTaskLimit", "1")));
+
+        List<AiAutoTuneChange> changes = savedChanges();
+        assertEquals("rejected", changes.get(0).getResultStatus());
+        assertTrue(changes.get(0).getRejectReason().contains("缂哄皯 outBufferCapacity"));
     }
 
     @Test
@@ -267,8 +307,7 @@
     @Test
     void realMixedValidAndInvalidBatchRejectsAndDoesNotWriteTargets() {
         when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "10"));
-        when(basStationService.getById(101)).thenReturn(station(101, 1));
-        when(stationFlowCapacityService.getOne(any(Wrapper.class))).thenReturn(capacity(101, "OUT", 2));
+        when(basStationService.getById(101)).thenReturn(station(101, 1, 2));
 
         AutoTuneApplyResult result = service.apply(request(false,
                 command("sys_config", null, "conveyorStationTaskLimit", "15"),
@@ -376,8 +415,7 @@
     @Test
     void applyMixedBatchSuccessfully() {
         when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "10"));
-        when(basStationService.getById(101)).thenReturn(station(101, 1));
-        when(stationFlowCapacityService.getOne(any(Wrapper.class))).thenReturn(capacity(101, "OUT", 2));
+        when(basStationService.getById(101)).thenReturn(station(101, 1, 2));
         when(basCrnpService.getById(1)).thenReturn(crn(1, 1, 1));
         when(basDualCrnpService.getById(2)).thenReturn(dualCrn(2, 1, 1));
 
@@ -789,9 +827,14 @@
     }
 
     private BasStation station(Integer stationId, Integer outTaskLimit) {
+        return station(stationId, outTaskLimit, null);
+    }
+
+    private BasStation station(Integer stationId, Integer outTaskLimit, Integer outBufferCapacity) {
         BasStation station = new BasStation();
         station.setStationId(stationId);
         station.setOutTaskLimit(outTaskLimit);
+        station.setOutBufferCapacity(outBufferCapacity);
         return station;
     }
 
@@ -809,14 +852,6 @@
         dualCrnp.setMaxOutTask(maxOutTask);
         dualCrnp.setMaxInTask(maxInTask);
         return dualCrnp;
-    }
-
-    private StationFlowCapacity capacity(Integer stationId, String directionCode, Integer bufferCapacity) {
-        StationFlowCapacity capacity = new StationFlowCapacity();
-        capacity.setStationId(stationId);
-        capacity.setDirectionCode(directionCode);
-        capacity.setBufferCapacity(bufferCapacity);
-        return capacity;
     }
 
     private AiAutoTuneChange successChange(Long jobId,

--
Gitblit v1.9.1