fix(lastleg): bind merged return inventory to reusable target pallet

This commit is contained in:
2026-09-20 18:54:40 +08:00
parent 417cbc6363
commit 8ada2ef673
2 changed files with 20 additions and 1 deletions
@@ -50,6 +50,7 @@ class ReturnInventoryServiceTest {
@Mock LastlegOrderNoGenerator numbers;
@Mock ReturnOrderMapper orders;
@Mock ReturnReceiptMapper receipts;
@Mock com.baiyue.lastleg.palletops.gateway.PalletPhysicalGateway physicalPallets;
private ReturnInventoryService service;
@BeforeEach
@@ -64,6 +65,7 @@ class ReturnInventoryServiceTest {
ReflectionTestUtils.setField(service, "numbers", numbers);
ReflectionTestUtils.setField(service, "orders", orders);
ReflectionTestUtils.setField(service, "receiptMapper", receipts);
ReflectionTestUtils.setField(service, "physicalPallets", physicalPallets);
}
@Test
@@ -142,6 +144,8 @@ class ReturnInventoryServiceTest {
when(cartons.lockMark("RC-SOURCE")).thenReturn(source);
when(cartonItems.lockCarton(31L)).thenReturn(List.of(skuA, skuB));
when(numbers.next(anyString(), anyString(), anyLong())).thenReturn("RC-MERGED");
when(physicalPallets.ensureRelabelPallet(org.mockito.ArgumentMatchers.eq(42L), anyString()))
.thenReturn(new com.baiyue.lastleg.palletops.gateway.PalletPhysicalGateway.PalletReference(91L, "PLT-MERGED", 42L, null, "EMPTY", null, 0));
when(balances.adjustCartonQuantity(anyString(), anyString(), anyString(), anyLong())).thenReturn(1);
service.merge(new PdaWarehouseIdentity("operator-1", "操作员", 42L),
@@ -158,6 +162,10 @@ class ReturnInventoryServiceTest {
verify(cartons).insert(target.capture());
assertThat(target.getValue().getSourceBatchNo()).isEqualTo("RB-1");
assertThat(target.getValue().getSourceReturnNo()).isEqualTo("RT-1");
assertThat(target.getValue().getPalletCode()).isEqualTo("PLT-MERGED");
ArgumentCaptor<String> businessKey = ArgumentCaptor.forClass(String.class);
verify(physicalPallets).ensureRelabelPallet(org.mockito.ArgumentMatchers.eq(42L), businessKey.capture());
assertThat(businessKey.getValue()).matches("RETURN-MERGE:[0-9a-f]{64}");
}
@Test
@@ -190,6 +198,8 @@ class ReturnInventoryServiceTest {
ReturnInventoryCarton locked = prepareConcurrentSource();
when(cartonItems.lockCarton(31L)).thenReturn(List.of(item(41L, "SKU-A", 2L)));
when(numbers.next(anyString(), anyString(), anyLong())).thenReturn("RC-TARGET");
when(physicalPallets.ensureRelabelPallet(org.mockito.ArgumentMatchers.eq(42L), anyString()))
.thenReturn(new com.baiyue.lastleg.palletops.gateway.PalletPhysicalGateway.PalletReference(92L, "PLT-TARGET", 42L, null, "EMPTY", null, 0));
when(balances.adjustCartonQuantity(anyString(), anyString(), anyString(), anyLong())).thenReturn(1);
service.merge(new PdaWarehouseIdentity("operator-2", "操作员2", 42L), mergeRequest(2));
assertThat(locked.getTotalQuantity()).isZero();
@@ -224,7 +234,7 @@ class ReturnInventoryServiceTest {
verify(cartons, never()).insert(any(ReturnInventoryCarton.class));
verify(cartonItems, never()).insert(any(ReturnInventoryCartonItem.class));
verify(operations, never()).updateById(any(ReturnInventoryOperation.class));
verifyNoInteractions(orders, receipts, balances, numbers);
verifyNoInteractions(orders, receipts, balances, numbers, physicalPallets);
}
@Test