fix: 支持多SKU共箱整托装柜

This commit is contained in:
2026-09-16 21:22:18 +08:00
parent 1cd10a9d3b
commit 9ab1c328ba
9 changed files with 125 additions and 24 deletions
@@ -1368,8 +1368,7 @@ class LoadingPickServiceTest {
var snapshot = service.inventorySnapshot(20L, 101L);
assertThat(snapshot.units()).hasSize(2).allSatisfy(unit -> assertThat(unit.palletNo()).isEqualTo("DP-260909-0001"));
var request = new BatchRequest(101L, 10L, 99L, 0, snapshot.snapshotToken(), List.of(
new BatchItemRequest(30L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001"),
new BatchItemRequest(31L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001")));
new BatchItemRequest(30L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001")));
service.batch(20L, "batch-pallet", request, 9L, "operator");
service.batch(20L, "batch-pallet", request, 9L, "operator");
verify(repository, times(1)).pick(30L, 2, 0, 101L);
@@ -1382,20 +1381,20 @@ class LoadingPickServiceTest {
}
@ParameterizedTest
@ValueSource(strings = {"missing-row", "ordinary", "partial", "skip", "quantity", "wrong-code", "unsealed", "wrong-warehouse", "physical-short", "stale-item", "stale-task", "stale-snapshot"})
@ValueSource(strings = {"missing-unit", "duplicate-pallet", "ordinary", "partial", "skip", "quantity", "wrong-code", "unsealed", "wrong-warehouse", "physical-short", "stale-item", "stale-task", "stale-snapshot"})
void rejectsInvalidWholePalletBatchBeforeAnyWrite(String scenario) {
var items = prepareWholePalletBatch();
String snapshot = service.inventorySnapshot(20L, 101L).snapshotToken();
var lines = new java.util.ArrayList<>(List.of(
new BatchItemRequest(30L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001"),
new BatchItemRequest(31L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001")));
new BatchItemRequest(30L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001")));
switch (scenario) {
case "missing-row" -> lines.remove(1);
case "ordinary" -> lines.set(1, new BatchItemRequest(31L, "PICK", 2, null, 0, null, null));
case "partial" -> lines.set(1, new BatchItemRequest(31L, "PARTIAL", null, 1, 0, null, null));
case "skip" -> lines.set(1, new BatchItemRequest(31L, "SKIP", null, null, 0, "skip", null));
case "quantity" -> lines.set(1, new BatchItemRequest(31L, "PICK_PALLET", 2, null, 0, null, "DP-260909-0001"));
case "wrong-code" -> lines.set(1, new BatchItemRequest(31L, "PICK_PALLET", null, null, 0, null, "DP-260909-0999"));
case "missing-unit" -> lines.clear();
case "duplicate-pallet" -> lines.add(new BatchItemRequest(31L, "PICK_PALLET", null, null, 0, null, "DP-260909-0001"));
case "ordinary" -> lines.set(0, new BatchItemRequest(30L, "PICK", 2, null, 0, null, null));
case "partial" -> lines.set(0, new BatchItemRequest(30L, "PARTIAL", null, 1, 0, null, null));
case "skip" -> lines.set(0, new BatchItemRequest(30L, "SKIP", null, null, 0, "skip", null));
case "quantity" -> lines.set(0, new BatchItemRequest(30L, "PICK_PALLET", 2, null, 0, null, "DP-260909-0001"));
case "wrong-code" -> lines.set(0, new BatchItemRequest(30L, "PICK_PALLET", null, null, 0, null, "DP-260909-0999"));
case "unsealed" -> dropshipPallets.sealedPalletLines(801L).get(0).setPalletStatus("OPEN");
case "wrong-warehouse" -> dropshipPallets.sealedPalletLines(801L).get(0).setWarehouseId(999L);
case "physical-short" -> dropshipPallets.sealedPalletLines(801L).get(0).setCartonCount(1);