From 2ee78aafc27bd4c6cb2099e0257b384fec2f0a4c Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 8 Aug 2026 11:33:02 +0800 Subject: [PATCH] fix: record oversize device measurements for review --- .../service/CartonMeasurementService.java | 1 + .../CustomerDimensionWeightingService.java | 19 +++++++++++++++---- ...CustomerDimensionWeightingServiceTest.java | 15 ++++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/service/CartonMeasurementService.java b/firstleg/src/main/java/com/baiyue/firstleg/service/CartonMeasurementService.java index 85adab831..50eb5747b 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/CartonMeasurementService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/CartonMeasurementService.java @@ -245,6 +245,7 @@ public class CartonMeasurementService { item.setTotalVolumeCbm(totalVolume); item.setVolumeWeightKg(totalVolume.multiply(VOLUME_WEIGHT_FACTOR).setScale(3, RoundingMode.CEILING)); item.setCalculationRuleVersion(weighted.calculationRuleVersion()); + item.setOverLimitWarning(weighted.warning()); item.setOuterLengthCm(weighted.outerLengthCm()); item.setOuterWidthCm(weighted.outerWidthCm()); item.setOuterHeightCm(weighted.outerHeightCm()); diff --git a/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java b/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java index 499efe69b..115c800cf 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java @@ -18,6 +18,8 @@ import java.util.List; public class CustomerDimensionWeightingService { private static final BigDecimal TWO = new BigDecimal("2"); private static final BigDecimal CUBIC_CENTIMETERS_PER_CBM = new BigDecimal("1000000"); + private static final String OVERSIZE_WARNING = + "实测尺寸超出客户最大箱规,已按实测尺寸记录,需人工复核"; private final CustomerDimensionConfigRepository repository; @@ -62,8 +64,16 @@ public class CustomerDimensionWeightingService { .filter(rule -> rule.contains(measured)) .findFirst() .map(Rule::weighted) - .orElseThrow(() -> new BizException(ResultCode.VALIDATION_FAILED, - "实测尺寸超出客户最大箱规,请先调整客户箱规后再提交测量")); + .orElseGet(() -> actualOversize(lengthCm, widthCm, heightCm)); + } + + private WeightedDimensions actualOversize(BigDecimal lengthCm, BigDecimal widthCm, + BigDecimal heightCm) { + BigDecimal rawVolume = lengthCm.multiply(widthCm).multiply(heightCm) + .divide(CUBIC_CENTIMETERS_PER_CBM, 6, RoundingMode.HALF_UP); + return new WeightedDimensions(null, null, lengthCm, widthCm, heightCm, + rawVolume, rawVolume.setScale(3, RoundingMode.HALF_UP), + "ACTUAL_DIMENSION_OVERSIZE_V1", OVERSIZE_WARNING); } } @@ -75,7 +85,8 @@ public class CustomerDimensionWeightingService { BigDecimal outerHeightCm, BigDecimal rawVolumeCbm, BigDecimal unitVolumeCbm, - String calculationRuleVersion + String calculationRuleVersion, + String warning ) { } @@ -112,7 +123,7 @@ public class CustomerDimensionWeightingService { .divide(CUBIC_CENTIMETERS_PER_CBM, 6, RoundingMode.HALF_UP); BigDecimal unitVolume = rawVolume.setScale(3, RoundingMode.HALF_UP); return new WeightedDimensions(boxType, version, outerLength, outerWidth, outerHeight, - rawVolume, unitVolume, "CUSTOMER_DIMENSION_" + boxType.name() + "_V" + version); + rawVolume, unitVolume, "CUSTOMER_DIMENSION_" + boxType.name() + "_V" + version, null); } } diff --git a/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingServiceTest.java index f36a6b972..7de2a5f7b 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingServiceTest.java @@ -56,11 +56,16 @@ class CustomerDimensionWeightingServiceTest { } @Test - void dimensionsBeyondTheLargestRuleAreRejected() { - assertThatThrownBy(() -> service.load(10001L).resolve( - new BigDecimal("60.001"), new BigDecimal("50"), new BigDecimal("50"))) - .isInstanceOf(BizException.class) - .hasMessageContaining("超出客户最大箱规"); + void dimensionsBeyondTheLargestRuleAreRecordedUsingActualDimensions() { + var weighted = service.load(10001L).resolve( + new BigDecimal("60.001"), new BigDecimal("50"), new BigDecimal("50")); + + assertThat(weighted.boxType()).isNull(); + assertThat(weighted.outerLengthCm()).isEqualByComparingTo("60.001"); + assertThat(weighted.outerWidthCm()).isEqualByComparingTo("50"); + assertThat(weighted.outerHeightCm()).isEqualByComparingTo("50"); + assertThat(weighted.calculationRuleVersion()).isEqualTo("ACTUAL_DIMENSION_OVERSIZE_V1"); + assertThat(weighted.warning()).contains("已按实测尺寸记录").contains("人工复核"); } @Test