Commit 6947e2c6 authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.基础信息配置模块创建风资源历史数据表和风资源预测数据表,同时生成对应代码;
2.修改天气数据获取处理定时任务,修改光伏预测数据插入逻辑,同时增加风资源数据插入逻辑,完成功能测试;
3.开发风资源预测中期10天预测接口,完成接口冒烟测试并添加线上接口文档同时生成接口用例;
4.开发风资源预测中期3天预测接口,完成接口冒烟测试并添加线上接口文档同时生成接口用例;
5.开发风资源预测超短期4小时预测接口,完成接口冒烟测试并添加线上接口文档同时生成接口用例;
6.修改天气数据获取定时任务,解决风资源数据入库重复并且时间没有补齐的问题;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent c60d355c
...@@ -8,7 +8,6 @@ import cn.hutool.core.io.IoUtil; ...@@ -8,7 +8,6 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.NioUtil; import cn.hutool.core.io.NioUtil;
import cn.hutool.core.io.file.FileReader; import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
...@@ -526,19 +525,19 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -526,19 +525,19 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
continue; continue;
} }
List<DailyData> dailyDataList = cityDataMap.get(cityCode); List<DailyData> dailyDataList = cityDataMap.get(cityCode);
List<BaseWindTurbineView> turbineList = turbineMap.get(cityCode); List<BaseWindTurbineView> plantViewList = turbineMap.get(cityCode);
//删除数据 //删除数据
for (BaseWindTurbineView turbine : turbineList) { for (BaseWindTurbineView plantView : plantViewList) {
deleteList.add(turbine.getId()); deleteList.add(plantView.getId());
} }
//遍历预测数据列表 //遍历预测数据列表
for (DailyData dailyData : dailyDataList) { for (DailyData dailyData : dailyDataList) {
for (BaseWindTurbineView turbine : turbineList) { for (BaseWindTurbineView plant : plantViewList) {
List<WindPredictionFutureView> allList = new ArrayList<>(32); List<WindPredictionFutureView> allList = new ArrayList<>(32);
List<WindPredictionFutureView> objList = new ArrayList<>(16); List<WindPredictionFutureView> objList = new ArrayList<>(16);
DateTime dateTime = DateTime.of(dailyData.getDateTime()); DateTime dateTime = DateTime.of(dailyData.getDateTime());
int hours = 0; int hours = 0;
String turbineId = turbine.getId(); String plantId = plant.getId();
DateTime date; DateTime date;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
//判断小时数与查到的小时数,如果查到的小时数小,判断为第二天 //判断小时数与查到的小时数,如果查到的小时数小,判断为第二天
...@@ -556,9 +555,9 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -556,9 +555,9 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
} }
} }
} }
WindPredictionFutureView build = WindPredictionFutureView.builder() WindPredictionFutureView dao = WindPredictionFutureView.builder()
.stationId(turbineId) .stationId(plantId)
.dataTime(dateTime) .dataTime(DateUtil.parse(String.valueOf(dateTime.year()) + '-' + this.int2Str(dateTime.month() + 1) + '-' + this.int2Str(dateTime.dayOfMonth()) + ' ' + this.int2Str(hours) + ':' + BusinessConstant.START_OF_DAY_TIME))
.windDirection(wind) .windDirection(wind)
.windSpeed(new BigDecimal(CharSequenceUtil.replace(dailyData.getWindSpeedArray().get(i), "m/s", ""))) .windSpeed(new BigDecimal(CharSequenceUtil.replace(dailyData.getWindSpeedArray().get(i), "m/s", "")))
.airTemperature(new BigDecimal(CharSequenceUtil.replace(dailyData.getTemperatureArray().get(i), "℃", ""))) .airTemperature(new BigDecimal(CharSequenceUtil.replace(dailyData.getTemperatureArray().get(i), "℃", "")))
...@@ -566,13 +565,13 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -566,13 +565,13 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
.pressure(new BigDecimal(CharSequenceUtil.replace(dailyData.getPressureArray().get(i), "hPa", ""))) .pressure(new BigDecimal(CharSequenceUtil.replace(dailyData.getPressureArray().get(i), "hPa", "")))
.build(); .build();
// 5.执行SQL // 5.执行SQL
allList.add(build); allList.add(dao);
WindPredictionFutureView isExit = objList.stream() WindPredictionFutureView isExit = objList.stream()
.filter(item -> item.getDataTime().compareTo(build.getDataTime()) == 0) .filter(item -> DateUtil.compare(item.getDataTime(), dao.getDataTime()) == 0)
.findFirst() .findFirst()
.orElse(null); .orElse(null);
if (ObjectUtil.isNull(isExit)) { if (Objects.isNull(isExit)) {
objList.add(build); objList.add(dao);
} }
} }
// 原站点时间结构为:08:00 11:00 14:00 17:00 20:00 23:00 02:00 05:00 // 原站点时间结构为:08:00 11:00 14:00 17:00 20:00 23:00 02:00 05:00
...@@ -580,12 +579,24 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -580,12 +579,24 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
for (int i = 0; i < objList.size() - 1; i++) { for (int i = 0; i < objList.size() - 1; i++) {
for (int y = 1; y < 3; y++) { for (int y = 1; y < 3; y++) {
WindPredictionFutureView dataEnt = objList.get(i); WindPredictionFutureView dataEnt = objList.get(i);
date = DateUtil.beginOfSecond(dataEnt.getDataTime()); date = DateUtil.date(dataEnt.getDataTime());
String hourString;
Integer hourTime = date.hour(true);
if (hourTime.equals(23)) {
date = DateUtil.offsetDay(date, 1);
hourString = "0" + (y - 1);
} else {
if ((hourTime + y) < 10) {
hourString = "0" + (hourTime + y);
} else {
hourString = String.valueOf(hourTime + y);
}
}
WindPredictionFutureView nextData = objList.get(i + 1); WindPredictionFutureView nextData = objList.get(i + 1);
BigDecimal valueOf = BigDecimal.valueOf(0.3 * y); BigDecimal valueOf = BigDecimal.valueOf(0.3 * y);
WindPredictionFutureView build = WindPredictionFutureView.builder() WindPredictionFutureView dao = WindPredictionFutureView.builder()
.stationId(turbineId) .stationId(plantId)
.dataTime(dateTime) .dataTime(DateUtil.parse(String.valueOf(date.year()) + '-' + this.int2Str(date.month() + 1) + '-' + this.int2Str(date.dayOfMonth()) + ' ' + hourString + ':' + BusinessConstant.START_OF_DAY_TIME))
.windDirection(dataEnt.getWindDirection()) .windDirection(dataEnt.getWindDirection())
.windSpeed(this.compute(dataEnt.getWindSpeed(), nextData.getWindSpeed(), valueOf)) .windSpeed(this.compute(dataEnt.getWindSpeed(), nextData.getWindSpeed(), valueOf))
.airTemperature(this.compute(dataEnt.getAirTemperature(), nextData.getAirTemperature(), valueOf)) .airTemperature(this.compute(dataEnt.getAirTemperature(), nextData.getAirTemperature(), valueOf))
...@@ -593,19 +604,21 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -593,19 +604,21 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
.pressure(this.compute(dataEnt.getPressure(), nextData.getPressure(), valueOf)) .pressure(this.compute(dataEnt.getPressure(), nextData.getPressure(), valueOf))
.build(); .build();
// 5.执行SQL // 5.执行SQL
allList.add(build); allList.add(dao);
} }
} }
//入库 //入库
allList.sort(Comparator.comparing(WindPredictionFutureView::getDataTime)); List<WindPredictionFutureView> sortList = allList.stream()
for (int i = 0; i < allList.size(); i++) { .sorted(Comparator.comparing(WindPredictionFutureView::getDataTime))
WindPredictionFutureView item = allList.get(i); .collect(Collectors.toList());
for (int i = 0; i < sortList.size(); i++) {
WindPredictionFutureView item = sortList.get(i);
batchList.add(item); batchList.add(item);
if (i < allList.size() - 1) { if (i < sortList.size() - 1) {
for (int y = 0; y < BusinessConstant.TIME_LIST.size(); y++) { for (int y = 0; y < BusinessConstant.TIME_LIST.size(); y++) {
WindPredictionFutureView dao = XCopyUtils.copyNewObject(item); WindPredictionFutureView dao = XCopyUtils.copyNewObject(item);
dao.setDataTime(DateUtil.parse(DateUtil.format(dao.getDataTime(), BusinessConstant.DATE_FORMAT_HOUR2) + ':' + BusinessConstant.TIME_LIST.get(y))); dao.setDataTime(DateUtil.parse(DateUtil.format(dao.getDataTime(), BusinessConstant.DATE_FORMAT_HOUR2) + ':' + BusinessConstant.TIME_LIST.get(y)));
WindPredictionFutureView nextData = allList.get(i + 1); WindPredictionFutureView nextData = sortList.get(i + 1);
BigDecimal valueOf = BigDecimal.valueOf(0.3 * (y + 1)); BigDecimal valueOf = BigDecimal.valueOf(0.3 * (y + 1));
dao.setAirTemperature(this.compute(Objects.isNull(item.getAirTemperature()) ? BigDecimal.ZERO : item.getAirTemperature(), dao.setAirTemperature(this.compute(Objects.isNull(item.getAirTemperature()) ? BigDecimal.ZERO : item.getAirTemperature(),
Objects.isNull(nextData.getAirTemperature()) ? BigDecimal.ZERO : nextData.getAirTemperature(), Objects.isNull(nextData.getAirTemperature()) ? BigDecimal.ZERO : nextData.getAirTemperature(),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment