diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialWarningServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialWarningServiceImpl.java index dcebe400..f6c3f332 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialWarningServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialWarningServiceImpl.java @@ -285,16 +285,19 @@ public class WmsMaterialWarningServiceImpl implements IWmsMaterialWarningService } // 理论厚度 - 规格厚度 > 阈值 → 触发 - BigDecimal diff = theoreticalThickness.subtract(specThickness); - if (diff.compareTo(threshold) > 0) { + // 先统一 round 到 3 位小数再比较,避免理论厚度公式计算引入的高精度尾数 + // 导致比较结果与存储值不一致(如 diff=-0.0096 > -0.01 触发,但存储时都 round 成 -0.010) + BigDecimal diff = theoreticalThickness.subtract(specThickness).setScale(3, RoundingMode.HALF_UP); + BigDecimal scaledThreshold = threshold.setScale(3, RoundingMode.HALF_UP); + if (diff.compareTo(scaledThreshold) > 0) { WmsMaterialWarning warning = new WmsMaterialWarning(); warning.setCoilId(coil.getCoilId()); warning.setWarningType("THICKNESS"); warning.setTheoreticalVal(theoreticalThickness.setScale(3, RoundingMode.HALF_UP)); warning.setActualVal(specThickness.setScale(3, RoundingMode.HALF_UP)); - warning.setAllowDeviation(threshold.setScale(3, RoundingMode.HALF_UP)); - warning.setDeviationValue(theoreticalThickness.subtract(specThickness).setScale(3, RoundingMode.HALF_UP)); - BigDecimal rate = diff.divide(specThickness, 10, RoundingMode.HALF_UP) + warning.setAllowDeviation(scaledThreshold); + warning.setDeviationValue(diff); + BigDecimal rate = diff.divide(specThickness.setScale(3, RoundingMode.HALF_UP), 10, RoundingMode.HALF_UP) .multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP); warning.setDeviationRate(rate); warning.setWarningLevel("WARNING");