Sfoglia il codice sorgente

1.新增金仓数据库适配
2.考核电量计算参数修改

zhangchenglong 2 anni fa
parent
commit
b9b2b567ca

+ 25 - 17
pom.xml

@@ -10,8 +10,8 @@
     </parent>
     </parent>
     <groupId>com.syjy</groupId>
     <groupId>com.syjy</groupId>
     <artifactId>calculation-spring-boot-starter</artifactId>
     <artifactId>calculation-spring-boot-starter</artifactId>
-    <version>0.0.1</version>
-    <!--<version>0.0.1-SNAPSHOT</version>-->
+    <version>0.0.3</version>
+    <!--<version>0.0.3-SNAPSHOT</version>-->
     <name>calculation</name>
     <name>calculation</name>
     <description>Demo project for Spring Boot</description>
     <description>Demo project for Spring Boot</description>
     <properties>
     <properties>
@@ -41,6 +41,13 @@
             <artifactId>mysql-connector-java</artifactId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
         </dependency>
 
 
+        <!--本地使用时候放开-->
+        <!--<dependency>-->
+            <!--<groupId>kingbasejdbc4</groupId>-->
+            <!--<artifactId>kingbasejdbc4</artifactId>-->
+            <!--<version>1</version>-->
+        <!--</dependency>-->
+
         <!-- druid 连接池 -->
         <!-- druid 连接池 -->
         <dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <groupId>com.alibaba</groupId>
@@ -100,6 +107,7 @@
             <version>5.4.8.Final</version>
             <version>5.4.8.Final</version>
         </dependency>
         </dependency>
 
 
+        <!--发布时候放开-->
         <dependency>
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <groupId>com.alibaba.cloud</groupId>
             <version>2.2.0.RELEASE</version>
             <version>2.2.0.RELEASE</version>
@@ -108,23 +116,23 @@
     </dependencies>
     </dependencies>
 
 
     <distributionManagement>
     <distributionManagement>
-        <repository>
-        <id>jiayue-releases</id>
-        <url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-releases/</url>
-    </repository>
-    <snapshotRepository>
-        <id>jiayue-snapshots</id>
-        <url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-snapshots/</url>
-    </snapshotRepository>
-
     <!--<repository>-->
     <!--<repository>-->
-        <!--<id>jiayue-csc-releases</id>-->
-        <!--<url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-csc-releases/</url>-->
+        <!--<id>jiayue-releases</id>-->
+        <!--<url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-releases/</url>-->
     <!--</repository>-->
     <!--</repository>-->
-        <!--<snapshotRepository>-->
-            <!--<id>jiayue-csc-snapshots</id>-->
-            <!--<url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-csc-snapshots/</url>-->
-        <!--</snapshotRepository>-->
+    <!--<snapshotRepository>-->
+        <!--<id>jiayue-snapshots</id>-->
+        <!--<url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-snapshots/</url>-->
+    <!--</snapshotRepository>-->
+
+    <repository>
+        <id>jiayue-csc-releases</id>
+        <url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-csc-releases/</url>
+    </repository>
+        <snapshotRepository>
+            <id>jiayue-csc-snapshots</id>
+            <url>http://49.4.68.219:8888/nexus/content/repositories/jiayue-csc-snapshots/</url>
+        </snapshotRepository>
 
 
     </distributionManagement>
     </distributionManagement>
 
 

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

@@ -6,6 +6,7 @@ import com.syjy.calculate.listener.ApplicationListenerImpl;
 import com.syjy.calculate.repository.repositoryImpl.CalculationFormulaRepositoryImpl;
 import com.syjy.calculate.repository.repositoryImpl.CalculationFormulaRepositoryImpl;
 import com.syjy.calculate.service.AccuracyPassRateCalculateService;
 import com.syjy.calculate.service.AccuracyPassRateCalculateService;
 import com.syjy.calculate.service.AssessmentCalculateService;
 import com.syjy.calculate.service.AssessmentCalculateService;
+import com.syjy.calculate.util.Common;
 import com.syjy.calculate.util.CreateAndInsertSqlUtil;
 import com.syjy.calculate.util.CreateAndInsertSqlUtil;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -63,6 +64,13 @@ public class StarterAutoConfigure {
     @Bean
     @Bean
     @ConditionalOnMissingBean
     @ConditionalOnMissingBean
     @ConditionalOnProperty(prefix = "calculate.service", value = "enabled", havingValue = "true")
     @ConditionalOnProperty(prefix = "calculate.service", value = "enabled", havingValue = "true")
+    Common CommonUtil() {
+        return new Common();
+    }
+
+    @Bean
+    @ConditionalOnMissingBean
+    @ConditionalOnProperty(prefix = "calculate.service", value = "enabled", havingValue = "true")
     Test test() {
     Test test() {
         return new Test();
         return new Test();
     }
     }

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

@@ -15,6 +15,8 @@ public class StarterProperties {
 
 
     private String version;
     private String version;
 
 
+    private String dbType;
+
     public String getVersion() {
     public String getVersion() {
         return version;
         return version;
     }
     }
@@ -22,4 +24,12 @@ public class StarterProperties {
     public void setVersion(String version) {
     public void setVersion(String version) {
         this.version = version;
         this.version = version;
     }
     }
+
+    public String getDbType() {
+        return dbType;
+    }
+
+    public void setDbType(String dbType) {
+        this.dbType = dbType;
+    }
 }
 }

+ 20 - 0
src/main/java/com/syjy/calculate/entity/AssessmentInfo.java

@@ -59,4 +59,24 @@ public class AssessmentInfo implements Serializable  {
      */
      */
     private String ultraShortPassRate;
     private String ultraShortPassRate;
 
 
+    /**
+     * 单机合格率考核
+     */
+    private String singleMachinePassRate;
+
+    /**
+     * 可用发电功率考核
+     */
+    private String ablePowerAccuracyRate;
+
+    /**
+     * 理论发电功率考核
+     */
+    private String theoryPowerAccuracyRate;
+
+    /**
+     * 测风塔/气象站考核
+     */
+    private String anemometerTowerAccuracyRate;
+
 }
 }

+ 57 - 13
src/main/java/com/syjy/calculate/entity/AssessmentRequest.java

@@ -1,9 +1,7 @@
 package com.syjy.calculate.entity;
 package com.syjy.calculate.entity;
 
 
-import com.sun.org.apache.bcel.internal.generic.BIPUSH;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
-
 import java.io.Serializable;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 
 
@@ -26,19 +24,14 @@ public class AssessmentRequest implements Serializable  {
     private String province;
     private String province;
 
 
     /**
     /**
-     * 场站类型:风/光(E1/E2)
+     * 场站类型:光/风(E1/E2)
      */
      */
     private String electricType;
     private String electricType;
 
 
-//    /**
-//     * 风场站额定容量
-//     */
-//    private BigDecimal windRatedCapacity;
-//
-//    /**
-//     * 光场站额定容量
-//     */
-//    private BigDecimal photoElectricityRatedCapacity;
+    /**
+     * 场站编码
+     */
+    private String stationCode;
 
 
     /**
     /**
      * 额定容量
      * 额定容量
@@ -80,10 +73,55 @@ public class AssessmentRequest implements Serializable  {
      */
      */
     private BigDecimal ultraShortPassRate;
     private BigDecimal ultraShortPassRate;
 
 
-    public AssessmentRequest(String province, String electricType, BigDecimal ratedCapacity, BigDecimal powerGeneration, BigDecimal shortReportRate, BigDecimal ultraShortReportRate, BigDecimal shortAccuracyRate ,BigDecimal ultraShortAccuracyRate ,BigDecimal shortPassRate,BigDecimal ultraShortPassRate)
+    /**
+     * 单机合格率考核
+     */
+    private BigDecimal singleMachinePassRate;
+
+    /**
+     * 偏差积分电量(万千瓦时)
+     */
+    private BigDecimal deviationPower;
+
+    /**
+     * 可用发电功率可用率
+     */
+    private BigDecimal ablePowerAccuracyRate;
+
+    /**
+     * 理论发电功率可用率
+     */
+    private BigDecimal theoryPowerAccuracyRate;
+
+    /**
+     * 测风塔可用率
+     */
+    private BigDecimal anemometerTowerAccuracyRate;
+
+    /**
+     * 构造函数设置值
+     * @param province
+     * @param electricType
+     * @param stationCode
+     * @param ratedCapacity
+     * @param powerGeneration
+     * @param shortReportRate
+     * @param ultraShortReportRate
+     * @param shortAccuracyRate
+     * @param ultraShortAccuracyRate
+     * @param shortPassRate
+     * @param ultraShortPassRate
+     * @param singleMachinePassRate
+     * @param deviationPower
+     * @param ablePowerAccuracyRate
+     * @param theoryPowerAccuracyRate
+     * @param anemometerTowerAccuracyRate
+     */
+    public AssessmentRequest(String province, String electricType, String stationCode ,BigDecimal ratedCapacity, BigDecimal powerGeneration, BigDecimal shortReportRate, BigDecimal ultraShortReportRate, BigDecimal shortAccuracyRate ,BigDecimal ultraShortAccuracyRate ,BigDecimal shortPassRate,BigDecimal ultraShortPassRate,BigDecimal singleMachinePassRate,BigDecimal deviationPower,BigDecimal ablePowerAccuracyRate,BigDecimal theoryPowerAccuracyRate ,BigDecimal anemometerTowerAccuracyRate)
     {
     {
         this.setProvince(province);
         this.setProvince(province);
         this.setElectricType(electricType);
         this.setElectricType(electricType);
+        this.setStationCode(stationCode);
         this.setRatedCapacity(ratedCapacity);
         this.setRatedCapacity(ratedCapacity);
         this.setPowerGeneration(powerGeneration);
         this.setPowerGeneration(powerGeneration);
         this.setShortReportRate(shortReportRate);
         this.setShortReportRate(shortReportRate);
@@ -92,6 +130,12 @@ public class AssessmentRequest implements Serializable  {
         this.setUltraShortAccuracyRate(ultraShortAccuracyRate);
         this.setUltraShortAccuracyRate(ultraShortAccuracyRate);
         this.setShortPassRate(shortPassRate);
         this.setShortPassRate(shortPassRate);
         this.setUltraShortPassRate(ultraShortPassRate);
         this.setUltraShortPassRate(ultraShortPassRate);
+        this.setSingleMachinePassRate(singleMachinePassRate);
+        this.setDeviationPower(deviationPower);
+        this.setAblePowerAccuracyRate(ablePowerAccuracyRate);
+        this.setTheoryPowerAccuracyRate(theoryPowerAccuracyRate);
+        this.setAnemometerTowerAccuracyRate(anemometerTowerAccuracyRate);
+
     }
     }
 
 
     public AssessmentRequest(){}
     public AssessmentRequest(){}

+ 23 - 0
src/main/java/com/syjy/calculate/entity/CalculateRequest.java

@@ -56,4 +56,27 @@ public class CalculateRequest implements Serializable {
      */
      */
     private String stationCode;
     private String stationCode;
 
 
+    /**
+     * 无参构造函数
+     */
+    public CalculateRequest(){
+
+    }
+
+    /**
+     * 有参构造函数
+     */
+    public CalculateRequest(List<CalculationInfo> calculationInfoList ,BigDecimal electricCapacity,String province,String formulaType,String electricType,String sign,String stationStatus,String stationCode){
+        if(calculationInfoList!= null){
+            this.calculationInfoList.addAll(calculationInfoList);
+        }
+        this.setElectricCapacity(electricCapacity);
+        this.setProvince(province);
+        this.setFormulaType(formulaType);
+        this.setElectricType(electricType);
+        this.setSign(sign);
+        this.setStationStatus(stationStatus);
+        this.setStationCode(stationCode);
+    }
+
 }
 }

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

@@ -83,7 +83,17 @@ public class CalculateResult extends HashMap<String, Object> {
     /** 短期合格率考核量 */
     /** 短期合格率考核量 */
     public static final String ULTRA_SHORT_PASS_RATE = "ASSESSMENT_ULTRA_SHORT_PASS_RATE";
     public static final String ULTRA_SHORT_PASS_RATE = "ASSESSMENT_ULTRA_SHORT_PASS_RATE";
 
 
+    /** 单机信息合格率考核量 */
+    public static final String SINGLE_MACHINE_PASS_RATE = "SINGLE_MACHINE_PASS_RATE";
 
 
+    /** 可用发电功率可用率 */
+    public static final String ABLE_POWER_ACCURACY_RATE = "ABLE_POWER_ACCURACY_RATE";
+
+    /** 理论发电功率可用率 */
+    public static final String THEORY_POWER_ACCURACY_RATE = "THEORY_POWER_ACCURACY_RATE";
+
+    /** 气象站/测风塔 */
+    public static final String ANEMOMETER_TOWER_ACCURACY_RATE = "ANEMOMETER_TOWER_ACCURACY_RATE";
 
 
     /** 消息信息*/
     /** 消息信息*/
     public static final String MSG_REQUEST_NULL = "入参为空";
     public static final String MSG_REQUEST_NULL = "入参为空";
@@ -100,14 +110,15 @@ public class CalculateResult extends HashMap<String, Object> {
     public static final String MSG_SHORT_PASS_RATE_NULL = "短期合格率为空";
     public static final String MSG_SHORT_PASS_RATE_NULL = "短期合格率为空";
     public static final String MSG_ULTRA_SHORT_PASS_RATE_NULL = "超短期合格率为空";
     public static final String MSG_ULTRA_SHORT_PASS_RATE_NULL = "超短期合格率为空";
 
 
-
-    public static final String MSG_CALCULATE_DATA_NULL = "计算数据为空";
+    public static final String MSG_CALCULATE_DATA_NULL = "无可用数据计算";
     public static final String MSG_CAP_NULL = "容量为空/0,不予考核";
     public static final String MSG_CAP_NULL = "容量为空/0,不予考核";
     public static final String MSG_DATA_CHECK_ERROR = "数据校验错误";
     public static final String MSG_DATA_CHECK_ERROR = "数据校验错误";
     public static final String MSG_NO_FORMULA = "未匹配到公式:";
     public static final String MSG_NO_FORMULA = "未匹配到公式:";
     public static final String MSG_CALCULATE_SUCCESS = "计算成功";
     public static final String MSG_CALCULATE_SUCCESS = "计算成功";
     public static final String MSG_CHECK_SUCCESS = "校验成功";
     public static final String MSG_CHECK_SUCCESS = "校验成功";
     public static final String MSG_NO_CALCULATE_TYPE = "无计算类型";
     public static final String MSG_NO_CALCULATE_TYPE = "无计算类型";
+    public static final String MSG_ERROR = "-0.99";
+    public static final String MSG_DB_FAIL = "计算包所用数据库类型不存在或未在配置文件中配置:";
 
 
     public static final String MSG_CALCULATE_FAIL = "计算失败:";
     public static final String MSG_CALCULATE_FAIL = "计算失败:";
     public static final String MSG_CAP_ZERO = "容量为0";
     public static final String MSG_CAP_ZERO = "容量为0";
@@ -115,6 +126,11 @@ public class CalculateResult extends HashMap<String, Object> {
     public static final String STR_TRUE = "1";
     public static final String STR_TRUE = "1";
     public static final String STR_FALSE = "0";
     public static final String STR_FALSE = "0";
 
 
+    public static final String DB_ERROR_TABLE_EXIST = "java.sql.SQLException: [KingbaseES Server]ERROR: relation \"t_calculation_formula\" does not exist";
+    public static final String DB_MYSQL = "mysql";
+    public static final String DB_KINGBASE = "kingbase";
+
+
     /**
     /**
      * 状态类型
      * 状态类型
      */
      */

+ 24 - 0
src/main/java/com/syjy/calculate/entity/CalculationInfo.java

@@ -83,4 +83,28 @@ public class CalculationInfo implements Serializable  {
      */
      */
     private BigDecimal forecastCapacity;
     private BigDecimal forecastCapacity;
 
 
+    public CalculationInfo(){
+
+    }
+
+    /**
+     * 构造函数设置值
+     * @param realValue
+     * @param ableValue
+     * @param theoryValue
+     * @param openCapacity
+     * @param capacity
+     * @param forecastAbleValue
+     * @param forecastTheoryValue
+     */
+    public CalculationInfo(BigDecimal realValue, BigDecimal ableValue, BigDecimal theoryValue, BigDecimal openCapacity, BigDecimal capacity, BigDecimal forecastAbleValue, BigDecimal forecastTheoryValue){
+        this.setRealValue(realValue);
+        this.setAbleValue(ableValue);
+        this.setTheoryValue(theoryValue);
+        this.setOpenCapacity(openCapacity);
+        this.setCapacity(capacity);
+        this.setForecastAbleValue(forecastAbleValue);
+        this.setForecastTheoryValue(forecastTheoryValue);
+    }
+
 }
 }

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

@@ -59,4 +59,14 @@ public interface CalculationFormulaRepository {
      */
      */
     CalculationFormula findByTypeAndProvince(String type, String formulaType,String province,String electricType);
     CalculationFormula findByTypeAndProvince(String type, String formulaType,String province,String electricType);
 
 
+
+    /**
+     * 查询考核公式数据
+     *
+     * @param type 类型
+     * @return 返回记录
+     */
+    CalculationFormula findAssessmentByTypeAndProvince(String type, String formulaType,String province,String electricType,String stationCode);
+
+
 }
 }

+ 79 - 16
src/main/java/com/syjy/calculate/repository/repositoryImpl/CalculationFormulaRepositoryImpl.java

@@ -11,16 +11,11 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.ResultSetExtractor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ClassUtils;
 import org.springframework.util.ClassUtils;
-import org.springframework.web.bind.annotation.RequestParam;
-
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.*;
 import java.io.*;
 import java.net.URL;
 import java.net.URL;
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
@@ -45,19 +40,32 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
      */
      */
     @Override
     @Override
     public void initTable() {
     public void initTable() {
+
         // 从配置文件中获取版本
         // 从配置文件中获取版本
         String version = properties.getVersion();
         String version = properties.getVersion();
         // 判断表是否存在
         // 判断表是否存在
-        String checkSql = "SHOW TABLES LIKE 't_calculation_formula'";
-        Boolean created = jdbcTemplate.query(checkSql, null, null, new ResultSetExtractor<Boolean>() {
-            @Override
-            public Boolean extractData(ResultSet rs) throws SQLException, DataAccessException {
-                return rs.next();
+        String checkSql = "select count(1) from t_calculation_formula";
+        int count = 0;
+        try {
+            // 获取表中数据
+            count = jdbcTemplate.queryForObject(checkSql, Integer.class);
+        } catch (DataAccessException e) {
+            // 如果表不存在,则创建表
+            if(CalculateResult.DB_ERROR_TABLE_EXIST.equals(e.getCause().toString()) || e.getCause().toString().indexOf("exist")>-1){
+                this.createTable();
+            }else{
+                e.printStackTrace();
             }
             }
-        });
+        }
 
 
+        // 再次查询表中数据
+        try {
+            count = jdbcTemplate.queryForObject(checkSql, Integer.class);
+        } catch (DataAccessException e) {
+            e.printStackTrace();
+        }
         // 如果表存在
         // 如果表存在
-        if (created) {
+        if (count>0) {
             // 从表中获取旧版本
             // 从表中获取旧版本
             String oldVersion = getVersion();
             String oldVersion = getVersion();
             // 如果版本没变化,不进行初始化表操作
             // 如果版本没变化,不进行初始化表操作
@@ -66,9 +74,6 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
             }
             }
             // 如果版本不同,则初始化表
             // 如果版本不同,则初始化表
             this.createTable();
             this.createTable();
-            // 如果表不存在,初始化表
-        } else {
-            this.createTable();
         }
         }
     }
     }
 
 
@@ -261,6 +266,7 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
         // 根据类型和省调查询公式
         // 根据类型和省调查询公式
         try {
         try {
             CalculationFormula calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType);
             CalculationFormula calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType);
+
             return calculationFormula;
             return calculationFormula;
         } catch (EmptyResultDataAccessException e) {
         } catch (EmptyResultDataAccessException e) {
             return null;
             return null;
@@ -268,12 +274,69 @@ public class CalculationFormulaRepositoryImpl implements CalculationFormulaRepos
     }
     }
 
 
     /**
     /**
+     * 查询考核公式数据
+     *
+     * @param type         类型
+     * @param province     省调
+     * @param formulaType  公式类型
+     * @param electricType 场站类型
+     * @return
+     */
+    @Override
+    public CalculationFormula findAssessmentByTypeAndProvince(String type, String formulaType, String province, String electricType,String stationCode) {
+
+        electricType = "%" + electricType + "%";
+        if(stationCode!=null && !"".equals(stationCode)){
+            stationCode = "%" + stationCode + "%";
+        }
+        String sql = "";
+
+        // 查询sql
+        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 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";
+        }
+        // 根据类型和省调查询公式
+        try {
+            CalculationFormula calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType,stationCode);
+            return calculationFormula;
+        } catch (EmptyResultDataAccessException e) {
+            // 如果根据场站编码没查到,则在根据省调和场站类型是All的查
+            // 查询sql
+            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 calculationFormula = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(CalculationFormula.class), electricType, province, formulaType);
+                return calculationFormula;
+            } catch (EmptyResultDataAccessException ere) {
+                // 如果根据场站编码没查到,则在根据省调和场站类型是All的查
+                return null;
+            }
+        }
+    }
+
+    /**
      * 创建表
      * 创建表
      */
      */
     private void createTable() {
     private void createTable() {
         try {
         try {
+            // 从配置文件中获取版本
+            String dbType = properties.getDbType();
+            String path;
             // 获取初始化公式表sql
             // 获取初始化公式表sql
-            String path = "sql/t_calculation_formula.sql";
+            // 如果是金仓数据库
+            if(CalculateResult.DB_KINGBASE.equals(dbType)){
+                path = "sql/t_calculation_formula_king_base.sql";
+            // 如果是mysql
+            }else {
+                path = "sql/t_calculation_formula.sql";
+            }
+
             // 用ClassLoader获取jar包中的文件,获取文件流
             // 用ClassLoader获取jar包中的文件,获取文件流
             ClassLoader defaultClassLoader = ClassUtils.getDefaultClassLoader();
             ClassLoader defaultClassLoader = ClassUtils.getDefaultClassLoader();
             assert defaultClassLoader != null;
             assert defaultClassLoader != null;

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

@@ -3,7 +3,7 @@ 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.cglib.beans.BeanMap;
@@ -25,7 +25,7 @@ public class AccuracyPassRateCalculateService {
     @Autowired
     @Autowired
     private CalculationFormulaRepository calculationFormulaRepository;
     private CalculationFormulaRepository calculationFormulaRepository;
     @Autowired
     @Autowired
-    private CommonlUtil commonlUtil;
+    private Common common;
 
 
     /**
     /**
      * 计算准确率、合格率
      * 计算准确率、合格率
@@ -65,7 +65,7 @@ public class AccuracyPassRateCalculateService {
         // 获取公式
         // 获取公式
         String formula = calculationFormula.getFormula();
         String formula = calculationFormula.getFormula();
         // 初始化公式并获取缓存的公式
         // 初始化公式并获取缓存的公式
-        String scriptName = commonlUtil.initFormula(formula,calculateRequest.getProvince(),calculateRequest.getFormulaType(),calculateRequest.getElectricType(),CalculateResult.FORMULA);
+        String scriptName = common.initFormula(formula,calculateRequest.getProvince(),calculateRequest.getFormulaType(),calculateRequest.getElectricType(),CalculateResult.FORMULA);
 
 
         // 上下文
         // 上下文
         Map<String, Object> env = new HashMap<>();
         Map<String, Object> env = new HashMap<>();
@@ -204,7 +204,7 @@ public class AccuracyPassRateCalculateService {
 
 
         String formula = rulesCalculationFormula.getFormula();
         String formula = rulesCalculationFormula.getFormula();
         // 初始化公式并获取缓存的公式
         // 初始化公式并获取缓存的公式
-        String scriptName = commonlUtil.initFormula(formula,calculateRequest.getProvince(),calculateRequest.getFormulaType(),calculateRequest.getElectricType(),CalculateResult.FORMULA);
+        String scriptName = common.initFormula(formula,calculateRequest.getProvince(),calculateRequest.getFormulaType(),calculateRequest.getElectricType(),CalculateResult.RULES);
         // 通过校验的数据
         // 通过校验的数据
         List<Map<String, Object>> passList = new ArrayList<>();
         List<Map<String, Object>> passList = new ArrayList<>();
         // 循环数据,对数据进行校验
         // 循环数据,对数据进行校验

+ 34 - 21
src/main/java/com/syjy/calculate/service/AssessmentCalculateService.java

@@ -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);

+ 18 - 15
src/main/java/com/syjy/calculate/util/CommonlUtil.java → src/main/java/com/syjy/calculate/util/Common.java

@@ -1,24 +1,11 @@
 package com.syjy.calculate.util;
 package com.syjy.calculate.util;
 
 
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.io.file.FileWriter;
-import cn.hutool.core.text.StrBuilder;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.db.Db;
-import cn.hutool.db.DbUtil;
-import cn.hutool.db.Entity;
-import cn.hutool.db.ds.DSFactory;
 import com.googlecode.aviator.AviatorEvaluator;
 import com.googlecode.aviator.AviatorEvaluator;
 import com.syjy.calculate.entity.CalculateResult;
 import com.syjy.calculate.entity.CalculateResult;
-import lombok.Data;
-import lombok.SneakyThrows;
-import lombok.experimental.Accessors;
+import org.springframework.cglib.beans.BeanMap;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.io.File;
 import java.util.HashMap;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -29,7 +16,7 @@ import java.util.Map;
  * @since 2022/8/8 9:30
  * @since 2022/8/8 9:30
  */
  */
 @Component
 @Component
-public class CommonlUtil {
+public class Common {
 
 
     /**
     /**
      *
      *
@@ -50,5 +37,21 @@ public class CommonlUtil {
     }
     }
 
 
 
 
+    /**
+     * 实体类转换为Map
+     * @param data 计算类型(计算/规则)
+     */
+    public <T> Map<String ,Object> beanToMap(T data) {
+        // 上下文
+        Map<String, Object> env = new HashMap<>();
+        BeanMap map = BeanMap.create(data);
+        // 将考核bean转为map
+        for (Object key : map.keySet()) {
+            env.put(String.valueOf(key), map.get(key));
+        }
+        return env;
+    }
+
+
 
 
 }
 }

+ 17 - 5
src/main/resources/META-INF/resources/calculateView/calculate.html

@@ -141,6 +141,7 @@
 </body>
 </body>
 <script>
 <script>
 
 
+    var prefix;
     //点击查询触发表格加载
     //点击查询触发表格加载
     $("#btnQuery").click(function () {
     $("#btnQuery").click(function () {
         initTable();
         initTable();
@@ -156,12 +157,13 @@
 
 
     // 初始化数据
     // 初始化数据
     function initTable() {
     function initTable() {
+        getPrefix();
         $('#table').bootstrapTable('destroy');
         $('#table').bootstrapTable('destroy');
         $('#table').bootstrapTable({
         $('#table').bootstrapTable({
             locale: 'zh-CN',
             locale: 'zh-CN',
             method: 'post',
             method: 'post',
             contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
             contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
-            url: "/calculateView/jarCalculate/select",//请求路径
+            url: 3 + "/calculateView/jarCalculate/select",//请求路径
             pageNumber: 1,//初始化加载第一页
             pageNumber: 1,//初始化加载第一页
             striped: true, //是否显示行间隔色
             striped: true, //是否显示行间隔色
             showRefresh: false,//显示刷新按钮
             showRefresh: false,//显示刷新按钮
@@ -260,7 +262,7 @@
         var formdata = $("#form").serializeObject();
         var formdata = $("#form").serializeObject();
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
-            url: '/calculateView/jarCalculate/update',
+            url: prefix + '/calculateView/jarCalculate/update',
             contentType: "application/json; charset=utf-8",
             contentType: "application/json; charset=utf-8",
             data: JSON.stringify(formdata),
             data: JSON.stringify(formdata),
             success: function (data) {
             success: function (data) {
@@ -288,7 +290,7 @@
         console.log(formdata);
         console.log(formdata);
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
-            url: '/calculateView/jarCalculate/add',
+            url:  prefix + '/calculateView/jarCalculate/add',
             contentType: "application/json; charset=utf-8",
             contentType: "application/json; charset=utf-8",
             data: JSON.stringify(formdata),
             data: JSON.stringify(formdata),
             success: function (data) {
             success: function (data) {
@@ -312,7 +314,7 @@
     function doDelete() {
     function doDelete() {
         var deleteId = $('#deleteId').val();
         var deleteId = $('#deleteId').val();
         $.ajax({
         $.ajax({
-            url: "/calculateView/jarCalculate/delete",
+            url:  prefix + "/calculateView/jarCalculate/delete",
             type: 'post',
             type: 'post',
             data: {
             data: {
                 id: deleteId
                 id: deleteId
@@ -328,7 +330,7 @@
     function initOne(id) {
     function initOne(id) {
         $.ajax({
         $.ajax({
             type: "post",
             type: "post",
-            url: "/calculateView/jarCalculate/getOne",
+            url:  prefix + "/calculateView/jarCalculate/getOne",
             data: {
             data: {
                 id:id
                 id:id
             },
             },
@@ -361,5 +363,15 @@
         return obj;
         return obj;
     };
     };
 
 
+    // 获取窗口前缀
+    function getPrefix() {
+        var url = window.location.href;
+        prefix = url.split(":")[2].split("/")[1];
+        if(prefix == '#'){
+            prefix = '';
+        }
+        console.log(prefix);
+    }
+
 </script>
 </script>
 </html>
 </html>

+ 16 - 8
src/main/resources/application.yml

@@ -1,12 +1,20 @@
 server:
 server:
   port: 9089
   port: 9089
 spring:
 spring:
-#  datasource:
-#    type: com.alibaba.druid.pool.DruidDataSource
-#    druid:
-#      # 数据源配置
-#      username: root
-#      password: '123456'
-#      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&characterSetResults=UTF-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
-#      driver-class-name: com.mysql.cj.jdbc.Driver
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      # 数据源配置
+      username: root
+      password: '123456'
+      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&characterSetResults=UTF-8&autoReconnect=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
+      driver-class-name: com.mysql.cj.jdbc.Driver
+
+##      金仓数据库
+#      username: SYSTEM
+#      password: 123456
+#      url: jdbc:kingbase://192.168.1.204:54321/ipfcstV3
+#      driver-class-name: com.kingbase.Driver
+
+
 version: @project.version@
 version: @project.version@

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


File diff suppressed because it is too large
+ 136 - 0
src/main/resources/sql/t_calculation_formula_king_base.sql


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