yuanhao há 2 anos atrás
pai
commit
5cadbbf6fd
30 ficheiros alterados com 925 adições e 305 exclusões
  1. 5 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/constant/CommonStant.java
  2. 46 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/BackForeUsForecastData.java
  3. 17 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/BackStatData.java
  4. 5 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/entity/Station.java
  5. 6 6
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/QNHLEnum.java
  6. 1 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/StatusEnum.java
  7. 1 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/BackDataAnalysisJob.java
  8. 44 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/BackDataForecastPowerReportJob.java
  9. 44 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/BackDataRealPowerJob.java
  10. 44 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/BackDataRealWeatherJob.java
  11. 44 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/BackDataUsForecastPowerReportJob.java
  12. 1 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/CorrforeDataJob.java
  13. 1 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/CorrforeFileJob.java
  14. 17 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/mapper/BackForeUsForecastDataMapper.java
  15. 15 2
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/model/RequestVo.java
  16. 25 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/permisson/com/ComPermisson.java
  17. 0 226
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/BackDataGenService.java
  18. 0 61
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/BackDataRequestService.java
  19. 23 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/BackForeUsForecastDataService.java
  20. 2 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/RecordService.java
  21. 4 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/BackDataAnalysisService.java
  22. 276 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/BackDataGenService.java
  23. 4 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/CorrforeService.java
  24. 2 1
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/InitRunner.java
  25. 200 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/RequestDataService.java
  26. 35 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/impl/BackForeUsForecastDataServiceImpl.java
  27. 11 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/impl/RecordServiceImpl.java
  28. 26 0
      in-client-qn/src/main/java/com/jiayue/insu/inclientqn/util/RequestUtils.java
  29. 25 3
      in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/BackDataGenServiceTest.java
  30. 1 0
      in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/ForecastPowerTermCorrectServiceTest.java

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

@@ -41,6 +41,11 @@ public interface CommonStant {
      */
     String RECORD_TYPE_BACK_DATA_FILE = "BACK_DATA_FILE";
 
+    /**
+     * 日志类型:回传数据
+     */
+    String RECORD_TYPE_BACK_DATA = "BACK_DATA";
+
 
     /**
      * 换行

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

@@ -0,0 +1,46 @@
+package com.jiayue.insu.inclientqn.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 回传数据 预测类型  超短期 实体
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2018/12/7 16:22
+ */
+@Data
+@TableName("in_back_us_forecast_data")
+public class BackForeUsForecastData extends  BaseBackTime {
+
+    /**
+     * Id
+     */
+    @TableId(type = IdType.AUTO)
+    Long id;
+
+
+    /**
+     * 预测时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    LocalDateTime forecastTime;
+    /**
+     * 预测功率
+     */
+    BigDecimal forecastValue;
+    /**
+     * 预计开机容量
+     */
+    BigDecimal forecastOpenCap;
+
+}

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * 回传数据 统计类型
@@ -25,6 +26,22 @@ public class BackStatData extends  BaseBackTime {
     Long id;
 
     /**
+     * 实际功率回传时间
+     */
+    LocalDateTime backTimeRealPower;
+    /**
+     * 实际气象回传时间
+     */
+    LocalDateTime backTimeRealWeather;
+    /**
+     * 短期上报状态回传时间
+     */
+    LocalDateTime backTimeForecastReport;
+    /**
+     * 短期上报状态回传时间
+     */
+    LocalDateTime backTimeUsForecastReport;
+    /**
      * 实际功率
      */
     BigDecimal realPower;

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

@@ -61,6 +61,11 @@ public class Station {
      * downloadUrl
      */
     String downloadurl;
+
+    /**
+     * 回传url
+     */
+    String backurl;
     /**
      * 短期预测天数
      */

+ 6 - 6
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/inenum/QNHLEnum.java

@@ -35,12 +35,12 @@ public enum QNHLEnum {
     /**
      * 回传数据类型划分
      */
-    DATA_FORE_TYPE_UltraShortTermForecast("UltraShortTermForecast","UltraShortTermForecast","超短期功率预测上报"),
-    DATA_FORE_TYPE_ForecastPower("ForecastPower","ForecastPower","短期功率预测上报"),
-    DATA_STAT_TYPE_RealPower("RealPower","RealPower","实发功率"),
-    DATA_STAT_TYPE_RealWeather("RealWeather","RealWeather","实际气象"),
-    DATA_STAT_TYPE_ForecastPowerReport("ForecastPowerReport","ForecastPowerReport","短期上报状态"),
-    DATA_STAT_TYPE_UltraShortTermForecastReport("UltraShortTermForecastReport","UltraShortTermForecastReport","超短期上报状态"),
+    DATA_FORE_TYPE_UltraShortTermForecast("UltraShortTermForecast","UltraShortTermForecast","超短期功率预测上报回传"),
+    DATA_FORE_TYPE_ForecastPower("ForecastPower","ForecastPower","短期功率预测上报回传"),
+    DATA_STAT_TYPE_RealPower("RealPower","RealPower","实发功率回传"),
+    DATA_STAT_TYPE_RealWeather("RealWeather","RealWeather","实际气象回传"),
+    DATA_STAT_TYPE_ForecastPowerReport("ForecastPowerReport","ForecastPowerReport","短期上报状态回传"),
+    DATA_STAT_TYPE_UltraShortTermForecastReport("UltraShortTermForecastReport","UltraShortTermForecastReport","超短期上报状态回传"),
             ;
 
     private String code;

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

@@ -13,7 +13,7 @@ public enum StatusEnum {
     DOWNLOAD_FILE_FAIL("response_fail","response_fail","下载文件失败"),
     DOWNLOAD_FILE_ERROR("response_fail","response_fail","下载文件异常"),
     FILE_NULL("file_null","file_null","文件为空"),
-
+    BACK_DATA_GEN_FAIL("BACK_DATA_GEN_FAIL","BACK_DATA_GEN_FAIL","生成回传数据请求体失败"),
 
     CONNECT_RESPONSE_FORMAT_ERROR("response_format_error","response_format_error","响应格式异常"),
     CONNECT_RESPONSE_CONTENT_NULL("response_content_null","response_content_null","响应内容为空"),

+ 1 - 1
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/BackDataAnalysisJob.java

@@ -1,6 +1,6 @@
 package com.jiayue.insu.inclientqn.job;
 
-import com.jiayue.insu.inclientqn.service.BackDataAnalysisService;
+import com.jiayue.insu.inclientqn.service.client.BackDataAnalysisService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;

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

@@ -0,0 +1,44 @@
+package com.jiayue.insu.inclientqn.job;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.Record;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.inenum.StatusEnum;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.client.RequestDataService;
+import com.jiayue.insu.inclientqn.util.DateTimeUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+/**
+ * @description: 回传短期上报定时任务
+ * @author: yuanhao
+ * @createDate: 2022/6/17
+ * @version: 1.0
+ */
+public class BackDataForecastPowerReportJob implements Job {
+
+
+    @Autowired
+    private RequestDataService requestDataService;
+    @Autowired
+    private RecordService recordService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
+        LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
+        Record record = recordService.findTimeAndTypeAndContentAndState(localDateTime, CommonStant.RECORD_TYPE_BACK_DATA, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode(), StatusEnum.SUCCESS.getSign());
+
+        if (record == null) {
+            requestDataService.requestBackStatData(QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport,time);
+        }
+
+    }
+}

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

@@ -0,0 +1,44 @@
+package com.jiayue.insu.inclientqn.job;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.Record;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.inenum.StatusEnum;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.client.RequestDataService;
+import com.jiayue.insu.inclientqn.util.DateTimeUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+/**
+ * @description: 回传实际功率定时任务
+ * @author: yuanhao
+ * @createDate: 2022/6/17
+ * @version: 1.0
+ */
+public class BackDataRealPowerJob implements Job {
+
+
+    @Autowired
+    private RequestDataService requestDataService;
+    @Autowired
+    private RecordService recordService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
+        LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
+        Record record = recordService.findTimeAndTypeAndContentAndState(localDateTime, CommonStant.RECORD_TYPE_BACK_DATA, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode(), StatusEnum.SUCCESS.getSign());
+
+        if (record == null) {
+            requestDataService.requestBackStatData(QNHLEnum.DATA_STAT_TYPE_RealPower,time);
+        }
+
+    }
+}

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

@@ -0,0 +1,44 @@
+package com.jiayue.insu.inclientqn.job;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.Record;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.inenum.StatusEnum;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.client.RequestDataService;
+import com.jiayue.insu.inclientqn.util.DateTimeUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+/**
+ * @description: 回传实际气象定时任务
+ * @author: yuanhao
+ * @createDate: 2022/6/17
+ * @version: 1.0
+ */
+public class BackDataRealWeatherJob implements Job {
+
+
+    @Autowired
+    private RequestDataService requestDataService;
+    @Autowired
+    private RecordService recordService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
+        LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
+        Record record = recordService.findTimeAndTypeAndContentAndState(localDateTime, CommonStant.RECORD_TYPE_BACK_DATA, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode(), StatusEnum.SUCCESS.getSign());
+
+        if (record == null) {
+            requestDataService.requestBackStatData(QNHLEnum.DATA_STAT_TYPE_RealWeather,time);
+        }
+
+    }
+}

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

@@ -0,0 +1,44 @@
+package com.jiayue.insu.inclientqn.job;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.Record;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.inenum.StatusEnum;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.client.RequestDataService;
+import com.jiayue.insu.inclientqn.util.DateTimeUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDateTime;
+
+/**
+ * @description: 回传超短期上报状态定时任务
+ * @author: yuanhao
+ * @createDate: 2022/6/17
+ * @version: 1.0
+ */
+public class BackDataUsForecastPowerReportJob implements Job {
+
+
+    @Autowired
+    private RequestDataService requestDataService;
+    @Autowired
+    private RecordService recordService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
+        LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
+        Record record = recordService.findTimeAndTypeAndContentAndState(localDateTime, CommonStant.RECORD_TYPE_BACK_DATA, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode(), StatusEnum.SUCCESS.getSign());
+
+        if (record == null) {
+            requestDataService.requestBackStatData(QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport,time);
+        }
+
+    }
+}

+ 1 - 1
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/CorrforeDataJob.java

@@ -5,7 +5,7 @@ import com.jiayue.insu.inclientqn.constant.CommonStant;
 import com.jiayue.insu.inclientqn.entity.Record;
 import com.jiayue.insu.inclientqn.entity.Station;
 import com.jiayue.insu.inclientqn.inenum.StatusEnum;
-import com.jiayue.insu.inclientqn.service.CorrforeService;
+import com.jiayue.insu.inclientqn.service.client.CorrforeService;
 
 import com.jiayue.insu.inclientqn.service.RecordService;
 import com.jiayue.insu.inclientqn.service.StationService;

+ 1 - 1
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/job/CorrforeFileJob.java

@@ -5,7 +5,7 @@ import com.jiayue.insu.inclientqn.constant.CommonStant;
 import com.jiayue.insu.inclientqn.entity.Record;
 import com.jiayue.insu.inclientqn.entity.Station;
 import com.jiayue.insu.inclientqn.inenum.StatusEnum;
-import com.jiayue.insu.inclientqn.service.CorrforeService;
+import com.jiayue.insu.inclientqn.service.client.CorrforeService;
 import com.jiayue.insu.inclientqn.service.RecordService;
 import com.jiayue.insu.inclientqn.service.StationService;
 import org.quartz.Job;

+ 17 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/mapper/BackForeUsForecastDataMapper.java

@@ -0,0 +1,17 @@
+package com.jiayue.insu.inclientqn.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jiayue.insu.inclientqn.entity.BackForeUsForecastData;
+import com.jiayue.insu.inclientqn.entity.BackStatData;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 回传超短期数据mapper
+ *
+ * @author yh
+ * @date 2022-04-12 19:33:02
+ */
+@Mapper
+public interface BackForeUsForecastDataMapper extends BaseMapper<BackForeUsForecastData> {
+
+}

+ 15 - 2
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/model/RequestVo.java

@@ -20,8 +20,21 @@ import lombok.experimental.SuperBuilder;
 @AllArgsConstructor
 public class RequestVo {
 
-    public static RequestVo UPLOAD_FORE(String el,String data) {
-        DateTime dateTime = DateUtil.parse(DateUtil.now());
+    public static RequestVo UPLOAD_STAT(String el,String data,long time) {
+
+        DateTime dateTime =  DateTime.of(time);
+        String fileName = el + "_" + dateTime.toString("yyyyMMdd_HHmm") + "_" + QNHLEnum.DATA_STAT_TYPE.getSign() + ".CIME";
+        return RequestVo.builder()
+                .transferType(QNHLEnum.TRANSFER_TYPE_UPLOAD.getCode())
+                .date(dateTime.toString("yyyyMMdd"))
+                .dataType(QNHLEnum.DATA_STAT_TYPE.getSign())
+                .fileName(fileName)
+                .data(data.toString()).build();
+    }
+
+    public static RequestVo UPLOAD_FORE(String el,String data,long time) {
+
+        DateTime dateTime =  DateTime.of(time);
         String fileName = el + "_" + dateTime.toString("yyyyMMdd_HHmm") + "_" + QNHLEnum.DATA_FORE_TYPE.getSign() + ".CIME";
         return RequestVo.builder()
                 .transferType(QNHLEnum.TRANSFER_TYPE_UPLOAD.getCode())

+ 25 - 0
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/permisson/com/ComPermisson.java

@@ -94,4 +94,29 @@ public class ComPermisson {
         return result;
     }
 
+    /**
+     * 校验token
+     * @param station 场站
+     * @return 是否
+     */
+    public boolean isToken(Station station){
+        boolean result = false;
+        String token = station.getComKey();
+        LocalDateTime tokenTime = station.getKeyTime();
+        if (StrUtil.isEmpty(token) || LocalDateTime.now().isAfter(tokenTime)) {
+            if (generateKey(station)) {
+                station = stationService.findThis();
+                token = station.getComKey();
+                tokenTime = station.getKeyTime();
+            }
+        }
+
+
+        if (StrUtil.isNotEmpty(token) && LocalDateTime.now().isBefore(tokenTime)){
+            result = true;
+        }
+
+        return result;
+    }
+
 }

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

@@ -1,226 +0,0 @@
-package com.jiayue.insu.inclientqn.service;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.util.StrUtil;
-import com.jiayue.insu.inclientqn.constant.CommonStant;
-import com.jiayue.insu.inclientqn.entity.BackStatData;
-import com.jiayue.insu.inclientqn.inenum.ElectricFieldTypeEnum;
-import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
-import com.jiayue.insu.inclientqn.model.RequestVo;
-import com.jiayue.insu.inclientqn.util.DateTimeUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-
-/**
- * @description:  回传数据请求生成
- * @author: yuanhao
- * @createDate: 2022/6/17
- * @version: 1.0
- */
-@Service
-@Slf4j
-@RequiredArgsConstructor
-@RefreshScope
-public class BackDataGenService {
-
-    private String headerTemplate = "<! Entity={}  time='{}' !>" + CommonStant.LINE_CONSTANT;
-
-    private final BackStatDataService backStatDataService;
-
-
-    /**
-     * 生成回传实际功率
-     * @param el 场站标识
-     * @return RequestVo
-     */
-    public RequestVo genStateRealPowerData(String el) throws Exception{
-
-        RequestVo requestVo = null;
-
-        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
-        LocalDateTime queryTime = LocalDateTimeUtil.of(time);
-        List<BackStatData> backStatDatas = backStatDataService.findBySignTime(queryTime);
-
-        if(CollectionUtil.isNotEmpty(backStatDatas) && backStatDatas.get(0).getRealPower() !=null){
-            StringBuilder content = new StringBuilder();
-
-            String header = StrUtil.format(headerTemplate,el,DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
-            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode());
-            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode());
-            String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE2_CONSTANT + "实发功率值"+CommonStant.LINE_CONSTANT;
-            content.append(header);
-            content.append(labelStart);
-            content.append(title);
-
-            String template = "# 1" + CommonStant.SPACE2_CONSTANT + "{}"+CommonStant.LINE_CONSTANT;
-
-            String dataContent  = StrUtil.format(template,backStatDatas.get(0).getRealPower().toString());
-
-            content.append(dataContent);
-            content.append(labelEnd);
-
-            requestVo = RequestVo.UPLOAD_FORE(el,content.toString());
-        }
-
-
-        return requestVo;
-    }
-
-
-    /**
-     * 生成回传实际气象
-     * @param el 场站标识
-     * @param stationType 场站类型
-     * @return RequestVo
-     */
-    public RequestVo genStateRealWeatherData(String el,String stationType)throws Exception {
-
-        RequestVo requestVo = null;
-
-        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
-        LocalDateTime queryTime = LocalDateTimeUtil.of(time);
-        List<BackStatData> backStatDatas = backStatDataService.findBySignTime(queryTime);
-
-        if(CollectionUtil.isNotEmpty(backStatDatas)){
-            StringBuilder content = new StringBuilder();
-
-            String header = StrUtil.format(headerTemplate,el,DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
-            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode());
-            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode());
-            content.append(header);
-            content.append(labelStart);
-            String title = "";
-            String template ="";
-            String dataContent="";
-            BackStatData backStatData = backStatDatas.get(0);
-
-            if(stationType.equals(ElectricFieldTypeEnum.E2.name())){
-                title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE4_CONSTANT + "风速"+ CommonStant.SPACE4_CONSTANT + "风向"
-                        + CommonStant.SPACE4_CONSTANT + "温度"+ CommonStant.SPACE4_CONSTANT + "湿度"+ CommonStant.SPACE4_CONSTANT + "气压"
-                        +CommonStant.LINE_CONSTANT;
-
-                template = "# 1" + CommonStant.SPACE1_CONSTANT + "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT
-                        + "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT
-                        +CommonStant.LINE_CONSTANT;
-
-                dataContent  = StrUtil.format(template,backStatData.getWs().toString(),backStatData.getWd().toString()
-                        ,backStatData.getTemperature().toString(),backStatData.getHumidity().toString(),backStatData.getPressure().toString());
-
-            }else{
-                title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE4_CONSTANT + "总辐照度"+ CommonStant.SPACE4_CONSTANT + "直射辐照度"
-                        + CommonStant.SPACE4_CONSTANT + "散射辐照度"+ CommonStant.SPACE4_CONSTANT + "温度"+ CommonStant.SPACE4_CONSTANT + "光伏板温度"
-                        + CommonStant.SPACE4_CONSTANT + "湿度"+ CommonStant.SPACE4_CONSTANT + "气压"+ CommonStant.SPACE4_CONSTANT + "风速"+ CommonStant.SPACE4_CONSTANT + "风向"
-                        +CommonStant.LINE_CONSTANT;
-
-                template = "# 1" + CommonStant.SPACE1_CONSTANT + "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT
-                        + "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT
-                        + "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT+ "{}"+ CommonStant.SPACE4_CONSTANT
-                        + "{}"+ CommonStant.SPACE4_CONSTANT+CommonStant.LINE_CONSTANT;
-
-                dataContent  = StrUtil.format(template,backStatData.getGlobalR().toString(),backStatData.getDirectR().toString()
-                        ,backStatData.getDiffuseR().toString(),backStatData.getTemperature().toString(),backStatData.getCellT().toString(),
-                        backStatData.getHumidity().toString(),backStatData.getPressure().toString(),backStatData.getWs().toString(),backStatData.getWd().toString()
-                );
-
-            }
-
-
-            content.append(title);
-            content.append(dataContent);
-            content.append(labelEnd);
-
-            requestVo = RequestVo.UPLOAD_FORE(el,content.toString());
-        }
-
-
-        return requestVo;
-    }
-
-
-    /**
-     * 生成短期上报
-     * @param el 场站标识
-     * @return RequestVo
-     */
-    public RequestVo genStateForecastPowerReport(String el) throws Exception {
-
-        RequestVo requestVo = null;
-
-        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
-        LocalDateTime queryTime = LocalDateTimeUtil.of(time);
-        List<BackStatData> backStatDatas = backStatDataService.findBySignTime(queryTime);
-
-        if(CollectionUtil.isNotEmpty(backStatDatas) && backStatDatas.get(0).getReportStateForecast() !=null){
-            StringBuilder content = new StringBuilder();
-
-            String header = StrUtil.format(headerTemplate,el,DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
-            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode());
-            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode());
-            String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE2_CONSTANT + "上报"+CommonStant.LINE_CONSTANT;
-            content.append(header);
-            content.append(labelStart);
-            content.append(title);
-
-            String template = "# 1" + CommonStant.SPACE2_CONSTANT + "{}"+CommonStant.LINE_CONSTANT;
-
-            String dataContent  = StrUtil.format(template,backStatDatas.get(0).getReportStateForecast().toString());
-
-            content.append(dataContent);
-            content.append(labelEnd);
-
-            requestVo = RequestVo.UPLOAD_FORE(el,content.toString());
-        }
-
-
-        return requestVo;
-    }
-
-
-    /**
-     * 生成超短期上报
-     * @param el 场站标识
-     * @return RequestVo
-     */
-    public RequestVo genStateUltraShortTermForecastReport(String el) throws Exception{
-
-        RequestVo requestVo = null;
-
-        long time = DateTimeUtils.get15min(DateUtil.date().getTime());
-        LocalDateTime queryTime = LocalDateTimeUtil.of(time);
-        List<BackStatData> backStatDatas = backStatDataService.findBySignTime(queryTime);
-
-        if(CollectionUtil.isNotEmpty(backStatDatas) && backStatDatas.get(0).getReportStateForecastshort() !=null){
-            StringBuilder content = new StringBuilder();
-
-            String header = StrUtil.format(headerTemplate,el,DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
-            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode());
-            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode());
-            String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE2_CONSTANT + "上报"+CommonStant.LINE_CONSTANT;
-            content.append(header);
-            content.append(labelStart);
-            content.append(title);
-
-            String template = "# 1" + CommonStant.SPACE2_CONSTANT + "{}"+CommonStant.LINE_CONSTANT;
-
-            String dataContent  = StrUtil.format(template,backStatDatas.get(0).getReportStateForecastshort().toString());
-
-            content.append(dataContent);
-            content.append(labelEnd);
-
-            requestVo = RequestVo.UPLOAD_FORE(el,content.toString());
-        }
-
-
-        return requestVo;
-    }
-
-
-}

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

@@ -1,61 +0,0 @@
-package com.jiayue.insu.inclientqn.service;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.util.StrUtil;
-import com.jiayue.insu.inclientqn.constant.CommonStant;
-import com.jiayue.insu.inclientqn.entity.BackStatData;
-import com.jiayue.insu.inclientqn.entity.Station;
-import com.jiayue.insu.inclientqn.inenum.ElectricFieldTypeEnum;
-import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
-import com.jiayue.insu.inclientqn.model.RequestVo;
-import com.jiayue.insu.inclientqn.util.DateTimeUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-
-/**
- * @description:  回传数据请求
- * @author: yuanhao
- * @createDate: 2022/6/17
- * @version: 1.0
- */
-@Service
-@Slf4j
-@RequiredArgsConstructor
-@RefreshScope
-public class BackDataRequestService {
-
-
-
-    private final BackDataGenService backDataGenService;
-
-    private final StationService stationService;
-
-    public void requestRealPowerData(){
-
-        Station station = stationService.findThis();
-
-        RequestVo requestVo = null;
-        try {
-            requestVo = backDataGenService.genStateRealPowerData(station.getStationCode());
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-
-        if(requestVo!=null){
-
-        }
-
-    }
-
-
-
-
-}

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

@@ -0,0 +1,23 @@
+package com.jiayue.insu.inclientqn.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.insu.inclientqn.entity.BackForeUsForecastData;
+import com.jiayue.insu.inclientqn.entity.BackStatData;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 回传预测超短期数据接口
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+public interface BackForeUsForecastDataService extends IService<BackForeUsForecastData> {
+
+    List<BackForeUsForecastData> findBySignTime(LocalDateTime time);
+
+
+
+}

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

@@ -23,5 +23,7 @@ public interface RecordService extends IService<Record> {
      */
     Record findTimeAndTypeAndState(LocalDateTime time,String type,String state);
 
+    Record findTimeAndTypeAndContentAndState(LocalDateTime time,String type,String content, String state);
+
 
 }

+ 4 - 1
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/BackDataAnalysisService.java → in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/BackDataAnalysisService.java

@@ -1,8 +1,10 @@
-package com.jiayue.insu.inclientqn.service;
+package com.jiayue.insu.inclientqn.service.client;
 
 import cn.hutool.core.util.StrUtil;
 import com.jiayue.insu.inclientqn.constant.CommonStant;
 import com.jiayue.insu.inclientqn.entity.Record;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.StationService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -34,6 +36,7 @@ public class BackDataAnalysisService {
      * 解析回传数据文件
      */
     public void fileAnalysis(){
+        System.out.println("==================dsadasfvsdfgsdfgsdfsdffsdf");
         Record record = new Record();
         record.setType(CommonStant.RECORD_TYPE_BACK_DATA_FILE);
         //获取扫描文件路径

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

@@ -0,0 +1,276 @@
+package com.jiayue.insu.inclientqn.service.client;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.BackForeUsForecastData;
+import com.jiayue.insu.inclientqn.entity.BackStatData;
+import com.jiayue.insu.inclientqn.inenum.ElectricFieldTypeEnum;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.model.RequestVo;
+import com.jiayue.insu.inclientqn.service.BackStatDataService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * @description: 回传数据请求生成
+ * @author: yuanhao
+ * @createDate: 2022/6/17
+ * @version: 1.0
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+@RefreshScope
+public class BackDataGenService {
+
+    private String headerTemplate = "<! Entity={}  time='{}' !>" + CommonStant.LINE_CONSTANT;
+
+    private final BackStatDataService backStatDataService;
+
+
+    /**
+     * 生成回传实际功率
+     *
+     * @param el 场站标识
+     * @return RequestVo
+     */
+    public RequestVo genStateRealPowerData(String el, long signTime, List<BackStatData> backStatDatas) throws Exception {
+
+        RequestVo requestVo = null;
+
+        if (CollectionUtil.isNotEmpty(backStatDatas) && backStatDatas.get(0).getRealPower() != null) {
+            StringBuilder content = new StringBuilder();
+
+            String header = StrUtil.format(headerTemplate, el, DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
+            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode());
+            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealPower.getCode());
+            String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE2_CONSTANT + "实发功率值" + CommonStant.LINE_CONSTANT;
+            content.append(header);
+            content.append(labelStart);
+            content.append(title);
+
+            String template = "# 1" + CommonStant.SPACE2_CONSTANT + "{}" + CommonStant.LINE_CONSTANT;
+
+            String dataContent = StrUtil.format(template, backStatDatas.get(0).getRealPower().toString());
+
+            content.append(dataContent);
+            content.append(labelEnd);
+
+            requestVo = RequestVo.UPLOAD_STAT(el, content.toString(), signTime);
+        }
+
+
+        return requestVo;
+    }
+
+
+    /**
+     * 生成回传实际气象
+     *
+     * @param el          场站标识
+     * @param stationType 场站类型
+     * @return RequestVo
+     */
+    public RequestVo genStateRealWeatherData(String el, String stationType, long signTime, List<BackStatData> backStatDatas) throws Exception {
+
+        RequestVo requestVo = null;
+
+        if (CollectionUtil.isNotEmpty(backStatDatas)) {
+            StringBuilder content = new StringBuilder();
+
+            String header = StrUtil.format(headerTemplate, el, DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
+            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode());
+            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode());
+            content.append(header);
+            content.append(labelStart);
+            String title = "";
+            String template = "";
+            String dataContent = "";
+            BackStatData backStatData = backStatDatas.get(0);
+
+            if (stationType.equals(ElectricFieldTypeEnum.E2.name())) {
+                title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE4_CONSTANT + "风速" + CommonStant.SPACE4_CONSTANT + "风向"
+                        + CommonStant.SPACE4_CONSTANT + "温度" + CommonStant.SPACE4_CONSTANT + "湿度" + CommonStant.SPACE4_CONSTANT + "气压"
+                        + CommonStant.LINE_CONSTANT;
+
+                template = "# 1" + CommonStant.SPACE1_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT
+                        + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT
+                        + CommonStant.LINE_CONSTANT;
+
+                dataContent = StrUtil.format(template, backStatData.getWs().toString(), backStatData.getWd().toString()
+                        , backStatData.getTemperature().toString(), backStatData.getHumidity().toString(), backStatData.getPressure().toString());
+
+            } else {
+                title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE4_CONSTANT + "总辐照度" + CommonStant.SPACE4_CONSTANT + "直射辐照度"
+                        + CommonStant.SPACE4_CONSTANT + "散射辐照度" + CommonStant.SPACE4_CONSTANT + "温度" + CommonStant.SPACE4_CONSTANT + "光伏板温度"
+                        + CommonStant.SPACE4_CONSTANT + "湿度" + CommonStant.SPACE4_CONSTANT + "气压" + CommonStant.SPACE4_CONSTANT + "风速" + CommonStant.SPACE4_CONSTANT + "风向"
+                        + CommonStant.LINE_CONSTANT;
+
+                template = "# 1" + CommonStant.SPACE1_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT
+                        + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT
+                        + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT
+                        + "{}" + CommonStant.SPACE4_CONSTANT + CommonStant.LINE_CONSTANT;
+
+                dataContent = StrUtil.format(template, backStatData.getGlobalR().toString(), backStatData.getDirectR().toString()
+                        , backStatData.getDiffuseR().toString(), backStatData.getTemperature().toString(), backStatData.getCellT().toString(),
+                        backStatData.getHumidity().toString(), backStatData.getPressure().toString(), backStatData.getWs().toString(), backStatData.getWd().toString()
+                );
+
+            }
+
+
+            content.append(title);
+            content.append(dataContent);
+            content.append(labelEnd);
+
+            requestVo = RequestVo.UPLOAD_STAT(el, content.toString(), signTime);
+        }
+
+
+        return requestVo;
+    }
+
+
+    /**
+     * 生成短期上报
+     *
+     * @param el 场站标识
+     * @return RequestVo
+     */
+    public RequestVo genStateForecastPowerReport(String el, long signTime, List<BackStatData> backStatDatas) throws Exception {
+
+        RequestVo requestVo = null;
+
+        if (CollectionUtil.isNotEmpty(backStatDatas) && backStatDatas.get(0).getReportStateForecast() != null) {
+            StringBuilder content = new StringBuilder();
+
+            String header = StrUtil.format(headerTemplate, el, DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
+            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode());
+            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode());
+            String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE2_CONSTANT + "上报" + CommonStant.LINE_CONSTANT;
+            content.append(header);
+            content.append(labelStart);
+            content.append(title);
+
+            String template = "# 1" + CommonStant.SPACE2_CONSTANT + "{}" + CommonStant.LINE_CONSTANT;
+
+            String dataContent = StrUtil.format(template, backStatDatas.get(0).getReportStateForecast().toString());
+
+            content.append(dataContent);
+            content.append(labelEnd);
+
+            requestVo = RequestVo.UPLOAD_STAT(el, content.toString(), signTime);
+        }
+
+
+        return requestVo;
+    }
+
+
+    /**
+     * 生成超短期上报
+     *
+     * @param el 场站标识
+     * @return RequestVo
+     */
+    public RequestVo genStateUltraShortTermForecastReport(String el, long signTime, List<BackStatData> backStatDatas) throws Exception {
+
+        RequestVo requestVo = null;
+
+        if (CollectionUtil.isNotEmpty(backStatDatas) && backStatDatas.get(0).getReportStateForecastshort() != null) {
+            StringBuilder content = new StringBuilder();
+
+            String header = StrUtil.format(headerTemplate, el, DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
+            String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode());
+            String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode());
+            String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE2_CONSTANT + "上报" + CommonStant.LINE_CONSTANT;
+            content.append(header);
+            content.append(labelStart);
+            content.append(title);
+
+            String template = "# 1" + CommonStant.SPACE2_CONSTANT + "{}" + CommonStant.LINE_CONSTANT;
+
+            String dataContent = StrUtil.format(template, backStatDatas.get(0).getReportStateForecastshort().toString());
+
+            content.append(dataContent);
+            content.append(labelEnd);
+
+            requestVo = RequestVo.UPLOAD_STAT(el, content.toString(), signTime);
+        }
+
+
+        return requestVo;
+    }
+
+
+    public RequestVo genForeUltraShortTermForecast(String el, long signTime, List<BackForeUsForecastData> backForeUsForecastDatas) throws Exception {
+
+        RequestVo requestVo = null;
+
+        if (CollectionUtil.isNotEmpty(backForeUsForecastDatas) && backForeUsForecastDatas.size() < 16) {
+
+            boolean checkDate = true;
+
+            long step = 900000L;
+
+            long startTime = signTime + step;
+
+            long endTime = signTime + step * 15;
+
+            for (long i = startTime; i < endTime; i = i + step) {
+                long finalI = i;
+                List<BackForeUsForecastData> filter = backForeUsForecastDatas.stream().filter(b -> b.getForecastTime().equals(LocalDateTimeUtil.of(finalI))).collect(Collectors.toList());
+                if (CollectionUtil.isEmpty(filter)) {
+                    checkDate = false;
+                    break;
+                }
+            }
+            if (checkDate) {
+                Collections.sort(backForeUsForecastDatas, Comparator.comparing(BackForeUsForecastData::getForecastTime));
+                StringBuilder content = new StringBuilder();
+                String header = StrUtil.format(headerTemplate, el, DateUtil.parse(DateUtil.now()).toString("yyyy-MM-dd HH:mm:ss"));
+                String labelStart = StrUtil.format("<{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode());
+                String labelEnd = StrUtil.format("</{}>" + CommonStant.LINE_CONSTANT, QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode());
+                String title = "@" + CommonStant.SPACE1_CONSTANT + "序号" + CommonStant.SPACE4_CONSTANT + "时间"
+                        + CommonStant.SPACE4_CONSTANT + "功率预测" + CommonStant.SPACE4_CONSTANT + "预计开机容量" + CommonStant.SPACE4_CONSTANT + "风速"
+                        + CommonStant.SPACE4_CONSTANT + "风向" + CommonStant.SPACE4_CONSTANT + "温度" + CommonStant.SPACE4_CONSTANT + "湿度" + CommonStant.SPACE4_CONSTANT + "气压"
+                        + CommonStant.LINE_CONSTANT;
+                content.append(header);
+                content.append(labelStart);
+                content.append(title);
+
+                String template = "# {}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "{}" + CommonStant.SPACE4_CONSTANT + "null" + CommonStant.SPACE4_CONSTANT + "null"
+                        + CommonStant.SPACE4_CONSTANT + "null" + CommonStant.SPACE4_CONSTANT + "null" + CommonStant.SPACE4_CONSTANT + "null" + CommonStant.SPACE4_CONSTANT + "null"
+                        + CommonStant.LINE_CONSTANT;
+
+                for (int i = 0; i < backForeUsForecastDatas.size(); i++) {
+
+                    BackForeUsForecastData b = backForeUsForecastDatas.get(i);
+                    String dataContent = String.format(template, i,b.getForecastValue(),b.getForecastOpenCap());
+                    content.append(dataContent);
+                }
+
+                content.append(labelEnd);
+
+                requestVo = RequestVo.UPLOAD_FORE(el, content.toString(), signTime);
+            }
+        }
+
+
+        return requestVo;
+    }
+
+
+}

+ 4 - 1
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/CorrforeService.java → in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/CorrforeService.java

@@ -1,4 +1,4 @@
-package com.jiayue.insu.inclientqn.service;
+package com.jiayue.insu.inclientqn.service.client;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
@@ -18,6 +18,9 @@ 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.service.CorrforeStService;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.StationService;
 import com.jiayue.insu.inclientqn.util.SystermUtils;
 import com.jiayue.insu.minio.util.MinioUtilService;
 import lombok.RequiredArgsConstructor;

+ 2 - 1
in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/InitRunner.java → in-client-qn/src/main/java/com/jiayue/insu/inclientqn/service/client/InitRunner.java

@@ -1,7 +1,8 @@
-package com.jiayue.insu.inclientqn.service;
+package com.jiayue.insu.inclientqn.service.client;
 
 import com.jiayue.insu.inclientqn.entity.Station;
 import com.jiayue.insu.inclientqn.permisson.com.ComPermisson;
+import com.jiayue.insu.inclientqn.service.StationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;

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

@@ -0,0 +1,200 @@
+package com.jiayue.insu.inclientqn.service.client;
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.jiayue.insu.inclientqn.constant.CommonStant;
+import com.jiayue.insu.inclientqn.entity.BackForeUsForecastData;
+import com.jiayue.insu.inclientqn.entity.BackStatData;
+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.model.RequestVo;
+import com.jiayue.insu.inclientqn.model.ResponseVo;
+import com.jiayue.insu.inclientqn.permisson.com.ComPermisson;
+import com.jiayue.insu.inclientqn.service.BackForeUsForecastDataService;
+import com.jiayue.insu.inclientqn.service.BackStatDataService;
+import com.jiayue.insu.inclientqn.service.RecordService;
+import com.jiayue.insu.inclientqn.service.StationService;
+import com.jiayue.insu.inclientqn.service.client.BackDataGenService;
+import com.jiayue.insu.inclientqn.util.RequestUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+
+/**
+ * @description: 回传数据请求
+ * @author: yuanhao
+ * @createDate: 2022/6/17
+ * @version: 1.0
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+@RefreshScope
+public class RequestDataService {
+
+
+    private final BackDataGenService backDataGenService;
+
+    private final StationService stationService;
+
+    private final ComPermisson comPermisson;
+
+    private final RecordService recordService;
+
+    private final BackStatDataService backStatDataService;
+
+    private final BackForeUsForecastDataService backForeUsForecastDataService;
+
+    public void requestBackStatData(QNHLEnum qnhlEnum, long signTime) {
+
+        LocalDateTime localDateTime = LocalDateTimeUtil.of(signTime);
+
+        Record record = new Record();
+        record.setType(CommonStant.RECORD_TYPE_BACK_DATA);
+        record.setTime(localDateTime);
+        record.setCreateTime(LocalDateTime.now());
+        record.setContent(qnhlEnum.getCode());
+
+
+        Station station = stationService.findThis();
+
+
+        List<BackStatData> backStatDatas = backStatDataService.findBySignTime(localDateTime);
+
+        RequestVo requestVo = null;
+        try {
+
+            switch (qnhlEnum.getCode()) {
+                case "RealPower":
+                    requestVo = backDataGenService.genStateRealPowerData(station.getSignCode(), signTime, backStatDatas);
+                    break;
+                case "RealWeather":
+                    requestVo = backDataGenService.genStateRealWeatherData(station.getSignCode(), station.getType(), signTime, backStatDatas);
+                    break;
+                case "ForecastPowerReport":
+                    requestVo = backDataGenService.genStateForecastPowerReport(station.getSignCode(), signTime, backStatDatas);
+                    break;
+                case "UltraShortTermForecastReport":
+                    requestVo = backDataGenService.genStateUltraShortTermForecastReport(station.getSignCode(), signTime, backStatDatas);
+                    break;
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            record.setState(StatusEnum.BACK_DATA_GEN_FAIL.getSign());
+            record.setStateContent(StatusEnum.BACK_DATA_GEN_FAIL.getMsg());
+        }
+        //校验请求数据是否为null  和  token是否有效
+        if (requestVo != null && comPermisson.isToken(station)) {
+            JSONObject json = JSONUtil.parseObj(requestVo, true);
+            String body = json.toString();
+            SortedMap<Object, Object> sortedMap = new TreeMap<>();
+            sortedMap.put("transferType", requestVo.getTransferType());
+            sortedMap.put("date", requestVo.getDate());
+            sortedMap.put("dataType", requestVo.getDataType());
+            sortedMap.put("fileName", requestVo.getFileName());
+            sortedMap.put("data", requestVo.getData());
+            String s = JSONUtil.toJsonStr(sortedMap);
+            String response = RequestUtils.post(station.getBackurl(), body, station.getComKey());
+
+            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())) {
+
+                        record.setState(StatusEnum.SUCCESS.getSign());
+                        record.setStateContent(responseVo.getRetMsg());
+
+                        BackStatData backStatData = backStatDatas.get(0);
+
+                        switch (qnhlEnum.getCode()) {
+
+                            case "RealPower":
+                                backStatData.setBackTimeRealPower(LocalDateTime.now());
+                                break;
+                            case "RealWeather":
+                                backStatData.setBackTimeRealWeather(LocalDateTime.now());
+                                break;
+                            case "ForecastPowerReport":
+                                backStatData.setBackTimeForecastReport(LocalDateTime.now());
+                                break;
+                            case "UltraShortTermForecastReport":
+                                backStatData.setBackTimeUsForecastReport(LocalDateTime.now());
+                                break;
+                        }
+
+                        try {
+                            backStatDataService.save(backStatData);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+
+                    } else {
+                        record.setState(code);
+                        record.setStateContent(responseVo.getRetMsg());
+                    }
+                } else {
+                    record.setState(StatusEnum.CONNECT_RESPONSE_FORMAT_ERROR.getSign());
+                    record.setStateContent(StatusEnum.CONNECT_RESPONSE_FORMAT_ERROR.getMsg());
+                }
+            } else {
+
+                record.setState(StatusEnum.CONNECT_RESPONSE_CONTENT_NULL.getSign());
+                record.setStateContent(StatusEnum.CONNECT_RESPONSE_CONTENT_NULL.getMsg());
+            }
+        } else {
+            record.setState(StatusEnum.BACK_DATA_GEN_FAIL.getSign());
+            record.setStateContent("token失效或请求体为null");
+        }
+
+
+        recordService.save(record);
+    }
+
+
+
+
+
+    public void requestBackForeData(QNHLEnum qnhlEnum, long signTime) {
+
+        LocalDateTime localDateTime = LocalDateTimeUtil.of(signTime);
+
+        Record record = new Record();
+        record.setType(CommonStant.RECORD_TYPE_BACK_DATA);
+        record.setTime(localDateTime);
+        record.setCreateTime(LocalDateTime.now());
+        record.setContent(qnhlEnum.getCode());
+
+
+        Station station = stationService.findThis();
+
+        List<BackForeUsForecastData> list = backForeUsForecastDataService.findBySignTime(localDateTime);
+
+        RequestVo requestVo = null;
+        try {
+            requestVo = backDataGenService.genForeUltraShortTermForecast(station.getSignCode(), signTime, list);
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+}

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

@@ -0,0 +1,35 @@
+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.BackForeUsForecastData;
+import com.jiayue.insu.inclientqn.entity.BackStatData;
+import com.jiayue.insu.inclientqn.mapper.BackForeUsForecastDataMapper;
+import com.jiayue.insu.inclientqn.mapper.BackStatDataMapper;
+import com.jiayue.insu.inclientqn.service.BackForeUsForecastDataService;
+import com.jiayue.insu.inclientqn.service.BackStatDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 修正数据业务实现
+ *
+ * @author yh
+ * @version 1.0
+ * @since 2022/5/22 11:29
+ */
+@Service
+@Slf4j
+public class BackForeUsForecastDataServiceImpl extends ServiceImpl<BackForeUsForecastDataMapper, BackForeUsForecastData> implements BackForeUsForecastDataService {
+
+
+    @Override
+    public List<BackForeUsForecastData> findBySignTime(LocalDateTime time) {
+        LambdaQueryWrapper<BackForeUsForecastData> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(BackForeUsForecastData::getSignTime,time);
+        return this.list(lambdaQueryWrapper);
+    }
+}

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

@@ -36,4 +36,15 @@ public class RecordServiceImpl extends ServiceImpl<RecordMapper, Record> impleme
 
         return this.getOne(lambdaQueryWrapper);
     }
+
+    @Override
+    public Record findTimeAndTypeAndContentAndState(LocalDateTime time, String type, String content, String state) {
+        LambdaQueryWrapper<Record> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(Record::getTime,time);
+        lambdaQueryWrapper.eq(Record::getType,type);
+        lambdaQueryWrapper.eq(Record::getState,state);
+        lambdaQueryWrapper.eq(Record::getContent,content);
+
+        return this.getOne(lambdaQueryWrapper);
+    }
 }

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

@@ -0,0 +1,26 @@
+package com.jiayue.insu.inclientqn.util;
+
+import cn.hutool.http.HttpRequest;
+
+public class RequestUtils {
+
+    public static String post(String url,String body,String token){
+        String response = "";
+
+        try{
+            HttpRequest httpRequest = HttpRequest.post(url)
+                    .header("Content-Type", "application/json")
+                    .header("Authorization", token);
+            httpRequest.setGlobalTimeout(20000);
+            response = httpRequest
+                    .body(body)
+                    .execute().body();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+
+        return response;
+
+    }
+}

+ 25 - 3
in-client-qn/src/test/java/com/jiayue/insu/inclientqn/service/BackDataGenServiceTest.java

@@ -1,17 +1,26 @@
 package com.jiayue.insu.inclientqn.service;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.jiayue.insu.inclientqn.BaseTest;
+import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
+import com.jiayue.insu.inclientqn.service.client.BackDataGenService;
+import com.jiayue.insu.inclientqn.service.client.RequestDataService;
+import com.jiayue.insu.inclientqn.util.DateTimeUtils;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.time.LocalDateTime;
+
 public class BackDataGenServiceTest extends BaseTest {
     @Autowired
     BackDataGenService backDataGenService;
-
+    @Autowired
+    private RequestDataService requestDataService;
     @Test
     void test(){
         try{
-            backDataGenService.genStateRealPowerData("test");
+            //backDataGenService.genStateRealPowerData("test");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -21,7 +30,20 @@ public class BackDataGenServiceTest extends BaseTest {
     @Test
     void test1(){
         try{
-            backDataGenService.genStateRealWeatherData("test","E1");
+            //backDataGenService.genStateRealWeatherData("test","E1");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+    }
+
+
+    @Test
+    void test2(){
+        try{
+            long time = DateTimeUtils.get15min(DateUtil.date().getTime());
+            LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
+            requestDataService.requestBackStatData(QNHLEnum.DATA_STAT_TYPE_RealWeather,time);
         }catch (Exception e){
             e.printStackTrace();
         }

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

@@ -1,6 +1,7 @@
 package com.jiayue.insu.inclientqn.service;
 
 import com.jiayue.insu.inclientqn.BaseTest;
+import com.jiayue.insu.inclientqn.service.client.CorrforeService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;