Browse Source

1.解决执行sql后中文乱码问题
2.当公式中需要开机容量的时候进行校验

zhangchenglong 2 years ago
parent
commit
02f6ebdfcf

+ 18 - 18
pom.xml

@@ -10,8 +10,8 @@
     </parent>
     <groupId>com.syjy</groupId>
     <artifactId>calculation-spring-boot-starter</artifactId>
-    <!--<version>0.0.12</version>-->
-    <version>0.0.12-SNAPSHOT</version>
+    <version>0.0.13</version>
+    <!--<version>0.0.13-SNAPSHOT</version>-->
     <name>calculation</name>
     <description>Demo project for Spring Boot</description>
     <properties>
@@ -117,27 +117,27 @@
 
     <distributionManagement>
 
-        <!--<repository>-->
-            <!--<id>jiayue-releases</id>-->
-            <!--<name>Nexus Release Repository</name>-->
-            <!--<url>http://49.4.68.219:8888/repository/jiayue-releases/</url>-->
-        <!--</repository>-->
-        <!--<snapshotRepository>-->
-            <!--<id>jiayue-snapshots</id>-->
-            <!--<name>Nexus Snapshot Repository</name>-->
-            <!--<url>http://49.4.68.219:8888/repository/jiayue-snapshots/</url>-->
-        <!--</snapshotRepository>-->
-
-        <!--csc-->
         <repository>
-            <id>jiayue-csc-releases</id>
-            <url>http://49.4.68.219:8888/repository/jiayue-csc-releases/</url>
+            <id>jiayue-releases</id>
+            <name>Nexus Release Repository</name>
+            <url>http://49.4.68.219:8888/repository/jiayue-releases/</url>
         </repository>
         <snapshotRepository>
-            <id>jiayue-csc-snapshots</id>
-            <url>http://49.4.68.219:8888/repository/jiayue-csc-snapshots/</url>
+            <id>jiayue-snapshots</id>
+            <name>Nexus Snapshot Repository</name>
+            <url>http://49.4.68.219:8888/repository/jiayue-snapshots/</url>
         </snapshotRepository>
 
+        <!--csc-->
+        <!--<repository>-->
+            <!--<id>jiayue-csc-releases</id>-->
+            <!--<url>http://49.4.68.219:8888/repository/jiayue-csc-releases/</url>-->
+        <!--</repository>-->
+        <!--<snapshotRepository>-->
+            <!--<id>jiayue-csc-snapshots</id>-->
+            <!--<url>http://49.4.68.219:8888/repository/jiayue-csc-snapshots/</url>-->
+        <!--</snapshotRepository>-->
+
     </distributionManagement>
 
     <build>

+ 20 - 17
src/main/java/com/syjy/calculate/repository/repositoryImpl/CalculationFormulaRepositoryImpl.java

@@ -13,6 +13,7 @@ import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ClassUtils;
+
 import javax.annotation.Resource;
 import java.io.*;
 import java.net.URL;
@@ -44,7 +45,7 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
         // 获取数据库类型
         String dbType = properties.getDbType();
         // 如果是金仓数据库,直接初始化表
-        if(CalculateResult.DB_KINGBASE.equals(dbType)){
+        if (CalculateResult.DB_KINGBASE.equals(dbType)) {
             this.createTable();
             return;
         }
@@ -70,7 +71,7 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
             e.printStackTrace();
         }
         // 如果表存在
-        if (count>0) {
+        if (count > 0) {
             // 从表中获取旧版本
             String oldVersion = getVersion();
             // 如果版本没变化,不进行初始化表操作
@@ -260,10 +261,10 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
      * @return
      */
     @Override
-    public CalculationFormula findByTypeAndProvince(String type, String formulaType, String province, String electricType,String stationCode) {
+    public CalculationFormula findByTypeAndProvince(String type, String formulaType, String province, String electricType, String stationCode) {
         String sql = "";
         electricType = "%" + electricType + "%";
-        if(stationCode!=null && !"".equals(stationCode)){
+        if (stationCode != null && !"".equals(stationCode)) {
             stationCode = "%" + stationCode + "%";
         }
         // 查询sql
@@ -271,14 +272,14 @@ 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{
+        } else {
             log.error(CalculateResult.MSG_FORMULA_TYPE_ERROR);
         }
 
         CalculationFormula calculationFormula = new CalculationFormula();
         // 根据类型和省调查询公式
         try {
-            calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType,stationCode);
+            calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType, stationCode);
             return calculationFormula;
         } catch (EmptyResultDataAccessException e) {
             // 如果根据场站编码没查到,则在根据省调和场站类型是All的查
@@ -308,10 +309,10 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
      * @return
      */
     @Override
-    public CalculationFormula findAssessmentByTypeAndProvince(String type, String formulaType, String province, String electricType,String stationCode) {
+    public CalculationFormula findAssessmentByTypeAndProvince(String type, String formulaType, String province, String electricType, String stationCode) {
 
         electricType = "%" + electricType + "%";
-        if(stationCode!=null && !"".equals(stationCode)){
+        if (stationCode != null && !"".equals(stationCode)) {
             stationCode = "%" + stationCode + "%";
         }
         String sql = "";
@@ -321,13 +322,13 @@ 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{
+        } else {
             log.error(CalculateResult.MSG_FORMULA_TYPE_ERROR);
             return null;
         }
         // 根据类型和省调查询公式
         try {
-            CalculationFormula calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType,stationCode);
+            CalculationFormula calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType, stationCode);
             return calculationFormula;
         } catch (EmptyResultDataAccessException e) {
             // 如果根据场站编码没查到,则在根据省调和场站类型是All的查
@@ -359,10 +360,10 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
             String path;
             // 获取初始化公式表sql
             // 如果是金仓数据库
-            if(CalculateResult.DB_KINGBASE.equals(dbType)){
+            if (CalculateResult.DB_KINGBASE.equals(dbType)) {
                 path = "sql/t_calculation_formula_king_base.sql";
-            // 如果是mysql
-            }else {
+                // 如果是mysql
+            } else {
                 path = "sql/t_calculation_formula.sql";
             }
 
@@ -372,13 +373,15 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
             URL resource = defaultClassLoader.getResource(path);
             assert resource != null;
             InputStream inputStream = resource.openStream();
-            // 循环将流放到StringBuilder中
+
+            // 读取流
+            InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");
             StringBuilder builder = new StringBuilder();
             int len;
-            byte[] buf = new byte[1024];
-            while ((len = inputStream.read(buf)) != -1) {
-                builder.append(new String(buf, 0, len));
+            while ((len = reader.read()) != -1) {
+                builder.append((char) len);
             }
+
             // 关闭流
             inputStream.close();
             // 执行sql文件

+ 10 - 6
src/main/java/com/syjy/calculate/service/AccuracyPassRateCalculateService.java

@@ -41,10 +41,9 @@ public class AccuracyPassRateCalculateService {
             // 未匹配到公式
             return CalculateResult.error(CalculateResult.MSG_NO_FORMULA);
         }
-        // 获取数据文件类型
-        String dataSourceType = calculationFormula.getDataSourceType();
+
         // 对细则进行校验
-        CalculateResult checkedDataResult = checkDataRules(calculateRequest, dataSourceType);
+        CalculateResult checkedDataResult = checkDataRules(calculateRequest, calculationFormula);
         // 如果细则校验失败,返回细则结果
         if (!String.valueOf(checkedDataResult.get(CalculateResult.CODE_TAG)).equals(CalculateResult.Type.SUCCESS.value())) {
             return checkedDataResult;
@@ -140,7 +139,7 @@ public class AccuracyPassRateCalculateService {
      * @param calculateRequest
      * @return
      */
-    private CalculateResult checkDataRules(CalculateRequest calculateRequest, String dataSourceType) {
+    private CalculateResult checkDataRules(CalculateRequest calculateRequest, CalculationFormula calculationFormula) {
         // 对入参进行校验
         if (calculateRequest == null) {
             return CalculateResult.error(CalculateResult.MSG_REQUEST_NULL);
@@ -191,14 +190,19 @@ public class AccuracyPassRateCalculateService {
             return CalculateResult.success(calculationInfoListMap);
         }
 
+        // 获取数据文件类型
+        String dataSourceType = calculationFormula.getDataSourceType();
+        // 获取公式
+        String formulaInfo = calculationFormula.getFormula();
+
         // 循环判断实际功率/预测功率、开机容量
         for (int i = 0; i < calculationInfoList.size(); i++) {
             // 如果 实际功率/可用功率/预测功率为null 则剔除此条
             if (calculationInfoList.get(i).getAbleValue() == null || calculationInfoList.get(i).getForecastAbleValue() == null || calculationInfoList.get(i).getRealValue() == null) {
                 calculationInfoList.remove(i);
             }
-            // 如果公式中包含
-            if(rulesCalculationFormula.getRuleFormula()!=null && !"".equals(rulesCalculationFormula.getRuleFormula()) && rulesCalculationFormula.getRuleFormula().indexOf("openCapacity")>0){
+            // 如果公式中包含开机容量,才校验
+            if(formulaInfo.indexOf("openCapacity")>0){
                 // 如果开机容量 null 返回
                 if (calculationInfoList.get(i).getOpenCapacity() == null || calculationInfoList.get(i).getOpenCapacity().compareTo(BigDecimal.ZERO) == 0) {
                     return CalculateResult.error(CalculateResult.MSG_CAP_NULL);