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();
warning.setCoilId(coil.getCoilId());
warning.setWarningType("LENGTH");
warning.setTheoreticalVal(theoreticalLength);
warning.setActualVal(actual);
warning.setAllowDeviation(threshold);
warning.setDeviationValue(actual.subtract(theoreticalLength));
warning.setDeviationRate(rate.multiply(new BigDecimal("100")).setScale(4, RoundingMode.HALF_UP));
warning.setTheoreticalVal(theoreticalLength.setScale(3, RoundingMode.HALF_UP));
warning.setActualVal(actual.setScale(3, RoundingMode.HALF_UP));
warning.setAllowDeviation(threshold.setScale(3, RoundingMode.HALF_UP));
warning.setDeviationValue(actual.subtract(theoreticalLength).setScale(3, RoundingMode.HALF_UP));
warning.setDeviationRate(rate.multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP));
warning.setWarningLevel("WARNING");
warning.setWarningMsg("钢卷长度偏差超过阈值,理论长度=" + theoreticalLength + "m实测长度=" + actualLength + "mm");
warning.setWarningMsg("钢卷长度偏差超过阈值,理论长度=" + theoreticalLength.setScale(3, RoundingMode.HALF_UP) + "m实测长度=" + actualLength + "mm");
warning.setWarningStatus(0);
warnings.add(warning);
}
@@ -243,15 +243,15 @@ public class WmsMaterialWarningServiceImpl implements IWmsMaterialWarningService
WmsMaterialWarning warning = new WmsMaterialWarning();
warning.setCoilId(coil.getCoilId());
warning.setWarningType("THICKNESS");
warning.setTheoreticalVal(theoreticalThickness);
warning.setActualVal(specThickness);
warning.setAllowDeviation(threshold);
warning.setDeviationValue(specThickness.subtract(theoreticalThickness));
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)
.multiply(new BigDecimal("100")).setScale(4, RoundingMode.HALF_UP);
.multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP);
warning.setDeviationRate(rate);
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);
warnings.add(warning);
}