From 6130a13b6b5af899dba305d76428b1ac57bae120 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 3 Sep 2026 17:17:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B6=85=E9=99=90=E5=8D=95?= =?UTF-8?q?=E7=AE=B1=E6=B5=8B=E9=87=8F=E5=B0=BA=E5=AF=B8=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CartonMeasurementService.java | 2 +- .../CustomerDimensionWeightingService.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) 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(