贴标申请,仓储转运

This commit is contained in:
2026-10-12 15:57:47 +08:00
parent a1cd47dabd
commit 6c4ee2bfde
7 changed files with 189 additions and 18 deletions
@@ -66,6 +66,26 @@ import static org.mockito.Mockito.times;
@ExtendWith(MockitoExtension.class)
class RelabelApplicationServiceTest {
@Test void returnInventoryCandidateUsesRealProductNames() {
var cartonMapper = org.mockito.Mockito.mock(com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonMapper.class);
var lineMapper = org.mockito.Mockito.mock(com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonItemMapper.class);
ReflectionTestUtils.setField(service, "returnCartons", cartonMapper);
ReflectionTestUtils.setField(service, "returnCartonItems", lineMapper);
ReflectionTestUtils.setField(service, "returnPackingTraces", org.mockito.Mockito.mock(com.baiyue.lastleg.returnreceipt.mapper.ReturnPackingTraceMapper.class));
var carton = new com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCarton();
carton.setId(20L); carton.setStatus("AVAILABLE"); carton.setSourceUnitType("BOX"); carton.setTotalQuantity(4L);
var first = new com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCartonItem();
first.setSkuCode("A"); first.setProductNameZh(" 中文商品甲 "); first.setQuantity(2L);
var second = new com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCartonItem();
second.setSkuCode("B"); second.setProductNameZh("中文商品乙"); second.setQuantity(2L);
when(cartonMapper.findRelabelCandidates("C", "W")).thenReturn(List.of(carton));
when(lineMapper.listCarton(20L)).thenReturn(List.of(first, second));
var candidate = service.candidates("C", "W", null).get(0);
assertEquals("中文商品甲、中文商品乙", candidate.productNameZh());
assertEquals(4L, candidate.stockQuantity());
assertEquals("AVAILABLE", candidate.inventoryStatus());
assertEquals(List.of(), candidate.mergedIntoCartonMarks());
}
@Mock RelabelApplicationMapper applications;
@Mock RelabelItemMapper items;
@Mock RelabelStatusHistoryMapper histories;
@@ -554,9 +574,11 @@ class RelabelApplicationServiceTest {
RelabelApplication application = application(11L, "FBR-1", "10001", "key-1", "hash", RelabelApplicationService.READY_FOR_OUTBOUND);
application.setLastlegOrderId(21L);
application.setFulfillmentStatus("PRE_DISPATCH_CREATED");
LastlegOrder order = order(21L, "10001", "LMO-RELABEL-1", "PROCESSING");
LastlegOrder order = order(21L, "10001", "LMO-RELABEL-1", "INBOUND_COMPLETED");
order.setOrderType("RETURN_RELABEL");
order.setRelabelOrderNo("FBR-1");
order.setPackageCount(7); order.setProductQuantity(110);
order.setSubOrderStatus("RETURN_RELABEL:COMPLETED");
when(applications.lockNo("10001", "FBR-1")).thenReturn(application);
stubDetail(application);
when(orders.selectById(21L)).thenReturn(order);
@@ -568,6 +590,31 @@ class RelabelApplicationServiceTest {
assertEquals("OUTBOUNDED", application.getFulfillmentStatus());
assertEquals("INBOUND_COMPLETED", order.getCurrentStatus());
assertEquals("COMPLETED", order.getRelabelStatus());
assertEquals(7, order.getPackageCount());
assertEquals(110, order.getProductQuantity());
assertEquals("RETURN_RELABEL:COMPLETED", order.getSubOrderStatus());
}
@Test void partialReturnRelabelCreationPreservesParentReceiptQuantitiesAndStatus() {
LastlegOrder parent = order(21L, "10001", "RT-ORIGINAL", "INBOUND_COMPLETED");
parent.setOrderType("RETURN_RELABEL"); parent.setSourceOrderNo("RT-ORIGINAL");
parent.setPackageCount(7); parent.setReceivedPackageCount(7); parent.setProductQuantity(110);
parent.setSubOrderStatus("RETURN_RELABEL:COMPLETED");
when(orders.selectById(21L)).thenReturn(parent);
ReflectionTestUtils.invokeMethod(service, "linkExistingTailOrder", "10001", 21L, "RL-PARTIAL", 1, LocalDateTime.now());
assertEquals(7, parent.getPackageCount()); assertEquals(7, parent.getReceivedPackageCount());
assertEquals(110, parent.getProductQuantity());
assertEquals("RT-ORIGINAL", parent.getSourceOrderNo());
assertEquals("INBOUND_COMPLETED", parent.getCurrentStatus());
assertEquals("RETURN_RELABEL:COMPLETED", parent.getSubOrderStatus());
assertEquals("RL-PARTIAL", parent.getRelabelOrderNo());
when(orders.selectOne(any())).thenReturn(parent);
var request = org.mockito.Mockito.mock(RelabelRequests.Create.class);
when(request.customerOrderNo()).thenReturn("RT-ORIGINAL");
ReflectionTestUtils.invokeMethod(service, "insertTailOrder", "10001", request, "hash", "RL-SECOND", "W", 1, LocalDateTime.now());
assertEquals(7, parent.getPackageCount()); assertEquals(110, parent.getProductQuantity());
assertEquals("RETURN_RELABEL:COMPLETED", parent.getSubOrderStatus());
assertEquals("RL-SECOND", parent.getRelabelOrderNo());
}
@Test
@@ -1013,6 +1060,7 @@ class RelabelApplicationServiceTest {
var lineMapper = org.mockito.Mockito.mock(com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonItemMapper.class);
ReflectionTestUtils.setField(service, "returnCartons", cartonMapper);
ReflectionTestUtils.setField(service, "returnCartonItems", lineMapper);
ReflectionTestUtils.setField(service, "returnPackingTraces", org.mockito.Mockito.mock(com.baiyue.lastleg.returnreceipt.mapper.ReturnPackingTraceMapper.class));
var carton = new com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCarton();
carton.setId(901L); carton.setCustomerId("10001"); carton.setOverseasWarehouseId("WH-1");
carton.setCartonMark("RETURN-BOX-1"); carton.setStatus("AVAILABLE"); carton.setSourceUnitType("BOX");
@@ -28,6 +28,7 @@ class RelabelReturnCartonCandidateTest {
ReflectionTestUtils.setField(service, "inventoryPositions", positions);
ReflectionTestUtils.setField(service, "returnCartons", cartons);
ReflectionTestUtils.setField(service, "returnCartonItems", cartonItems);
ReflectionTestUtils.setField(service, "returnPackingTraces", mock(com.baiyue.lastleg.returnreceipt.mapper.ReturnPackingTraceMapper.class));
ReturnInventoryCarton carton = new ReturnInventoryCarton();
carton.setId(9001L); carton.setCustomerId("10001"); carton.setOverseasWarehouseId("WH-1");