完善一件代发整托拣货回归

This commit is contained in:
2026-09-15 21:05:08 +08:00
parent 8b19085bc4
commit c099b19176
3 changed files with 66 additions and 2 deletions
@@ -735,6 +735,69 @@ class DeliveryTransferServiceTest {
assertEquals("SKU-1", detail.items().get(0).positions().get(0).skuCode());
}
@Test
void dropshipPalletScanAtomicallyPicksEveryRemainingCartonOnThePallet() {
var commands = org.mockito.Mockito.mock(com.baiyue.lastleg.inventory.command.service.InventoryCommandService.class);
ReflectionTestUtils.setField(service, "inventoryCommands", commands);
OutboundOrder outbound = outbound(301L, null, null, "OD-WH-1", "whole-pallet");
outbound.setOverseasWarehouseId("WH-1"); outbound.setOutboundType("ONE_CLICK_DROPSHIP"); outbound.setStatus("WAIT_PICK");
OutboundPdaTask task = new OutboundPdaTask(); task.setId(701L); task.setCustomerId("TENANT-A");
task.setOutboundOrderId(301L); task.setTaskNo("PDA-701"); task.setStatus("PENDING");
OutboundPalletItem item = pallet(501L, "DP-1", "ONT8", "Ontario", "IN-A", 2);
item.setSkuCode("SKU-1"); item.setCartonMarks("BOX-A,BOX-B"); item.setStatus("WAIT_PICK"); item.setPickedPackageCount(0);
OutboundPalletItem secondItem = pallet(501L, "DP-1", "ONT8", "Ontario", "IN-A", 1);
secondItem.setId(1502L); secondItem.setSkuCode("SKU-2"); secondItem.setCartonMarks("BOX-C");
secondItem.setStatus("WAIT_PICK"); secondItem.setPickedPackageCount(0);
InventoryPosition position = new InventoryPosition(); position.setId(901L); position.setCustomerId("TENANT-A");
position.setBalanceId(801L); position.setPalletId(501L); position.setPalletNo("DP-1");
position.setOverseasWarehouseId("WH-1"); position.setAvailablePackages(2L);
InventoryPosition secondPosition = new InventoryPosition(); secondPosition.setId(902L); secondPosition.setCustomerId("TENANT-A");
secondPosition.setBalanceId(802L); secondPosition.setPalletId(501L); secondPosition.setPalletNo("DP-1");
secondPosition.setOverseasWarehouseId("WH-1"); secondPosition.setAvailablePackages(1L);
InventoryBalance balance = new InventoryBalance(); balance.setCustomerId("TENANT-A"); balance.setInboundCode("IN-A"); balance.setSkuCode("SKU-1");
InventoryBalance secondBalance = new InventoryBalance(); secondBalance.setCustomerId("TENANT-A"); secondBalance.setInboundCode("IN-A"); secondBalance.setSkuCode("SKU-2");
DropshipOrderProfile profile = new DropshipOrderProfile(); profile.setId(1001L);
DropshipOrderProfile secondProfile = new DropshipOrderProfile(); secondProfile.setId(1002L);
DropshipCarton first = new DropshipCarton(); first.setId(1101L); first.setProductQuantity(7L);
DropshipCarton second = new DropshipCarton(); second.setId(1102L); second.setProductQuantity(13L);
first.setStatus("AVAILABLE"); first.setSkuCode("SKU-1"); first.setCartonMark("BOX-A");
second.setStatus("AVAILABLE"); second.setSkuCode("SKU-1"); second.setCartonMark("BOX-B");
DropshipCarton third = new DropshipCarton(); third.setId(1103L); third.setProductQuantity(5L);
third.setStatus("AVAILABLE"); third.setSkuCode("SKU-2"); third.setCartonMark("BOX-C");
when(pdaTasks.lockByNoAndWarehouse("PDA-701", "WH-1")).thenReturn(task);
when(outboundOrders.selectById(301L)).thenReturn(outbound);
when(outboundOrders.lockByNo("TENANT-A", "OD-WH-1")).thenReturn(outbound);
when(outboundPallets.findByOutbound("TENANT-A", 301L)).thenReturn(List.of(item, secondItem));
when(outboundPallets.selectById(item.getId())).thenReturn(item);
when(outboundPallets.selectById(secondItem.getId())).thenReturn(secondItem);
when(inventoryPositions.listPallet("TENANT-A", 501L)).thenReturn(List.of(position, secondPosition));
when(inventoryPositions.selectById(901L)).thenReturn(position);
when(inventoryPositions.selectById(902L)).thenReturn(secondPosition);
when(inventoryBalances.selectById(801L)).thenReturn(balance);
when(inventoryBalances.selectById(802L)).thenReturn(secondBalance);
when(dropshipProfiles.findPosition("TENANT-A", 901L)).thenReturn(profile);
when(dropshipProfiles.findPosition("TENANT-A", 902L)).thenReturn(secondProfile);
when(dropshipCartons.listProfile("TENANT-A", 1001L)).thenReturn(List.of(first, second));
when(dropshipCartons.listProfile("TENANT-A", 1002L)).thenReturn(List.of(third));
when(dropshipCartons.findByProfileAndMark("TENANT-A", 1001L, "BOX-A")).thenReturn(first);
when(dropshipCartons.findByProfileAndMark("TENANT-A", 1001L, "BOX-B")).thenReturn(second);
when(dropshipCartons.findByProfileAndMark("TENANT-A", 1002L, "BOX-C")).thenReturn(third);
when(dropshipSkuInventory.deduct("TENANT-A", 1001L, "SKU-1", 2L, 20L)).thenReturn(1);
when(dropshipSkuInventory.deduct("TENANT-A", 1002L, "SKU-2", 1L, 5L)).thenReturn(1);
DeliveryResponses.PdaTask result = service.pdaPickPallet("WH-1", "U-1", "PDA-701", "DP-1",
new DeliveryRequests.PdaPalletPick("whole-pallet-1"));
assertEquals("IN_PROGRESS", result.status());
assertEquals(2, item.getPickedPackageCount()); assertEquals("PICKED", item.getStatus());
assertEquals(1, secondItem.getPickedPackageCount()); assertEquals("PICKED", secondItem.getStatus());
assertEquals("SHIPPED", first.getStatus()); assertEquals("SHIPPED", second.getStatus());
assertEquals("SHIPPED", third.getStatus());
assertEquals("PICKED", outbound.getStatus());
verify(dropshipSkuInventory).deduct("TENANT-A", 1001L, "SKU-1", 2L, 20L);
verify(dropshipSkuInventory).deduct("TENANT-A", 1002L, "SKU-2", 1L, 5L);
}
@Test
void dropshipPartialPicksDeductExactCartonProductQuantities() {
var commands = org.mockito.Mockito.mock(com.baiyue.lastleg.inventory.command.service.InventoryCommandService.class);
@@ -769,6 +832,7 @@ class DeliveryTransferServiceTest {
new DeliveryRequests.PdaPick(item.getId(), 901L, 1L, "wrong-mark", List.of("WRONG-BOX"))));
service.pdaPick("WH-1", "U-1", "PDA-701", new DeliveryRequests.PdaPick(item.getId(), 901L, 1L, "pick-7", List.of("BOX-A")));
assertEquals(1, item.getPickedPackageCount()); assertEquals("AVAILABLE", second.getStatus());
assertEquals("PICKING", outbound.getStatus());
assertThrows(ResponseStatusException.class, () -> service.pdaPick("WH-1", "U-1", "PDA-701",
new DeliveryRequests.PdaPick(item.getId(), 901L, 1L, "repeat-box-new-key", List.of("BOX-A"))));
service.pdaPick("WH-1", "U-1", "PDA-701", new DeliveryRequests.PdaPick(item.getId(), 901L, 1L, "pick-13", List.of("BOX-B")));