Browse Source

修改计算方法和初始化执行sql方法

zhangchenglong 2 years ago
parent
commit
5c020622f1

+ 1 - 1
src/main/java/com/syjy/calculate/conotroller/test.java

@@ -28,7 +28,7 @@ public class test {
 
         BigDecimal rl = new BigDecimal("10");
         String provinceEnum = "E62";
-        String type = "DQ";
+        String type = "POINT_S";
         JSONObject jsonResult = accuracyPassRateCalculateService.calculate(powerData, rl, provinceEnum, type);
         String reslut = jsonResult.getString("value");
         String accuracy = "";

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

@@ -15,45 +15,11 @@ public interface CalculationFormulaRepository {
     void createTable();
 
     /**
-     * 创建公式表
-     *
-     */
-    void updateTable();
-
-    /**
-     * 保存公式数据
-     *
-     * @param calculationFormula 单条公式记录
-     */
-    void save(CalculationFormula calculationFormula);
-
-    /**
-     * 更新数据
-     *
-     * @param calculationFormula 公式记录
-     */
-    void update(CalculationFormula calculationFormula);
-
-    /**
      * 查询数据
      *
      * @param type     类型
      * @return 返回记录
      */
-    List<CalculationFormula> findByTypeAndProvince(String type);
-
-    /**
-     * 查询变量数据
-     *
-     * @return 返回记录
-     */
-    List<CalculationFormula> findVariate(String provinceEnum);
-
-    /**
-     * 查询全部数据
-     *
-     * @return 返回全部记录
-     */
-    List<CalculationFormula> findAll();
+    List<CalculationFormula> findByTypeAndProvince(String type,String provinceEnum);
 
 }

+ 8 - 50
src/main/java/com/syjy/calculate/repository/repositoryImpl/CalculationFormulaRepositoryImpl.java

@@ -8,7 +8,7 @@ import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.ResultSetExtractor;
 import org.springframework.stereotype.Service;
-
+import org.springframework.util.ResourceUtils;
 import javax.annotation.Resource;
 import java.io.*;
 import java.sql.ResultSet;
@@ -44,8 +44,9 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
             String createSql = "create table t_calculation_formula ( ID int(0) not null auto_increment primary key, TYPE varchar(50) , `ORDER` int(0), FORMULA varchar(255) not null , PROVINCE_ENUM varchar(10), STATE varchar(10), CREATE_TIME datetime(0), CREATOR varchar(50), LAST_MODIFIER varchar(50), LAST_MODIFY_TIME datetime(0));";
 
             jdbcTemplate.execute(createSql);
-
-            File sqlFile = new File("../../../../../../resources/sql/test.sql");
+            // 获取sql文件
+            File sqlFile = ResourceUtils.getFile("classpath:sql/test.sql");
+            // 读取文件
             FileReader fileReader = new FileReader(sqlFile);
             BufferedReader reader = new BufferedReader(fileReader);
             String s;
@@ -54,24 +55,6 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
                 builder.append(s);
             }
             jdbcTemplate.execute(builder.toString());
-            // 拼接插入语句,配置文件要增加&allowMultiQueries=true ,允许一次提交多条sql语句
-     /*       String insertSql =
-                    "INSERT INTO `t_calculation_formula` VALUES (1, 'DQ', 1, 'sum:math.abs(VariateA-VariateB)', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (2, 'DQ', 2, 'sum:math.pow((VariateA-VariateB),2)*math.abs(VariateA-VariateB)/result1', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (3, 'DQ', 3, '(1-(math.sqrt(result2)/VariateC))*100', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (4, 'VariateA', NULL, 'sj', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (5, 'VariateB', NULL, 'yc', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (6, 'VariateC', NULL, 'rl', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (7, 'VariateD', NULL, 'count', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (8, 'Point', 1, 'math.abs((VariateA-VariateB)/VariateC)*100', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (9, 'MAE', 1, 'sum:math.abs((VariateA-VariateB)', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (10, 'MAE', 2, '1-(result1/(VariateC*VariateD))', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (11, 'RMSE', 1, 'sum:math.pow((VariateA-VariateB)/VariateC,2)', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (12, 'RMSE', 2, '(1-math.sqrt((result1/VariateD)))*100', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (13, 'RMSES', 1, 'sum:math.pow((VariateA-VariateB),2)', 'E62', NULL, NULL, NULL, NULL, NULL);" +
-                    "INSERT INTO `t_calculation_formula` VALUES (14, 'RMSES', 2, '(1-(result1/VariateC*math.sqrt(VariateD)))*100', 'E62', NULL, NULL, NULL, NULL, NULL);";
-
-            jdbcTemplate.execute(insertSql);*/
         } catch (DataAccessException e) {
             e.printStackTrace();
             log.info("删除/创建表错误:" + e.toString());
@@ -83,27 +66,13 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
     }
 
     @Override
-    public void updateTable() {
-
-    }
-
-    @Override
-    public void save(CalculationFormula calculationFormula) {
-
-    }
-
-    @Override
-    public void update(CalculationFormula calculationFormula) {
-
-    }
-
-    @Override
-    public List<CalculationFormula> findByTypeAndProvince(String type) {
-        String sql = "SELECT * from t_calculation_formula where TYPE = ? ";
+    public List<CalculationFormula> findByTypeAndProvince(String type,String provinceEnum) {
+        provinceEnum = "%"+provinceEnum+";%";
+        String sql = "SELECT * from t_calculation_formula where TYPE = ? and PROVINCE_ENUM like ?  ";
 
         List<CalculationFormula> calculationFormulaList = null;
         try {
-            calculationFormulaList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), type);
+            calculationFormulaList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), type ,provinceEnum);
         } catch (DataAccessException e) {
             e.printStackTrace();
         }
@@ -111,15 +80,4 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
         return calculationFormulaList;
     }
 
-    @Override
-    public List<CalculationFormula> findVariate(String provinceEnum) {
-        String sql = "SELECT * from t_calculation_formula where TYPE in ('VariateA','VariateB','VariateC') and PROVINCE_ENUM = ?";
-        List<CalculationFormula> calculationFormulaList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), provinceEnum);
-        return calculationFormulaList;
-    }
-
-    @Override
-    public List<CalculationFormula> findAll() {
-        return null;
-    }
 }

+ 5 - 72
src/main/java/com/syjy/calculate/service/AccuracyPassRateCalculateService.java

@@ -7,7 +7,6 @@ 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;
@@ -41,14 +40,13 @@ public class AccuracyPassRateCalculateService {
         String lastResult = "";
         jsonResult.put("result", "fail");
         // 获取公式
-        List<CalculationFormula> calculationFormulaList = getCalculationFormulaData(type);
+        List<CalculationFormula> calculationFormulaList = getCalculationFormulaData(type,provinceEnum);
         if (calculationFormulaList == null || calculationFormulaList.size() == 0) {
             jsonResult.put("msg", "计算失败,未匹配到公式");
             return jsonResult;
         }
-        BigDecimal count = BigDecimal.valueOf(calculationFormulaList.size());
-        // 获取当前省调的公式变量值
-        Map<String, String> variateMap = getVariate(provinceEnum);
+        // 获取功率个数
+        BigDecimal count = BigDecimal.valueOf(powerData.size());
         // 存放每步计算结果
         Map<String, Object> resultMap = new HashMap<>();
         // 公式
@@ -62,7 +60,6 @@ public class AccuracyPassRateCalculateService {
             if (formula.contains("sum")) {
                 // 获取sum后面的公式
                 formula = formula.split(":")[1];
-                formula = replaceFormula(formula, variateMap);
                 // 循环执行sum后的公式
                 for (Map<String, Object> dataMap : powerData) {
                     // 将执行过的公式结果放入dataMap
@@ -81,7 +78,6 @@ public class AccuracyPassRateCalculateService {
                 }
                 // 非求和计算
             } else {
-                formula = replaceFormula(formula, variateMap);
                 if (powerData.size() > 0) {
                     // 获取数据
                     Map<String, Object> dataMap = powerData.get(0);
@@ -128,77 +124,14 @@ public class AccuracyPassRateCalculateService {
      * @param type 类型
      * @return
      */
-    public List<CalculationFormula> getCalculationFormulaData(String type) {
+    public List<CalculationFormula> getCalculationFormulaData(String type,String provinceEnum) {
         List<CalculationFormula> calculationFormulaList = new ArrayList<>();
         // 根据类型从数据库中查出公式列表
-        calculationFormulaList = calculationFormulaRepository.findByTypeAndProvince(type);
+        calculationFormulaList = calculationFormulaRepository.findByTypeAndProvince(type,provinceEnum);
         return calculationFormulaList;
     }
 
     /**
-     * 获取当前省调的公式变量值
-     *
-     * @param provinceEnum 当前省调
-     * @return
-     */
-    public Map<String, String> getVariate(String provinceEnum) {
-        List<CalculationFormula> variateList = new ArrayList<>();
-        Map<String, String> variateMap = new HashMap<>();
-        // 从数据库中查出变量数据
-        variateList = calculationFormulaRepository.findVariate(provinceEnum);
-        // 循环组建变量Map
-        String formulaType = "";
-        for (CalculationFormula calculationFormula : variateList) {
-            formulaType = calculationFormula.getType();
-            // 循环获取3个变量的值
-            switch (formulaType) {
-                case "VariateA":
-                    variateMap.put("VariateA", calculationFormula.getFormula());
-                    break;
-                case "VariateB":
-                    variateMap.put("VariateB", calculationFormula.getFormula());
-                    break;
-                case "VariateC":
-                    variateMap.put("VariateC", calculationFormula.getFormula());
-                    break;
-                case "VariateD":
-                    variateMap.put("VariateD", calculationFormula.getFormula());
-                    break;
-                default:
-                    break;
-            }
-        }
-        return variateMap;
-    }
-
-    /**
-     * 将公式中的变量进行替换
-     *
-     * @param formula
-     * @param variateMap
-     * @return
-     */
-    public String replaceFormula(String formula, Map<String, String> variateMap) {
-        String variateA = variateMap.get("VariateA");
-        String variateB = variateMap.get("VariateB");
-        String variateC = variateMap.get("VariateC");
-        String variateD = variateMap.get("variateD");
-        if (variateA != null && !"".equals(variateA)) {
-            formula = formula.replace("VariateA", variateA);
-        }
-        if (variateB != null && !"".equals(variateB)) {
-            formula = formula.replace("VariateB", variateB);
-        }
-        if (variateC != null && !"".equals(variateC)) {
-            formula = formula.replace("VariateC", variateC);
-        }
-        if (variateD != null && !"".equals(variateD)) {
-            formula = formula.replace("variateD", variateD);
-        }
-        return formula;
-    }
-
-    /**
      * 过滤结果 <0=0  >100=100
      *
      * @param result 过滤前的结果