|
@@ -63,6 +63,9 @@ public class AccuracyPassRateCalculateService {
|
|
|
if (calculationFormula.getDataSourceType() != null) {
|
|
|
List<List<Map<String, Object>>> groupingList = groupingList(checkedData, calculationFormula.getDataSourceType());
|
|
|
env.put(CalculateResult.LIST, groupingList);
|
|
|
+ if(groupingList==null || groupingList.size()==0){
|
|
|
+ return CalculateResult.error(CalculateResult.MSG_CALCULATE_DATA_NULL);
|
|
|
+ }
|
|
|
} else {
|
|
|
env.put(CalculateResult.LIST, checkedData);
|
|
|
}
|
|
@@ -73,25 +76,27 @@ public class AccuracyPassRateCalculateService {
|
|
|
|
|
|
// 获取最大开机容量
|
|
|
List<CalculationInfo> calculationInfoList = calculateRequest.getCalculationInfoList();
|
|
|
- calculationInfoList.sort(Comparator.comparing(CalculationInfo::getOpenCapacity).reversed());
|
|
|
- BigDecimal maxOpenCapacity = calculationInfoList.get(0).getOpenCapacity();
|
|
|
+ BigDecimal maxOpenCapacity = calculateRequest.getElectricCapacity();
|
|
|
+ // 如果数据不为空,获取最大开机容量
|
|
|
+ if(calculationInfoList!=null && calculationInfoList.size()>0){
|
|
|
+ calculationInfoList.sort(Comparator.comparing(CalculationInfo::getOpenCapacity).reversed());
|
|
|
+ maxOpenCapacity = calculationInfoList.get(0).getOpenCapacity();
|
|
|
+ }
|
|
|
env.put(CalculateResult.MAX_OPEN_CAPACITY, maxOpenCapacity);
|
|
|
|
|
|
- Map<String, Object> calculateRequestMap = new HashMap<>();
|
|
|
- // bean 转map
|
|
|
- BeanMap beanMap = BeanMap.create(calculateRequest);
|
|
|
- for (Object key : beanMap.keySet()) {
|
|
|
- calculateRequestMap.put(String.valueOf(key), beanMap.get(key));
|
|
|
- }
|
|
|
+// Map<String, Object> calculateRequestMap = new HashMap<>();
|
|
|
+// // bean 转map
|
|
|
+// BeanMap beanMap = BeanMap.create(calculateRequest);
|
|
|
+// for (Object key : beanMap.keySet()) {
|
|
|
+// calculateRequestMap.put(String.valueOf(key), beanMap.get(key));
|
|
|
+// }
|
|
|
+
|
|
|
// 执行计算并得出结果
|
|
|
try {
|
|
|
// 获取计算结果
|
|
|
Object executeResult = AviatorEvaluator.getInstance().getCachedExpressionByKey(scriptName).execute(env);
|
|
|
- String result = String.valueOf(executeResult);
|
|
|
// 过滤计算结果
|
|
|
- if (calculationFormula.getIsRate().equals(CalculateResult.STR_TRUE)) {
|
|
|
- result = filterResult(executeResult);
|
|
|
- }
|
|
|
+ String result = filterResult(executeResult,calculationFormula.getIsRate());
|
|
|
return CalculateResult.success(CalculateResult.MSG_CALCULATE_SUCCESS, result);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
@@ -105,9 +110,9 @@ public class AccuracyPassRateCalculateService {
|
|
|
* @param result 过滤前的结果
|
|
|
* @return 过滤后的结果
|
|
|
*/
|
|
|
- private String filterResult(Object result) {
|
|
|
+ private String filterResult(Object result,String type) {
|
|
|
// 如果返回的不是数值类型,则不用过滤,直接返回
|
|
|
- if ((result instanceof String) || (result instanceof Boolean)) {
|
|
|
+ if ((result instanceof String) || (result instanceof Boolean)|| (result instanceof HashMap)) {
|
|
|
return String.valueOf(result);
|
|
|
}
|
|
|
BigDecimal resultBig = new BigDecimal(String.valueOf(result));
|
|
@@ -121,12 +126,18 @@ public class AccuracyPassRateCalculateService {
|
|
|
log.warn("结果大于100%:" + resultBig + "自动转换为100%");
|
|
|
resultBig = BigDecimal.ONE;
|
|
|
}
|
|
|
- // 对数据*100
|
|
|
- resultBig = resultBig.multiply(CalculateResult.ONE_HUNDRED);
|
|
|
- // 对数据进行四舍五入
|
|
|
- resultBig = resultBig.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
- // 数据加上百分号
|
|
|
- return resultBig + CalculateResult.PERCENT;
|
|
|
+
|
|
|
+ // 如果公式结果为带百分号
|
|
|
+ if (type != null && type.equals(CalculateResult.STR_TRUE)) {
|
|
|
+ // 对数据*100
|
|
|
+ resultBig = resultBig.multiply(CalculateResult.ONE_HUNDRED);
|
|
|
+ // 对数据进行四舍五入
|
|
|
+ resultBig = resultBig.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ // 数据加上百分号
|
|
|
+ return resultBig + CalculateResult.PERCENT;
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultBig.toString();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -232,6 +243,7 @@ public class AccuracyPassRateCalculateService {
|
|
|
// 如果返回结果是忽略,则结束本次循环
|
|
|
if (String.valueOf(checkResult.get(CalculateResult.CODE_TAG)).equals(CalculateResult.IGNORE)) {
|
|
|
continue;
|
|
|
+
|
|
|
// 如果返回错误,直接返回结果
|
|
|
} else if (String.valueOf(checkResult.get(CalculateResult.CODE_TAG)).equals(CalculateResult.ERROR)) {
|
|
|
String resultValue = String.valueOf(checkResult.get(CalculateResult.DATA_TAG));
|