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 637dd601b..a4c1c73ce 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java @@ -72,7 +72,7 @@ public class CustomerDimensionWeightingService { return rules.stream() .filter(rule -> rule.contains(measured)) .findFirst() - .map(Rule::weighted) + .map(rule -> rule.weightedActualDimensions(lengthCm, widthCm, heightCm)) .orElseGet(() -> actualDimensions(lengthCm, widthCm, heightCm)); } 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 ad60942b4..ba21cdcd6 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/CustomerDimensionWeightingServiceTest.java @@ -38,6 +38,18 @@ class CustomerDimensionWeightingServiceTest { assertThat(weighted.unitVolumeCbm()).isEqualByComparingTo("0.003"); } + @Test + void deviceMeasurementsUseActualDimensionsAndAddEachSideWhenRuleMatches() { + var weighted = service.load(10001L).resolveDeviceMeasurement( + new BigDecimal("10"), new BigDecimal("10"), new BigDecimal("10")); + + assertThat(weighted.boxType()).isEqualTo(CustomerDimensionBoxType.SMALL); + assertThat(weighted.outerLengthCm()).isEqualByComparingTo("14.000"); + assertThat(weighted.outerWidthCm()).isEqualByComparingTo("14.000"); + assertThat(weighted.outerHeightCm()).isEqualByComparingTo("14.000"); + assertThat(weighted.calculationRuleVersion()).isEqualTo("CUSTOMER_DIMENSION_SMALL_V3"); + } + @Test void cartonRotationDoesNotChangeTheMatchedRule() { var weighted = service.load(10001L).resolve(