|
@@ -7,6 +7,7 @@ import com.syjy.calculate.repository.CalculationFormulaRepository;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
@@ -25,7 +26,6 @@ import java.util.Map;
|
|
|
public class AccuracyPassRateCalculateService {
|
|
|
BigDecimal ZERO = new BigDecimal("0");
|
|
|
BigDecimal HUNDRED = new BigDecimal("100");
|
|
|
-
|
|
|
@Autowired
|
|
|
private CalculationFormulaRepository calculationFormulaRepository;
|
|
|
|
|
@@ -39,11 +39,12 @@ public class AccuracyPassRateCalculateService {
|
|
|
public JSONObject calculate(List<Map<String, Object>> powerData, BigDecimal rl, String provinceEnum, String type) {
|
|
|
JSONObject jsonResult = new JSONObject();
|
|
|
String lastResult = "";
|
|
|
- jsonResult.put("result","fail");
|
|
|
+ jsonResult.put("result", "fail");
|
|
|
// 获取公式
|
|
|
List<CalculationFormula> calculationFormulaList = getCalculationFormulaData(type);
|
|
|
if (calculationFormulaList == null || calculationFormulaList.size() == 0) {
|
|
|
- jsonResult.put("msg","计算失败,未匹配到公式");
|
|
|
+ jsonResult.put("msg", "计算失败,未匹配到公式");
|
|
|
+ return jsonResult;
|
|
|
}
|
|
|
BigDecimal count = BigDecimal.valueOf(calculationFormulaList.size());
|
|
|
// 获取当前省调的公式变量值
|
|
@@ -105,21 +106,26 @@ public class AccuracyPassRateCalculateService {
|
|
|
}
|
|
|
// 获取最后一个公式计算的结果
|
|
|
lastResult = String.valueOf(resultMap.get("result" + calculationFormulaList.size()));
|
|
|
+ if (lastResult == null) {
|
|
|
+ jsonResult.put("msg", "计算失败,结果为空");
|
|
|
+ return jsonResult;
|
|
|
+ }
|
|
|
+ log.info("最后一个公式计算的结果:" + lastResult);
|
|
|
BigDecimal bResult = new BigDecimal(lastResult);
|
|
|
bResult = bResult.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
// 过滤准确率
|
|
|
bResult = filterResult(bResult);
|
|
|
lastResult = bResult + "%";
|
|
|
- jsonResult.put("result","success");
|
|
|
- jsonResult.put("value",lastResult);
|
|
|
- log.info("准确率:" + lastResult );
|
|
|
+ jsonResult.put("result", "success");
|
|
|
+ jsonResult.put("value", lastResult);
|
|
|
+ log.info("准确率:" + lastResult);
|
|
|
return jsonResult;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取当前省调的公式列表
|
|
|
*
|
|
|
- * @param type 类型
|
|
|
+ * @param type 类型
|
|
|
* @return
|
|
|
*/
|
|
|
public List<CalculationFormula> getCalculationFormulaData(String type) {
|
|
@@ -194,16 +200,17 @@ public class AccuracyPassRateCalculateService {
|
|
|
|
|
|
/**
|
|
|
* 过滤结果 <0=0 >100=100
|
|
|
+ *
|
|
|
* @param result 过滤前的结果
|
|
|
* @return 过滤后的结果
|
|
|
*/
|
|
|
- private BigDecimal filterResult(BigDecimal result){
|
|
|
+ private BigDecimal filterResult(BigDecimal result) {
|
|
|
//当结果为负数时,说明偏差过大,准确率为0
|
|
|
- if(result.compareTo(BigDecimal.ZERO)==-1 || result.compareTo(BigDecimal.ZERO)==0){
|
|
|
+ if (result.compareTo(BigDecimal.ZERO) == -1 || result.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
result = BigDecimal.ZERO;
|
|
|
}
|
|
|
|
|
|
- if(result.compareTo(this.HUNDRED)==1){
|
|
|
+ if (result.compareTo(this.HUNDRED) == 1) {
|
|
|
result = this.HUNDRED;
|
|
|
}
|
|
|
return result;
|