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