fix(lastleg): refresh received pallets before delivery transfer

This commit is contained in:
2026-09-07 19:16:30 +08:00
parent e0bb7de0cf
commit df8610f458
2 changed files with 17 additions and 0 deletions
@@ -114,6 +114,7 @@ public class DeliveryTransferService {
if (Set.of("CANCELLED", "DEPARTED", "PARTIAL_DEPARTED", "COMPLETED").contains(dispatch.getStatus())) {
throw conflict("Dispatch cannot be transferred to delivery in its current status");
}
dispatchItems.bindReceivedPallets(customerId, dispatch.getId());
List<DispatchItem> items = dispatchItems.findByDispatchOrder(customerId, dispatch.getId());
if (items.isEmpty()) throw conflict("Dispatch has no pallets");
if (items.stream().anyMatch(item -> item.getWarehousePalletId() == null)) {
@@ -53,6 +53,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -140,6 +141,21 @@ class DeliveryTransferServiceTest {
assertTrue(!result.replayed());
}
@Test
void transferBackfillsReceivedPlanPalletsBeforeCheckingDispatchItems() {
DispatchOrder dispatch = dispatch(101L, "DSP-101", "TENANT-A");
when(dispatchOrders.lockGlobalByDispatchNo("DSP-101")).thenReturn(dispatch);
when(dispatchItems.bindReceivedPallets("TENANT-A", 101L)).thenReturn(1);
when(dispatchItems.findByDispatchOrder("TENANT-A", 101L)).thenReturn(List.of(
item(201L, 501L, "PLT-501", "ONT8", "Ontario", "IN-A", 12)));
service.platformTransfer("DSP-101", "U-1", transferRequest("transfer-after-receiving", null));
var ordered = inOrder(dispatchItems);
ordered.verify(dispatchItems).bindReceivedPallets("TENANT-A", 101L);
ordered.verify(dispatchItems).findByDispatchOrder("TENANT-A", 101L);
}
@Test
void transferCollectsLxCodesWhenAnInboundCodeBelongsToMultipleTailOrders() {
DispatchOrder dispatch = dispatch(101L, "DSP-101", "TENANT-A");