fix: persist return forecast tail references

This commit is contained in:
2026-09-11 15:10:01 +08:00
parent 183b242d45
commit 0db11517db
4 changed files with 45 additions and 2 deletions
@@ -1,6 +1,7 @@
package com.baiyue.lastleg.returnreceipt.service;
import com.baiyue.lastleg.mapper.LastlegOrderMapper;
import com.baiyue.lastleg.entity.LastlegOrder;
import com.baiyue.lastleg.pda.security.PdaWarehouseIdentity;
import com.baiyue.lastleg.returnreceipt.dto.PdaReturnReceiptRequests;
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCarton;
@@ -25,6 +26,7 @@ import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.server.ResponseStatusException;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -85,6 +87,28 @@ class ReturnReceiptServiceTest {
assertEquals(2, result.expectedItems().get(0).receivedQuantity());
}
@Test
void createForecastPersistsCompleteTailOrderSourceAndReturnsItsBusinessNumber() {
AtomicReference<ReturnOrder> saved = new AtomicReference<>();
when(orders.findKey("customer-1", "create-key")).thenReturn(null);
when(numbers.next(eq("RETURN"), eq("10"), anyLong())).thenReturn("RT-1");
when(numbers.next(eq("RETURN_RELABEL"), eq("10"), anyLong())).thenReturn("RETU-1");
when(orders.insert(any(ReturnOrder.class))).thenAnswer(invocation -> { saved.set(invocation.getArgument(0)); return 1; });
when(orders.findNo("customer-1", "RT-1")).thenAnswer(invocation -> saved.get());
when(orderItems.listOrder(anyLong())).thenReturn(List.of());
var result = service.create("customer-1", "merchant-1", new com.baiyue.lastleg.returnreceipt.dto.ReturnOrderRequests.Create(
"10", "测试仓", "0000000000", "REF-1", false, "测试", "create-key",
List.of(new com.baiyue.lastleg.returnreceipt.dto.ReturnOrderRequests.Item("SKU-A", "商品A", 2))));
ArgumentCaptor<LastlegOrder> tail = ArgumentCaptor.forClass(LastlegOrder.class);
verify(lastlegOrders).insert(tail.capture());
assertEquals("RT-1", tail.getValue().getSourceInboundId());
assertEquals("RETURN_ORDER:RT-1", tail.getValue().getSourceEventId());
assertEquals(saved.get().getRequestHash(), tail.getValue().getSourcePayloadHash());
assertEquals("RETU-1", result.order().lastlegOrderNo());
}
@Test
void skuLookupReturnsOnlyActiveCandidatesFromTheBoundWarehouse() {
ReturnOrder order = order("RT-1", "10", ReturnReceiptService.PENDING_RECEIPT, 5, 1);