fix(wms): 修正材料预警服务中的数值精度计算问题

- 为理论值、实际值、允许偏差和偏差值设置统一的3位小数精度
- 将偏差率计算精度从4位小数调整为1位小数
- 修正厚度偏差计算公式中的减法运算顺序
- 在警告消息中应用相同的数值精度格式化
- 确保所有BigDecimal运算都使用HALF_UP舍入模式
This commit is contained in:
2026-06-08 18:02:52 +08:00
parent 59e58e5206
commit 20966157c5

View File

@@ -201,13 +201,13 @@ public class WmsMaterialWarningServiceImpl implements IWmsMaterialWarningService
WmsMaterialWarning warning = new WmsMaterialWarning(); WmsMaterialWarning warning = new WmsMaterialWarning();
warning.setCoilId(coil.getCoilId()); warning.setCoilId(coil.getCoilId());
warning.setWarningType("LENGTH"); warning.setWarningType("LENGTH");
warning.setTheoreticalVal(theoreticalLength); warning.setTheoreticalVal(theoreticalLength.setScale(3, RoundingMode.HALF_UP));
warning.setActualVal(actual); warning.setActualVal(actual.setScale(3, RoundingMode.HALF_UP));
warning.setAllowDeviation(threshold); warning.setAllowDeviation(threshold.setScale(3, RoundingMode.HALF_UP));
warning.setDeviationValue(actual.subtract(theoreticalLength)); warning.setDeviationValue(actual.subtract(theoreticalLength).setScale(3, RoundingMode.HALF_UP));
warning.setDeviationRate(rate.multiply(new BigDecimal("100")).setScale(4, RoundingMode.HALF_UP)); warning.setDeviationRate(rate.multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP));
warning.setWarningLevel("WARNING"); warning.setWarningLevel("WARNING");
warning.setWarningMsg("钢卷长度偏差超过阈值,理论长度=" + theoreticalLength + "m实测长度=" + actualLength + "mm"); warning.setWarningMsg("钢卷长度偏差超过阈值,理论长度=" + theoreticalLength.setScale(3, RoundingMode.HALF_UP) + "m实测长度=" + actualLength + "mm");
warning.setWarningStatus(0); warning.setWarningStatus(0);
warnings.add(warning); warnings.add(warning);
} }
@@ -243,15 +243,15 @@ public class WmsMaterialWarningServiceImpl implements IWmsMaterialWarningService
WmsMaterialWarning warning = new WmsMaterialWarning(); WmsMaterialWarning warning = new WmsMaterialWarning();
warning.setCoilId(coil.getCoilId()); warning.setCoilId(coil.getCoilId());
warning.setWarningType("THICKNESS"); warning.setWarningType("THICKNESS");
warning.setTheoreticalVal(theoreticalThickness); warning.setTheoreticalVal(theoreticalThickness.setScale(3, RoundingMode.HALF_UP));
warning.setActualVal(specThickness); warning.setActualVal(specThickness.setScale(3, RoundingMode.HALF_UP));
warning.setAllowDeviation(threshold); warning.setAllowDeviation(threshold.setScale(3, RoundingMode.HALF_UP));
warning.setDeviationValue(specThickness.subtract(theoreticalThickness)); warning.setDeviationValue(theoreticalThickness.subtract(specThickness).setScale(3, RoundingMode.HALF_UP));
BigDecimal rate = diff.divide(specThickness, 10, RoundingMode.HALF_UP) BigDecimal rate = diff.divide(specThickness, 10, RoundingMode.HALF_UP)
.multiply(new BigDecimal("100")).setScale(4, RoundingMode.HALF_UP); .multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP);
warning.setDeviationRate(rate); warning.setDeviationRate(rate);
warning.setWarningLevel("WARNING"); warning.setWarningLevel("WARNING");
warning.setWarningMsg("钢卷厚度偏差超出允许范围,理论厚度=" + theoreticalThickness + "mm规格厚度=" + specThickness + "mm"); warning.setWarningMsg("钢卷厚度偏差超出允许范围,理论厚度=" + theoreticalThickness.setScale(3, RoundingMode.HALF_UP) + "mm规格厚度=" + specThickness.setScale(3, RoundingMode.HALF_UP) + "mm");
warning.setWarningStatus(0); warning.setWarningStatus(0);
warnings.add(warning); warnings.add(warning);
} }