提交
This commit is contained in:
+5
-1
@@ -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);
|
||||
}
|
||||
|
||||
+19
-4
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user