Commit 1646d6d0 authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.修改风资源监控页面历史风向统计接口,解决只能统计出一种风向问题,完成接口冒烟测试;
2.修改风资源监控页面风电站运行状态接口,解决没有启动状态时无法查询数据问题,完成接口冒烟测试;
3.修改风资源监控页面发电功率预测接口,增加使用模拟数据生成风电实际功率,完成接口冒烟测试;
4.修改风资源历史数据处理定时任务,增加模拟真实数据匹配逻辑,完成冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent a6c5b6d9
...@@ -30,10 +30,10 @@ public class BaseLineService { ...@@ -30,10 +30,10 @@ public class BaseLineService {
public XServiceResult test(XContext context) { public XServiceResult test(XContext context) {
// BaseWeatherCloudServiceImpl bean = context.getBean(BaseWeatherCloudServiceImpl.class); // BaseWeatherCloudServiceImpl bean = context.getBean(BaseWeatherCloudServiceImpl.class);
// bean.weatherDataProcess(context, "CQ"); // bean.weatherDataProcess(context, "CQ");
// WindPredictionHistoryCloudServiceImpl bean = context.getBean(WindPredictionHistoryCloudServiceImpl.class); WindPredictionHistoryCloudServiceImpl bean = context.getBean(WindPredictionHistoryCloudServiceImpl.class);
// bean.windPredictionHistoryJob(context); bean.windPredictionHistoryJob(context);
ThirdWindPowerGenerationCloudServiceImpl bean = context.getBean(ThirdWindPowerGenerationCloudServiceImpl.class); // ThirdWindPowerGenerationCloudServiceImpl bean = context.getBean(ThirdWindPowerGenerationCloudServiceImpl.class);
bean.thirdWindPowerGenerationJob(context); // bean.thirdWindPowerGenerationJob(context);
return XServiceResult.OK; return XServiceResult.OK;
} }
......
...@@ -4,9 +4,12 @@ import cn.hutool.core.collection.CollUtil; ...@@ -4,9 +4,12 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.cloud.base.service.IWindPredictionHistoryCloudService; import pps.cloud.base.service.IWindPredictionHistoryCloudService;
import pps.core.base.entity.ThirdWindPowerGenerationEnt;
import pps.core.base.entity.WindPredictionFutureEnt; import pps.core.base.entity.WindPredictionFutureEnt;
import pps.core.base.entity.WindPredictionHistoryView; import pps.core.base.entity.WindPredictionHistoryView;
import pps.core.base.mapper.ThirdWindPowerGenerationMapper;
import pps.core.base.mapper.WindPredictionFutureMapper; import pps.core.base.mapper.WindPredictionFutureMapper;
import pps.core.base.mapper.WindPredictionHistoryViewMapper; import pps.core.base.mapper.WindPredictionHistoryViewMapper;
import pps.core.common.utils.BaseUtils; import pps.core.common.utils.BaseUtils;
...@@ -14,8 +17,10 @@ import xstartup.annotation.XService; ...@@ -14,8 +17,10 @@ import xstartup.annotation.XService;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.data.XServiceResult; import xstartup.data.XServiceResult;
import java.util.ArrayList; import java.math.BigDecimal;
import java.util.List; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* 风资源训练集数据Cloud模块 * 风资源训练集数据Cloud模块
...@@ -42,11 +47,29 @@ public class WindPredictionHistoryCloudServiceImpl implements IWindPredictionHis ...@@ -42,11 +47,29 @@ public class WindPredictionHistoryCloudServiceImpl implements IWindPredictionHis
.between(WindPredictionFutureEnt::getDataTime, startTime, endTime) .between(WindPredictionFutureEnt::getDataTime, startTime, endTime)
); );
if (CollUtil.isNotEmpty(list)) { if (CollUtil.isNotEmpty(list)) {
WindPredictionHistoryViewMapper viewMapper = context.getBean(WindPredictionHistoryViewMapper.class); //查实际发电数据
ThirdWindPowerGenerationMapper generationMapper = context.getBean(ThirdWindPowerGenerationMapper.class);
List<ThirdWindPowerGenerationEnt> generationList = generationMapper.selectList(new QueryWrapper<ThirdWindPowerGenerationEnt>()
.select("station_id", "collect_time", "MAX( actual_power ) AS actual_power",
"MAX( actual_generation ) AS actual_generation", "MAX( actual_wind_speed ) AS actual_wind_speed",
"MAX( actual_wind_direction ) AS actual_wind_direction")
.lambda()
.between(ThirdWindPowerGenerationEnt::getCollectTime, startTime, endTime)
.groupBy(ThirdWindPowerGenerationEnt::getStationId, ThirdWindPowerGenerationEnt::getCollectTime)
);
Map<String, Map<Date, ThirdWindPowerGenerationEnt>> collect;
if (CollUtil.isEmpty(generationList)) {
collect = Collections.emptyMap();
} else {
collect = generationList.stream()
.collect(Collectors.groupingBy(ThirdWindPowerGenerationEnt::getStationId, Collectors.toMap(ThirdWindPowerGenerationEnt::getCollectTime, Function.identity())));
}
//数据处理
List<WindPredictionHistoryView> historyList = this.dataProcess(list, collect);
//按时间范围删除数据 //按时间范围删除数据
WindPredictionHistoryViewMapper viewMapper = context.getBean(WindPredictionHistoryViewMapper.class);
viewMapper.deleteByTimeRange(startTime, endTime); viewMapper.deleteByTimeRange(startTime, endTime);
//todo 数据处理,匹配实际发电量和实际风速 //todo 数据处理,匹配实际发电量和实际风速
List<WindPredictionHistoryView> historyList = this.dataProcess(list);
if (historyList.size() > BaseUtils.BATCH_SIZE) { if (historyList.size() > BaseUtils.BATCH_SIZE) {
List<List<WindPredictionHistoryView>> subList = BaseUtils.getSubList(historyList); List<List<WindPredictionHistoryView>> subList = BaseUtils.getSubList(historyList);
subList.forEach(viewMapper::batchInsert); subList.forEach(viewMapper::batchInsert);
...@@ -64,24 +87,41 @@ public class WindPredictionHistoryCloudServiceImpl implements IWindPredictionHis ...@@ -64,24 +87,41 @@ public class WindPredictionHistoryCloudServiceImpl implements IWindPredictionHis
* todo 后续增加匹配实际发电量和实际风速逻辑 * todo 后续增加匹配实际发电量和实际风速逻辑
* *
* @param list 列表 * @param list 列表
* @param collect 收集
* @return {@link List }<{@link WindPredictionHistoryView }> * @return {@link List }<{@link WindPredictionHistoryView }>
*/ */
private List<WindPredictionHistoryView> dataProcess(List<WindPredictionFutureEnt> list) { private List<WindPredictionHistoryView> dataProcess(List<WindPredictionFutureEnt> list, Map<String, Map<Date, ThirdWindPowerGenerationEnt>> collect) {
List<WindPredictionHistoryView> historyList = new ArrayList<>(list.size()); List<WindPredictionHistoryView> historyList = new ArrayList<>(list.size());
Map<Date, ThirdWindPowerGenerationEnt> map;
ThirdWindPowerGenerationEnt ent;
for (WindPredictionFutureEnt future : list) { for (WindPredictionFutureEnt future : list) {
historyList.add(WindPredictionHistoryView.builder() WindPredictionHistoryView view = new WindPredictionHistoryView();
.stationId(future.getStationId()) view.setStationId(future.getStationId());
.dataTime(future.getDataTime()) view.setDataTime(future.getDataTime());
.windDirection(future.getWindDirection()) view.setWindDirection(future.getWindDirection());
.windSpeed(future.getWindSpeed()) view.setWindSpeed(future.getWindSpeed());
.airTemperature(future.getAirTemperature()) view.setAirTemperature(future.getAirTemperature());
.humidity(future.getHumidity()) view.setHumidity(future.getHumidity());
.pressure(future.getPressure()) view.setPressure(future.getPressure());
.actualWindDirection(0) view.setPredictedPower(future.getPredictedPower());
.actualWindSpeed(future.getActualWindSpeed()) //匹配真实数据
.actualPower(future.getActualPower()) boolean flag = true;
.predictedPower(future.getPredictedPower()) if (collect.containsKey(future.getStationId())) {
.build()); map = collect.get(future.getStationId());
if (map.containsKey(future.getDataTime())) {
flag = false;
ent = map.get(future.getDataTime());
view.setActualPower(ent.getActualPower());
view.setActualWindSpeed(ent.getActualWindSpeed());
view.setActualWindDirection(ent.getActualWindDirection());
}
}
if (flag) {
view.setActualPower(BigDecimal.ZERO);
view.setActualWindSpeed(BigDecimal.ZERO);
view.setActualWindDirection(360);
}
historyList.add(view);
} }
return historyList; return historyList;
} }
......
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