Sfoglia il codice sorgente

准确率计算,新增场站编码,现根据场站编码查询公式,如果根据场站编码未查询到公式,则查询场站编码为ALL的公式。

zhangchenglong 2 anni fa
parent
commit
69cc843cf2

+ 2 - 0
src/main/java/com/syjy/calculate/entity/CalculateResult.java

@@ -98,7 +98,9 @@ public class CalculateResult extends HashMap<String, Object> {
     /** 消息信息*/
     public static final String MSG_REQUEST_NULL = "入参为空";
     public static final String MSG_FORMULA_TYPE_NULL = "公式类型为空";
+    public static final String MSG_FORMULA_TYPE_ERROR = "公式类型不正确";
     public static final String MSG_PROVINCE_NULL = "省调为空";
+    public static final String MSG_STATION_CODE_NULL = "场站编码为空";
     public static final String MSG_ELECTRIC_TYPE_NULL = "场站类型为空";
     public static final String MSG_PHOTO_ELECTRICITY_RATED_CAPACITY_NULL = "光场站额定容量为空";
     public static final String MSG_WIND_RATED_CAPACITY_NULL = "风场站类型为空";

+ 1 - 1
src/main/java/com/syjy/calculate/repository/CalculationFormulaRepository.java

@@ -57,7 +57,7 @@ public interface CalculationFormulaRepository {
      * @param type 类型
      * @return 返回记录
      */
-    CalculationFormula findByTypeAndProvince(String type, String formulaType,String province,String electricType);
+    CalculationFormula findByTypeAndProvince(String type, String formulaType,String province,String electricType,String stationCode);
 
 
     /**

+ 28 - 6
src/main/java/com/syjy/calculate/repository/repositoryImpl/CalculationFormulaRepositoryImpl.java

@@ -254,22 +254,41 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
      * @return
      */
     @Override
-    public CalculationFormula findByTypeAndProvince(String type, String formulaType, String province, String electricType) {
+    public CalculationFormula findByTypeAndProvince(String type, String formulaType, String province, String electricType,String stationCode) {
         String sql = "";
         electricType = "%" + electricType + "%";
+        if(stationCode!=null && !"".equals(stationCode)){
+            stationCode = "%" + stationCode + "%";
+        }
         // 查询sql
         if (CalculateResult.FORMULA.equals(type)) {
-            sql = "SELECT * from t_calculation_formula where state = '1' and ELECTRIC_TYPE like ? and PROVINCE = ? and TYPE = ? limit 1 ";
+            sql = "SELECT * from t_calculation_formula where state = '1' and ELECTRIC_TYPE like ? and PROVINCE = ? and TYPE = ? and STATION_CODE like ? limit 1 ";
         } else if (CalculateResult.RULES.equals(type)) {
-            sql = "SELECT * from t_calculation_formula where state = '1' and TYPE = 'RULES' and ELECTRIC_TYPE like ? and PROVINCE = ? and RULE_FORMULA = ? limit 1";
+            sql = "SELECT * from t_calculation_formula where state = '1' and TYPE = 'RULES' and ELECTRIC_TYPE like ? and PROVINCE = ? and RULE_FORMULA = ? and STATION_CODE like ? limit 1";
+        }else{
+            log.error(CalculateResult.MSG_FORMULA_TYPE_ERROR);
         }
+
+        CalculationFormula calculationFormula = new CalculationFormula();
         // 根据类型和省调查询公式
         try {
-            CalculationFormula calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType);
-
+            calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType,stationCode);
             return calculationFormula;
         } catch (EmptyResultDataAccessException e) {
-            return null;
+            // 如果根据场站编码没查到,则在根据省调和场站类型是All的查
+            if (CalculateResult.FORMULA.equals(type)) {
+                sql = "SELECT * from t_calculation_formula where state = '1' and ELECTRIC_TYPE like ? and PROVINCE = ? and TYPE = ?  and STATION_CODE = 'ALL' limit 1";
+            } else if (CalculateResult.RULES.equals(type)) {
+                sql = "SELECT * from t_calculation_formula where state = '1' and TYPE = 'RULES' and ELECTRIC_TYPE like ? and PROVINCE = ? and RULE_FORMULA = ? and STATION_CODE = 'ALL' limit 1";
+            }
+            // 根据类型和省调查询公式
+            try {
+                calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType);
+                return calculationFormula;
+            } catch (EmptyResultDataAccessException ere) {
+                // 如果根据场站编码没查到,则在根据省调和场站类型是All的查
+                return null;
+            }
         }
     }
 
@@ -296,6 +315,9 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
             sql = "SELECT * from t_calculation_formula where state = '1' and ELECTRIC_TYPE like ? and PROVINCE = ? and TYPE = ?  and STATION_CODE like ? limit 1";
         } else if (CalculateResult.RULES.equals(type)) {
             sql = "SELECT * from t_calculation_formula where state = '1' and TYPE = 'RULES' and ELECTRIC_TYPE like ? and PROVINCE = ? and RULE_FORMULA = ? and STATION_CODE like ? limit 1";
+        }else{
+            log.error(CalculateResult.MSG_FORMULA_TYPE_ERROR);
+            return null;
         }
         // 根据类型和省调查询公式
         try {

+ 9 - 2
src/main/java/com/syjy/calculate/service/AccuracyPassRateCalculateService.java

@@ -35,7 +35,7 @@ public class AccuracyPassRateCalculateService {
      */
     public CalculateResult calculate(CalculateRequest calculateRequest) {
         // 根据类型从数据库中查出公式列表
-        CalculationFormula calculationFormula = calculationFormulaRepository.findByTypeAndProvince(CalculateResult.FORMULA, calculateRequest.getFormulaType(), calculateRequest.getProvince(), calculateRequest.getElectricType());
+        CalculationFormula calculationFormula = calculationFormulaRepository.findByTypeAndProvince(CalculateResult.FORMULA, calculateRequest.getFormulaType(), calculateRequest.getProvince(), calculateRequest.getElectricType(), calculateRequest.getStationCode());
         if (calculationFormula == null || calculationFormula.getFormula() == null) {
             // 未匹配到公式
             return CalculateResult.error(CalculateResult.MSG_NO_FORMULA);
@@ -151,6 +151,13 @@ public class AccuracyPassRateCalculateService {
         if ("".equals(province) || province == null) {
             return CalculateResult.error(CalculateResult.MSG_PROVINCE_NULL);
         }
+
+        // 场站编码
+        String stationCode = calculateRequest.getStationCode();
+        if ("".equals(stationCode) || stationCode == null) {
+            return CalculateResult.error(CalculateResult.MSG_STATION_CODE_NULL);
+        }
+
         // 场站类型
         String electricType = calculateRequest.getElectricType();
         if ("".equals(electricType) || electricType == null) {
@@ -189,7 +196,7 @@ public class AccuracyPassRateCalculateService {
         // 将数据转为List Map 格式
         List<Map<String, Object>> calculationInfoListMap = getCalculationInfoList(calculationInfoList, calculateRequest.getElectricCapacity());
         // 获取细则公式
-        CalculationFormula rulesCalculationFormula = calculationFormulaRepository.findByTypeAndProvince(CalculateResult.RULES, formulaType, province, electricType);
+        CalculationFormula rulesCalculationFormula = calculationFormulaRepository.findByTypeAndProvince(CalculateResult.RULES, formulaType, province, electricType,stationCode);
         if (rulesCalculationFormula == null || rulesCalculationFormula.getFormula() == null) {
             // 未匹配到细则文件,则不进行细则校验,返回数据
             return CalculateResult.success(calculationInfoListMap);

File diff suppressed because it is too large
+ 1 - 117
src/main/resources/sql/t_calculation_formula.sql


Some files were not shown because too many files changed in this diff