fix(lastleg): align outbound pallet workflows

This commit is contained in:
2026-09-07 20:51:03 +08:00
parent 4895c4f738
commit 98dafc13ca
12 changed files with 176 additions and 12 deletions
@@ -167,6 +167,41 @@ class InboundPdaWorkflowServiceTest {
targetPallet.getWarehouseLocationId(), "assign-wrong-warehouse")));
}
@Test
void resolvedAssignmentReplacesPlanPalletNumberWithPhysicalWarehouseCode() {
targetPallet.setPalletNo("IP-ACY2-20260907-597057-P001");
targetPallet.setWarehousePalletId(null);
targetPallet.setWarehouseLocationId(null);
targetPallet.setWarehouseResourceLockId(null);
targetPallet.setAssignmentStatus("PENDING_ASSIGNMENT");
WarehouseResourceGateway.WarehousePalletReference resource =
new WarehouseResourceGateway.WarehousePalletReference(188L, "A002", 88L, 288L,
"IDLE", "ACY2", 1);
when(warehouse.reserve("100", 88L, 188L, 288L, "INBOUND_CONTAINER_DESTINATION_PALLET",
"CONT-1:WH-A", "INBOUND_CONTAINER_DESTINATION_PALLET:CONT-1:WH-A:188")).thenReturn(999L);
service.assignResolvedPallet("100", plan, targetPallet, resource);
assertEquals("A002", targetPallet.getPalletNo());
assertEquals(188L, targetPallet.getWarehousePalletId());
assertEquals(288L, targetPallet.getWarehouseLocationId());
verify(repository).update(targetPallet);
}
@Test
void resolvedAssignmentRejectsPhysicalPalletWithoutBusinessCodeBeforeReservation() {
targetPallet.setWarehouseResourceLockId(null);
WarehouseResourceGateway.WarehousePalletReference resource =
new WarehouseResourceGateway.WarehousePalletReference(188L, " ", 88L, 288L,
"IDLE", "ACY2", 1);
ResponseStatusException exception = assertThrows(ResponseStatusException.class,
() -> service.assignResolvedPallet("100", plan, targetPallet, resource));
assertEquals(409, exception.getStatusCode().value());
verify(warehouse, never()).reserve(any(), anyLong(), anyLong(), anyLong(), any(), any(), any());
}
@Test
void cartonScanBindsOnlyExpectedCartonAndRemoveMakesItScannableAgain() {
InboundPlanCarton carton = carton("BOX-001", "UNASSIGNED", targetLine.getId(), "WH-A");
@@ -87,10 +87,12 @@ class InboundStockReceiptServiceTest {
assertEquals("Customer", request.getValue().customerName());
assertEquals("900", request.getValue().overseasWarehouseId());
assertEquals("Los Angeles", request.getValue().overseasWarehouseName());
assertEquals("PLT-21", request.getValue().palletNo());
ArgumentCaptor<InboundStockReceipt> receipt = ArgumentCaptor.forClass(InboundStockReceipt.class);
verify(receipts).insert(receipt.capture());
assertEquals(5L, receipt.getValue().getReceivedPackages());
assertEquals(10L, receipt.getValue().getInventoryPositionId());
assertEquals("PLT-21", receipt.getValue().getPalletNo());
assertEquals("INBOUND_COMPLETED", fixture.order.getCurrentStatus());
assertEquals("INBOUND_PLAN:COMPLETED", fixture.order.getSubOrderStatus());
ArgumentCaptor<LastlegOrderStatusHistory> history = ArgumentCaptor.forClass(LastlegOrderStatusHistory.class);