diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java index f855ecf56..8cf95b7d0 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/service/WarehouseTransferService.java @@ -1222,12 +1222,10 @@ public class WarehouseTransferService { @Transactional(readOnly = true) public List pdaCandidates(long overseasWarehouseId) { - List candidates = transfers.selectList(new LambdaQueryWrapper() - .eq(WarehouseTransferOrder::getOperatingWarehouseId, String.valueOf(overseasWarehouseId)) - // 只有尚未完成 PDA 收货/测量的状态才进入测量列表。换标、待排车及已出库 - // 都是后续履约阶段,不能继续占用 PDA 的“当前测量单”锁。 - .in(WarehouseTransferOrder::getStatus, List.of(WAIT_PDA_RECEIVING, APPROVED, ALLOCATED)) - .orderByDesc(WarehouseTransferOrder::getUpdatedAt)); + // PDA 测量列表只接收明确进入 WAIT_PDA_RECEIVING 的在途转运单。 + // APPROVED 是已有库存转运的后续处理入口,ALLOCATED 已进入库存出库流程; + // 两者都不能再次显示为待测量,更不能引导操作员重复进入托盘作业。 + List candidates = transfers.pdaCandidates(String.valueOf(overseasWarehouseId)); Map relabelApplicationsByNo = relabelApplications(candidates); return candidates.stream().map(value -> { RelabelApplication relabel = StringUtils.hasText(value.getRelabelNo()) diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java index 0a9eb9e39..b2262dfbf 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java @@ -80,6 +80,20 @@ import static org.mockito.Mockito.times; @ExtendWith(MockitoExtension.class) class WarehouseTransferServiceTest { + @Test + void pdaCandidatesUseTheMapperRestrictedToWaitingMeasurementOnly() { + WarehouseTransferOrder transfer = transfer(WarehouseTransferService.WAIT_PDA_RECEIVING); + transfer.setOperatingWarehouseId("900"); + when(transfers.pdaCandidates("900")).thenReturn(List.of(transfer)); + + var result = service.pdaCandidates(900L); + + assertEquals(1, result.size()); + assertEquals(WarehouseTransferService.WAIT_PDA_RECEIVING, result.get(0).status()); + verify(transfers).pdaCandidates("900"); + verify(transfers, never()).selectList(any()); + } + @Test void customerMainStatusFiltersExpandToInternalWorkflowStates() { assertEquals(List.of(WarehouseTransferService.APPROVED, WarehouseTransferService.WAIT_PDA_RECEIVING),