Commit e89342cc authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.修改天气数据抽取定时任务,解决部分历史数据丢失问题;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 67a5077c
......@@ -152,11 +152,12 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
List<WeatherDeleteCondition> deleteList = new ArrayList<>(32);
List<ThirdWeatherDataView> weatherDataViewList = new ArrayList<>(2048);
//todo 老表逻辑(后期删除):后续可能替换
List<PlantPredictedPowerDataEnt> oldDeleteList = new ArrayList<>(32);
List<String> oldDeleteList = new ArrayList<>(32);
List<PlantPredictedPowerDataEnt> oldBatchList = new ArrayList<>(13312);
//取未读邮件
Store store = null;
Folder folder = null;
DateTime startTime = date;
try {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
......@@ -187,6 +188,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
logger.info("------ weatherApiDataProcess weather15mDataList isEmpty ------");
return XServiceResult.OK;
}
int count = 0;
for (Weather15mData weather15mData : weather15mDataList) {
//取天气坐标
List<String> split = CharSequenceUtil.split(weather15mData.getLocation().getQuery(), ':');
......@@ -197,8 +199,12 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
//获取15天明细数据
List<ThirdApiWeatherData> data = weather15mData.getData();
//获取开始结束时间,添加删除条件
Date beginTime = DateUtil.offsetMinute(data.get(0).getForecastTime(), -5);
DateTime beginTime = DateUtil.offsetMinute(data.get(0).getForecastTime(), -5);
Date endTime = DateUtil.offsetMinute(data.get(data.size() - 1).getForecastTime(), 15);
if (count == 0) {
startTime = beginTime;
}
count++;
deleteList.add(
WeatherDeleteCondition.builder()
.longitude(longitude)
......@@ -209,11 +215,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
);
//todo 老表逻辑(后期删除):删除数据逻辑
for (BasePhotovoltaicPlantView plantView : plantList) {
oldDeleteList.add(PlantPredictedPowerDataEnt.builder()
.plantId(plantView.getId())
.createTime(beginTime)
.endTime(endTime)
.build());
oldDeleteList.add(plantView.getId());
}
//天气数据处理
List<ThirdWeatherDataView> weatherDataList = XCopyUtils.copyNewList(data, ThirdWeatherDataView.class);
......@@ -248,7 +250,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
NioUtil.close(store);
}
//todo 老表逻辑(后期删除):删除/新增预测数据
this.deletePlantPredictedPowerList(context, oldDeleteList);
this.deletePlantPredictedPowerList(context, oldDeleteList, startTime, DateUtil.offsetDay(startTime, 16));
this.insertBatchPlantPredictedPowerList(context, oldBatchList);
int size;
if (CollUtil.isNotEmpty(deleteList)) {
......@@ -812,7 +814,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
return;
}
context.getLogger().info("------ weatherDataProcess dataFractionation");
List<PlantPredictedPowerDataEnt> deleteList = new ArrayList<>(32);
List<String> deleteList = new ArrayList<>(32);
List<PlantPredictedPowerDataEnt> batchList = new ArrayList<>(13312);
DateTime create = DateUtil.date();
DateTime end = DateUtil.offsetDay(create, 16);
......@@ -828,7 +830,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
}
count++;
if (BusinessConstant.FIVE.equals(count)) {
this.deletePlantPredictedPowerList(context, deleteList);
this.deletePlantPredictedPowerList(context, deleteList, create, end);
this.insertBatchPlantPredictedPowerList(context, batchList);
context.getLogger().info("------ weatherDataProcess clear size d {} b {}", deleteList.size(), batchList.size());
CollUtil.clear(deleteList, batchList);
......@@ -837,7 +839,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
}
context.getLogger().info("------ weatherDataProcess delete and insertBatch");
if (CollUtil.isNotEmpty(deleteList)) {
this.deletePlantPredictedPowerList(context, deleteList);
this.deletePlantPredictedPowerList(context, deleteList, create, end);
}
if (CollUtil.isNotEmpty(batchList)) {
this.insertBatchPlantPredictedPowerList(context, batchList);
......@@ -856,7 +858,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
* @param end 结束
* @param batchList 批次列表
*/
private void dataFractionation(JSONObject jsonObject, Map<String, List<BasePhotovoltaicPlantView>> plantMap, List<PlantPredictedPowerDataEnt> deleteList,
private void dataFractionation(JSONObject jsonObject, Map<String, List<BasePhotovoltaicPlantView>> plantMap, List<String> deleteList,
DateTime create, DateTime end, List<PlantPredictedPowerDataEnt> batchList) {
Map<String, List<DailyData>> cityDataMap = new HashMap<>(16);
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
......@@ -874,11 +876,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
List<BasePhotovoltaicPlantView> plantViewList = plantMap.get(cityCode);
//删除数据
for (BasePhotovoltaicPlantView plantView : plantViewList) {
deleteList.add(PlantPredictedPowerDataEnt.builder()
.plantId(plantView.getId())
.createTime(create)
.endTime(end)
.build());
deleteList.add(plantView.getId());
}
//遍历预测数据列表
for (DailyData dailyData : dailyDataList) {
......@@ -1048,31 +1046,25 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
*
* @param context 上下文
* @param deleteList 删除列表
* @param create 创造
* @param end 结束
*/
private void deletePlantPredictedPowerList(XContext context, List<PlantPredictedPowerDataEnt> deleteList) {
private void deletePlantPredictedPowerList(XContext context, List<String> deleteList, DateTime create, DateTime end) {
if (CollUtil.isNotEmpty(deleteList)) {
PlantPredictedPowerDataMapper mapper = context.getBean(PlantPredictedPowerDataMapper.class);
int size = deleteList.size();
context.getLogger().info("------ deletePlantPredictedPowerList batchDelete delete size: {}", size);
if (size > BaseUtils.BATCH_SIZE) {
List<List<PlantPredictedPowerDataEnt>> subList = BaseUtils.getSubList(deleteList);
for (List<PlantPredictedPowerDataEnt> list : subList) {
LambdaQueryWrapper<PlantPredictedPowerDataEnt> wrapper = new LambdaQueryWrapper<>();
for (PlantPredictedPowerDataEnt dataEnt : list) {
wrapper.or(w -> w.eq(PlantPredictedPowerDataEnt::getPlantId, dataEnt.getPlantId())
.between(PlantPredictedPowerDataEnt::getDataDate, dataEnt.getCreateTime(), dataEnt.getEndTime())
);
}
mapper.delete(wrapper);
List<List<String>> subList = BaseUtils.getSubList(deleteList);
for (List<String> list : subList) {
mapper.delete(new LambdaQueryWrapper<PlantPredictedPowerDataEnt>()
.in(PlantPredictedPowerDataEnt::getPlantId, list)
.between(PlantPredictedPowerDataEnt::getDataDate, create, end));
}
} else {
LambdaQueryWrapper<PlantPredictedPowerDataEnt> wrapper = new LambdaQueryWrapper<>();
for (PlantPredictedPowerDataEnt dataEnt : deleteList) {
wrapper.or(w -> w.eq(PlantPredictedPowerDataEnt::getPlantId, dataEnt.getPlantId())
.between(PlantPredictedPowerDataEnt::getDataDate, dataEnt.getCreateTime(), dataEnt.getEndTime())
);
}
mapper.delete(wrapper);
mapper.delete(new LambdaQueryWrapper<PlantPredictedPowerDataEnt>()
.in(PlantPredictedPowerDataEnt::getPlantId, deleteList)
.between(PlantPredictedPowerDataEnt::getDataDate, create, end));
}
}
}
......
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