diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java index 9c034a5..8bb22d3 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java @@ -26,7 +26,7 @@ * 最大允许误差计算:=标准值上限*分辨力 */ public static BigDecimal maximumError(BigDecimal bd1, BigDecimal bd2, int resolution) { - BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, BigDecimal.ROUND_DOWN); + BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, RoundingMode.HALF_UP); return maximumError; } @@ -51,7 +51,7 @@ } if ("平分点法".equals(request.getGenerateWay())) { //步长,保留2位小数 - BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, RoundingMode.HALF_UP); for (Integer i = 0; i < points; i++) { BizBusinessDeviceMeasureItemDataPistonGauge itemDataPistonGauge = new BizBusinessDeviceMeasureItemDataPistonGauge(); itemDataPistonGauge.setItemId(request.getItemId()); @@ -97,7 +97,7 @@ } //最大允许误差计算:准确度等级*满表量程值/100,为范围值自动补充±,满表量程值=手工输入量程上限-下限 - BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemDataPistonGauge.setMaximumError("±" + maximumError); //回程误差允许值(不带±),为最大允许误差的绝对值 @@ -105,17 +105,17 @@ //理论输出值单位为:mA,值误差允许误差 = 16*准确度等级/100 //理论输出值单位为:V,示值误差允许误差 = 4*准确度等级/100 if ("V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } else { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } } else { itemDataPistonGauge.setReturnError(maximumError); } //轻敲位移允许值(不带±),为最大允许误差的1/2的绝对值 - itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值(带±),与最大允许误差相同 if (itemCategoryName.contains("压力变送器")) { //压力变送器的示值误差允许值计算,±16*准确度等级/100 @@ -131,11 +131,11 @@ BigDecimal indicatingValueDecimal = new BigDecimal(itemDataPistonGauge.getIndicatingValue()); BigDecimal rangeLower = new BigDecimal(request.getRangeLower()); if (itemCategoryName.contains("压力变送器") && "V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(1)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } else { - BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } @@ -164,20 +164,20 @@ itemData.setAccuracyClass(itemConfig.getAccuracyLevelUpper()); } //最大允许误差 - BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemData.setMaximumError("±" + maximumError); //回程误差允许值 itemData.setReturnError(maximumError); //轻敲位移允许值 - itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值 itemData.setIndicatingError("±" + maximumError); } else if(itemCategoryName.contains("压力变送器") || itemCategoryName.contains("压力传感器")) { if (StringUtils.isNotEmpty(itemData.getIndicatingValue())) { BigDecimal indicatingValueDecimal = new BigDecimal(itemData.getIndicatingValue()); if (range.compareTo(BigDecimal.valueOf(0)) != 0) { - itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); + itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); } } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java index 9c034a5..8bb22d3 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java @@ -26,7 +26,7 @@ * 最大允许误差计算:=标准值上限*分辨力 */ public static BigDecimal maximumError(BigDecimal bd1, BigDecimal bd2, int resolution) { - BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, BigDecimal.ROUND_DOWN); + BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, RoundingMode.HALF_UP); return maximumError; } @@ -51,7 +51,7 @@ } if ("平分点法".equals(request.getGenerateWay())) { //步长,保留2位小数 - BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, RoundingMode.HALF_UP); for (Integer i = 0; i < points; i++) { BizBusinessDeviceMeasureItemDataPistonGauge itemDataPistonGauge = new BizBusinessDeviceMeasureItemDataPistonGauge(); itemDataPistonGauge.setItemId(request.getItemId()); @@ -97,7 +97,7 @@ } //最大允许误差计算:准确度等级*满表量程值/100,为范围值自动补充±,满表量程值=手工输入量程上限-下限 - BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemDataPistonGauge.setMaximumError("±" + maximumError); //回程误差允许值(不带±),为最大允许误差的绝对值 @@ -105,17 +105,17 @@ //理论输出值单位为:mA,值误差允许误差 = 16*准确度等级/100 //理论输出值单位为:V,示值误差允许误差 = 4*准确度等级/100 if ("V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } else { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } } else { itemDataPistonGauge.setReturnError(maximumError); } //轻敲位移允许值(不带±),为最大允许误差的1/2的绝对值 - itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值(带±),与最大允许误差相同 if (itemCategoryName.contains("压力变送器")) { //压力变送器的示值误差允许值计算,±16*准确度等级/100 @@ -131,11 +131,11 @@ BigDecimal indicatingValueDecimal = new BigDecimal(itemDataPistonGauge.getIndicatingValue()); BigDecimal rangeLower = new BigDecimal(request.getRangeLower()); if (itemCategoryName.contains("压力变送器") && "V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(1)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } else { - BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } @@ -164,20 +164,20 @@ itemData.setAccuracyClass(itemConfig.getAccuracyLevelUpper()); } //最大允许误差 - BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemData.setMaximumError("±" + maximumError); //回程误差允许值 itemData.setReturnError(maximumError); //轻敲位移允许值 - itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值 itemData.setIndicatingError("±" + maximumError); } else if(itemCategoryName.contains("压力变送器") || itemCategoryName.contains("压力传感器")) { if (StringUtils.isNotEmpty(itemData.getIndicatingValue())) { BigDecimal indicatingValueDecimal = new BigDecimal(itemData.getIndicatingValue()); if (range.compareTo(BigDecimal.valueOf(0)) != 0) { - itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); + itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); } } } diff --git a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml index 202e3c1..139a627 100644 --- a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml @@ -98,7 +98,7 @@ and handle_status = #{request.handleStatus} - + and (approval_status = 1 or approval_status is null) diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java index 9c034a5..8bb22d3 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java @@ -26,7 +26,7 @@ * 最大允许误差计算:=标准值上限*分辨力 */ public static BigDecimal maximumError(BigDecimal bd1, BigDecimal bd2, int resolution) { - BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, BigDecimal.ROUND_DOWN); + BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, RoundingMode.HALF_UP); return maximumError; } @@ -51,7 +51,7 @@ } if ("平分点法".equals(request.getGenerateWay())) { //步长,保留2位小数 - BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, RoundingMode.HALF_UP); for (Integer i = 0; i < points; i++) { BizBusinessDeviceMeasureItemDataPistonGauge itemDataPistonGauge = new BizBusinessDeviceMeasureItemDataPistonGauge(); itemDataPistonGauge.setItemId(request.getItemId()); @@ -97,7 +97,7 @@ } //最大允许误差计算:准确度等级*满表量程值/100,为范围值自动补充±,满表量程值=手工输入量程上限-下限 - BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemDataPistonGauge.setMaximumError("±" + maximumError); //回程误差允许值(不带±),为最大允许误差的绝对值 @@ -105,17 +105,17 @@ //理论输出值单位为:mA,值误差允许误差 = 16*准确度等级/100 //理论输出值单位为:V,示值误差允许误差 = 4*准确度等级/100 if ("V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } else { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } } else { itemDataPistonGauge.setReturnError(maximumError); } //轻敲位移允许值(不带±),为最大允许误差的1/2的绝对值 - itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值(带±),与最大允许误差相同 if (itemCategoryName.contains("压力变送器")) { //压力变送器的示值误差允许值计算,±16*准确度等级/100 @@ -131,11 +131,11 @@ BigDecimal indicatingValueDecimal = new BigDecimal(itemDataPistonGauge.getIndicatingValue()); BigDecimal rangeLower = new BigDecimal(request.getRangeLower()); if (itemCategoryName.contains("压力变送器") && "V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(1)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } else { - BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } @@ -164,20 +164,20 @@ itemData.setAccuracyClass(itemConfig.getAccuracyLevelUpper()); } //最大允许误差 - BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemData.setMaximumError("±" + maximumError); //回程误差允许值 itemData.setReturnError(maximumError); //轻敲位移允许值 - itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值 itemData.setIndicatingError("±" + maximumError); } else if(itemCategoryName.contains("压力变送器") || itemCategoryName.contains("压力传感器")) { if (StringUtils.isNotEmpty(itemData.getIndicatingValue())) { BigDecimal indicatingValueDecimal = new BigDecimal(itemData.getIndicatingValue()); if (range.compareTo(BigDecimal.valueOf(0)) != 0) { - itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); + itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); } } } diff --git a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml index 202e3c1..139a627 100644 --- a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml @@ -98,7 +98,7 @@ and handle_status = #{request.handleStatus} - + and (approval_status = 1 or approval_status is null) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 7696122..2c30648 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -12,6 +12,7 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** *

@@ -336,4 +337,8 @@ @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") @TableField(exist = false) private String equipmentType; + + @ApiModelProperty(value = "技术指标", dataType = "List") + @TableField(exist = false) + private List technicalTargetList; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java index 9c034a5..8bb22d3 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java @@ -26,7 +26,7 @@ * 最大允许误差计算:=标准值上限*分辨力 */ public static BigDecimal maximumError(BigDecimal bd1, BigDecimal bd2, int resolution) { - BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, BigDecimal.ROUND_DOWN); + BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, RoundingMode.HALF_UP); return maximumError; } @@ -51,7 +51,7 @@ } if ("平分点法".equals(request.getGenerateWay())) { //步长,保留2位小数 - BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, RoundingMode.HALF_UP); for (Integer i = 0; i < points; i++) { BizBusinessDeviceMeasureItemDataPistonGauge itemDataPistonGauge = new BizBusinessDeviceMeasureItemDataPistonGauge(); itemDataPistonGauge.setItemId(request.getItemId()); @@ -97,7 +97,7 @@ } //最大允许误差计算:准确度等级*满表量程值/100,为范围值自动补充±,满表量程值=手工输入量程上限-下限 - BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemDataPistonGauge.setMaximumError("±" + maximumError); //回程误差允许值(不带±),为最大允许误差的绝对值 @@ -105,17 +105,17 @@ //理论输出值单位为:mA,值误差允许误差 = 16*准确度等级/100 //理论输出值单位为:V,示值误差允许误差 = 4*准确度等级/100 if ("V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } else { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } } else { itemDataPistonGauge.setReturnError(maximumError); } //轻敲位移允许值(不带±),为最大允许误差的1/2的绝对值 - itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值(带±),与最大允许误差相同 if (itemCategoryName.contains("压力变送器")) { //压力变送器的示值误差允许值计算,±16*准确度等级/100 @@ -131,11 +131,11 @@ BigDecimal indicatingValueDecimal = new BigDecimal(itemDataPistonGauge.getIndicatingValue()); BigDecimal rangeLower = new BigDecimal(request.getRangeLower()); if (itemCategoryName.contains("压力变送器") && "V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(1)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } else { - BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } @@ -164,20 +164,20 @@ itemData.setAccuracyClass(itemConfig.getAccuracyLevelUpper()); } //最大允许误差 - BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemData.setMaximumError("±" + maximumError); //回程误差允许值 itemData.setReturnError(maximumError); //轻敲位移允许值 - itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值 itemData.setIndicatingError("±" + maximumError); } else if(itemCategoryName.contains("压力变送器") || itemCategoryName.contains("压力传感器")) { if (StringUtils.isNotEmpty(itemData.getIndicatingValue())) { BigDecimal indicatingValueDecimal = new BigDecimal(itemData.getIndicatingValue()); if (range.compareTo(BigDecimal.valueOf(0)) != 0) { - itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); + itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); } } } diff --git a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml index 202e3c1..139a627 100644 --- a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml @@ -98,7 +98,7 @@ and handle_status = #{request.handleStatus} - + and (approval_status = 1 or approval_status is null) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 7696122..2c30648 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -12,6 +12,7 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** *

@@ -336,4 +337,8 @@ @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") @TableField(exist = false) private String equipmentType; + + @ApiModelProperty(value = "技术指标", dataType = "List") + @TableField(exist = false) + private List technicalTargetList; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java b/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java index 27a9bf4..b348149 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java @@ -18,20 +18,31 @@ */ @Override public void appendAsterisksIfNeeded(BizBusinessDeviceMeasureDataDcPower dcPower) { - if (StringUtils.isNotBlank(dcPower.getVoltageRegulation()) && StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && !"/".equals(dcPower.getVoltageRegulation()) && "/".equals(dcPower.getTechnicalIndex())) { + if (StringUtils.isNotBlank(dcPower.getVoltageRegulation()) && StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && !"/".equals(dcPower.getVoltageRegulation()) && !"/".equals(dcPower.getTechnicalIndex())) { int digit = dcPower.getTechnicalIndexDigit(); BigDecimal voltageRegulation = new BigDecimal(dcPower.getVoltageRegulation()).setScale(digit + 1); BigDecimal technicalIndex = new BigDecimal(dcPower.getTechnicalIndex()); - int compare = voltageRegulation.compareTo(technicalIndex); - dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); - dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); - if (compare > 0) { - dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + if ("≤".equals(dcPower.getTechnicalIndexSymbol())) { + int compare = voltageRegulation.compareTo(technicalIndex); + dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); + if (compare > 0) { + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + } + } + if ("±".equals(dcPower.getTechnicalIndexSymbol())) { + BigDecimal negateTechnicalIndex = technicalIndex.negate(); + dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); + int max = voltageRegulation.compareTo(technicalIndex); + int min = voltageRegulation.compareTo(negateTechnicalIndex); + if (max > 0 || min < 0) { + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + } } } } - }, - LOAD_REGULATION { + }, LOAD_REGULATION { /** * @param dcPower */ @@ -49,8 +60,7 @@ } } } - }, - ABSOLUTE_ERROR { + }, ABSOLUTE_ERROR { /** * @param dcPower */ @@ -70,8 +80,7 @@ } } } - }, - RIPPLE_VOLTAGE { + }, RIPPLE_VOLTAGE { /** * @param dcPower */ @@ -88,14 +97,13 @@ } } } - }, - SHORT_TERM_STABILITY { + }, SHORT_TERM_STABILITY { /** * @param dcPower */ @Override public void appendAsterisksIfNeeded(BizBusinessDeviceMeasureDataDcPower dcPower) { - if (StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && StringUtils.isNotBlank(dcPower.getShortTermStability()) && !"/".equals(dcPower.getShortTermStability()) && "/".equals(dcPower.getTechnicalIndex())){ + if (StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && StringUtils.isNotBlank(dcPower.getShortTermStability()) && !"/".equals(dcPower.getShortTermStability()) && "/".equals(dcPower.getTechnicalIndex())) { int digit = dcPower.getTechnicalIndexDigit(); BigDecimal shortTermStability = new BigDecimal(dcPower.getShortTermStability()).setScale(digit + 1); BigDecimal technicalIndex = new BigDecimal(dcPower.getTechnicalIndex()); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java index 9c034a5..8bb22d3 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java @@ -26,7 +26,7 @@ * 最大允许误差计算:=标准值上限*分辨力 */ public static BigDecimal maximumError(BigDecimal bd1, BigDecimal bd2, int resolution) { - BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, BigDecimal.ROUND_DOWN); + BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, RoundingMode.HALF_UP); return maximumError; } @@ -51,7 +51,7 @@ } if ("平分点法".equals(request.getGenerateWay())) { //步长,保留2位小数 - BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, RoundingMode.HALF_UP); for (Integer i = 0; i < points; i++) { BizBusinessDeviceMeasureItemDataPistonGauge itemDataPistonGauge = new BizBusinessDeviceMeasureItemDataPistonGauge(); itemDataPistonGauge.setItemId(request.getItemId()); @@ -97,7 +97,7 @@ } //最大允许误差计算:准确度等级*满表量程值/100,为范围值自动补充±,满表量程值=手工输入量程上限-下限 - BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemDataPistonGauge.setMaximumError("±" + maximumError); //回程误差允许值(不带±),为最大允许误差的绝对值 @@ -105,17 +105,17 @@ //理论输出值单位为:mA,值误差允许误差 = 16*准确度等级/100 //理论输出值单位为:V,示值误差允许误差 = 4*准确度等级/100 if ("V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } else { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } } else { itemDataPistonGauge.setReturnError(maximumError); } //轻敲位移允许值(不带±),为最大允许误差的1/2的绝对值 - itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值(带±),与最大允许误差相同 if (itemCategoryName.contains("压力变送器")) { //压力变送器的示值误差允许值计算,±16*准确度等级/100 @@ -131,11 +131,11 @@ BigDecimal indicatingValueDecimal = new BigDecimal(itemDataPistonGauge.getIndicatingValue()); BigDecimal rangeLower = new BigDecimal(request.getRangeLower()); if (itemCategoryName.contains("压力变送器") && "V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(1)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } else { - BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } @@ -164,20 +164,20 @@ itemData.setAccuracyClass(itemConfig.getAccuracyLevelUpper()); } //最大允许误差 - BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemData.setMaximumError("±" + maximumError); //回程误差允许值 itemData.setReturnError(maximumError); //轻敲位移允许值 - itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值 itemData.setIndicatingError("±" + maximumError); } else if(itemCategoryName.contains("压力变送器") || itemCategoryName.contains("压力传感器")) { if (StringUtils.isNotEmpty(itemData.getIndicatingValue())) { BigDecimal indicatingValueDecimal = new BigDecimal(itemData.getIndicatingValue()); if (range.compareTo(BigDecimal.valueOf(0)) != 0) { - itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); + itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); } } } diff --git a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml index 202e3c1..139a627 100644 --- a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml @@ -98,7 +98,7 @@ and handle_status = #{request.handleStatus} - + and (approval_status = 1 or approval_status is null) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 7696122..2c30648 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -12,6 +12,7 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** *

@@ -336,4 +337,8 @@ @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") @TableField(exist = false) private String equipmentType; + + @ApiModelProperty(value = "技术指标", dataType = "List") + @TableField(exist = false) + private List technicalTargetList; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java b/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java index 27a9bf4..b348149 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java @@ -18,20 +18,31 @@ */ @Override public void appendAsterisksIfNeeded(BizBusinessDeviceMeasureDataDcPower dcPower) { - if (StringUtils.isNotBlank(dcPower.getVoltageRegulation()) && StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && !"/".equals(dcPower.getVoltageRegulation()) && "/".equals(dcPower.getTechnicalIndex())) { + if (StringUtils.isNotBlank(dcPower.getVoltageRegulation()) && StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && !"/".equals(dcPower.getVoltageRegulation()) && !"/".equals(dcPower.getTechnicalIndex())) { int digit = dcPower.getTechnicalIndexDigit(); BigDecimal voltageRegulation = new BigDecimal(dcPower.getVoltageRegulation()).setScale(digit + 1); BigDecimal technicalIndex = new BigDecimal(dcPower.getTechnicalIndex()); - int compare = voltageRegulation.compareTo(technicalIndex); - dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); - dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); - if (compare > 0) { - dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + if ("≤".equals(dcPower.getTechnicalIndexSymbol())) { + int compare = voltageRegulation.compareTo(technicalIndex); + dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); + if (compare > 0) { + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + } + } + if ("±".equals(dcPower.getTechnicalIndexSymbol())) { + BigDecimal negateTechnicalIndex = technicalIndex.negate(); + dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); + int max = voltageRegulation.compareTo(technicalIndex); + int min = voltageRegulation.compareTo(negateTechnicalIndex); + if (max > 0 || min < 0) { + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + } } } } - }, - LOAD_REGULATION { + }, LOAD_REGULATION { /** * @param dcPower */ @@ -49,8 +60,7 @@ } } } - }, - ABSOLUTE_ERROR { + }, ABSOLUTE_ERROR { /** * @param dcPower */ @@ -70,8 +80,7 @@ } } } - }, - RIPPLE_VOLTAGE { + }, RIPPLE_VOLTAGE { /** * @param dcPower */ @@ -88,14 +97,13 @@ } } } - }, - SHORT_TERM_STABILITY { + }, SHORT_TERM_STABILITY { /** * @param dcPower */ @Override public void appendAsterisksIfNeeded(BizBusinessDeviceMeasureDataDcPower dcPower) { - if (StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && StringUtils.isNotBlank(dcPower.getShortTermStability()) && !"/".equals(dcPower.getShortTermStability()) && "/".equals(dcPower.getTechnicalIndex())){ + if (StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && StringUtils.isNotBlank(dcPower.getShortTermStability()) && !"/".equals(dcPower.getShortTermStability()) && "/".equals(dcPower.getTechnicalIndex())) { int digit = dcPower.getTechnicalIndexDigit(); BigDecimal shortTermStability = new BigDecimal(dcPower.getShortTermStability()).setScale(digit + 1); BigDecimal technicalIndex = new BigDecimal(dcPower.getTechnicalIndex()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java index 4e03e75..64bb22f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java @@ -273,7 +273,7 @@ replaceSlash(map); map.put("pdfStatus", 1); List templateUrls = new ArrayList<>(); - templateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(MEASURE_DATA, "1", request.getItemCategoryName())); + templateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(DC_POWER_SUPPLY, "1", request.getItemCategoryName())); //与证书模板区分 SnowflakeUtil snowflakeUtil = new SnowflakeUtil(); map.put("id", snowflakeUtil.nextId()); @@ -344,43 +344,6 @@ map.put("shortRepList", shortRepList); } - /** - * 封面基本信息的定制化参数 - * - * @param map - * @param measureDataElectricalSafetyList - */ - private void prepareCustomCoverParams(Map map, List measureDataElectricalSafetyList) { - //定制参数 - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (!ObjectUtils.isEmpty(map.get(MEASURE_TRACE_DATE))) { - String traceDate = (String) map.get(MEASURE_TRACE_DATE); - try { - map.put(MEASURE_TRACE_DATE, new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse(traceDate))); - } catch (Exception e) { - throw new BusinessException(1500, String.format(traceDate, "检定有效日期,格式不正确")); - } - } - } - @Override public List doCreateCertificateFile(BizBusinessDeviceMeasureApproval request) { try { @@ -415,7 +378,7 @@ log.debug("--------get Certificate template is ...."); //查询对应封面模板和检定证书模板 customTemplateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(MEASURE_DATA, "2", request.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(MEASURE_DATA, "2", request.getItemCategoryName())); + customTemplateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(DC_POWER_SUPPLY, "2", request.getItemCategoryName())); SnowflakeUtil snowflakeUtil = new SnowflakeUtil(); map.put("id", snowflakeUtil.nextId()); map.put("pdfStatus", 1); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java index d943c71..e4353be 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CheckInfoFormulaCalculateUtil.java @@ -35,7 +35,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -64,7 +64,7 @@ BigDecimal trStoke = new BigDecimal(checkData.getThirdReverseStroke()); //平均值=前3次核查的正反行程的平均数值 BigDecimal sum = ffStoke.add(frStoke).add(sfStoke).add(srStoke).add(tfStoke).add(trStoke); - BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(average)); //最大示值误差绝对值=max(|正反输出示值-核查点数值|) @@ -95,7 +95,7 @@ BigDecimal testValueFive = new BigDecimal(checkData.getTestValueFive()); BigDecimal testValueSix = new BigDecimal(checkData.getTestValueSix()); BigDecimal testSum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); - BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal testAverage = testSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setAverageValue(String.valueOf(testAverage)); //测量标准示值平均值=前6次数值和/6 BigDecimal measureValueOne = new BigDecimal(checkData.getMeasureValueOne()); @@ -105,7 +105,7 @@ BigDecimal measureValueFive = new BigDecimal(checkData.getMeasureValueFive()); BigDecimal measureValueSix = new BigDecimal(checkData.getMeasureValueSix()); BigDecimal measureSum = measureValueOne.add(measureValueTwo).add(measureValueThree).add(measureValueFour).add(measureValueFive).add(measureValueSix); - BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + BigDecimal measureAverage = measureSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); checkData.setMeasureAverageValue(String.valueOf(measureAverage)); //最大示值误差=max(|测量标准示值-核查标准示值|),结果带原符号 BigDecimal oAbs = (measureValueOne.subtract(testValueOne)); @@ -137,7 +137,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -168,7 +168,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); //相对重复性 if (average.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel @@ -219,7 +219,7 @@ checkData.setStandardDeviation(String.valueOf(standardDeviation)); if ("稳定性".equals(checkData.getCheckType())) { //相对重复性是否小于相对扩展不确定度Urel - BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 4, RoundingMode.HALF_UP); checkData.setRelativeRepeatability(String.valueOf(relativeRepeatability)); if (relativeRepeatability.compareTo(new BigDecimal(checkData.getUrel())) < 0) { checkData.setLessThan(1); @@ -358,7 +358,7 @@ //重复性和稳定性中的频率核查项目S(x)/x if ("频率".equals(checkData.getParams()) && "重复性".equals(checkData.getCheckType())) { - BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal relativeRepeatability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); //保留2位有效数字 BigDecimal round = relativeRepeatability.round(new MathContext(2, RoundingMode.HALF_UP)); checkData.setStandardDeviation(String.valueOf(round)); @@ -366,7 +366,7 @@ if ("稳定性".equals(checkData.getCheckType())) { //稳定性是否小于相对扩展不确定度Urel - BigDecimal stability = standardDeviation.divide(average, 3, BigDecimal.ROUND_DOWN); + BigDecimal stability = standardDeviation.divide(average, 3, RoundingMode.HALF_UP); if ("频率".equals(checkData.getParams())) { //保留2位有效数字 stability = stability.round(new MathContext(2, RoundingMode.HALF_UP)); @@ -1192,7 +1192,7 @@ BigDecimal sum = testValueOne.add(testValueTwo).add(testValueThree).add(testValueFour).add(testValueFive).add(testValueSix); //最大小数位数 int scale = maximumScale(testValueOne, testValueTwo, testValueThree, testValueFour, testValueFive, testValueSix); - BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, BigDecimal.ROUND_DOWN); + BigDecimal average = sum.divide(BigDecimal.valueOf(totalSum), scale, RoundingMode.HALF_UP); return average; } @@ -1260,7 +1260,7 @@ if (5 == totalSum) { dm = BigDecimal.valueOf(2.33); } - BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = (maxValue.subtract(minValue)).divide(dm, 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } else { //贝塞尔公式 @@ -1271,7 +1271,7 @@ BigDecimal squareFive = (testValueFive.subtract(average)).multiply(testValueFive.subtract(average)); BigDecimal squareSix = (testValueSix.subtract(average)).multiply(testValueSix.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(totalSum - 1), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(sqrt(standardDeviation, 4)); } } @@ -1283,7 +1283,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (standardDeviation.compareTo(BigDecimal.valueOf(-1)) <= 0 || standardDeviation.compareTo(BigDecimal.valueOf(1)) >= 0) { - return standardDeviation.setScale(2, BigDecimal.ROUND_DOWN); + return standardDeviation.setScale(2, RoundingMode.HALF_UP); } else { return standardDeviation.round(new MathContext(3, RoundingMode.HALF_UP)); } @@ -1314,7 +1314,7 @@ BigDecimal squareNine = (testValueNine.subtract(average)).multiply(testValueNine.subtract(average)); BigDecimal squareTen = (testValueTen.subtract(average)).multiply(testValueTen.subtract(average)); BigDecimal squareSum = squareOne.add(squareTwo).add(squareThree).add(squareFour).add(squareFive).add(squareSix).add(squareSeven).add(squareEight).add(squareNine).add(squareTen); - BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardDeviation = squareSum.divide(BigDecimal.valueOf(9), 4, RoundingMode.HALF_UP); return standardDeviationScaleHandle(standardDeviation); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java index 34aa203..a809a79 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureInfoFormulaCalculateUtil.java @@ -31,7 +31,7 @@ List fourList = Arrays.asList("指针式万用表"); measureDataList.forEach(measureData -> { //按分辨力规范标准值 - measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + measureData.setStandardValue(String.valueOf(new BigDecimal(measureData.getStandardValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); //绝对误差计算、最大允许误差计算 if (oneList.contains(itemCategoryName)) { @@ -39,7 +39,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); //最大允许误差计算 =a*示值+b*量程 / =a*示值+b*分辨力 / =a*示值+常数b getMaximumErrorCalibrator(measureData, itemCategoryName); @@ -48,23 +48,23 @@ if (StringUtils.isNotEmpty(measureItemConfigCalibrator.getFullScaleValue()) && StringUtils.isNotEmpty(measureData.getStandardValueUpperLimit()) && !"0".equals(measureData.getStandardValueUpperLimit()) && !"0".equals(measureItemConfigCalibrator.getFullScaleValue())) { BigDecimal transferValue = new BigDecimal(measureItemConfigCalibrator.getFullScaleValue()) - .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + .divide(new BigDecimal(measureData.getStandardValueUpperLimit()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } } else if (threeList.contains(itemCategoryName)) { //绝对误差计算:ΔAN、ΔBN、ΔCN绝对误差计算,(1)电压:[示值/(Vpri/Vsec)]-标准值 (2)电流:[示值/(Ipri/Isec)]-标准值 if (measureData.getParams().contains("V") && StringUtils.isNotEmpty(measureData.getVpri()) && StringUtils.isNotEmpty(measureData.getVsec()) && !"0".equals(measureData.getVpri()) && !"0".equals(measureData.getVsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } else if (measureData.getParams().contains("I") && StringUtils.isNotEmpty(measureData.getIpri()) && StringUtils.isNotEmpty(measureData.getIsec()) && !"0".equals(measureData.getIpri()) && !"0".equals(measureData.getIsec())) { - BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValue = new BigDecimal(measureData.getIpri()).divide(new BigDecimal(measureData.getIsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); getDeltaValue(measureData, transferValue); } //最大允许误差计算 = (标准值/(Vpri/Vsec))*a+b*量程 / =(标准值/(Vpri/Vsec))*a+b*分辨力 / =(标准值/(Vpri/Vsec))*a+常数b @@ -74,7 +74,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getIndicatingValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } }); @@ -86,8 +86,8 @@ if (StringUtils.isNotEmpty(measureData.getMaximumErrorFormula())) { BigDecimal transferValue; if ("多功能电力参数测量仪".equals(itemCategoryName)) { - BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); - BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal transferValueOne = new BigDecimal(measureData.getVpri()).divide(new BigDecimal(measureData.getVsec()), measureData.getResolutionDigit(), RoundingMode.HALF_UP); + BigDecimal transferValueTwo = new BigDecimal(measureData.getStandardValue()).divide(transferValueOne, measureData.getResolutionDigit(), RoundingMode.HALF_UP); transferValue = transferValueTwo.multiply(new BigDecimal(measureData.getErrorParamA())); } else { transferValue = new BigDecimal(measureData.getErrorParamA()).multiply(new BigDecimal(measureData.getIndicatingValue())); @@ -95,15 +95,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN))); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP))); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -111,21 +111,21 @@ private static void getDeltaValue(BizBusinessDeviceMeasureDataCalibrator measureData, BigDecimal transferValue) { measureData.setDeltaAn(String.valueOf( new BigDecimal(measureData.getAn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaBn(String.valueOf( new BigDecimal(measureData.getBn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); measureData.setDeltaCn(String.valueOf( new BigDecimal(measureData.getCn()) - .divide(transferValue, measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .divide(transferValue, measureData.getResolutionDigit(), RoundingMode.HALF_UP) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -203,13 +203,13 @@ BigDecimal averageForward = (new BigDecimal(measureData.getFirstForwardStroke()) .add(new BigDecimal(measureData.getSecondForwardStroke())) .add(new BigDecimal(measureData.getThirdForwardStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageForwardStroke(String.valueOf(averageForward)); //反行程平均值=三次测量反行程的平均值 BigDecimal reverseForward = (new BigDecimal(measureData.getFirstReverseStroke()) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(3), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(3), 4, RoundingMode.HALF_UP); measureData.setAverageReverseStroke(String.valueOf(reverseForward)); //平均值=六次测量中的平均值 BigDecimal averageValue = (new BigDecimal(measureData.getFirstForwardStroke()) @@ -218,7 +218,7 @@ .add(new BigDecimal(measureData.getFirstReverseStroke())) .add(new BigDecimal(measureData.getSecondReverseStroke())) .add(new BigDecimal(measureData.getThirdReverseStroke())) - ).divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN); + ).divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP); measureData.setAverageValue(String.valueOf(averageValue)); //回差平均值=正行程平均值-反行程平均值 measureData.setAverageReturnError(String.valueOf(averageForward.subtract(reverseForward))); @@ -338,7 +338,7 @@ }).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(new BigDecimal(0.00)); //在整个测量范围内的标准偏差---计算 3、重复性ξR 使用 //精度保证最终结果的精度即可,过程中数的数据精度大等于结果的3位以上即可 - BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, BigDecimal.ROUND_DOWN); + BigDecimal rangeStandardDeviationTransfer = (forwardStandardDeviationSum.add(reverseStandardDeviationSum)).divide(BigDecimal.valueOf(2).multiply(BigDecimal.valueOf(measureDataList.size())), 4, RoundingMode.HALF_UP); BigDecimal rangeStandardDeviation = sqrt(rangeStandardDeviationTransfer, 6); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 @@ -347,7 +347,7 @@ /***************************************************端点平移直线*****************************************/ if ("端点平移直线".equals(workLineEquation)) { //斜率b/灵敏度b - BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (upperAverageValue.subtract(lowerAverageValue)).divide((upperIndicatingValue.subtract(lowerIndicatingValue)), 4, RoundingMode.HALF_UP); //正行程算数平均值与端点连线方程的差列表,为取最大正、负偏差 List maxDeviationList = new ArrayList<>(); //各检定点输出值平均值和示值与下限示值差值列表 @@ -385,11 +385,11 @@ //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); //3、重复性ξR - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -400,12 +400,12 @@ subtractValue.add(av.subtract(ysei)); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 - BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = (max.abs().add((min.abs()))).divide(BigDecimal.valueOf(2)).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -415,7 +415,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); /***************************************************最小二乘法*****************************************/ } else if ("最小二乘法".equals(workLineEquation)) { @@ -440,7 +440,7 @@ BigDecimal threePart = squareSum.multiply(size); //截距a第④部分 BigDecimal fourPart = pSum.multiply(pSum); - BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, BigDecimal.ROUND_DOWN); + BigDecimal interceptA = (onePart.subtract(twoPart)).divide((threePart.subtract(fourPart)), 4, RoundingMode.HALF_UP); //1、截距a pistonGaugeData.setInterceptA(String.valueOf(interceptA)); @@ -453,18 +453,18 @@ //斜率b第④部分 BigDecimal fourPartB = pSum.multiply(pSum); //2、斜率b/灵敏度b - BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, BigDecimal.ROUND_DOWN); + BigDecimal slopeB = (onePartB.subtract(twoPartB)).divide((threePartB.subtract(fourPartB)), 4, RoundingMode.HALF_UP); pistonGaugeData.setSlopeB(String.valueOf(slopeB)); pistonGaugeData.setSensitivityB(String.valueOf(slopeB)); //满量程值输出值Yfs---计算 3、重复性ξR,4、迟滞ξH,5、线性ξL 使用 BigDecimal yfs = slopeB.multiply((upperIndicatingValue.subtract(lowerIndicatingValue))).abs(); - BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal repeatabilityR = BigDecimal.valueOf(3).multiply(rangeStandardDeviation).divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //3、重复性ξR pistonGaugeData.setRepeatabilityR(String.valueOf(repeatabilityR)); //正行程平均值-反行程平均值的绝对值最大值---计算 4、迟滞ξH 使用 - BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal hysteresisH = maxAverageStrokeSubtract.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //4、迟滞ξH pistonGaugeData.setHysteresisH(String.valueOf(hysteresisH)); @@ -482,13 +482,13 @@ ylsiSubtractValue.add((averageReverseStroke.subtract(ylsi)).abs()); }); BigDecimal maxSubtractValueAbs = subtractValue.stream().map(BigDecimal::abs).max(BigDecimal::compareTo).get(); - BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal linearL = maxSubtractValueAbs.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); //5、线性ξL pistonGaugeData.setLinearL(String.valueOf(linearL)); //系统误差ξLH---计算 6、基本误差A 使用 BigDecimal maxYlsiSubtractValue = ylsiSubtractValue.stream().max(BigDecimal::compareTo).get(); - BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal sysError = maxYlsiSubtractValue.divide(yfs, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); BigDecimal basicErrorA = sysError.add(repeatabilityR); //6、基本误差A pistonGaugeData.setBasicErrorA("±" + basicErrorA); @@ -498,7 +498,7 @@ BigDecimal slopeB0 = BigDecimal.ZERO; //8、周期稳定性Sb - BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal periodicStabilitySB = (slopeB.subtract(slopeB0)).abs().divide(slopeB.abs(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); pistonGaugeData.setPeriodicStabilitySB(String.valueOf(periodicStabilitySB)); } measureDataList.add(pistonGaugeData); @@ -602,7 +602,7 @@ BigDecimal a = (l.subtract(average)).multiply(l.subtract(average)); aSum = aSum.add(a); } - BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, BigDecimal.ROUND_DOWN); + BigDecimal b = aSum.divide(BigDecimal.valueOf(list.size() - 1), 4, RoundingMode.HALF_UP); return sqrt(b, 6); } @@ -754,7 +754,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -762,7 +762,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getZeroRemoveMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -770,7 +770,7 @@ measureData.setAbsoluteError(String.valueOf( new BigDecimal(measureData.getMeasureIndicationValue()) .subtract(new BigDecimal(measureData.getZeroRemoveMeasureStandardValue())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN) + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP) )); } @@ -781,15 +781,15 @@ if (measureData.getMaximumErrorFormula().contains("量程")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(new BigDecimal(measureData.getRangeRange()))) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("分辨力")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB()).multiply(measureData.getResolution())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } else if (measureData.getMaximumErrorFormula().contains("常数")) { measureData.setMaximumError("±" + transferValue .add(new BigDecimal(measureData.getErrorParamB())) - .setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN)); + .setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP)); } } } @@ -818,13 +818,15 @@ //电源电压调整率 = 被检电源输出电压值的最大差值/被检电源输出电压值(调压器输出值中间值对应的) BizBusinessDeviceMeasureDataDcPower middleDataDcPower = dcPowers.stream() - .filter(dc -> !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) + .filter(dc -> !dc.getVoltageOutputValue().equals(String.valueOf(maxVoltageOutput)) && !dc.getVoltageRegulatorOutputValue().equals(String.valueOf(minVoltageOutput))) .findFirst().get(); - if (new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal voltageRegulation = voltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageRegulatorOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setVoltageRegulation(String.valueOf(voltageRegulation)); + if (new BigDecimal(middleDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { + //为了结果加%后的小数点保留 + BigDecimal multiplyVoltageMaxDifference = voltageMaxDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal voltageRegulation = multiplyVoltageMaxDifference.divide(new BigDecimal(middleDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setVoltageRegulation(String.valueOf(voltageRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getVoltageRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(voltageRegulation), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -838,10 +840,11 @@ //负载调整率 = 电压差值/负载情况为空载时被检电源的输出电压值 if (new BigDecimal(nullDataDcPower.getVoltageOutputValue()).compareTo(BigDecimal.ZERO) != 0) { - BigDecimal loadRegulation = voltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), BigDecimal.ROUND_DOWN); - measureData.setLoadRegulation(String.valueOf(loadRegulation)); + BigDecimal multiplyVoltageDifference = voltageDifference.multiply(BigDecimal.valueOf(100)); + BigDecimal loadRegulation = multiplyVoltageDifference.divide(new BigDecimal(nullDataDcPower.getVoltageOutputValue()), measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setLoadRegulation(String.valueOf(loadRegulation) + "%"); //和被检电源技术指标做判断,需要标注* - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getLoadRegulation(), new BigDecimal(measureData.getTechnicalIndex())); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(loadRegulation.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } @@ -849,7 +852,7 @@ //电流表示值误差(间接测量)需计算标准值 if ("5".equals(measureData.getDataType())) { //标准值 = 标准电压值/标准电阻值 - BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, BigDecimal.ROUND_DOWN); + BigDecimal standardValue = new BigDecimal(measureData.getStandardVoltageValue()).divide(new BigDecimal(measureData.getStandardResistanceValue()), 4, RoundingMode.HALF_UP); measureData.setStandardValue(String.valueOf(standardValue)); } @@ -866,7 +869,7 @@ //如为数字式,则被检表示值小数保留位数受分辨力影响 if ("数字式".equals(measureData.getDataTypeType())) { - BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), BigDecimal.ROUND_DOWN); + BigDecimal measureIndicationValue = new BigDecimal(measureData.getMeasureIndicationValue()).setScale(measureData.getResolutionDigit(), RoundingMode.HALF_UP); measureData.setMeasureIndicationValue(String.valueOf(measureIndicationValue)); } @@ -889,9 +892,10 @@ BizBusinessDeviceMeasureDataDcPower dataDcPower = measureDataList.stream().filter(dc -> "7".equals(dc.getDataType())).findFirst().get(); BigDecimal firstVoltageOutputValue = new BigDecimal(dataDcPower.getVoltageOutputValue()); if (firstVoltageOutputValue.compareTo(BigDecimal.ZERO) != 0) { - BigDecimal shortTermStability = voltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); - measureData.setShortTermStability(String.valueOf(shortTermStability)); - int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), measureData.getShortTermStability(), new BigDecimal(measureData.getTechnicalIndex())); + BigDecimal multiplyVoltageMaxChange = voltageMaxChange.multiply(BigDecimal.valueOf(100)); + BigDecimal shortTermStability = multiplyVoltageMaxChange.divide(firstVoltageOutputValue, measureData.getTechnicalIndexDigit(), RoundingMode.HALF_UP); + measureData.setShortTermStability(String.valueOf(shortTermStability) + "%"); + int exceedMark = judgeSymbol(measureData.getTechnicalIndexSymbol(), String.valueOf(shortTermStability.divide(BigDecimal.valueOf(100))), new BigDecimal(measureData.getTechnicalIndex())); measureData.setExceedMark(exceedMark); } } @@ -935,14 +939,14 @@ BigDecimal roaTwo = new BigDecimal(measureData.getThreeValue()); BigDecimal roaThree = new BigDecimal(measureData.getFiveValue()); BigDecimal roaFour = new BigDecimal(measureData.getSevenValue()); - BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal roaAvg = (roaOne.add(roaTwo).add(roaThree).add(roaFour)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setNineValue(String.valueOf(roaAvg)); //RA均值 = (RA1+RA2+RA3+RA4)/4 BigDecimal raTwo = new BigDecimal(measureData.getTwoValue()); BigDecimal raFour = new BigDecimal(measureData.getFourValue()); BigDecimal raSix = new BigDecimal(measureData.getSixValue()); BigDecimal raEight = new BigDecimal(measureData.getEightValue()); - BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, BigDecimal.ROUND_DOWN); + BigDecimal raAvg = (raTwo.add(raFour).add(raSix).add(raEight)).divide(BigDecimal.valueOf(4), 4, RoundingMode.HALF_UP); measureData.setTenValue(String.valueOf(raAvg)); //工作区域最大温差 = Max-Min(A、B、C、D、E、F、G、H共计8行及ROA1、ROA2、ROA3、ROA4、RA1、RA2、RA3、RA4共计8列的全部数据) List resistanceThermometers = pointGroup.get(measureData.getUpperLowerPoint()); @@ -965,12 +969,12 @@ BigDecimal indicatingSum = new BigDecimal(measureData.getOneValue()).add(new BigDecimal(measureData.getThreeValue())) .add(new BigDecimal(measureData.getFiveValue())).add(new BigDecimal(measureData.getSevenValue())) .add(new BigDecimal(measureData.getNineValue())).add(new BigDecimal(measureData.getElevenValue())); - measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setThirteenValue(String.valueOf(indicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); //被检示值均值 = 被检示值前6次和/6 BigDecimal measureIndicatingSum = new BigDecimal(measureData.getTwoValue()).add(new BigDecimal(measureData.getFourValue())) .add(new BigDecimal(measureData.getSixValue())).add(new BigDecimal(measureData.getEightValue())) .add(new BigDecimal(measureData.getTenValue())).add(new BigDecimal(measureData.getTwelveValue())); - measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, BigDecimal.ROUND_DOWN))); + measureData.setFourteenValue(String.valueOf(measureIndicatingSum.divide(BigDecimal.valueOf(6), 4, RoundingMode.HALF_UP))); } //结果表计算,结果表中的项目字段和输入项配置相关字段为前端传入,结果表列表为4列6行 @@ -983,8 +987,8 @@ BigDecimal drDt = new BigDecimal(measureData.getDrDt()); //项目为R'(0℃)的测量值 = Ri - △ti*(dR/dt) 其中△ti = (Ri/Rtp - Ws)/(dWst/dt) //项目为R'(100℃)的测量值 = Rh - △th*(dR/dt) 其中△th = (Rh/Rtp - Ws)/(dWst/dt) - BigDecimal deltaT = (rValue.divide(rTp, 4, BigDecimal.ROUND_DOWN).subtract(ws)).divide(dwstDt, 4, BigDecimal.ROUND_DOWN); - BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, BigDecimal.ROUND_DOWN); + BigDecimal deltaT = (rValue.divide(rTp, 4, RoundingMode.HALF_UP).subtract(ws)).divide(dwstDt, 4, RoundingMode.HALF_UP); + BigDecimal measureValue = rValue.subtract(deltaT.multiply(drDt)).setScale(4, RoundingMode.HALF_UP); measureData.setMeasureValue(String.valueOf(measureValue)); //项目为R'(0℃)或R'(100℃)时的测量值在允差下限、允差上限范围内,才进行α、△t、△α计算,否则直接为不合格 BigDecimal allowErrorLower = new BigDecimal(measureData.getAllowErrorLower()); @@ -1547,6 +1551,8 @@ conclusion = "符合指标"; } measureData.setConclusion(conclusion); + } else { + measureData.setConclusion("/"); } } } @@ -1570,7 +1576,7 @@ BigDecimal bOne = new BigDecimal(measureData.getBOne()); BigDecimal bTwo = new BigDecimal(measureData.getBTwo()); //Δmi(单位固定mg)计算 - BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, BigDecimal.ROUND_DOWN).stripTrailingZeros(); + BigDecimal deltaM = (bOne.add(bTwo).subtract(aOne).subtract(aTwo)).multiply(BigDecimal.valueOf(1000)).setScale(4, RoundingMode.HALF_UP).stripTrailingZeros(); measureData.setDeltaM(String.valueOf(deltaM)); if (StringUtils.isNotEmpty(measureData.getPtOne())) { List deltaMList = ptOneDeltaMMap.get(measureData.getDataType()); @@ -2866,7 +2872,7 @@ //相对误差数值为0.**或者-0.**时,需要保留小数点后除0外的2位有效数字,例如0.00012%,0.0045% //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (relativeError.compareTo(BigDecimal.valueOf(-1)) <= 0 || relativeError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return relativeError.setScale(2, BigDecimal.ROUND_DOWN); + return relativeError.setScale(2, RoundingMode.HALF_UP); } else { return relativeError.round(new MathContext(2, RoundingMode.HALF_UP)); } @@ -2878,7 +2884,7 @@ //当计算结果数值为0.**或者-0.**时,需要保留小数点后除0外的3位有效数字,例如0.000121,0.00456,需要科学计数法转换,例如1.21E-5、4.35E-11 //有效数字定义:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字 if (testValueError.compareTo(BigDecimal.valueOf(-1)) <= 0 || testValueError.compareTo(BigDecimal.valueOf(1)) >= 0) { - return testValueError.setScale(2, BigDecimal.ROUND_DOWN); + return testValueError.setScale(2, RoundingMode.HALF_UP); } else { return testValueError.round(new MathContext(3, RoundingMode.HALF_UP)); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java index 9c034a5..8bb22d3 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/MeasureItemFormulaCalculateUtil.java @@ -26,7 +26,7 @@ * 最大允许误差计算:=标准值上限*分辨力 */ public static BigDecimal maximumError(BigDecimal bd1, BigDecimal bd2, int resolution) { - BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, BigDecimal.ROUND_DOWN); + BigDecimal maximumError = bd1.multiply(bd2).setScale(resolution, RoundingMode.HALF_UP); return maximumError; } @@ -51,7 +51,7 @@ } if ("平分点法".equals(request.getGenerateWay())) { //步长,保留2位小数 - BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal step = range.divide(BigDecimal.valueOf(points - 1), 2, RoundingMode.HALF_UP); for (Integer i = 0; i < points; i++) { BizBusinessDeviceMeasureItemDataPistonGauge itemDataPistonGauge = new BizBusinessDeviceMeasureItemDataPistonGauge(); itemDataPistonGauge.setItemId(request.getItemId()); @@ -97,7 +97,7 @@ } //最大允许误差计算:准确度等级*满表量程值/100,为范围值自动补充±,满表量程值=手工输入量程上限-下限 - BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemDataPistonGauge.setMaximumError("±" + maximumError); //回程误差允许值(不带±),为最大允许误差的绝对值 @@ -105,17 +105,17 @@ //理论输出值单位为:mA,值误差允许误差 = 16*准确度等级/100 //理论输出值单位为:V,示值误差允许误差 = 4*准确度等级/100 if ("V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(4)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } else { - BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal returnErrorDecimal = itemDataPistonGauge.getAccuracyClass().multiply(BigDecimal.valueOf(16)).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); itemDataPistonGauge.setReturnError(returnErrorDecimal.toPlainString()); } } else { itemDataPistonGauge.setReturnError(maximumError); } //轻敲位移允许值(不带±),为最大允许误差的1/2的绝对值 - itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemDataPistonGauge.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值(带±),与最大允许误差相同 if (itemCategoryName.contains("压力变送器")) { //压力变送器的示值误差允许值计算,±16*准确度等级/100 @@ -131,11 +131,11 @@ BigDecimal indicatingValueDecimal = new BigDecimal(itemDataPistonGauge.getIndicatingValue()); BigDecimal rangeLower = new BigDecimal(request.getRangeLower()); if (itemCategoryName.contains("压力变送器") && "V".equals(itemDataPistonGauge.getTheoreticalOutputValueUnit())) { - BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(4).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(1)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } else { - BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN); + BigDecimal bigDecimal = BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP); BigDecimal theoreticalOutputValue = bigDecimal.multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4)).setScale(3, RoundingMode.HALF_UP); itemDataPistonGauge.setTheoreticalOutputValue(theoreticalOutputValue); } @@ -164,20 +164,20 @@ itemData.setAccuracyClass(itemConfig.getAccuracyLevelUpper()); } //最大允许误差 - BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_DOWN); + BigDecimal maximumErrorDecimal = itemData.getAccuracyClass().multiply(range).divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); String maximumError = maximumErrorDecimal.toPlainString(); itemData.setMaximumError("±" + maximumError); //回程误差允许值 itemData.setReturnError(maximumError); //轻敲位移允许值 - itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + itemData.setFrictionError(maximumErrorDecimal.multiply(BigDecimal.valueOf(0.5)).setScale(4, RoundingMode.HALF_UP).toPlainString()); //示值误差允许值 itemData.setIndicatingError("±" + maximumError); } else if(itemCategoryName.contains("压力变送器") || itemCategoryName.contains("压力传感器")) { if (StringUtils.isNotEmpty(itemData.getIndicatingValue())) { BigDecimal indicatingValueDecimal = new BigDecimal(itemData.getIndicatingValue()); if (range.compareTo(BigDecimal.valueOf(0)) != 0) { - itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, BigDecimal.ROUND_DOWN).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); + itemData.setTheoreticalOutputValue(BigDecimal.valueOf(16).divide(range, 4, RoundingMode.HALF_UP).multiply(indicatingValueDecimal.subtract(rangeLower)).add(BigDecimal.valueOf(4))); } } } diff --git a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml index 202e3c1..139a627 100644 --- a/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/resource/BizResourceCustomerSuggestFormMapper.xml @@ -98,7 +98,7 @@ and handle_status = #{request.handleStatus} - + and (approval_status = 1 or approval_status is null) diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 7696122..2c30648 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -12,6 +12,7 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** *

@@ -336,4 +337,8 @@ @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") @TableField(exist = false) private String equipmentType; + + @ApiModelProperty(value = "技术指标", dataType = "List") + @TableField(exist = false) + private List technicalTargetList; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java b/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java index 27a9bf4..b348149 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/strategy/impl/DcPowerStrategyType.java @@ -18,20 +18,31 @@ */ @Override public void appendAsterisksIfNeeded(BizBusinessDeviceMeasureDataDcPower dcPower) { - if (StringUtils.isNotBlank(dcPower.getVoltageRegulation()) && StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && !"/".equals(dcPower.getVoltageRegulation()) && "/".equals(dcPower.getTechnicalIndex())) { + if (StringUtils.isNotBlank(dcPower.getVoltageRegulation()) && StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && !"/".equals(dcPower.getVoltageRegulation()) && !"/".equals(dcPower.getTechnicalIndex())) { int digit = dcPower.getTechnicalIndexDigit(); BigDecimal voltageRegulation = new BigDecimal(dcPower.getVoltageRegulation()).setScale(digit + 1); BigDecimal technicalIndex = new BigDecimal(dcPower.getTechnicalIndex()); - int compare = voltageRegulation.compareTo(technicalIndex); - dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); - dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); - if (compare > 0) { - dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + if ("≤".equals(dcPower.getTechnicalIndexSymbol())) { + int compare = voltageRegulation.compareTo(technicalIndex); + dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); + if (compare > 0) { + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + } + } + if ("±".equals(dcPower.getTechnicalIndexSymbol())) { + BigDecimal negateTechnicalIndex = technicalIndex.negate(); + dcPower.setTechnicalIndex(dcPower.getTechnicalIndexSymbol() + dcPower.getTechnicalIndex() + "%"); + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "%"); + int max = voltageRegulation.compareTo(technicalIndex); + int min = voltageRegulation.compareTo(negateTechnicalIndex); + if (max > 0 || min < 0) { + dcPower.setVoltageRegulation(dcPower.getVoltageRegulation() + "*"); + } } } } - }, - LOAD_REGULATION { + }, LOAD_REGULATION { /** * @param dcPower */ @@ -49,8 +60,7 @@ } } } - }, - ABSOLUTE_ERROR { + }, ABSOLUTE_ERROR { /** * @param dcPower */ @@ -70,8 +80,7 @@ } } } - }, - RIPPLE_VOLTAGE { + }, RIPPLE_VOLTAGE { /** * @param dcPower */ @@ -88,14 +97,13 @@ } } } - }, - SHORT_TERM_STABILITY { + }, SHORT_TERM_STABILITY { /** * @param dcPower */ @Override public void appendAsterisksIfNeeded(BizBusinessDeviceMeasureDataDcPower dcPower) { - if (StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && StringUtils.isNotBlank(dcPower.getShortTermStability()) && !"/".equals(dcPower.getShortTermStability()) && "/".equals(dcPower.getTechnicalIndex())){ + if (StringUtils.isNotBlank(dcPower.getTechnicalIndex()) && StringUtils.isNotBlank(dcPower.getShortTermStability()) && !"/".equals(dcPower.getShortTermStability()) && "/".equals(dcPower.getTechnicalIndex())) { int digit = dcPower.getTechnicalIndexDigit(); BigDecimal shortTermStability = new BigDecimal(dcPower.getShortTermStability()).setScale(digit + 1); BigDecimal technicalIndex = new BigDecimal(dcPower.getTechnicalIndex()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java index 4e03e75..64bb22f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/standard/impl/DcPowerSupplyHandler.java @@ -273,7 +273,7 @@ replaceSlash(map); map.put("pdfStatus", 1); List templateUrls = new ArrayList<>(); - templateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(MEASURE_DATA, "1", request.getItemCategoryName())); + templateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(DC_POWER_SUPPLY, "1", request.getItemCategoryName())); //与证书模板区分 SnowflakeUtil snowflakeUtil = new SnowflakeUtil(); map.put("id", snowflakeUtil.nextId()); @@ -344,43 +344,6 @@ map.put("shortRepList", shortRepList); } - /** - * 封面基本信息的定制化参数 - * - * @param map - * @param measureDataElectricalSafetyList - */ - private void prepareCustomCoverParams(Map map, List measureDataElectricalSafetyList) { - //定制参数 - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (!ObjectUtils.isEmpty(map.get(MEASURE_TRACE_DATE))) { - String traceDate = (String) map.get(MEASURE_TRACE_DATE); - try { - map.put(MEASURE_TRACE_DATE, new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse(traceDate))); - } catch (Exception e) { - throw new BusinessException(1500, String.format(traceDate, "检定有效日期,格式不正确")); - } - } - } - @Override public List doCreateCertificateFile(BizBusinessDeviceMeasureApproval request) { try { @@ -415,7 +378,7 @@ log.debug("--------get Certificate template is ...."); //查询对应封面模板和检定证书模板 customTemplateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(MEASURE_DATA, "2", request.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(MEASURE_DATA, "2", request.getItemCategoryName())); + customTemplateUrls.add(bizBusinessDeviceMeasureApprovalMapper.customTemplateUrl(DC_POWER_SUPPLY, "2", request.getItemCategoryName())); SnowflakeUtil snowflakeUtil = new SnowflakeUtil(); map.put("id", snowflakeUtil.nextId()); map.put("pdfStatus", 1); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentInfoServiceImpl.java index cb3bd76..301b04a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentInfoServiceImpl.java @@ -633,8 +633,13 @@ resultApprovalPage.setRecords(bizEquipmentInfos); resultApprovalPage.setTotal(approvalPage.getTotal()); } - for (BizEquipmentInfo BizEquipmentInfo : resultApprovalPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(BizEquipmentInfo); + for (BizEquipmentInfo equipmentInfo : resultApprovalPage.getRecords()) { + DictCodeUtils.convertDictCodeToName(equipmentInfo); + String equipmentNo = equipmentInfo.getEquipmentNo(); + QueryWrapper targetWrapper = new QueryWrapper<>(); + targetWrapper.eq("equipment_no", equipmentNo); + List targetList = technicalTargetMapper.selectList(targetWrapper); + equipmentInfo.setTechnicalTargetList(targetList); } return resultApprovalPage; }