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