修复尾程货主快照与短单号合同
This commit is contained in:
+10
@@ -19,6 +19,11 @@ public record FirstLegLoadingPlanCompletedV2(
|
||||
containerNo = ContainerNumbers.requireCanonical(containerNo);
|
||||
orders = orders == null ? List.of() : List.copyOf(orders);
|
||||
if (orders.isEmpty()) throw new IllegalArgumentException("orders are required");
|
||||
Order owner = orders.get(0);
|
||||
if (orders.stream().anyMatch(order -> !owner.customerId().equals(order.customerId())
|
||||
|| !owner.customerName().equals(order.customerName()))) {
|
||||
throw new IllegalArgumentException("orders must share one immutable customerId/customerName snapshot");
|
||||
}
|
||||
}
|
||||
|
||||
public FirstLegLoadingPlanCompletedV2(String loadingPlanId, String planNo, String containerBookingId,
|
||||
@@ -47,6 +52,11 @@ public record FirstLegLoadingPlanCompletedV2(
|
||||
if (customerName == null || customerName.isBlank()) {
|
||||
throw new IllegalArgumentException("customerName is required");
|
||||
}
|
||||
customerId = customerId.trim();
|
||||
customerName = customerName.trim();
|
||||
if (customerId.length() > 128 || customerName.length() > 128) {
|
||||
throw new IllegalArgumentException("customerId/customerName snapshot is too long");
|
||||
}
|
||||
orderType = orderType == null || orderType.isBlank() ? "FIRST_LEG" : orderType;
|
||||
pallets = pallets == null ? List.of() : pallets;
|
||||
}
|
||||
|
||||
+16
@@ -118,6 +118,22 @@ class FirstLegLoadingPlanCompletedV2Test {
|
||||
.isInstanceOf(IllegalArgumentException.class).hasMessageContaining("customerName");
|
||||
}
|
||||
|
||||
@Test
|
||||
void freezesTrimmedOwnerSnapshotAndRejectsMixedOwners() {
|
||||
var first = new FirstLegLoadingPlanCompletedV2.Order(
|
||||
"2", "2", "3", "ORD", "3", "RK", null, null, null,
|
||||
1, 1, 0, null, null, null, List.of(), " 11 ", " 客户甲 ", "FIRST_LEG", List.of());
|
||||
assertThat(first.customerId()).isEqualTo("11");
|
||||
assertThat(first.customerName()).isEqualTo("客户甲");
|
||||
|
||||
var anotherOwner = new FirstLegLoadingPlanCompletedV2.Order(
|
||||
"3", "3", "4", "ORD-2", "4", "RK-2", null, null, null,
|
||||
1, 1, 0, null, null, null, List.of(), "12", "客户乙", "FIRST_LEG", List.of());
|
||||
assertThatThrownBy(() -> new FirstLegLoadingPlanCompletedV2(
|
||||
"4", "P", "5", "ZCSU7881970", "CAB", "6", "WH", List.of(first, anotherOwner)))
|
||||
.isInstanceOf(IllegalArgumentException.class).hasMessageContaining("immutable customerId/customerName");
|
||||
}
|
||||
|
||||
@Test
|
||||
void openApiRequiresImmutableCustomerNameNextToCustomerId() throws Exception {
|
||||
String yaml;
|
||||
|
||||
Reference in New Issue
Block a user