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;
import cn.hutool.core.io.NioUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
......@@ -526,19 +525,19 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
continue;
}
List<DailyData> dailyDataList = cityDataMap.get(cityCode);
List<BaseWindTurbineView> turbineList = turbineMap.get(cityCode);
List<BaseWindTurbineView> plantViewList = turbineMap.get(cityCode);
//删除数据
for (BaseWindTurbineView turbine : turbineList) {
deleteList.add(turbine.getId());
for (BaseWindTurbineView plantView : plantViewList) {
deleteList.add(plantView.getId());
}
//遍历预测数据列表
for (DailyData dailyData : dailyDataList) {
for (BaseWindTurbineView turbine : turbineList) {
for (BaseWindTurbineView plant : plantViewList) {
List<WindPredictionFutureView> allList = new ArrayList<>(32);
List<WindPredictionFutureView> objList = new ArrayList<>(16);
DateTime dateTime = DateTime.of(dailyData.getDateTime());
int hours = 0;
String turbineId = turbine.getId();
String plantId = plant.getId();
DateTime date;
for (int i = 0; i < 8; i++) {
//判断小时数与查到的小时数,如果查到的小时数小,判断为第二天
......@@ -556,9 +555,9 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
}
}
}
WindPredictionFutureView build = WindPredictionFutureView.builder()
.stationId(turbineId)
.dataTime(dateTime)
WindPredictionFutureView dao = WindPredictionFutureView.builder()
.stationId(plantId)
.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)
.windSpeed(new BigDecimal(CharSequenceUtil.replace(dailyData.getWindSpeedArray().get(i), "m/s", "")))
.airTemperature(new BigDecimal(CharSequenceUtil.replace(dailyData.getTemperatureArray().get(i), "℃", "")))
......@@ -566,13 +565,13 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
.pressure(new BigDecimal(CharSequenceUtil.replace(dailyData.getPressureArray().get(i), "hPa", "")))
.build();
// 5.执行SQL
allList.add(build);
allList.add(dao);
WindPredictionFutureView isExit = objList.stream()
.filter(item -> item.getDataTime().compareTo(build.getDataTime()) == 0)
.filter(item -> DateUtil.compare(item.getDataTime(), dao.getDataTime()) == 0)
.findFirst()
.orElse(null);
if (ObjectUtil.isNull(isExit)) {
objList.add(build);
if (Objects.isNull(isExit)) {
objList.add(dao);
}
}
// 原站点时间结构为: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 {
for (int i = 0; i < objList.size() - 1; i++) {
for (int y = 1; y < 3; y++) {
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);
BigDecimal valueOf = BigDecimal.valueOf(0.3 * y);
WindPredictionFutureView build = WindPredictionFutureView.builder()
.stationId(turbineId)
.dataTime(dateTime)
WindPredictionFutureView dao = WindPredictionFutureView.builder()
.stationId(plantId)
.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())
.windSpeed(this.compute(dataEnt.getWindSpeed(), nextData.getWindSpeed(), valueOf))
.airTemperature(this.compute(dataEnt.getAirTemperature(), nextData.getAirTemperature(), valueOf))
......@@ -593,19 +604,21 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
.pressure(this.compute(dataEnt.getPressure(), nextData.getPressure(), valueOf))
.build();
// 5.执行SQL
allList.add(build);
allList.add(dao);
}
}
//入库
allList.sort(Comparator.comparing(WindPredictionFutureView::getDataTime));
for (int i = 0; i < allList.size(); i++) {
WindPredictionFutureView item = allList.get(i);
List<WindPredictionFutureView> sortList = allList.stream()
.sorted(Comparator.comparing(WindPredictionFutureView::getDataTime))
.collect(Collectors.toList());
for (int i = 0; i < sortList.size(); i++) {
WindPredictionFutureView item = sortList.get(i);
batchList.add(item);
if (i < allList.size() - 1) {
if (i < sortList.size() - 1) {
for (int y = 0; y < BusinessConstant.TIME_LIST.size(); y++) {
WindPredictionFutureView dao = XCopyUtils.copyNewObject(item);
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));
dao.setAirTemperature(this.compute(Objects.isNull(item.getAirTemperature()) ? BigDecimal.ZERO : item.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