yuanhao 3 years ago
parent
commit
5809893aef
27 changed files with 1000 additions and 542 deletions
  1. 4 4
      in-client-qn-ui/src/api/corrforeSt.js
  2. 1 1
      in-client-qn-ui/src/config/setting.config.js
  3. 11 104
      in-client-qn-ui/src/views/forecastData/index.vue
  4. 6 0
      in-client-qn/pom.xml
  5. 28 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/config/MyBatisPlusConfig.java
  6. 41 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/config/VelocityConfig.java
  7. 0 53
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/constant/DataTypeConstant.java
  8. 85 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/controller/CorrforeStController.java
  9. 21 2
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/CorrforeSt.java
  10. 4 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/Station.java
  11. 0 20
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/LogStatusEnum.java
  12. 0 21
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/LogTypeEnum.java
  13. 61 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/StatusEnum.java
  14. 24 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/CorrforeStJob.java
  15. 460 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/CorrforeService.java
  16. 22 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/CorrforeStService.java
  17. 0 331
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/ForecastPowerTermCorrectService.java
  18. 20 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/InitRunner.java
  19. 42 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/impl/CorrforeStServiceImpl.java
  20. 112 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/util/SystermUtils.java
  21. 8 0
      in-client-qn/src/main/resources/vms/DQAMEND.vm
  22. 2 2
      in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/ForecastPowerTermCorrectServiceTest.java
  23. 7 2
      in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/Test.java
  24. 1 1
      in-cloud-ui/src/config/setting.config.js
  25. 26 0
      in-cloud/src/main/java/com/jiayue/insu/incloud/service/InitRunner.java
  26. 4 1
      in-cloud/src/main/java/com/jiayue/insu/incloud/service/StationService.java
  27. 10 0
      in-cloud/src/main/java/com/jiayue/insu/incloud/service/impl/StationServiceImpl.java

+ 4 - 4
in-client-qn-ui/src/api/forecastData.js → in-client-qn-ui/src/api/corrforeSt.js

@@ -2,7 +2,7 @@ import request from '@/utils/request'
 
 export function fetchList(query) {
   return request({
-    url: '/forecastData/page',
+    url: '/corrforeSt/page',
     method: 'get',
     params: query
   })
@@ -10,7 +10,7 @@ export function fetchList(query) {
 
 export function addObj(obj) {
   return request({
-    url: '/forecastData',
+    url: '/corrforeSt',
     method: 'post',
     data: obj
   })
@@ -19,14 +19,14 @@ export function addObj(obj) {
 
 export function delObj(id) {
   return request({
-    url: '/forecastData/' + id,
+    url: '/corrforeSt/' + id,
     method: 'delete'
   })
 }
 
 export function putObj(obj) {
   return request({
-    url: '/forecastData',
+    url: '/corrforeSt',
     method: 'put',
     data: obj
   })

+ 1 - 1
in-client-qn-ui/src/config/setting.config.js

@@ -37,7 +37,7 @@ const setting = {
   //token名称
   tokenName: 'satoken',
   //token在localStorage、sessionStorage存储的key的名称
-  tokenTableName: 'vue-admin-beautiful-2021',
+  tokenTableName: 'in-client',
   //token存储位置localStorage sessionStorage
   storage: 'localStorage',
   //token失效回退到登录页时是否记录本次的路由

+ 11 - 104
in-client-qn-ui/src/views/forecastData/index.vue

@@ -22,20 +22,6 @@
           </el-form-item>
 
           <el-form-item>
-            <el-select
-              v-model="searchForm.stationCode"
-              clearable
-              placeholder="场站"
-            >
-              <el-option
-                v-for="item in stations"
-                :key="item.stationCode"
-                :label="item.name"
-                :value="item.stationCode"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item>
             <el-button
               icon="el-icon-search"
               type="primary"
@@ -68,49 +54,21 @@
         </template>
       </el-table-column>
 
-      <el-table-column
-        fixed
 
-        label="一体化公司"
-        prop="inCode"
-        :formatter="formatCompany"
-      />
 
-      <el-table-column
-        fixed
-        width="150"
-        label="场站名称"
-        prop="stationCode"
-        :formatter="formatStation"
-      />
-      <el-table-column  width="100" label="下载时间" prop="initTime" />
 
-      <el-table-column width="100" label="上送时间" prop="uploadTime" />
       <el-table-column width="100" label="修正时间" prop="correctTime" />
       <el-table-column width="100" label="预测时间" prop="forecastTime" :formatter="formatDate"/>
       <el-table-column show-overflow-tooltip label="预测功率" prop="fpValue" />
-      <el-table-column show-overflow-tooltip label="预测功率(修)" prop="fpValueCorrect" />
-      <el-table-column show-overflow-tooltip label="总辐射" prop="swr" />
-      <el-table-column show-overflow-tooltip label="总辐射(修)" prop="swrCorrect" />
-      <el-table-column show-overflow-tooltip label="直辐射" prop="directRadiation" />
-      <el-table-column show-overflow-tooltip label="直辐射(修)" prop="directRadiationCorrect" />
-      <el-table-column show-overflow-tooltip label="散辐射" prop="diffuseRadiation" />
-      <el-table-column show-overflow-tooltip label="散辐射(修)" prop="diffuseRadiationCorrect" />
-
-      <el-table-column show-overflow-tooltip label="风速" prop="windSpeed" />
-      <el-table-column show-overflow-tooltip label="风速(修)" prop="windSpeedCorrect" />
+      <el-table-column show-overflow-tooltip label="总辐射" prop="globalR" />
+      <el-table-column show-overflow-tooltip label="直辐射" prop="directR" />
+      <el-table-column show-overflow-tooltip label="散辐射" prop="diffuseR" />
+      <el-table-column show-overflow-tooltip label="风速" prop="ws" />
+      <el-table-column show-overflow-tooltip label="风向" prop="wd" />
+      <el-table-column show-overflow-tooltip label="气温" prop="t" />
+      <el-table-column show-overflow-tooltip label="相对湿度" prop="rh" />
+      <el-table-column show-overflow-tooltip label="压力" prop="p" />
 
-      <el-table-column show-overflow-tooltip label="风向" prop="windDir" />
-      <el-table-column show-overflow-tooltip label="风向(修)" prop="windDirCorrect" />
-
-      <el-table-column show-overflow-tooltip label="气温" prop="temperature" />
-      <el-table-column show-overflow-tooltip label="气温(修)" prop="temperatureCorrect" />
-
-      <el-table-column show-overflow-tooltip label="相对湿度" prop="humidity" />
-      <el-table-column show-overflow-tooltip label="相对湿度(修)" prop="humidityCorrect" />
-
-      <el-table-column show-overflow-tooltip label="压力" prop="pressure" />
-      <el-table-column show-overflow-tooltip label="压力(修)" prop="pressureCorrect" />
 
     </el-table>
     <el-pagination
@@ -126,10 +84,7 @@
 </template>
 
 <script>
-  import { fetchList ,delObj} from '@/api/forecastData'
-  import { getCompanyAll } from '@/api/integrationCompany'
-  import { getStationAll } from '@/api/station'
-
+  import { fetchList ,delObj} from '@/api/corrforeSt'
 
   export default {
     name: 'Record',
@@ -137,12 +92,6 @@
     data() {
       return {
         tableData: [],
-        companys: [],
-        types: [{label:"拉取原始数据",value:"PULL_INIT"},
-          {label:"推送原始数据",value:"PUSH_INIT"},
-          {label:"拉取修正数据",value:"PULL_CORRECT"},
-          {label:"交互权限",value:"COM_PERMISSON"},],
-        stations: [],
         searchForm: {},
         times: [
         new Date(new Date().setHours(0, 0, 0, 0)).getTime(),
@@ -166,32 +115,9 @@
       },
     },
     created() {
-      this.getCompany()
+      this.fetchData()
     },
     methods: {
-      getCompany() {
-        getCompanyAll()
-          .then((response) => {
-            this.companys = response.data
-            this.getStation()
-            this.listLoading = false
-          })
-          .catch(() => {
-            this.listLoading = false
-          })
-      },
-
-      getStation() {
-        getStationAll()
-          .then((response) => {
-            this.stations = response.data
-            this.fetchData()
-            this.listLoading = false
-          })
-          .catch(() => {
-            this.listLoading = false
-          })
-      },
       async fetchData() {
         this.listLoading = true
         this.searchForm.startTime = null
@@ -245,26 +171,7 @@
           this.fetchData()
         })
       },
-      formatCompany(row, column) {
-        for (let i = 0; i < this.companys.length; i++) {
-          if (row.inCode == this.companys[i].code) {
-            return this.companys[i].name
-          }
-        }
-      },
-      formatType(row, column) {
-        for (let i = 0; i < this.types.length; i++) {
-          if (row.type == this.types[i].value) {
-            return this.types[i].label
-          }
-        }
-      },
-      formatStation(row, column) {
-        const selectedItem = this.stations.find((item) => {
-          return item.stationCode === row.stationCode
-        })
-        return selectedItem.name
-      },
+
       formatDate(row, column) {
         //datetime是拿到的时间戳
         var date = new Date(row.forecastTime);//时间戳为10位需*1000,时间戳为13位的话不需乘1000

+ 6 - 0
in-client-qn/pom.xml

@@ -103,5 +103,11 @@
             <version>0.9.5.4</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity</artifactId>
+            <version>1.7</version>
+        </dependency>
+
     </dependencies>
 </project>

+ 28 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/config/MyBatisPlusConfig.java

@@ -0,0 +1,28 @@
+package com.jiayue.insu.inclientqn.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * mybatis-plus 配置类
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+@Configuration
+public class MyBatisPlusConfig {
+
+    /**
+     * 分页插件
+     * @return
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+        return interceptor;
+    }
+}

+ 41 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/config/VelocityConfig.java

@@ -0,0 +1,41 @@
+package com.jiayue.insu.inclientqn.config;
+
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Properties;
+
+/**
+ * 模板  配置类
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+@Configuration
+public class VelocityConfig {
+
+
+    @Bean
+    public VelocityEngine velocityEngine() {
+
+
+
+        VelocityEngine ve = new VelocityEngine();
+        Properties properties = new Properties();
+        //    String vmsPath = BaseService.class.getClassLoader().getResource("vms").getPath();
+        //设置velocity资源加载方式为file
+        properties.setProperty("resource.loader", "file");
+        //设置velocity资源加载方式为file时的处理类
+        properties
+                .setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
+        properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "");
+        properties.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
+        properties.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
+        properties.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
+        ve.init(properties);
+        return ve;
+    }
+}

+ 0 - 53
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/constant/DataTypeConstant.java

@@ -1,53 +0,0 @@
-package com.jiayue.insu.inclientqn.constant;
-/**
- * @description: 数据类型常量
- * @author: yuanhao
- * @createDate: 2021/8/20
- * @version: 1.0
- */
-public class DataTypeConstant {
-
-    /**
-     * 预测(Forecast)
-     * 数据类型:FORE
-     */
-    public static String FORE_TYPE = "FORE";
-
-    /**
-     * 概率分布(ProbabilityDistribution)
-     * 数据类型:
-     */
-    public static String PROBDIST_TYPE = "PROBDIST";
-
-    /**
-     *统计(Statistics)
-     * 数据类型:STAT
-     */
-    public static String STAT_TYPE = "STAT";
-
-    /**
-     * 优化后预测(CorrectForecast)
-     * 数据类型:CORRFORE
-     */
-    public static String CORRFORE_TYPE = "CORRFORE";
-
-    /**
-     * 优化后当日预测(CorrectForecast)
-     * 数据类型:CORRFORE
-     */
-    public static String TODAYFORE_TYPE = "TODAYFORE";
-
-    /**
-     * 超短期修正(CorrectUltraShort)
-     * 数据类型:CORRULTRSHOR
-     */
-    public static String CORRULTRSHOR_TYPE = "CORRULTRSHOR";
-
-    /**
-     * 检修计划(RepairPlan)
-     * 数据类型:REPAPLAN
-     */
-    public static String REPAPLAN_TYPE = "REPAPLAN";
-
-
-}

+ 85 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/controller/CorrforeStController.java

@@ -0,0 +1,85 @@
+package com.jiayue.insu.inclientqn.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jiayue.insu.common.core.util.R;
+import com.jiayue.insu.inclientqn.entity.CorrforeSt;
+import com.jiayue.insu.inclientqn.service.CorrforeStService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * ForecastDataController
+ *
+ * @author yh
+ * @date 2022-03-18 15:48:48
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/corrforeSt")
+public class CorrforeStController {
+
+    private final CorrforeStService corrforeStService;
+
+    /**
+     * 分页查询
+     *
+     * @param page   分页对象
+     * @param corrforeSt corrforeSt
+     * @return
+     */
+
+    @GetMapping("/page")
+    public R getPage(Page page, CorrforeSt corrforeSt) {
+        LambdaQueryWrapper<CorrforeSt> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+
+
+        if(corrforeSt.getStartTime()!=null && corrforeSt.getEndTime()!=null){
+            lambdaQueryWrapper.between(CorrforeSt::getForecastTime,corrforeSt.getStartTime(),corrforeSt.getEndTime());
+        }
+
+        page.addOrder(OrderItem.asc("forecast_time"));
+
+        return R.ok(corrforeStService.page(page, lambdaQueryWrapper));
+    }
+
+
+    /**
+     * 新增corrforeSt
+     *
+     * @param corrforeSt corrforeSt
+     * @return R
+     */
+
+    @PostMapping
+    public R save(@RequestBody CorrforeSt corrforeSt) {
+        return R.ok(corrforeStService.save(corrforeSt));
+    }
+
+    /**
+     * 修改corrforeSt
+     *
+     * @param corrforeSt corrforeSt
+     * @return R
+     */
+
+    @PutMapping
+    public R updateById(@RequestBody CorrforeSt corrforeSt) {
+        return R.ok(corrforeStService.updateById(corrforeSt));
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id id
+     * @return R
+     */
+    @DeleteMapping("/{id}")
+    public R removeById(@PathVariable Long id) {
+        return R.ok(corrforeStService.removeById(id));
+    }
+
+
+}

+ 21 - 2
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/CorrforeSt.java

@@ -1,10 +1,13 @@
 package com.jiayue.insu.inclientqn.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -30,7 +33,13 @@ public class CorrforeSt implements Serializable {
     /**
      * 预测时间
      */
-    private LocalDateTime forecastTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime timeFormat;
+    /**
+     * 预测时间
+     */
+    private Long forecastTime;
     /**
      * 预测值
      */
@@ -70,5 +79,15 @@ public class CorrforeSt implements Serializable {
     /**
      * 创建时间
      */
-    private Timestamp createTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime correctTime;
+
+    @TableField( exist = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Long startTime;
+
+    @TableField( exist = false)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Long endTime;
 }

+ 4 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/Station.java

@@ -75,6 +75,10 @@ public class Station {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     LocalDateTime keyTime;
+    /**
+     * 文件生成路径
+     */
+    String localFilePath;
 
 
 

+ 0 - 20
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/LogStatusEnum.java

@@ -1,20 +0,0 @@
-package com.jiayue.insu.inclientqn.inenum;//package com.jiayue.insu.inclientqn;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 日志状态
- *
- * @author xsl
- * @version 1.0
- * @since 2022/6/1 11:33
- */
-@Getter
-@AllArgsConstructor
-public enum LogStatusEnum{
-	E1(1, "成功"),
-	E2(2, "失败");
-	private Integer code;
-	private String message;
-}

+ 0 - 21
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/LogTypeEnum.java

@@ -1,21 +0,0 @@
-package com.jiayue.insu.inclientqn.inenum;//package com.jiayue.insu.inclientqn;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 日志类型
- *
- * @author xsl
- * @version 1.0
- * @since 2022/6/1 11:33
- */
-@Getter
-@AllArgsConstructor
-public enum LogTypeEnum{
-	E1(1, "下载"),
-	E2(2, "预测文件生成"),
-	E3(3, "发送");
-	private Integer code;
-	private String message;
-}

+ 61 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/StatusEnum.java

@@ -0,0 +1,61 @@
+package com.jiayue.insu.inclientqn.inenum;
+/**
+ * 通用状态  StatusEnum
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+
+public enum StatusEnum {
+    SUCCESS("success","success","成功"),
+    RESPONSE_FAIL("response_fail","response_fail","请求失败,响应错误"),
+    DOWNLOAD_FILE_FAIL("response_fail","response_fail","下载文件失败"),
+    DOWNLOAD_FILE_ERROR("response_fail","response_fail","下载文件异常"),
+    FILE_NULL("file_null","file_null","文件为空"),
+
+
+    CONNECT_RESPONSE_FORMAT_ERROR("response_format_error","response_format_error","响应格式异常"),
+    CONNECT_RESPONSE_CONTENT_NULL("response_content_null","response_content_null","响应内容为空"),
+    CONNECT_ERROR("connect_error","connect_error","链接异常"),
+
+
+    DATA_DEFICIENCY("data_deficiency","data_deficiency","数据缺失"),
+    ;
+
+    private String code;
+    private String sign;
+    private String msg;
+
+    StatusEnum(String code, String sign, String msg) {
+        this.code = code;
+        this.sign = sign;
+        this.msg  =msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 24 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/CorrforeStJob.java

@@ -0,0 +1,24 @@
+package com.jiayue.insu.inclientqn.job;
+
+import com.jiayue.insu.inclientqn.entity.Station;
+import com.jiayue.insu.inclientqn.service.CorrforeService;
+
+import com.jiayue.insu.inclientqn.service.StationService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class CorrforeStJob implements Job {
+    @Autowired
+    private CorrforeService corrforeService;
+    @Autowired
+    private StationService stationService;
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+
+        Station station = stationService.findThis();
+
+        corrforeService.downLoadCorrforeData(station);
+    }
+}

+ 460 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/CorrforeService.java

@@ -0,0 +1,460 @@
+package com.jiayue.insu.inclientqn.service;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.CorrforeSt;
+import com.jiayue.insu.inclientqn.entity.Record;
+import com.jiayue.insu.inclientqn.entity.Station;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.inenum.StatusEnum;
+import com.jiayue.insu.inclientqn.mapper.CorrforeStMapper;
+import com.jiayue.insu.inclientqn.model.RequestVo;
+import com.jiayue.insu.inclientqn.model.ResponseVo;
+import com.jiayue.insu.inclientqn.permisson.com.ComPermisson;
+import com.jiayue.insu.inclientqn.util.SystermUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @description:
+ * @author: yuanhao
+ * @createDate: 2021/9/27
+ * @version: 1.0
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class CorrforeService extends ServiceImpl<CorrforeStMapper, CorrforeSt> {
+
+
+    private final RecordService recordService;
+
+    private final StationService stationService;
+
+    private final CorrforeStService corrforeStService;
+
+    private final VelocityEngine velocityEngine;
+
+    private final ComPermisson comPermisson;
+
+
+
+    /**
+     * 下载修正预测数据
+     *
+     * @param station
+
+     * @return
+     */
+    public boolean downLoadCorrforeData(Station station) {
+
+        Record record = new Record();
+        record.setType(CommonStant.RECORD_TYPE_PULL_CORRECT);
+        LocalDateTime localDateTime = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
+        record.setTime(localDateTime);
+        record.setCreateTime(LocalDateTime.now());
+
+
+        String token = station.getComKey();
+        LocalDateTime tokenTime = station.getKeyTime();
+
+        String dataPullUrl = station.getDownloadurl();
+
+
+        boolean result = false;
+        boolean isUpload = false;
+        String response;
+        RequestVo requestVo;
+        List<CorrforeSt> list = new ArrayList<>();
+
+        if (StrUtil.isEmpty(token) || LocalDateTime.now().isAfter(tokenTime)) {
+            if (comPermisson.generateKey(station)) {
+                station = stationService.findThis();
+                token = station.getComKey();
+                tokenTime = station.getKeyTime();
+            }
+        }
+
+        if (StrUtil.isNotEmpty(token) && LocalDateTime.now().isBefore(tokenTime)) {
+            try {
+
+                DateTime dateTime = DateUtil.parse(DateUtil.today());
+                requestVo = RequestVo.builder()
+                        .transferType(QNHLEnum.TRANSFER_TYPE_CORRECT.getCode())
+                        .date(dateTime.toString("yyyyMMdd"))
+                        .dataType(QNHLEnum.DATA_CORRFORE_TYPE.getCode())
+                        .build();
+
+                JSONObject json = JSONUtil.parseObj(requestVo, true);
+                String body = json.toString();
+
+                HttpRequest httpRequest = HttpRequest.post(dataPullUrl)
+                        .header("Content-Type", "application/json")
+                        .header("Authorization", token);
+                httpRequest.setGlobalTimeout(20000);
+                response = httpRequest
+                        .body(body)
+                        .execute().body();
+
+                if (StrUtil.isNotEmpty(response)) {
+                    boolean isJson = JSONUtil.isJsonObj(response);
+                    if (isJson) {
+                        ResponseVo responseVo = JSONUtil.toBean(response, ResponseVo.class);
+                        String code = responseVo.getRetCode();
+                        if (code.equals(QNHLEnum.REQUEST_SUCCESS.getCode())) {
+
+                            log.info(station.getStationCode() + " 请求短期修正数据返回内容:{}", response);
+
+                            try {
+
+                                if (CommonStant.ET_PHOTOVOLTAIC.equals(station.getType())) {
+                                    list = correctPhotovoltaicData(responseVo.getData());
+
+                                } else {
+                                    list = correctWindData(responseVo.getData());
+                                }
+
+                                /**************检测解析数据完整性*******************/
+                                BigDecimal one = new BigDecimal("1");
+                                BigDecimal checkCount = new BigDecimal(station.getDays().toString()).add(one).multiply(new BigDecimal("96")).add(one);
+
+                                if(list.size()>0){
+                                    if (list.size() < checkCount.intValue()) {
+                                        log.warn("========== 请求短期修正数据缺数: {}", list.size());
+                                    }
+                                    corrforeStService.updateBetweenForecastTime(list.get(0).getTimeFormat(), list.get(list.size() - 1).getTimeFormat(), list);
+
+                                    genFile(station,list);
+
+                                    result = true;
+
+
+                                }else{
+                                    record.setState(StatusEnum.CONNECT_RESPONSE_CONTENT_NULL.getCode());
+                                    record.setStateContent(StatusEnum.CONNECT_RESPONSE_CONTENT_NULL.getMsg());
+                                }
+
+
+                                /**************检测解析数据完整性*******************/
+
+                            } catch (Exception e) {
+                                record.setState(StatusEnum.CONNECT_RESPONSE_FORMAT_ERROR.getSign());
+                                record.setStateContent("解析失败");
+                                log.error("========== 解析短期或生成文件失败 ");
+                            }
+
+
+                            if (result) {
+                                log.info("========== 拉取短期修正数据成功! ==========");
+                                record.setState(QNHLEnum.REQUEST_SUCCESS.getSign());
+                                record.setStateContent(QNHLEnum.REQUEST_SUCCESS.getMsg());
+
+                            }
+
+                        } else {
+
+                        }
+                    } else {
+                        record.setState(StatusEnum.CONNECT_RESPONSE_FORMAT_ERROR.getSign());
+                        record.setStateContent(StatusEnum.CONNECT_RESPONSE_FORMAT_ERROR.getMsg());
+                        log.error("========== 拉取短期修正数据失败 接收响应字符串非json格式 ");
+                    }
+                } else {
+                    record.setState(StatusEnum.CONNECT_RESPONSE_CONTENT_NULL.getSign());
+                    record.setStateContent(StatusEnum.CONNECT_RESPONSE_CONTENT_NULL.getMsg());
+                    log.error("========== 拉取短期修正数据失败  返回响应内容为空 ==========");
+                }
+
+            } catch (Exception e) {
+                record.setState(StatusEnum.CONNECT_ERROR.getSign());
+                record.setStateContent(StatusEnum.CONNECT_ERROR.getMsg());
+                log.error("========== 请求短期修正数据失败 连接断开或请求超时 ==========");
+                e.printStackTrace();
+
+            }
+        }
+        recordService.save(record);
+        return isUpload;
+    }
+
+
+    /**
+     * 光伏数据解析
+     *
+     * @param data 待解析数据
+     * @return
+     * @throws Exception
+     */
+    public List<CorrforeSt> correctPhotovoltaicData(String data) throws Exception {
+        List<CorrforeSt> list = new ArrayList<>();
+
+        try {
+            String[] content = data.split("\n");
+
+            for (int i = 3; i < content.length - 1; i++) {
+
+                CorrforeSt corrforeSt = new CorrforeSt();
+                String column = content[i];
+                String[] datas = column.split(CommonStant.SPACE1_CONSTANT);
+                corrforeSt.setForecastTime(DateUtil.parse(datas[2], "yyyyMMddHHmmss").getTime());
+                corrforeSt.setTimeFormat(DateUtil.parse(datas[2], "yyyyMMddHHmmss").toTimestamp().toLocalDateTime());
+
+                if(column.contains("NULL") || column.contains("null")){
+
+                    BigDecimal defaultValue =new BigDecimal("-99");
+
+                    corrforeSt.setFpValue(defaultValue);
+
+                    corrforeSt.setGlobalR(defaultValue);
+
+                    corrforeSt.setDirectR(defaultValue);
+
+                    corrforeSt.setDiffuseR(defaultValue);
+
+                    corrforeSt.setT(defaultValue);
+
+                    corrforeSt.setRh(defaultValue);
+
+                    corrforeSt.setP(defaultValue);
+
+                    corrforeSt.setWs(defaultValue);
+
+                    corrforeSt.setWd(defaultValue);
+
+                    corrforeSt.setCorrectTime(LocalDateTime.now());
+
+                }else{
+
+                    corrforeSt.setFpValue(isNumber(datas[3]));
+
+                    corrforeSt.setGlobalR(isNumber(datas[4]));
+
+                    corrforeSt.setDirectR(isNumber(datas[5]));
+
+                    corrforeSt.setDiffuseR(isNumber(datas[6]));
+
+                    corrforeSt.setT(isNumber(datas[7]));
+
+                    corrforeSt.setRh(isNumber(datas[8]));
+
+                    corrforeSt.setP(isNumber(datas[9]));
+
+                    corrforeSt.setWs(isNumber(datas[10]));
+
+                    corrforeSt.setWd(isNumber(datas[11]));
+
+                    corrforeSt.setCorrectTime(LocalDateTime.now());
+                }
+
+                Collections.sort(list, Comparator.comparing(CorrforeSt::getForecastTime));
+                list.add(corrforeSt);
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("解析一体化修正短期内容异常");
+        }
+
+        return list;
+
+    }
+
+    /**
+     * 风电数据解析
+     *
+     * @param data 待解析数据
+     * @return 解析数据
+     * @throws Exception
+     */
+    public List<CorrforeSt> correctWindData(String data) throws Exception {
+
+        List<CorrforeSt> list = new ArrayList<>();
+        try {
+            String[] content = data.split("\n");
+
+            if (content[1].contains("CorrectForecast")) {
+
+                for (int i = 3; i < content.length - 1; i++) {
+
+                    CorrforeSt corrforeSt = new CorrforeSt();
+                    String column = content[i];
+                    String[] datas = column.split(CommonStant.SPACE1_CONSTANT);
+                    corrforeSt.setForecastTime(DateUtil.parse(datas[2], "yyyyMMddHHmmss").getTime());
+                    corrforeSt.setTimeFormat(DateUtil.parse(datas[2], "yyyyMMddHHmmss").toTimestamp().toLocalDateTime());
+
+                    if(column.contains("NULL") || column.contains("null")){
+                        BigDecimal defaultValue = new BigDecimal("-99");
+
+                        corrforeSt.setFpValue(defaultValue);
+
+                        corrforeSt.setWs(defaultValue);
+
+                        corrforeSt.setWd(defaultValue);
+
+                        corrforeSt.setT(defaultValue);
+
+                        corrforeSt.setRh(defaultValue);
+
+                        corrforeSt.setP(defaultValue);
+
+                        corrforeSt.setCorrectTime(LocalDateTime.now());
+                    }else{
+
+                        corrforeSt.setFpValue(isNumber(datas[3]));
+
+                        corrforeSt.setWs(isNumber(datas[4]));
+
+                        corrforeSt.setWd(isNumber(datas[5]));
+
+                        corrforeSt.setT(isNumber(datas[6]));
+
+                        corrforeSt.setRh(isNumber(datas[7]));
+
+                        corrforeSt.setP(isNumber(datas[8]));
+
+                        corrforeSt.setCorrectTime(LocalDateTime.now());
+                    }
+                    Collections.sort(list, Comparator.comparing(CorrforeSt::getForecastTime));
+                    list.add(corrforeSt);
+                }
+            } else {
+                log.error("解析一体化修正短期异常,标识错误不为<CorrectForecast>");
+
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("解析一体化修正短期内容异常");
+        }
+
+        return list;
+
+    }
+
+    /**
+     * 判断是否是数值
+     *
+     * @param data
+     * @return
+     */
+    public BigDecimal isNumber(String data) {
+        BigDecimal bigDecimal = null;
+        Pattern pattern = Pattern.compile("-[0-9]+(.[0-9]+)?|[0-9]+(.[0-9]+)?");
+        Matcher isNum = pattern.matcher(data);
+        try {
+            if (isNum.matches()) {
+                bigDecimal = new BigDecimal(data).setScale(2, BigDecimal.ROUND_DOWN);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+        return bigDecimal;
+    }
+
+
+    /**
+     * 生成文件
+     *
+     * @return
+     */
+    public File genFile(Station station,List<CorrforeSt> list) {
+
+        String vmsPath = SystermUtils.getResourceBasePath() + "/vms/DQAMEND.vm";
+        File file = null;
+        Template template = this.velocityEngine.getTemplate(vmsPath);
+        if (template != null) {
+            VelocityContext velocityContext;
+            StringWriter writer;
+
+            list.sort(Comparator.comparing(CorrforeSt::getForecastTime));
+            List<Map<String, Object>> vList = new ArrayList<>();
+
+            for (CorrforeSt a : list) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", a.getId());
+                map.put("forecastTime", DateUtil.format(a.getTimeFormat(), "yyyyMMddHHmmss"));
+                map.put("fpValue", a.getFpValue() == null ? "-99" : a.getFpValue());
+                map.put("swr", a.getGlobalR() == null ? "-99" : a.getGlobalR());
+                map.put("directRadiation", a.getDirectR() == null ? "-99" : a.getDirectR());
+                map.put("diffuseRadiation", a.getDiffuseR() == null ? "-99" : a.getDiffuseR());
+                map.put("windspeed", a.getWs() == null ? "-99" : a.getWs());
+                map.put("windDir", a.getWd() == null ? "-99" : a.getWd());
+                map.put("temperature", a.getT() == null ? "-99" : a.getT());
+                map.put("humidity", a.getRh() == null ? "-99" : a.getRh());
+                map.put("pressure", a.getP() == null ? "-99" : a.getP());
+                vList.add(map);
+
+            }
+
+            velocityContext = new VelocityContext();
+            velocityContext.put("sign", station.getStationCode());
+
+            velocityContext.put("uploadTime", DateUtil.format(new Date(), "yyyy-MM-dd"));
+            velocityContext.put("vList", vList);
+
+            writer = new StringWriter();
+            template.merge(velocityContext, writer);
+
+
+            File fileUrl = new File(station.getLocalFilePath());
+            if (!fileUrl.exists()) {// 判断目录是否存在
+                fileUrl.mkdirs();
+            }
+
+            String fileName = "AMENDFORECAST_" + DateUtil.format(new Date(), "yyyyMMddHHmm") + ".RB";
+
+            file = new File(station.getLocalFilePath() + File.separatorChar + fileName);
+
+
+            FileOutputStream os = null;
+
+            try {
+                boolean res = file.createNewFile();
+                if (res) {
+                    os = new FileOutputStream(file);
+                    // 采用UTF-8字符集
+                    os.write(writer.toString().getBytes("UTF-8"));
+                    os.flush();
+                } else {
+                    log.warn(station.getStationCode() + " 生成minlo文件失败");
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+                log.warn(station.getStationCode() + " 创建minlo文件失败");
+            } finally {
+                if (os != null) {
+                    try {
+                        os.close();
+                    } catch (IOException e) {
+                        log.error("文件生成关闭流失败", e);
+                    }
+                }
+            }
+
+        }
+
+        return file;
+    }
+}

+ 22 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/CorrforeStService.java

@@ -0,0 +1,22 @@
+package com.jiayue.insu.inclientqn.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.insu.inclientqn.entity.CorrforeSt;
+import com.jiayue.insu.inclientqn.entity.QuartzBase;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 定时任务初始业务接口
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+public interface CorrforeStService extends IService<CorrforeSt> {
+
+    boolean updateBetweenForecastTime(LocalDateTime statTime, LocalDateTime endTime, List<CorrforeSt> list);
+
+
+}

+ 0 - 331
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/ForecastPowerTermCorrectService.java

@@ -1,331 +0,0 @@
-package com.jiayue.insu.inclientqn.service;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.jiayue.insu.inclientqn.constant.ConnectConstant;
-import com.jiayue.insu.inclientqn.constant.DataTypeConstant;
-import com.jiayue.insu.inclientqn.constant.StatusConstant;
-import com.jiayue.insu.inclientqn.entity.CorrforeSt;
-import com.jiayue.insu.inclientqn.entity.InsuLog;
-import com.jiayue.insu.inclientqn.entity.TokenInfo;
-import com.jiayue.insu.inclientqn.inenum.ElectricFieldTypeEnum;
-import com.jiayue.insu.inclientqn.inenum.LogStatusEnum;
-import com.jiayue.insu.inclientqn.inenum.LogTypeEnum;
-import com.jiayue.insu.inclientqn.mapper.CorrforeStMapper;
-import com.jiayue.insu.inclientqn.mapper.InsuLogMapper;
-import com.jiayue.insu.inclientqn.model.RequestVo;
-import com.jiayue.insu.inclientqn.model.ResponseVo;
-import com.jiayue.insu.inclientqn.model.TokenVo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * @description:
- * @author: yuanhao
- * @createDate: 2021/9/27
- * @version: 1.0
- */
-@Service
-@Slf4j
-@RequiredArgsConstructor
-public class ForecastPowerTermCorrectService extends ServiceImpl<CorrforeStMapper, CorrforeSt> {
-    @Autowired
-    InTokenService inTokenService;
-    @Autowired
-    TokenInfoService tokenInfoService;
-    @Autowired
-    InsuLogService insuLogServicel;
-
-    @Value("${stationCode}")
-    private String stationCode;
-
-    public String[] pullCorrectData() {
-        // 获取清能一体化token
-        TokenVo tokenVo = inTokenService.getToken();
-
-        if (tokenVo != null) {
-            // 请求当日预测数据
-            downLoadCorrforeData(tokenVo, DataTypeConstant.CORRFORE_TYPE);
-        } else {
-            log.error(stationCode + " ========== 一体化:下载短期修正数据失败  无token ==========");
-        }
-        return null;
-    }
-
-    /**
-     * 下载修正预测数据
-     * @param tokenVo
-     * @param type
-     * @return
-     */
-    public String downLoadCorrforeData(TokenVo tokenVo, String type) {
-        String response = "";
-        String status = "";
-        boolean result = false;
-        List<CorrforeSt> list = new ArrayList<>();
-        try {
-
-            DateTime dateTime = DateUtil.parse(DateUtil.today());
-            RequestVo requestVo = RequestVo.builder()
-                    .transferType(ConnectConstant.TRANSFER_TYPE_CORRECT)
-                    .date(dateTime.toString("yyyyMMdd"))
-                    .dataType(type)
-                    .build();
-
-            JSONObject json = JSONUtil.parseObj(requestVo, true);
-            String body = json.toString();
-            List<TokenInfo> tokenInfoList = tokenInfoService.queryTokenInfo();
-            String downloadurl = "";
-            if (!tokenInfoList.isEmpty()) {
-                TokenInfo tokenInfo = tokenInfoList.get(0);
-                downloadurl = tokenInfo.getDownloadurl();
-                HttpRequest httpRequest = HttpRequest.post(downloadurl)
-                        .header("Content-Type", "application/json")
-                        .header("Authorization", tokenVo.getTokenInfo());
-                httpRequest.setGlobalTimeout(20000);
-                response = httpRequest
-                        .body(body)
-                        .execute().body();
-
-                if (StringUtils.isNotEmpty(response)) {
-                    boolean isJson = JSONUtil.isJsonObj(response);
-                    if (isJson) {
-                        ResponseVo responseVo = JSONUtil.toBean(response, ResponseVo.class);
-                        status = responseVo.getRetCode();
-                        if (status.equals(StatusConstant.REQUEST_SUCCESS)) {
-
-                            List<CorrforeSt> aList = new ArrayList<>();
-                            log.info("请求短期修正数据返回内容:{}", response);
-
-                            String dataContent = responseVo.getData();
-//                            if (!dataContent.contains("NULL") && !dataContent.contains("null")) {
-                                try {
-                                    // 入库
-                                    if (ElectricFieldTypeEnum.E1.toString().equals(tokenInfo.getStationType())) {
-                                        list = correctPhotovoltaicData(responseVo.getData());
-                                    } else {
-//                                        list = correctWindData(responseVo.getData());
-                                    }
-                                    if (!list.isEmpty()){
-                                        super.saveBatch(list);
-                                        packingLog(LogStatusEnum.E1.toString(), LogTypeEnum.E1.toString(),null);
-                                    }
-
-                                    /**************检测解析数据完整性*******************/
-//                                    if (list.size() < count) {
-//                                        status = StatusConstant.Correct_STATUS_DATA_LACK;
-//                                        log.warn(el.getStationCode() + " 请求短期修正数据缺数: " + list.size());
-//                                    } else {
-//                                        result = true;
-//                                        long amendTime = new Date().getTime();
-//                                        for (CorrforeSt a : aList) {
-//                                            List<CorrforeSt> collect = list.stream().filter(n -> n.getForecastTime().longValue() == a.getForecastTime().longValue()).collect(Collectors.toList());
-//                                            if (CollectionUtil.isNotEmpty(collect)) {
-//                                                AioForecastPowerShortTerm correct = collect.get(0);
-//                                                a.setAmendTime(amendTime);
-//                                                a.setFpValueAmend(correct.getFpValueAmend());
-//                                                a.setSwrAmend(correct.getSwrAmend());
-//                                                a.setDirectRadiationAmend(correct.getDirectRadiationAmend());
-//                                                a.setDiffuseRadiationAmend(correct.getDiffuseRadiationAmend());
-//                                                a.setWindspeedAmend(correct.getWindspeedAmend());
-//                                                a.setWindDirAmend(correct.getWindDirAmend());
-//                                                a.setTemperatureAmend(correct.getTemperatureAmend());
-//                                                a.setHumidityAmend(correct.getHumidityAmend());
-//                                                a.setPressureAmend(correct.getPressureAmend());
-//
-//                                            } else {
-//                                                result = false;
-//                                                status = StatusConstant.Correct_STATUS_DATA_LACK;
-//                                                log.warn("请求短期修正数据缺数");
-//                                                break;
-//                                            }
-//                                        }
-//                                    }
-                                    /**************检测解析数据完整性*******************/
-
-                                } catch (Exception e) {
-                                    log.error("解析修正数据失败",e);
-                                    packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"解析修正数据失败");
-//                                    log.info("========== 一体化: {} 解析期修正数据失败 {}  ==========", el.getStationCode(), type);
-                                }
-//                            } else {
-//                                log.info("========== 下载修正数据含NULL ==========");
-//                                packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"修正数据含NULL");
-//                            }
-                            if (result) {
-//                                log.info("========== 一体化: {} 下载短期修正数据成功 {} ==========", el.getStationCode(), type);
-//                                aioForecastPowerShortTermService.saveAll(aList);
-                            }
-                        } else {
-//                            log.error("========== 一体化: {} 下载短期修正数据失败 接收retCode响应码非成功标识T200 {} ==========", stationCode, type);
-//                            log.error("========== 一体化: {} {} 下载短期修正数据失败 接收retCode响应码非成功标识T200 标识为{} ==========", stationCode, type, status);
-//                            log.error("========== 一体化: {} {} 下载短期修正数据失败 接收retCode响应码非成功标识T200 失败原因为{} ==========", stationCode, type, responseVo.getRetMsg());
-                            if (status.equals(StatusConstant.TOKEN_EXPIRE)) {
-                                log.info("========== token过期 ==========");
-                                packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"token过期");
-                            }
-                            if (status.equals(StatusConstant.TOKEN_INVALID)) {
-                                log.info("========== token失效 ==========");
-                                packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"token失效");
-                            }
-                            if (status.equals(StatusConstant.AUTOGRAPH_FAIL)) {
-                                log.info("========== 签名失败 ==========");
-                                packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"签名失败");
-                            }
-                            if (responseVo.getRetCode().equals(StatusConstant.LOGIN_NOT)) {
-                                log.info("========== 用户未登录 ==========");
-                                packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"用户未登录");
-                            }
-                        }
-                    } else {
-                        log.info("========== 接收响应字符串非json格式 ==========");
-                        packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"接收响应字符串非json格式");
-                    }
-                } else {
-                    log.info("========== 响应内容为空 ==========");
-                    packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"响应内容为空");
-                }
-            }
-        } catch (Exception e) {
-            log.error("========== 连接断开或请求超时 ==========",e);
-            packingLog(LogStatusEnum.E2.toString(), LogTypeEnum.E1.toString(),"连接断开或请求超时");
-        }
-        return status;
-    }
-
-
-    /**
-     * 光伏数据解析
-     *
-     * @param data 待解析数据
-     * @return
-     * @throws Exception
-     */
-    public List<CorrforeSt> correctPhotovoltaicData(String data) throws Exception {
-        String[] content = data.split("\n");
-        List<CorrforeSt> list = new ArrayList<>();
-        Date genDate = new Date();
-        for (int i = 3; i < content.length - 1; i++) {
-            CorrforeSt inForecastPowerShortTerm = new CorrforeSt();
-            String column = content[i];
-            String[] datas = column.split(ConnectConstant.SPACE1_CONSTANT);
-            inForecastPowerShortTerm.setForecastTime(DateUtil.parse(datas[2], "yyyy-MM-dd HH:mm:ss").toTimestamp());
-            inForecastPowerShortTerm.setFpValue(new BigDecimal(datas[3]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setGlobalR(new BigDecimal(datas[4]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setDirectR(new BigDecimal(datas[5]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setDiffuseR(new BigDecimal(datas[6]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setT(new BigDecimal(datas[7]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setRh(new BigDecimal(datas[8]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setP(new BigDecimal(datas[9]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setWs(new BigDecimal(datas[10]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setWd(new BigDecimal(datas[11]).setScale(2, BigDecimal.ROUND_DOWN));
-            inForecastPowerShortTerm.setCreateTime(new Timestamp(genDate.getTime()));
-            list.add(inForecastPowerShortTerm);
-        }
-        return list;
-    }
-
-//    /**
-//     * 风电数据解析
-//     *
-//     * @param data 待解析数据
-//     * @return 解析数据
-//     * @throws Exception
-//     */
-//    public List<AioForecastPowerShortTerm> correctWindData(String data) throws Exception {
-//
-//        String[] content = data.split("\n");
-//
-//
-//        String dateStr = content[0].split("'")[1];
-//
-//        List<AioForecastPowerShortTerm> list = new ArrayList<>();
-//
-//        Date genDate = new Date();
-//
-//        if (content[1].contains("CorrectForecast")) {
-//
-//
-//            for (int i = 3; i < content.length - 1; i++) {
-//
-//                AioForecastPowerShortTerm inForecastPowerShortTerm = new AioForecastPowerShortTerm();
-//                String column = content[i];
-//
-//                String[] datas = column.split(ConnectConstant.SPACE1_CONSTANT);
-//
-//                inForecastPowerShortTerm.setForecastTime(DateUtil.parse(datas[2], "yyyyMMddHHmmss").getTime());
-//
-//                inForecastPowerShortTerm.setFpValue(isNumber(datas[3]));
-//
-//                inForecastPowerShortTerm.setWindspeed(isNumber(datas[4]));
-//
-//                inForecastPowerShortTerm.setWindDir(isNumber(datas[5]));
-//
-//                inForecastPowerShortTerm.setTemperature(isNumber(datas[6]));
-//
-//                inForecastPowerShortTerm.setHumidity(isNumber(datas[7]));
-//
-//                inForecastPowerShortTerm.setPressure(isNumber(datas[8]));
-//
-//                inForecastPowerShortTerm.setAmendTime(genDate.getTime());
-//
-//                list.add(inForecastPowerShortTerm);
-//            }
-//        } else {
-//            log.error("解析一体化修正短期异常:{}", "标识错误不为<CorrectForecast>");
-//
-//        }
-//
-//
-//        return list;
-//
-//    }
-
-    /**
-     * 判断是否是数值
-     *
-     * @param data
-     * @return
-     */
-    public BigDecimal isNumber(String data) {
-        BigDecimal bigDecimal = null;
-        Pattern pattern = Pattern.compile("-[0-9]+(.[0-9]+)?|[0-9]+(.[0-9]+)?");
-        Matcher isNum = pattern.matcher(data);
-        try {
-            if (isNum.matches()) {
-                bigDecimal = new BigDecimal(data).setScale(2, BigDecimal.ROUND_DOWN);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-
-        return bigDecimal;
-    }
-
-    public void packingLog(String status,String logType,String failCause){
-        InsuLog insuLog = new InsuLog();
-        insuLog.setGenTime(new Timestamp(new Date().getTime()));
-        insuLog.setStatus(status);
-        insuLog.setType(logType);
-        insuLog.setFailCause(failCause);
-        insuLogServicel.save(insuLog);
-    }
-}

+ 20 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/InitRunner.java

@@ -0,0 +1,20 @@
+package com.jiayue.insu.inclientqn.service;
+
+import com.jiayue.insu.inclientqn.entity.Station;
+import com.jiayue.insu.inclientqn.permisson.com.ComPermisson;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class InitRunner implements CommandLineRunner {
+    @Autowired
+    private ComPermisson comPermisson;
+    @Autowired
+    private StationService stationService;
+    @Override
+    public void run(String... args) throws Exception {
+        Station station = stationService.findThis();
+        comPermisson.generateKey(station);
+    }
+}

+ 42 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/impl/CorrforeStServiceImpl.java

@@ -0,0 +1,42 @@
+package com.jiayue.insu.inclientqn.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.insu.inclientqn.entity.CorrforeSt;
+import com.jiayue.insu.inclientqn.mapper.CorrforeStMapper;
+import com.jiayue.insu.inclientqn.service.CorrforeStService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 修正数据业务实现
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+@Service
+@Slf4j
+public class CorrforeStServiceImpl extends ServiceImpl<CorrforeStMapper, CorrforeSt> implements CorrforeStService {
+
+
+    @Override
+    public boolean updateBetweenForecastTime(LocalDateTime statTime, LocalDateTime endTime, List<CorrforeSt> list) {
+
+        try {
+            LambdaQueryWrapper<CorrforeSt> remove = new LambdaQueryWrapper<>();
+            remove.between(CorrforeSt::getTimeFormat,statTime,endTime);
+            this.remove(remove);
+            this.saveBatch(list);
+            log.info("========== 数据入库成功");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return Boolean.TRUE;
+
+    }
+}

+ 112 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/util/SystermUtils.java

@@ -0,0 +1,112 @@
+package com.jiayue.insu.inclientqn.util;
+
+import cn.hutool.core.date.DateUtil;
+
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.ResourceUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Date;
+import java.util.Properties;
+
+/**
+ * @description:
+ * @author: yuanhao
+ * @createDate: 2021/9/27
+ * @version: 1.0
+ */
+@Slf4j
+public class SystermUtils {
+
+    public static Properties props = System.getProperties();
+    public static String osName = props.getProperty("os.name");
+
+    /**
+     * 功能描述: 判断文件夹是否存在
+     *
+     * @param:
+     * @return:
+     * @auther: bizy
+     * @date: 2018/7/18 15:47 下午
+     */
+    public static String judeDirExists(String path) {
+        try {
+
+            if (osName.indexOf("Windows") > -1) {
+                path = path.replaceAll("/", "\\\\");
+            } else {
+                path = path.replaceAll("\\\\", "/");
+                path = "/" + path;
+            }
+
+            File file = new File(path);
+
+            if (file.exists()) {
+                if (file.isDirectory()) {
+                    log.debug("dir exists");
+                } else {
+                    log.debug("the same name file exists, can not create dir");
+                }
+            } else {
+                log.debug("dir not exists, create it ...");
+                File parent = file.getParentFile(); // 获取父文件
+                if (!parent.exists()) {
+                    parent.mkdirs(); //创建所有父文件夹
+                }
+                file.mkdir();
+
+                if (osName.indexOf("Windows") <= -1) {
+                    Runtime.getRuntime().exec("chmod 777 -R " + path);//ftp服务器在linux环境中,生成的文件涉及到读写权限问题,直接给777权限
+                }
+            }
+            log.info("path:" + path);
+        } catch (IOException e) {
+            log.error("系统错误:" + e.getMessage(), e);
+        } finally {
+            return path;
+        }
+    }
+
+
+    public static String getResourceBasePath() {
+        // 获取跟目录
+        File path = null;
+        try {
+            path = new File(ResourceUtils.getURL("classpath:").getPath());
+
+        } catch (FileNotFoundException e) {
+            // nothing to do
+        }
+        if (path == null || !path.exists()) {
+            path = new File("");
+        }
+
+        String pathStr = path.getAbsolutePath();
+        try {
+            pathStr = URLDecoder.decode(pathStr, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        // 如果是在eclipse中运行,则和target同级目录,如果是jar部署到服务器,则默认和jar包同级
+//    pathStr = pathStr.replace("\\target\\classes", "");
+
+        return pathStr;
+    }
+
+
+    public static String AMPM() {
+        String ampm = CommonStant.AM_DAY;
+        boolean am = DateUtil.isAM(new Date());
+        if (!am) {
+            ampm = CommonStant.PM_DAY;
+        }
+
+        return ampm;
+    }
+
+}

+ 8 - 0
in-client-qn/src/main/resources/vms/DQAMEND.vm

@@ -0,0 +1,8 @@
+<! Entity=${sign}  type=AMEND  time='${uploadTime}' !>
+
+<ShortTermForcastAmend>
+@id 时间 预测功率  总辐射  直辐射  散辐射  风速  风向  气温  湿度  压力
+#foreach( $dq in $vList )
+#${velocityCount} ${dq.forecastTime} ${dq.fpValue} ${dq.swr} ${dq.directRadiation} ${dq.diffuseRadiation} ${dq.windspeed} ${dq.windDir} ${dq.temperature} ${dq.humidity} ${dq.pressure}
+#end
+</ShortTermForcastAmend>

+ 2 - 2
in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/ForecastPowerTermCorrectServiceTest.java

@@ -13,10 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 class ForecastPowerTermCorrectServiceTest extends BaseTest {
 
     @Autowired
-    CorrforeStService corrforeStService;
+    CorrforeService corrforeService;
 
     @Test
     void pullCorrectData() {
-        corrforeStService.pullCorrectData();
+
     }
 }

+ 7 - 2
in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/Test.java

@@ -11,7 +11,12 @@ import cn.hutool.core.date.DateUtil;
  */
 public class Test {
     public static void main(String[] args) {
-        DateTime dt = DateUtil.parse("20220602000000", "yyyyMMddHHmmss");
-        System.out.println(dt);
+        try{
+            System.out.println("开始");
+            throw new Exception();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        System.out.println("执行");
     }
 }

+ 1 - 1
in-cloud-ui/src/config/setting.config.js

@@ -37,7 +37,7 @@ const setting = {
   //token名称
   tokenName: 'satoken',
   //token在localStorage、sessionStorage存储的key的名称
-  tokenTableName: 'vue-admin-beautiful-2021',
+  tokenTableName: 'in-cloud',
   //token存储位置localStorage sessionStorage
   storage: 'localStorage',
   //token失效回退到登录页时是否记录本次的路由

+ 26 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/InitRunner.java

@@ -0,0 +1,26 @@
+package com.jiayue.insu.incloud.service;
+
+import com.jiayue.insu.incloud.compermisson.QNHLComPermisson;
+import com.jiayue.insu.incloud.constants.CompanyConstant;
+import com.jiayue.insu.incloud.entity.Station;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class InitRunner implements CommandLineRunner {
+    @Autowired
+    private QNHLComPermisson qnhlComPermisson;
+    @Autowired
+    private StationService stationService;
+    @Override
+    public void run(String... args) throws Exception {
+
+        List<Station> stations = stationService.findByInCode(CompanyConstant.COMPANY_QNHL);
+        for (Station station: stations) {
+            qnhlComPermisson.generateKey(station);
+        }
+    }
+}

+ 4 - 1
in-cloud/src/main/java/com/jiayue/insu/incloud/service/StationService.java

@@ -2,6 +2,9 @@ package com.jiayue.insu.incloud.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jiayue.insu.incloud.entity.Station;
+
+import java.util.List;
+
 /**
  * 场站信息业务接口
  *
@@ -12,5 +15,5 @@ import com.jiayue.insu.incloud.entity.Station;
 public interface StationService extends IService<Station> {
 
     Station findByStationCode(String stationCode);
-
+    List<Station> findByInCode(String incode);
 }

+ 10 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/impl/StationServiceImpl.java

@@ -6,6 +6,9 @@ import com.jiayue.insu.incloud.entity.Station;
 import com.jiayue.insu.incloud.mapper.StationMapper;
 import com.jiayue.insu.incloud.service.StationService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
+
 /**
  * 场站信息业务实现
  *
@@ -24,4 +27,11 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
         return this.getOne(lambdaQueryWrapper);
 
     }
+
+    @Override
+    public List<Station> findByInCode(String incode) {
+        LambdaQueryWrapper<Station> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(Station::getInCode,incode);
+        return this.list(lambdaQueryWrapper);
+    }
 }