fix: 按物理箱贯通一件代发履约箱数
This commit is contained in:
+56
@@ -6,8 +6,16 @@ import com.baiyue.lastleg.discard.entity.CargoDiscardItem;
|
||||
import com.baiyue.lastleg.discard.mapper.CargoDiscardInventoryMapper;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipCarton;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipCartonLedger;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipCartonSku;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipOrderProfile;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipSkuInventory;
|
||||
import com.baiyue.lastleg.dropship.mapper.DropshipCartonLedgerMapper;
|
||||
import com.baiyue.lastleg.dropship.mapper.DropshipCartonSkuMapper;
|
||||
import com.baiyue.lastleg.dropship.mapper.DropshipOrderProfileMapper;
|
||||
import com.baiyue.lastleg.dropship.mapper.DropshipSkuInventoryMapper;
|
||||
import com.baiyue.lastleg.inventory.entity.InventoryPosition;
|
||||
import com.baiyue.lastleg.inventory.mapper.InventoryBalanceMapper;
|
||||
import com.baiyue.lastleg.inventory.mapper.InventoryPositionMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@@ -37,6 +45,11 @@ import static org.mockito.Mockito.when;
|
||||
class CargoDiscardInventoryAdjustmentServiceTest {
|
||||
@Mock CargoDiscardInventoryMapper inventory;
|
||||
@Mock DropshipCartonLedgerMapper ledgers;
|
||||
@Mock DropshipCartonSkuMapper cartonSkus;
|
||||
@Mock DropshipSkuInventoryMapper skuInventories;
|
||||
@Mock DropshipOrderProfileMapper profiles;
|
||||
@Mock InventoryPositionMapper positions;
|
||||
@Mock InventoryBalanceMapper balances;
|
||||
private CargoDiscardInventoryAdjustmentService service;
|
||||
|
||||
@BeforeEach
|
||||
@@ -44,6 +57,45 @@ class CargoDiscardInventoryAdjustmentServiceTest {
|
||||
service = new CargoDiscardInventoryAdjustmentService();
|
||||
ReflectionTestUtils.setField(service, "inventory", inventory);
|
||||
ReflectionTestUtils.setField(service, "cartonLedgers", ledgers);
|
||||
ReflectionTestUtils.setField(service, "cartonSkus", cartonSkus);
|
||||
ReflectionTestUtils.setField(service, "skuInventories", skuInventories);
|
||||
ReflectionTestUtils.setField(service, "profiles", profiles);
|
||||
ReflectionTestUtils.setField(service, "positions", positions);
|
||||
ReflectionTestUtils.setField(service, "balances", balances);
|
||||
}
|
||||
|
||||
@Test
|
||||
void pdaDiscardDeductsEverySkuInsideOnePhysicalCartonOnce() {
|
||||
CargoDiscardApplication application = application(1);
|
||||
CargoDiscardItem item = item(1);
|
||||
item.setProfileId(201L);
|
||||
DropshipCarton carton = carton(1L);
|
||||
carton.setSkuCode("MIXED"); carton.setProductQuantity(5L);
|
||||
DropshipCartonSku skuA = cartonSku("SKU-A", 2L);
|
||||
DropshipCartonSku skuB = cartonSku("SKU-B", 3L);
|
||||
DropshipOrderProfile profile = new DropshipOrderProfile();
|
||||
profile.setId(201L); profile.setCustomerId("100"); profile.setInventoryPositionId(801L);
|
||||
InventoryPosition position = new InventoryPosition();
|
||||
position.setId(801L); position.setBalanceId(901L);
|
||||
when(inventory.lockSkuInventory("100", 301L)).thenReturn(sku(5));
|
||||
when(inventory.lockCarton("100", 1L)).thenReturn(carton);
|
||||
when(cartonSkus.listCarton("100", 1L)).thenReturn(List.of(skuA, skuB));
|
||||
when(skuInventories.deduct("100", 201L, "SKU-A", 1, 2)).thenReturn(1);
|
||||
when(skuInventories.deduct("100", 201L, "SKU-B", 1, 3)).thenReturn(1);
|
||||
when(profiles.selectById(201L)).thenReturn(profile);
|
||||
when(positions.findTenantPosition("100", 801L)).thenReturn(position);
|
||||
when(positions.deductAvailable("100", 801L, 1)).thenReturn(1);
|
||||
when(balances.deductAvailable("100", 901L, 1)).thenReturn(1);
|
||||
when(inventory.changeCartonStatus("100", 1L, "DISCARD_PENDING", "DISCARDED")).thenReturn(1);
|
||||
when(inventory.skuPackages("100", 301L)).thenReturn(4L);
|
||||
|
||||
var result = service.discardPalletItem("100", application, item, List.of(link(1L)),
|
||||
1, "operator", LocalDateTime.now());
|
||||
|
||||
assertEquals(1, result.discardedPackages());
|
||||
verify(skuInventories).deduct("100", 201L, "SKU-A", 1, 2);
|
||||
verify(skuInventories).deduct("100", 201L, "SKU-B", 1, 3);
|
||||
verify(positions).deductAvailable("100", 801L, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -105,4 +157,8 @@ class CargoDiscardInventoryAdjustmentServiceTest {
|
||||
private DropshipCarton carton(long id) {
|
||||
DropshipCarton value = new DropshipCarton(); value.setId(id); value.setCartonMark("C-" + id); return value;
|
||||
}
|
||||
private DropshipCartonSku cartonSku(String skuCode, long quantity) {
|
||||
DropshipCartonSku value = new DropshipCartonSku();
|
||||
value.setSkuCode(skuCode); value.setProductQuantity(quantity); return value;
|
||||
}
|
||||
}
|
||||
|
||||
+23
@@ -10,6 +10,7 @@ import com.baiyue.lastleg.discard.mapper.CargoDiscardCartonMapper;
|
||||
import com.baiyue.lastleg.discard.mapper.CargoDiscardInventoryMapper;
|
||||
import com.baiyue.lastleg.discard.mapper.CargoDiscardItemMapper;
|
||||
import com.baiyue.lastleg.discard.mapper.CargoDiscardStatusHistoryMapper;
|
||||
import com.baiyue.lastleg.discard.model.CargoDiscardCandidateRow;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipCarton;
|
||||
import com.baiyue.lastleg.dropship.entity.DropshipSkuInventory;
|
||||
import com.baiyue.lastleg.entity.LastlegOrder;
|
||||
@@ -102,6 +103,20 @@ class CargoDiscardServiceTest {
|
||||
verify(inventory, never()).deductSkuInventory(any(), anyLong(), anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
void candidateTotalCountsPhysicalCartonsInsteadOfSkuRows() {
|
||||
CargoDiscardCandidateRow skuA = candidate("SKU-A", 20L);
|
||||
CargoDiscardCandidateRow skuB = candidate("SKU-B", 20L);
|
||||
when(inventory.candidates("100", "RK-1")).thenReturn(List.of(skuA, skuB));
|
||||
when(inventory.countAvailableOrder("100", 101L)).thenReturn(20L);
|
||||
|
||||
var result = service.candidates("100", "RK-1");
|
||||
|
||||
assertEquals(1, result.size());
|
||||
assertEquals(20, result.get(0).availablePackages());
|
||||
assertEquals(2, result.get(0).skus().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void approvalPushesToPdaWithoutDeductingInventory() {
|
||||
CargoDiscardApplication application = pendingApplication();
|
||||
@@ -179,4 +194,12 @@ class CargoDiscardServiceTest {
|
||||
value.setCustomerId("100"); value.setCartonId(cartonId); value.setCartonMark("C-" + cartonId);
|
||||
return value;
|
||||
}
|
||||
|
||||
private CargoDiscardCandidateRow candidate(String skuCode, long packages) {
|
||||
CargoDiscardCandidateRow value = new CargoDiscardCandidateRow();
|
||||
value.setOrderId(101L); value.setInboundCode("RK-1"); value.setInboundOrderNo("IN-1");
|
||||
value.setOverseasWarehouseId("WH-1"); value.setOverseasWarehouseName("LA");
|
||||
value.setSkuCode(skuCode); value.setProductName(skuCode); value.setAvailablePackages(packages);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user