1
0

3 کامیت‌ها 4208c53cbb ... 3b3a7338ee

نویسنده SHA1 پیام تاریخ
  yuzijian 3b3a7338ee 修改字段名 2 سال پیش
  yuzijian dc7ebf55ab Merge remote-tracking branch 'origin/master' 2 سال پیش
  yuzijian f9c692170b 实体类修改对应表,sql字段修改 2 سال پیش

+ 10 - 0
pom.xml

@@ -101,6 +101,16 @@
             <version>3.3.1</version>
         </dependency>
         <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-annotation</artifactId>
+            <version>3.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.3.1</version>
+        </dependency>
+        <dependency>
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
             <version>2.1.1</version>

+ 10 - 0
src/main/java/com/syjy/calculate/config/StarterAutoConfigure.java

@@ -4,6 +4,7 @@ import com.syjy.calculate.conotroller.JarCalculate;
 import com.syjy.calculate.conotroller.Test;
 import com.syjy.calculate.listener.ApplicationListenerImpl;
 import com.syjy.calculate.mapper.CalculationFormulaMapper;
+import com.syjy.calculate.mapper.CalculationFormulaServiceImpl;
 import com.syjy.calculate.repository.repositoryImpl.CalculationFormulaRepositoryImpl;
 import com.syjy.calculate.service.AccuracyPassRateCalculateService;
 import com.syjy.calculate.util.CreateAndInsertSqlUtil;
@@ -70,4 +71,13 @@ public class StarterAutoConfigure {
     CalculationFormulaMapper calculationFormulaMapper() {
         return new CalculationFormulaMapper();
     }*/
+@Bean
+@ConditionalOnMissingBean
+@ConditionalOnProperty(prefix = "calculate.service", value = "enabled", havingValue = "true")
+CalculationFormulaServiceImpl clculationFormulaServiceImpl() {
+    return new CalculationFormulaServiceImpl();
+}
+
+
+
 }

+ 18 - 8
src/main/java/com/syjy/calculate/conotroller/JarCalculate.java

@@ -1,13 +1,17 @@
 package com.syjy.calculate.conotroller;
 
-import com.syjy.calculate.entity.CalculationFormula;
+
+import com.syjy.calculate.entity.tCalculationFormula;
 import com.syjy.calculate.mapper.CalculationFormulaMapper;
+import com.syjy.calculate.mapper.CalculationFormulaService;
 import com.syjy.calculate.repository.CalculationFormulaRepository;
 import com.syjy.calculate.service.AccuracyPassRateCalculateService;
 import com.syjy.calculate.vo.ResponseVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
@@ -19,25 +23,31 @@ import java.util.List;
 @RequestMapping("jarCalculate")
 public class JarCalculate {
     @Resource
-    CalculationFormulaMapper calculationFormulaMapper;
+    public JdbcTemplate jdbcTemplate;
     @Autowired
     CalculationFormulaRepository calculationFormulaRepository;
-
+    @Autowired
+   CalculationFormulaService calculationFormulaService;
    @GetMapping("test")
     @ResponseBody
     public String test() {
         String aa = "1112";
         return aa;
     }
- /*   @GetMapping("select")
+  @GetMapping("select")
     @ResponseBody
     public ResponseVO select() {
-        List<CalculationFormula> calculationFormulaList = new ArrayList<>();
-        calculationFormulaList =calculationFormulaMapper.findAll();
-        System.out.println("测试"+calculationFormulaList);
+      String sql = "SELECT * from t_calculation_formula";
+
+      List<tCalculationFormula> calculationFormulaList = new ArrayList<>();
+      try {
+          calculationFormulaList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(tCalculationFormula.class));
+      } catch (DataAccessException e) {
+          e.printStackTrace();
+      }
         return ResponseVO.success(calculationFormulaList);
     }
-
+/*
     @PostMapping("add")
     @ResponseBody
     public ResponseVO add(@RequestBody CalculationFormula calculationFormula ) {

+ 0 - 61
src/main/java/com/syjy/calculate/entity/CalculationFormula.java

@@ -1,61 +0,0 @@
-package com.syjy.calculate.entity;
-
-import lombok.Data;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.persistence.Table;
-
-/**
- * 计算公式
- *
- * @author zcl
- * @version 1.0
- * @since 2022/8/02 10:16
- */
-@Data
-public class CalculationFormula {
-
-    /**
-     * 公式编号(运维标识,主键)
-     */
-    @Getter
-    @Setter
-    private Integer id;
-
-    /**
-     * 公式类型
-     */
-    @Getter
-    @Setter
-    private String type;
-
-    /**
-     * 公式执行顺序
-     */
-    @Getter
-    @Setter
-    private Integer order;
-
-    /**
-     * 公式内容
-     */
-    @Getter
-    @Setter
-    private String formula;
-
-    /**
-     * 上报省调
-     */
-    @Getter
-    @Setter
-    private String provinceEnum;
-
-    /**
-     * 状态
-     */
-    @Getter
-    @Setter
-    private String state;
-
-}

+ 74 - 0
src/main/java/com/syjy/calculate/entity/tCalculationFormula.java

@@ -0,0 +1,74 @@
+package com.syjy.calculate.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 计算公式
+ *
+ * @author zcl
+ * @version 1.0
+ * @since 2022/8/02 10:16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class tCalculationFormula implements Serializable  {
+
+    /**
+     * 公式编号(运维标识,主键)
+     */
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公式类型
+     */
+
+    private String type;
+
+    /**
+     * 公式执行顺序
+     */
+
+    private Integer orderNo;
+
+    /**
+     * 公式内容
+     */
+
+    private String formula;
+
+    /**
+     * 上报省调
+     */
+
+    private String provinceEnum;
+
+    /**
+     * 状态
+     */
+
+    private String state;
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date createTime;
+
+    private String creator;
+
+    private String lastModifier;
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date lastModifyTime;
+}

+ 3 - 23
src/main/java/com/syjy/calculate/mapper/CalculationFormulaMapper.java

@@ -1,30 +1,10 @@
 package com.syjy.calculate.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.syjy.calculate.entity.CalculationFormula;
-import org.apache.ibatis.annotations.*;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.stereotype.Service;
 
-import java.util.List;
+import com.syjy.calculate.entity.tCalculationFormula;
+import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
-public interface CalculationFormulaMapper extends BaseMapper<CalculationFormula> {
-    @Select("SELECT * from t_calculation_formula")
-    List<CalculationFormula> findAll();
-
-    @Select("INSERT INTO t_calculation_formula(type,`order`,formula,province_enum,state) VALUES(#{type},#{order},#{formula},#{province},#{state})")
-    void add(String type, Integer order, String formula, String province, String state);
-
-    @Update("UPDATE t_calculation_formula\n" +
-            "SET type = #{type}\n," +
-            " `order` = #{order}\n," +
-            " `formula` = #{formula}\n," +
-            " `province_enum` = #{province}\n," +
-            " `state` = #{state}\n" +
-            "WHERE id = #{id};\n")
-    void edit(Integer id, String type, Integer order, String formula, String province, String state);
-
-    @Delete("DELETE FROM t_calculation_formula WHERE id = #{id}")
-    void delete(Integer id);
+public interface CalculationFormulaMapper  extends BaseMapper<tCalculationFormula> {
 }

+ 0 - 8
src/main/java/com/syjy/calculate/mapper/CalculationFormulaMapper.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="com.syjy.calculate.mapper.CalculationFormulaMapper">
-
-
-
-</mapper>

+ 35 - 0
src/main/java/com/syjy/calculate/mapper/CalculationFormulaService.java

@@ -0,0 +1,35 @@
+package com.syjy.calculate.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.syjy.calculate.entity.tCalculationFormula;
+import org.apache.ibatis.annotations.*;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/*@Repository
+public interface CalculationFormulaMapper{
+    @Select("SELECT * from t_calculation_formula")
+    List<CalculationFormula> findAll();
+
+    @Select("INSERT INTO t_calculation_formula(type,`order`,formula,province_enum,state) VALUES(#{type},#{order},#{formula},#{province},#{state})")
+    void add(String type, Integer order, String formula, String province, String state);
+
+    @Update("UPDATE t_calculation_formula\n" +
+            "SET type = #{type}\n," +
+            " `order` = #{order}\n," +
+            " `formula` = #{formula}\n," +
+            " `province_enum` = #{province}\n," +
+            " `state` = #{state}\n" +
+            "WHERE id = #{id};\n")
+    void edit(Integer id, String type, Integer order, String formula, String province, String state);
+
+    @Delete("DELETE FROM t_calculation_formula WHERE id = #{id}")
+    void delete(Integer id);
+}*/
+public interface CalculationFormulaService extends IService<tCalculationFormula> {
+
+}

+ 12 - 0
src/main/java/com/syjy/calculate/mapper/CalculationFormulaServiceImpl.java

@@ -0,0 +1,12 @@
+package com.syjy.calculate.mapper;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.syjy.calculate.entity.tCalculationFormula;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CalculationFormulaServiceImpl extends ServiceImpl <CalculationFormulaMapper, tCalculationFormula> implements CalculationFormulaService {
+
+}

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

@@ -1,6 +1,6 @@
 package com.syjy.calculate.repository;
 
-import com.syjy.calculate.entity.CalculationFormula;
+import com.syjy.calculate.entity.tCalculationFormula;
 import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
@@ -20,7 +20,6 @@ public interface CalculationFormulaRepository {
      * @param type 类型
      * @return 返回记录
      */
-    List<CalculationFormula> findByTypeAndProvince(String type, String provinceEnum,String rules);
-
+    List<tCalculationFormula> findByTypeAndProvince(String type, String provinceEnum);
 
 }

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

@@ -1,7 +1,7 @@
 package com.syjy.calculate.repository.repositoryImpl;
 
 import com.syjy.calculate.config.StarterProperties;
-import com.syjy.calculate.entity.CalculationFormula;
+import com.syjy.calculate.entity.tCalculationFormula;
 import com.syjy.calculate.repository.CalculationFormulaRepository;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -89,22 +89,20 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
      * @return
      */
     @Override
-    public List<CalculationFormula> findByTypeAndProvince(String type, String provinceEnum,String rules) {
+    public List<tCalculationFormula> findByTypeAndProvince(String type, String provinceEnum) {
         // 模糊查询参数
         provinceEnum = "%" + provinceEnum + ";%";
         // 查询sql
         String sql = "SELECT * from t_calculation_formula where TYPE = ? and PROVINCE_ENUM like ?  ";
-        if (!"".equals(rules) && rules != null) {
-            rules = "%" + rules + ";%";
-            sql = "SELECT * from t_calculation_formula where TYPE = ? and PROVINCE_ENUM like ? and RULE_FORMULA like ?";
-        }
         // 根据类型和省调查询公式
-        List<CalculationFormula> calculationFormulaList = new ArrayList<>();
+        List<tCalculationFormula> calculationFormulaList = new ArrayList<>();
         try {
-            calculationFormulaList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), type, provinceEnum,rules);
+            calculationFormulaList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(tCalculationFormula.class), type, provinceEnum);
         } catch (DataAccessException e) {
             e.printStackTrace();
         }
         return calculationFormulaList;
     }
+
+
 }

+ 32 - 77
src/main/java/com/syjy/calculate/service/AccuracyPassRateCalculateService.java

@@ -3,12 +3,14 @@ package com.syjy.calculate.service;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.googlecode.aviator.AviatorEvaluator;
-import com.syjy.calculate.entity.CalculationFormula;
+import com.syjy.calculate.entity.tCalculationFormula;
 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;
 import java.util.List;
 import java.util.Map;
@@ -35,34 +37,25 @@ public class AccuracyPassRateCalculateService {
      * @param provinceEnum 省调
      * @param type         短期、超短期
      * @param compare      通过率对比系数
-     * @return 返回Json  result: true/false  value: 99%  msg:失败及原因
+     * @return 返回Json  result:fail/success  value: 99%  msg:失败及原因
      */
     public JSONObject calculate(JSONArray powerData, BigDecimal rl, String provinceEnum, String type, BigDecimal compare) {
         JSONObject jsonResult = new JSONObject();
         jsonResult.put("result", false);
-        // 对细则进行校验
-        JSONObject checkedJson = checkDataRules(powerData, rl, provinceEnum, type);
-        // 如果细则校验失败,返回细则结果
-        if ("fail".equals(checkedJson.getString("result"))) {
-            jsonResult.put("msg",checkedJson.getString("msg"));
-            return jsonResult;
-        }
-        // 获取细则校验过的数据
-        JSONArray checkedPowerData = checkedJson.getJSONArray("powerData");
-        // 根据类型从数据库中查出公式列表
-        List<CalculationFormula> calculationFormulaList = calculationFormulaRepository.findByTypeAndProvince(type, provinceEnum, null);
+        // 获取公式
+        List<tCalculationFormula> calculationFormulaList = getCalculationFormulaData(type, provinceEnum);
         if (calculationFormulaList == null || calculationFormulaList.size() == 0) {
             jsonResult.put("msg", "计算失败,未匹配到公式");
             return jsonResult;
         }
         // 获取功率个数
-        BigDecimal count = BigDecimal.valueOf(checkedPowerData.size());
+        BigDecimal count = BigDecimal.valueOf(powerData.size());
         // 存放每步计算结果
         Map<String, Object> resultMap = new HashMap<>();
         // 公式
         String formula;
         // 循环公式,依次执行公式
-        for (CalculationFormula calculationFormula : calculationFormulaList) {
+        for (tCalculationFormula calculationFormula : calculationFormulaList) {
             BigDecimal formulaResult = ZERO;
             // 获取公式
             formula = calculationFormula.getFormula();
@@ -71,8 +64,8 @@ public class AccuracyPassRateCalculateService {
                 // 获取sum后面的公式
                 formula = formula.split(":")[1];
                 // 循环执行sum后的公式
-                for (int i = 0; i < checkedPowerData.size(); i++) {
-                    JSONObject dataJson = checkedPowerData.getJSONObject(i);
+                for (int i = 0; i < powerData.size(); i++) {
+                    JSONObject dataJson = powerData.getJSONObject(i);
                     // 将执行过的公式结果放入dataMap
                     dataJson.putAll(resultMap);
                     dataJson.put("rl", rl);
@@ -104,9 +97,9 @@ public class AccuracyPassRateCalculateService {
                 }
                 // 非求和计算
             } else {
-                if (checkedPowerData.size() > 0) {
+                if (powerData.size() > 0) {
                     // 获取数据测试
-                    JSONObject dataJson = checkedPowerData.getJSONObject(0);
+                    JSONObject dataJson = powerData.getJSONObject(0);
                     // 将执行过的公式结果放入dataMap
                     dataJson.putAll(resultMap);
                     dataJson.put("rl", rl);
@@ -123,8 +116,8 @@ public class AccuracyPassRateCalculateService {
                 }
             }
             // 记录本次公式的计算结果
-            resultMap.put("result" + calculationFormula.getOrder(), formulaResult);
-            log.info("result" + calculationFormula.getOrder() + ":" + formulaResult);
+            resultMap.put("result" + calculationFormula.getOrderNo(), formulaResult);
+            log.info("result" + calculationFormula.getOrderNo() + ":" + formulaResult);
         }
         // 获取最后一个公式计算的结果
         String lastResult = String.valueOf(resultMap.get("result" + calculationFormulaList.size()));
@@ -145,77 +138,39 @@ public class AccuracyPassRateCalculateService {
     }
 
     /**
+     * 获取当前省调的公式列表
+     *
+     * @param type         类型
+     * @param provinceEnum 省调(在数据库中省调存储必须带分号,例如:E12;)
+     * @return
+     */
+    public List<tCalculationFormula> getCalculationFormulaData(String type, String provinceEnum) {
+        List<tCalculationFormula> calculationFormulaList = new ArrayList<>();
+        // 根据类型从数据库中查出公式列表
+        calculationFormulaList = calculationFormulaRepository.findByTypeAndProvince(type, provinceEnum);
+        return calculationFormulaList;
+    }
+
+    /**
      * 过滤结果 <0=0  >100=100
      *
      * @param result 过滤前的结果
      * @return 过滤后的结果
      */
-    public BigDecimal filterResult(BigDecimal result) {
+    private BigDecimal filterResult(BigDecimal result) {
         //当结果为负数时,说明偏差过大,准确率为0
         if (result.compareTo(BigDecimal.ZERO) == -1 || result.compareTo(BigDecimal.ZERO) == 0) {
             result = BigDecimal.ZERO;
         }
-        // 如果结果大于1,则准确率设为100
+
         if (result.compareTo(this.HUNDRED) == 1) {
             result = this.HUNDRED;
         }
         return result;
     }
 
-    /**
-     * 根据细则过滤数据
-     *
-     * @param powerData
-     * @param rl
-     * @param provinceEnum
-     * @param type
-     * @return
-     */
-    public JSONObject checkDataRules(JSONArray powerData, BigDecimal rl, String provinceEnum, String type) {
-        JSONObject result = new JSONObject();
-        result.put("result", "fail");
-        // 获取细则公式
-        List<CalculationFormula> rulesCalculationFormulaList = calculationFormulaRepository.findByTypeAndProvince(type, provinceEnum, null);
-        // 如果没有细则公式,则不进行细则校验
-        if (rulesCalculationFormulaList == null || rulesCalculationFormulaList.size() == 0) {
-            result.put("result", "success");
-            result.put("powerData", powerData);
-            return result;
-        }
-        JSONArray checkedArray = new JSONArray();
-        JSONObject data = new JSONObject();
-        String checkResult = "";
-        // 循环功率信息
-        for (int i = 0; i < powerData.size(); i++) {
-            String checkFlag = "success";
-            data = powerData.getJSONObject(i);
-            // 循环公式,对每条功率信息进行细则处理
-            for (CalculationFormula formula : rulesCalculationFormulaList) {
-                try {
-                    checkResult = String.valueOf(AviatorEvaluator.execute(formula.getFormula(), data));
-                    if (!"pass".equals(checkResult)) {
-                        checkFlag = "fail";
-                        break;
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    log.error("计算公式:" + formula + "错误:" + e.toString());
-                    return result;
-                }
-            }
-            // 如果循环所有规则后还是success,则此条数据校验通过,放入list中
-            if ("success".equals(checkFlag)) {
-                checkedArray.add(data);
-                // 如果没通过,且为单点数据,则返回细则结果
-            } else if (powerData.size() == 1) {
-                result.put("msg", checkResult);
-                return result;
-            }
-        }
-        result.put("result", "success");
-        result.put("powerData", checkedArray);
-        return result;
-    }
+
+
 
 }
 

+ 1 - 1
src/main/resources/sql/t_calculation_formula.sql

@@ -24,7 +24,7 @@ DROP TABLE IF EXISTS `t_calculation_formula`;
 CREATE TABLE `t_calculation_formula`  (
   `ID` int(0) NOT NULL AUTO_INCREMENT,
   `TYPE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公式类型',
-  `ORDER` int(0) NULL DEFAULT NULL COMMENT '公式执行顺讯',
+  `ORDERNo` int(0) NULL DEFAULT NULL COMMENT '公式执行顺讯',
   `FORMULA` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '公式内容',
   `PROVINCE_ENUM` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '省调',
   `RULE_FORMULA` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '细则对应的公式',