This commit is contained in:
2026-10-16 17:43:07 +08:00
parent c9186c37a5
commit 9ea03eb540
7 changed files with 168 additions and 29 deletions
@@ -187,8 +187,12 @@ public final class WarehouseTransferRequests {
@Size(max = 255) String productNameZh,
@Positive int packageCount,
@Size(max = 255) String shippingMark,
@Positive Long quantity
@Positive Long quantity,
@Size(max = 5000) List<@NotBlank @jakarta.validation.constraints.Pattern(regexp = "BX-[A-Z0-9]{1,40}") String> cartonMarks
) {
public Item(String skuCode, String productNameZh, int packageCount, String shippingMark, Long quantity) {
this(skuCode, productNameZh, packageCount, shippingMark, quantity, null);
}
public Item(String skuCode, String productNameZh, int packageCount, String shippingMark) {
this(skuCode, productNameZh, packageCount, shippingMark, null);
}
@@ -199,6 +199,7 @@ public class WarehouseTransferService {
if (itemPackages != request.packageCount()) {
throw badRequest("Cargo item package total must equal transfer package count");
}
validatePrintedCartonMarks(request);
validateRelabelRequest(customerId, request);
validateDestination(request.destinationType(), request.destinationWarehouseCode(), request.fbaWarehouseCode(),
request.privateDestinationAddress(), request.privateDestinationPostalCode(),
@@ -321,7 +322,8 @@ public class WarehouseTransferService {
for (int itemCarton = 0; itemCarton < source.packageCount(); itemCarton++) {
cartonIndex++;
insertTransferCarton(customerId, transferId, itemId, transferNo,
cartonIndex, request.packageCount(), itemCarton < customerMarks.size() ? customerMarks.get(itemCarton) : null, now);
cartonIndex, request.packageCount(), itemCarton < customerMarks.size() ? customerMarks.get(itemCarton) : null, now,
source.cartonMarks() == null ? null : source.cartonMarks().get(itemCarton));
}
insertOrderDetail(customerId, order.getId(), transferNo, index, source, request, now);
}
@@ -352,6 +354,7 @@ public class WarehouseTransferService {
if (itemPackages != request.packageCount()) {
throw badRequest("Cargo item package total must equal transfer package count");
}
validatePrintedCartonMarks(request);
validateRelabelRequest(customerId, request);
validateDestination(request.destinationType(), request.destinationWarehouseCode(), request.fbaWarehouseCode(),
request.privateDestinationAddress(), request.privateDestinationPostalCode(),
@@ -439,8 +442,9 @@ public class WarehouseTransferService {
String customerMark = itemCarton < customerMarks.size() ? customerMarks.get(itemCarton) : null;
if (existingCarton == null) {
insertTransferCarton(customerId, transfer.getId(), itemId, transferNo, cartonIndex,
request.packageCount(), customerMark, now);
request.packageCount(), customerMark, now, source.cartonMarks() == null ? null : source.cartonMarks().get(itemCarton));
} else {
if (source.cartonMarks() != null && !existingCarton.getCartonMark().equals(source.cartonMarks().get(itemCarton))) throw conflict("已保存箱唛不能替换,请重新读取草稿");
existingCarton.setTransferItemId(itemId); existingCarton.setTotalCartons(request.packageCount());
existingCarton.setCustomerCartonMark(customerMark); existingCarton.setUpdatedAt(now);
transferCartons.updateById(existingCarton);
@@ -2134,6 +2138,17 @@ public class WarehouseTransferService {
return order;
}
private void validatePrintedCartonMarks(WarehouseTransferRequests.Create request) {
Set<String> marks = new java.util.HashSet<>();
for (var item : request.items()) {
if (item.cartonMarks() == null) continue;
if (item.cartonMarks().size() != item.packageCount()) throw badRequest("已生成箱唛数量必须等于预报箱数,请重新打印");
for (String mark : item.cartonMarks()) {
if (mark == null || !mark.matches("BX-[A-Z0-9]{1,40}") || !marks.add(mark)) throw badRequest("已生成箱唛格式错误或重复,请重新打印");
}
}
}
private long insertTransferItem(String customerId, long transferId, WarehouseTransferRequests.Item source,
LocalDateTime now) {
WarehouseTransferItem item = new WarehouseTransferItem();
@@ -2148,10 +2163,10 @@ public class WarehouseTransferService {
private void insertTransferCarton(String customerId, long transferId, long transferItemId,
String transferNo, int cartonIndex, int totalCartons,
String customerCartonMark, LocalDateTime now) {
String customerCartonMark, LocalDateTime now, String printedMark) {
WarehouseTransferCarton carton = new WarehouseTransferCarton();
carton.setId(IdWorker.getId()); carton.setTransferOrderId(transferId); carton.setTransferItemId(transferItemId);
carton.setCustomerId(customerId); carton.setCartonMark(LastlegOrderNoGenerator.compactCartonMark(carton.getId()));
carton.setCustomerId(customerId); carton.setCartonMark(printedMark == null ? LastlegOrderNoGenerator.compactCartonMark(carton.getId()) : printedMark);
carton.setCustomerCartonMark(trim(customerCartonMark));
carton.setCartonIndex(cartonIndex); carton.setTotalCartons(totalCartons); carton.setStatus("EXPECTED");
carton.setCreatedAt(now); carton.setUpdatedAt(now); transferCartons.insert(carton);