|
@@ -3,10 +3,9 @@ package com.syjy.calculate.service;
|
|
import com.googlecode.aviator.AviatorEvaluator;
|
|
import com.googlecode.aviator.AviatorEvaluator;
|
|
import com.syjy.calculate.entity.*;
|
|
import com.syjy.calculate.entity.*;
|
|
import com.syjy.calculate.repository.CalculationFormulaRepository;
|
|
import com.syjy.calculate.repository.CalculationFormulaRepository;
|
|
-import com.syjy.calculate.util.CommonlUtil;
|
|
|
|
|
|
+import com.syjy.calculate.util.Common;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
-import org.springframework.cglib.beans.BeanMap;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
@@ -25,7 +24,7 @@ public class AssessmentCalculateService {
|
|
private CalculationFormulaRepository calculationFormulaRepository;
|
|
private CalculationFormulaRepository calculationFormulaRepository;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- private CommonlUtil commonlUtil;
|
|
|
|
|
|
+ private Common common;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 计算考核电量
|
|
* 计算考核电量
|
|
@@ -39,14 +38,16 @@ public class AssessmentCalculateService {
|
|
if(!String.valueOf(checkResult.get(CalculateResult.CODE_TAG)).equals(CalculateResult.Type.SUCCESS.value())){
|
|
if(!String.valueOf(checkResult.get(CalculateResult.CODE_TAG)).equals(CalculateResult.Type.SUCCESS.value())){
|
|
return checkResult;
|
|
return checkResult;
|
|
}
|
|
}
|
|
- // 上下文
|
|
|
|
- Map<String, Object> env = new HashMap<>();
|
|
|
|
- BeanMap map = BeanMap.create(assessmentRequest);
|
|
|
|
- // 将考核bean转为map
|
|
|
|
- for (Object key : map.keySet()) {
|
|
|
|
- env.put(String.valueOf(key), map.get(key));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+// // 上下文
|
|
|
|
+// Map<String, Object> env = new HashMap<>();
|
|
|
|
+// BeanMap map = BeanMap.create(assessmentRequest);
|
|
|
|
+// // 将考核bean转为map
|
|
|
|
+// for (Object key : map.keySet()) {
|
|
|
|
+// env.put(String.valueOf(key), map.get(key));
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+ // 将实体类转为Map
|
|
|
|
+ Map<String, Object> env = common.beanToMap(assessmentRequest);
|
|
// 短期上报率
|
|
// 短期上报率
|
|
String shortReportRate = calculateDetail(assessmentRequest,env,CalculateResult.SHORT_REPORT_RATE);
|
|
String shortReportRate = calculateDetail(assessmentRequest,env,CalculateResult.SHORT_REPORT_RATE);
|
|
// 超短期上报率
|
|
// 超短期上报率
|
|
@@ -59,6 +60,14 @@ public class AssessmentCalculateService {
|
|
String shortPassRate = calculateDetail(assessmentRequest,env,CalculateResult.SHORT_PASS_RATE);
|
|
String shortPassRate = calculateDetail(assessmentRequest,env,CalculateResult.SHORT_PASS_RATE);
|
|
// 超短期合格率
|
|
// 超短期合格率
|
|
String ultraShortPassRate = calculateDetail(assessmentRequest,env,CalculateResult.ULTRA_SHORT_PASS_RATE);
|
|
String ultraShortPassRate = calculateDetail(assessmentRequest,env,CalculateResult.ULTRA_SHORT_PASS_RATE);
|
|
|
|
+ // 单机信息可用率
|
|
|
|
+ String singleMachinePassRate = calculateDetail(assessmentRequest,env,CalculateResult.SINGLE_MACHINE_PASS_RATE);
|
|
|
|
+ // 可用发电功率可用率
|
|
|
|
+ String ablePowerAccuracyRate = calculateDetail(assessmentRequest,env,CalculateResult.ABLE_POWER_ACCURACY_RATE);
|
|
|
|
+ // 理论发电功率可用率
|
|
|
|
+ String theoryPowerAccuracyRate = calculateDetail(assessmentRequest,env,CalculateResult.THEORY_POWER_ACCURACY_RATE);
|
|
|
|
+ // 测风塔/气象站可用率
|
|
|
|
+ String anemometerTowerAccuracyRate = calculateDetail(assessmentRequest,env,CalculateResult.ANEMOMETER_TOWER_ACCURACY_RATE);
|
|
|
|
|
|
assessmentInfo.setShortReportRate(shortReportRate);
|
|
assessmentInfo.setShortReportRate(shortReportRate);
|
|
assessmentInfo.setUltraShortReportRate(ultraShortReportRate);
|
|
assessmentInfo.setUltraShortReportRate(ultraShortReportRate);
|
|
@@ -66,6 +75,10 @@ public class AssessmentCalculateService {
|
|
assessmentInfo.setUltraShortAccuracyRate(ultraShortAccuracyRate);
|
|
assessmentInfo.setUltraShortAccuracyRate(ultraShortAccuracyRate);
|
|
assessmentInfo.setShortPassRate(shortPassRate);
|
|
assessmentInfo.setShortPassRate(shortPassRate);
|
|
assessmentInfo.setUltraShortPassRate(ultraShortPassRate);
|
|
assessmentInfo.setUltraShortPassRate(ultraShortPassRate);
|
|
|
|
+ assessmentInfo.setSingleMachinePassRate(singleMachinePassRate);
|
|
|
|
+ assessmentInfo.setAblePowerAccuracyRate(ablePowerAccuracyRate);
|
|
|
|
+ assessmentInfo.setTheoryPowerAccuracyRate(theoryPowerAccuracyRate);
|
|
|
|
+ assessmentInfo.setAnemometerTowerAccuracyRate(anemometerTowerAccuracyRate);
|
|
return CalculateResult.success(CalculateResult.MSG_CALCULATE_SUCCESS, assessmentInfo);
|
|
return CalculateResult.success(CalculateResult.MSG_CALCULATE_SUCCESS, assessmentInfo);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -99,16 +112,17 @@ public class AssessmentCalculateService {
|
|
*/
|
|
*/
|
|
private String calculateDetail(AssessmentRequest assessmentRequest,Map<String,Object> env,String formulaType){
|
|
private String calculateDetail(AssessmentRequest assessmentRequest,Map<String,Object> env,String formulaType){
|
|
|
|
|
|
- // 根据类型从数据库中查出公式列表
|
|
|
|
- CalculationFormula calculationFormula = calculationFormulaRepository.findByTypeAndProvince(CalculateResult.FORMULA,formulaType, assessmentRequest.getProvince(),assessmentRequest.getElectricType());
|
|
|
|
|
|
+ // 根据类型从数据库中查出考核公式列表
|
|
|
|
+ CalculationFormula calculationFormula = calculationFormulaRepository.findAssessmentByTypeAndProvince(CalculateResult.FORMULA,formulaType, assessmentRequest.getProvince(),assessmentRequest.getElectricType(),assessmentRequest.getStationCode());
|
|
// 判断是否有公式
|
|
// 判断是否有公式
|
|
if (calculationFormula == null || calculationFormula.getFormula() == null) {
|
|
if (calculationFormula == null || calculationFormula.getFormula() == null) {
|
|
// 未匹配到公式
|
|
// 未匹配到公式
|
|
- return CalculateResult.MSG_NO_FORMULA;
|
|
|
|
|
|
+ log.info(CalculateResult.MSG_NO_FORMULA);
|
|
|
|
+ return CalculateResult.MSG_ERROR;
|
|
}
|
|
}
|
|
|
|
|
|
- // 根据类型从数据库中查出公式列表
|
|
|
|
- CalculationFormula rulesCalculationFormula = calculationFormulaRepository.findByTypeAndProvince(CalculateResult.RULES, formulaType, assessmentRequest.getProvince(), assessmentRequest.getElectricType());
|
|
|
|
|
|
+ // 根据类型从数据库中查出规则列表
|
|
|
|
+ CalculationFormula rulesCalculationFormula = calculationFormulaRepository.findAssessmentByTypeAndProvince(CalculateResult.RULES, formulaType, assessmentRequest.getProvince(), assessmentRequest.getElectricType(),assessmentRequest.getStationCode());
|
|
|
|
|
|
// 判断是否有约束
|
|
// 判断是否有约束
|
|
if (rulesCalculationFormula != null && rulesCalculationFormula.getFormula() != null) {
|
|
if (rulesCalculationFormula != null && rulesCalculationFormula.getFormula() != null) {
|
|
@@ -116,13 +130,12 @@ public class AssessmentCalculateService {
|
|
String checkResult = calculate(env,rulesCalculationFormula.getFormula(),assessmentRequest.getProvince(),formulaType,assessmentRequest.getElectricType(),CalculateResult.RULES);
|
|
String checkResult = calculate(env,rulesCalculationFormula.getFormula(),assessmentRequest.getProvince(),formulaType,assessmentRequest.getElectricType(),CalculateResult.RULES);
|
|
// 如果校验失败,返回失败原因
|
|
// 如果校验失败,返回失败原因
|
|
if(!checkResult.equals(CalculateResult.MSG_CHECK_SUCCESS)){
|
|
if(!checkResult.equals(CalculateResult.MSG_CHECK_SUCCESS)){
|
|
- return checkResult;
|
|
|
|
|
|
+ log.info(checkResult);
|
|
|
|
+ return CalculateResult.MSG_ERROR;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
// 计算考核
|
|
// 计算考核
|
|
- String result = calculate(env,calculationFormula.getFormula(),assessmentRequest.getProvince(),formulaType,assessmentRequest.getElectricType(),CalculateResult.FORMULA);
|
|
|
|
-
|
|
|
|
|
|
+ String result = this.calculate(env,calculationFormula.getFormula(),assessmentRequest.getProvince(),formulaType,assessmentRequest.getElectricType(),CalculateResult.FORMULA);
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -138,7 +151,7 @@ public class AssessmentCalculateService {
|
|
*/
|
|
*/
|
|
private String calculate(Map<String, Object> env,String formulaContent,String province,String formulaType,String electricType,String calculateType){
|
|
private String calculate(Map<String, Object> env,String formulaContent,String province,String formulaType,String electricType,String calculateType){
|
|
// 获取公式缓存名称
|
|
// 获取公式缓存名称
|
|
- String scriptName = commonlUtil.initFormula(formulaContent ,province, formulaType, electricType, calculateType);
|
|
|
|
|
|
+ String scriptName = common.initFormula(formulaContent ,province, formulaType, electricType, calculateType);
|
|
try {
|
|
try {
|
|
// 根据公式和上下文进行计算
|
|
// 根据公式和上下文进行计算
|
|
Object executeResult = AviatorEvaluator.getInstance().getCachedExpressionByKey(scriptName).execute(env);
|
|
Object executeResult = AviatorEvaluator.getInstance().getCachedExpressionByKey(scriptName).execute(env);
|