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 485ffc52b..7ab22451a 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/CartonMeasurementService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/CartonMeasurementService.java @@ -267,7 +267,7 @@ public class CartonMeasurementService { private void applyCalculatedValues(InboundMeasurementItemEntity item, CustomerDimensionWeightingService.RuleSet dimensionRules) { - CustomerDimensionWeightingService.WeightedDimensions weighted = dimensionRules.resolve( + CustomerDimensionWeightingService.WeightedDimensions weighted = dimensionRules.resolveDeviceMeasurement( item.getLengthCm(), item.getWidthCm(), item.getHeightCm()); BigDecimal unitRaw = weighted.rawVolumeCbm(); BigDecimal unitVolume = weighted.unitVolumeCbm(); 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 2fbc2782b..a976ac6f2 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/CustomerDimensionWeightingService.java @@ -64,6 +64,25 @@ public class CustomerDimensionWeightingService { .orElseGet(() -> rules.get(rules.size() - 1) .weightedActualDimensions(lengthCm, widthCm, heightCm)); } + + public WeightedDimensions resolveDeviceMeasurement(BigDecimal lengthCm, BigDecimal widthCm, + BigDecimal heightCm) { + List measured = sortedDimensions(lengthCm, widthCm, heightCm); + return rules.stream() + .filter(rule -> rule.contains(measured)) + .findFirst() + .map(Rule::weighted) + .orElseGet(() -> actualDimensions(lengthCm, widthCm, heightCm)); + } + + private WeightedDimensions actualDimensions(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, null, lengthCm, widthCm, heightCm, + rawVolume, rawVolume.setScale(3, RoundingMode.HALF_UP), + "ACTUAL_DIMENSION_V1"); + } } public record WeightedDimensions(