This commit is contained in:
2026-09-30 17:13:11 +08:00
parent babc7de4b6
commit 32fb9ec7b3
26 changed files with 1484 additions and 70 deletions
@@ -27,6 +27,7 @@ import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -406,6 +407,9 @@ public class OrderApplicationService {
throw new BizException(ResultCode.VALIDATION_FAILED, "木制品必须选择商检");
}
}
validateMixedCartons(order.getFulfillmentType(), cargoes.stream().map(cargo -> new MixedCarton(
cargo.getPackingGroupNo(), cargo.getPackageCount(), cargo.getPackageType(), cargo.getLengthCm(),
cargo.getWidthCm(), cargo.getHeightCm(), cargo.getGrossWeightKg(), cargo.getNetWeightKg(), cargo.getVolumeCbm())).toList());
var parties = repository.findParties(tenantId, order.getId());
if ("PICKUP".equals(order.getPickupMethod()) && !hasParty(parties, "SENDER")) {
throw new BizException(ResultCode.VALIDATION_FAILED, "上门提货时必须填写发货信息");
@@ -887,13 +891,21 @@ public class OrderApplicationService {
return (int) total;
}
private void validateMixedCartons(OrderRequests.SaveRequest request) {
if (!"ONE_CLICK_DROPSHIP".equals(request.fulfillmentType())) return;
Map<String, OrderRequests.Cargo> firstByGroup = new LinkedHashMap<>();
for (OrderRequests.Cargo cargo : request.cargoes()) {
validateMixedCartons(request.fulfillmentType(), request.cargoes().stream().map(cargo -> new MixedCarton(
cargo.packingGroupNo(), cargo.packageCount(), cargo.packageType(), cargo.lengthCm(),
cargo.widthCm(), cargo.heightCm(), cargo.grossWeightKg(), cargo.netWeightKg(), cargo.volumeCbm())).toList());
}
private record MixedCarton(String packingGroupNo, Integer packageCount, String packageType,
BigDecimal lengthCm, BigDecimal widthCm, BigDecimal heightCm,
BigDecimal grossWeightKg, BigDecimal netWeightKg, BigDecimal volumeCbm) { }
private void validateMixedCartons(String fulfillmentType, List<MixedCarton> cargoes) {
if (!"ONE_CLICK_DROPSHIP".equals(fulfillmentType)) return;
Map<String, MixedCarton> firstByGroup = new LinkedHashMap<>();
for (MixedCarton cargo : cargoes) {
String group = normalize(cargo.packingGroupNo());
if (group == null) continue;
OrderRequests.Cargo first = firstByGroup.putIfAbsent(group, cargo);
if (first != null && (first.packageCount() != cargo.packageCount()
MixedCarton first = firstByGroup.putIfAbsent(group, cargo);
if (first != null && (!Objects.equals(first.packageCount(), cargo.packageCount())
|| !Objects.equals(first.packageType(), cargo.packageType())
|| !sameDecimal(first.lengthCm(), cargo.lengthCm())
|| !sameDecimal(first.widthCm(), cargo.widthCm())