Просмотр исходного кода

预测发电量定时任务修改,增加手动生成预测发电量功能

fanxiaoyu 4 месяцев назад
Родитель
Сommit
abf63f1b38

+ 16 - 0
cpp-admin/src/main/java/com/cpp/web/controller/dayPowerGeneration/DayPowerGenerationController.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
@@ -18,6 +19,7 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 @RequestMapping("/dayPowerGeneration")
 @Api(value = "dayPowerGeneration", tags = "cpp_day_power_generation管理")
+@Slf4j
 public class DayPowerGenerationController {
 
     private final DayPowerGenerationService dayPowerGenerationService;
@@ -69,4 +71,18 @@ public class DayPowerGenerationController {
         private BigDecimal forecastPowerGenerationYd;
 
     }
+
+    /**
+     *  手动生成预测发电量
+     * @return
+     */
+    @ApiOperation(value = "手动生成预测发电量", notes = "手动生成预测发电量")
+    @GetMapping(value = "/generatePower")
+    public R generatePower(String stationCode,Long genDate){
+        log.info("---------------------------------------------开始手动生成预测发电量--------------------------------------------------------------------");
+        String yd = dayPowerGenerationService.generateYdPower(stationCode,genDate);
+        String zd = dayPowerGenerationService.generateZdPower(stationCode,genDate);
+        log.info("---------------------------------------------手动生成预测发电量成功--------------------------------------------------------------------");
+        return R.ok("中心预测:"+yd + " 站端上传:" + zd);
+    }
 }

+ 5 - 5
cpp-admin/src/main/java/com/cpp/web/job/ScheduledJob.java

@@ -163,13 +163,13 @@ public class ScheduledJob implements ApplicationRunner {
     /**
      *  云端发电量
      */
-//    @Scheduled(cron = "0 0/1 * * * ?")
+    @Scheduled(cron = "0 10 * * * ?")
     public void generateYdPowerGeneration(){
         log.info("-------------------------开始执行计算云端发电量定时任务-------------------------");
         List<ElectricField> electricFieldList = electricFieldService.list();
         if (electricFieldList.size() > 0){
             for (ElectricField electricField : electricFieldList){
-                dayPowerGenerationService.generateYdPower(electricField.getStationCode());
+                dayPowerGenerationService.generateYdPower(electricField.getStationCode(),null);
             }
             log.info("-------------------------计算云端发电量定时任务执行完成-------------------------");
         }
@@ -177,15 +177,15 @@ public class ScheduledJob implements ApplicationRunner {
 
 
     /**
-     *  端发电量
+     *  端发电量
      */
-//    @Scheduled(cron = "0 0/1 * * * ?")
+    @Scheduled(cron = "0 10 8,9,10 * * ?")
     public void generateZdPowerGeneration(){
         log.info("-------------------------开始执行计算站端上传发电量定时任务-------------------------");
         List<ElectricField> electricFieldList = electricFieldService.list();
         if (electricFieldList.size() > 0){
             for (ElectricField electricField : electricFieldList){
-                dayPowerGenerationService.generateZdPower(electricField.getStationCode());
+                dayPowerGenerationService.generateZdPower(electricField.getStationCode(),null);
             }
             log.info("-------------------------计算站端上传发电量定时任务执行完成-------------------------");
         }

+ 2 - 2
cpp-admin/src/main/java/com/cpp/web/service/powerGeneation/DayPowerGenerationService.java

@@ -17,9 +17,9 @@ public interface DayPowerGenerationService extends IService<DayPowerGeneration>
 
     DayPowerGeneration findByStationCodeAndGenDate(String stationCode, Date genDate);
 
-    void generateYdPower(String stationCode);
+    String generateYdPower(String stationCode,Long genDate);
 
-    void generateZdPower(String stationCode);
+    String generateZdPower(String stationCode,Long genDate);
 
     List<DayPowerGeneration> findByStationCodeAndGenDateAndPredictionDataSource(String StationCode,String genDate,String predictionDataSource);
 }

+ 63 - 32
cpp-admin/src/main/java/com/cpp/web/service/powerGeneation/impl/DayPowerGenerationServiceImpl.java

@@ -9,20 +9,16 @@ import com.cpp.common.utils.DictUtils;
 import com.cpp.web.domain.BaseCppEntity;
 import com.cpp.web.domain.accuracy.AccuracyPassRate;
 import com.cpp.web.domain.cloud.ForecastPowerShortTermCloud;
-import com.cpp.web.domain.enums.DataSourcesEnum;
 import com.cpp.web.domain.powerGeneration.DayPowerGeneration;
 import com.cpp.web.domain.station.ForecastPowerShortTermRegulation;
-import com.cpp.web.domain.station.ForecastPowerShortTermStation;
-import com.cpp.web.dto.TableColumn;
 import com.cpp.web.mapper.powerGeneration.DayPowerGenerationMapper;
 import com.cpp.web.service.accuracy.AccuracyPassRateService;
 import com.cpp.web.service.cloud.ForecastPowerShortTermCloudService;
 import com.cpp.web.service.powerGeneation.DayPowerGenerationService;
 import com.cpp.web.service.station.ForecastPowerShortTermRegulationService;
-import com.cpp.web.service.station.ForecastPowerShortTermStationService;
 import com.cpp.web.utils.DateTimeUtil;
-import lombok.Data;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,19 +38,22 @@ import java.util.stream.Collectors;
  */
 @Service
 @RequiredArgsConstructor
+@Slf4j
 public class DayPowerGenerationServiceImpl extends ServiceImpl<DayPowerGenerationMapper, DayPowerGeneration> implements DayPowerGenerationService {
 
     private final DayPowerGenerationMapper dayPowerGenerationMapper;
 
     private final ForecastPowerShortTermCloudService forecastPowerShortTermCloudService;
 
-    private final ForecastPowerShortTermStationService forecastPowerShortTermStationService;
-
     private final AccuracyPassRateService accuracyPassRateService;
 
     private final ForecastPowerShortTermRegulationService forecastPowerShortTermRegulationService;
     private final String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
 
+    private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+    private final Long oneDay = 86400000L;
+
     @Override
     public DayPowerGeneration findByStationCodeAndGenDate(String stationCode, Date genDate) {
         QueryWrapper<DayPowerGeneration> wrapper = new QueryWrapper<>();
@@ -73,11 +72,12 @@ public class DayPowerGenerationServiceImpl extends ServiceImpl<DayPowerGeneratio
      * @param stationCode
      */
     @Override
-    public void generateYdPower(String stationCode) {
+    public String generateYdPower(String stationCode, Long genDate) {
 
-        Date accuracyStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() - 30 * 24 * 60 * 60 * 1000L);
-        Date accuracyEndTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() - 24 * 60 * 60 * 1000L);
+        String result = "";
 
+        Date accuracyStartTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() - 30 * oneDay);
+        Date accuracyEndTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() - oneDay);
 
         String forecastModel = "";
 
@@ -101,30 +101,43 @@ public class DayPowerGenerationServiceImpl extends ServiceImpl<DayPowerGeneratio
             // 查询默认模型数据
             String defaultModel = null;
             for (SysDictData sysDictData : DictUtils.getDictCache("forecast_model")) {
-               if (null != sysDictData.getRemark() && sysDictData.getRemark().equals("default")){
-                   defaultModel = sysDictData.getDictValue();
-               }
+                if (null != sysDictData.getRemark() && sysDictData.getRemark().equals("default")) {
+                    defaultModel = sysDictData.getDictValue();
+                }
             }
             // 获取模型
-            forecastModel = maxAverageEntry.isPresent() ? maxAverageEntry.get().getKey() : defaultModel ;
+            forecastModel = maxAverageEntry.isPresent() ? maxAverageEntry.get().getKey() : defaultModel;
+            log.info("【"+stationCode + "】预测准确率最优模型为:" + forecastModel);
+        }
+        Date startTime = null;
+        List<DayPowerGeneration> dayPowerGenerationList = null;
+        if (null != genDate) {
+            startTime = DateTimeUtil.getDayStartTime(genDate + oneDay);
+            dayPowerGenerationList = findByGenDate(simpleDateFormat.format(new Date(genDate)), stationCode, "云端下发");
+        } else {
+            startTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() + oneDay);
+            dayPowerGenerationList = findByGenDate(dateFormat, stationCode, "云端下发");
         }
 
-        Date startTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() + 24 * 60 * 60 * 1000L);
-
-        Date endTime = DateTimeUtil.getDayLastTime(startTime.getTime() + 10 * 24 * 60 * 60 * 1000L - 1);
-
-        List<DayPowerGeneration> dayPowerGenerationList = findByGenDate(dateFormat, stationCode, "云端下发");
+        Date endTime = DateTimeUtil.getDayLastTime(startTime.getTime() + 10 * oneDay - 1);
 
         if (dayPowerGenerationList.size() > 0) {
-            return;
+            result = "已有发电量,不再生成!";
+            log.info("【"+stationCode + "】已有中心预测发电量!不再进行计算!");
+            return result;
         }
         // 云端预测
-        List<ForecastPowerShortTermCloud> forecastPowerShortTermCloudList = forecastPowerShortTermCloudService.findByForecastTimeBetweenAndStationCode(startTime, endTime, stationCode, "".equals(forecastModel) ? "JY" : forecastModel);
-        if (forecastPowerShortTermCloudList.size() > 0){
+        List<ForecastPowerShortTermCloud> forecastPowerShortTermCloudList = forecastPowerShortTermCloudService.findByForecastTimeBetweenAndStationCode(startTime, endTime, stationCode, forecastModel);
+        if (forecastPowerShortTermCloudList.size() > 0) {
             List<DayPowerGeneration> ydList = calculator(forecastPowerShortTermCloudList, "yd", startTime, stationCode);
             this.saveBatch(ydList);
+            result = "生成中心预测发电量成功!";
+            log.info("【"+stationCode + "】中心预测发电量计算成功!");
+        } else {
+            result = "无中心预测下发短期数据,预测发电量生成失败!";
+            log.error("【"+stationCode + "】无中心预测下发短期数据,预测发电量生成失败!");
         }
-       ;
+        return result;
     }
 
     /**
@@ -133,23 +146,41 @@ public class DayPowerGenerationServiceImpl extends ServiceImpl<DayPowerGeneratio
      * @param stationCode
      */
     @Override
-    public void generateZdPower(String stationCode) {
-
-        Date genDate = DateTimeUtil.getDayStartTime(new Date().getTime());
+    public String generateZdPower(String stationCode, Long time) {
+        String result = "";
+
+        Date genDate = null;
+        Date startTime = null;
+        List<DayPowerGeneration> dayPowerGenerationList = null;
+        if (null != time) {
+            genDate = DateTimeUtil.getDayStartTime(time);
+            startTime = DateTimeUtil.getDayStartTime(time + oneDay);
+            dayPowerGenerationList = findByGenDate(simpleDateFormat.format(new Date(time)), stationCode, "站端上传");
+        } else {
+            genDate = DateTimeUtil.getDayStartTime(new Date().getTime());
+            startTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() + oneDay);
+            dayPowerGenerationList = findByGenDate(dateFormat, stationCode, "站端上传");
+        }
 
-        Date startTime = DateTimeUtil.getDayStartTime(System.currentTimeMillis() + 24 * 60 * 60 * 1000L);
+        Date endTime = DateTimeUtil.getDayLastTime(startTime.getTime() + 10 * oneDay - 1);
 
-        Date endTime = DateTimeUtil.getDayLastTime(startTime.getTime() + 10 * 24 * 60 * 60 * 1000L - 1);
 
-        List<DayPowerGeneration> dayPowerGenerationList = findByGenDate(dateFormat, stationCode, "站端上传");
         if (dayPowerGenerationList.size() > 0) {
-            return;
+            result = "已有站端上传发电量,不再生成!";
+            log.info("【"+stationCode + "】已有站端上传发电量!不再进行计算!");
+            return result;
         }
         List<ForecastPowerShortTermRegulation> forecastPowerShortTermRegulationList = forecastPowerShortTermRegulationService.findByForecastTimeBetweenAndGenDateAndHowLongAgo(genDate, startTime, endTime, stationCode);
         if (forecastPowerShortTermRegulationList.size() > 0) {
             List<DayPowerGeneration> zdList = calculator(forecastPowerShortTermRegulationList, "zd", startTime, stationCode);
             this.saveBatch(zdList);
+            result = "生成预测发电量成功!";
+            log.info("【"+stationCode + "】站端上传发电量计算成功!");
+        } else {
+            result = "无站端上传调控后短期数据,预测发电量生成失败!";
+            log.info("【"+stationCode + "】无站端上传调控后短期数据,预测发电量计算失败!");
         }
+        return result;
     }
 
 
@@ -192,7 +223,7 @@ public class DayPowerGenerationServiceImpl extends ServiceImpl<DayPowerGeneratio
             sumValue = BigDecimal.ZERO;
             date = DateUtils.addDays(startTime, i - 1);
             dateStr = simpleDateFormat.format(date);
-            datas = findSendData(startTime.getTime() + 1000L * 60 * 60 * 24 * (i - 1), startTime.getTime() + 1000L * 60 * 60 * 24 * i - 1000L * 60 * 15, list);
+            datas = findSendData(startTime.getTime() + oneDay * (i - 1), startTime.getTime() + oneDay * i - 1000L * 60 * 15, list);
             if (datas.length > 0) {
                 BigDecimal value;
                 for (int j = 0; j < datas.length; j++) {
@@ -203,7 +234,7 @@ public class DayPowerGenerationServiceImpl extends ServiceImpl<DayPowerGeneratio
                     }
                 }
             }
-            dayPowerGeneration.setGenDate(simpleDateFormat.format(new Date()));
+            dayPowerGeneration.setGenDate(simpleDateFormat.format(new Date(startTime.getTime() - oneDay)));
             dayPowerGeneration.setForecastPowerGeneration(sumValue);
             dayPowerGeneration.setForecastHowLongAgo(i);
             dayPowerGeneration.setTime(dateStr);

+ 21 - 0
cpp-ui/src/views/statistics/predictedPowerGeneration/index.vue

@@ -29,6 +29,11 @@
                    @click="queryByStationCode">查询
         </el-button>
       </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="mini" style="margin-left: 5px" icon="el-icon-document-add"
+                   @click="generatePower">生成
+        </el-button>
+      </el-form-item>
     </el-form>
     <div style="padding-top: 20px">
       <el-row :gutter="24">
@@ -137,6 +142,22 @@ export default {
         this.contrastDraw(times, zd, yd)
       })
     },
+    generatePower(){
+      let genDate = this.dateTime
+      const param = {
+        "stationCode": this.stationCode,
+        "genDate": genDate,
+        "predictionDataSource": this.predictionDataSource
+      }
+      this.$axios.get('dayPowerGeneration/generatePower',{params:param}).then(respose => {
+        if (respose.data.includes("成功")){
+          this.$message.success(respose.data)
+        }else {
+          this.$message.warning(respose.data)
+        }
+        this.queryByStationCode()
+      })
+    },
     contrastDraw(times, zd, yd) {
       this.loading = true