贴标申请,仓储转运

This commit is contained in:
2026-09-28 11:59:08 +08:00
parent 0e62b2f45b
commit 2bb98d2047
14 changed files with 278 additions and 38 deletions
@@ -17,6 +17,10 @@ import com.baiyue.lastleg.entity.LastlegOrder;
import com.baiyue.lastleg.mapper.LastlegOrderMapper;
import com.baiyue.lastleg.mapper.LastlegOrderStatusHistoryMapper;
import com.baiyue.lastleg.service.LastlegOrderNoGenerator;
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCarton;
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCartonItem;
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonItemMapper;
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -51,6 +55,8 @@ class CargoDiscardServiceTest {
@Mock CargoDiscardInventoryAdjustmentService adjustments;
@Mock LastlegOrderMapper orders;
@Mock LastlegOrderStatusHistoryMapper orderHistories;
@Mock ReturnInventoryCartonMapper returnCartons;
@Mock ReturnInventoryCartonItemMapper returnCartonItems;
private CargoDiscardService service;
private final AtomicReference<CargoDiscardApplication> storedApplication = new AtomicReference<>();
@@ -70,6 +76,8 @@ class CargoDiscardServiceTest {
ReflectionTestUtils.setField(service, "orderNoGenerator", new LastlegOrderNoGenerator());
ReflectionTestUtils.setField(service, "orders", orders);
ReflectionTestUtils.setField(service, "orderHistories", orderHistories);
ReflectionTestUtils.setField(service, "returnCartons", returnCartons);
ReflectionTestUtils.setField(service, "returnCartonItems", returnCartonItems);
ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper());
ReflectionTestUtils.setField(service, "feePerPackage", new BigDecimal("5.00"));
lenient().when(applications.insert(any(CargoDiscardApplication.class))).thenAnswer(invocation -> { storedApplication.set(invocation.getArgument(0)); return 1; });
@@ -94,7 +102,7 @@ class CargoDiscardServiceTest {
when(inventory.changeCartonStatus(eq("100"), anyLong(), eq("AVAILABLE"), eq("DISCARD_PENDING"))).thenReturn(1);
var detail = service.create("100", "7", new CargoDiscardRequests.Create(
List.of(new CargoDiscardRequests.Item(101L, "SKU-1", 2)), "discard-create-1", "damaged"));
List.of(new CargoDiscardRequests.Item(101L, null, "SKU-1", 2)), "discard-create-1", "damaged"));
assertEquals(CargoDiscardService.PENDING_REVIEW, detail.summary().status());
assertEquals(2, detail.summary().totalPackages());
@@ -117,6 +125,34 @@ class CargoDiscardServiceTest {
assertEquals(2, result.get(0).skus().size());
}
@Test
void candidatesIncludeAvailableReturnCartonWithSourceIdentity() {
ReturnInventoryCarton carton = new ReturnInventoryCarton();
carton.setId(901L);
carton.setCustomerId("100");
carton.setOverseasWarehouseId("WH-1");
carton.setSourceReturnNo("RT-20260928-001");
carton.setCartonMark("RC-LAX-001");
carton.setStatus("AVAILABLE");
carton.setTotalQuantity(4L);
ReturnInventoryCartonItem sku = new ReturnInventoryCartonItem();
sku.setCartonId(901L);
sku.setSkuCode("SKU-RETURN");
sku.setProductNameZh("退货商品");
sku.setQuantity(4L);
when(returnCartons.findAvailable("100", null)).thenReturn(List.of(carton));
when(returnCartonItems.listCarton(901L)).thenReturn(List.of(sku));
var result = service.candidates("100", "RT-20260928-001");
assertEquals(1, result.size());
assertEquals("RETURN_CARTON", result.get(0).sourceType());
assertEquals(901L, result.get(0).returnCartonId());
assertEquals("RC-LAX-001", result.get(0).cartonMark());
assertEquals(4, result.get(0).availablePackages());
assertEquals("SKU-RETURN", result.get(0).skus().get(0).skuCode());
}
@Test
void approvalPushesToPdaWithoutDeductingInventory() {
CargoDiscardApplication application = pendingApplication();