Commit 5395a78e authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.修改极短期间开预测定时任务逻辑,解决优化后部分优化结果时间段过短问题;
2.修改心知天气气象数据获取及接收定时任务,解决天气数据通过邮件下载后,部分数据精度丢失问题;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent b0bbbc88
......@@ -29,6 +29,7 @@ import pps.core.space.entity.*;
import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.*;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.service.data.SpaceOptimizeTundraStrategy;
import pps.core.space.service.data.SpaceOptimizeWeight;
import pps.core.space.service.data.SpaceOptimizeWeightDuration;
import pps.core.space.service.data.space_optimize_period.GetSpaceOptimizePeriodInput;
......@@ -152,6 +153,8 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
Collectors.groupingBy(SpaceInstitutionDurationEnt::getWellheadId)));
//初始化时间轴
List<DateTime> rangeToList = DateUtil.rangeToList(DateUtil.offsetDay(BusinessConstant.DATE_FLAG, -1), BusinessConstant.DATE_FLAG, DateField.MINUTE, 30);
//初始化时间轴(5分钟间隔)
List<DateTime> timerShaft_5 = DateUtil.rangeToList(DateUtil.offsetDay(BusinessConstant.DATE_FLAG, -1), BusinessConstant.DATE_FLAG, DateField.MINUTE, 5);
//遍历
List<DynamicQueryPlantPredictedPowerOutput> powerList;
List<GetBasePriceStrategyDetailOutput> strategyList;
......@@ -186,9 +189,9 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
);
//保存不需要优化的井口
this.setUnOptimizeWellheadConfig(durationDTOList, unOptimizeDurationList, wellheadDTOList,
collect.get(false), durationMap.get(detail.getId()), periodId, startDate);
collect.get(Boolean.FALSE), durationMap.get(detail.getId()), periodId, startDate);
//取待优化井口并遍历
wellheadList = collect.get(true);
wellheadList = collect.get(Boolean.TRUE);
//todo 防冻堵策略(一口井就全开不走优化)
SpaceInstitutionWellheadView tundraStrategyWellhead = null;
List<SpaceOptimizeDurationDTO> tundraStrategyList = new ArrayList<>(32);
......@@ -844,12 +847,14 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
);
tundraStrategyList.add(
SpaceOptimizeDurationDTO.builder()
.wellheadId(wellheadId)
.openTime(startOffset)
.closeTime(BusinessConstant.DATE_FLAG)
.build()
);
tundraStrategyList.add(
SpaceOptimizeDurationDTO.builder()
.wellheadId(wellheadId)
.openTime(BusinessConstant.DATE_FLAG_BEGIN)
.closeTime(endOffset)
.build()
......@@ -862,6 +867,7 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
);
tundraStrategyList.add(
SpaceOptimizeDurationDTO.builder()
.wellheadId(wellheadId)
.openTime(startOffset)
.closeTime(BusinessConstant.DATE_FLAG)
.build()
......@@ -875,6 +881,7 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
);
tundraStrategyList.add(
SpaceOptimizeDurationDTO.builder()
.wellheadId(wellheadId)
.openTime(startOffset)
.closeTime(endOffset)
.build()
......@@ -884,51 +891,104 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
}
}
//防冻井
if (ObjectUtil.isNotNull(tundraStrategyWellhead)) {
if (ObjectUtil.isNotNull(tundraStrategyWellhead) && CollUtil.isNotEmpty(tundraStrategyList)) {
List<SpaceOptimizeDurationDTO> closeList = new ArrayList<>(32);
if (tundraStrategyList.size() == 1) {
//记录第一段开始时间之前的关井时间
if (BusinessConstant.DATE_FLAG_BEGIN.compareTo(tundraStrategyList.get(0).getOpenTime()) != 0) {
closeList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(BusinessConstant.DATE_FLAG_BEGIN)
.closeTime(tundraStrategyList.get(0).getOpenTime())
.build()
);
}
//记录最后一段停井时间之后的关井时间
if (BusinessConstant.DATE_FLAG.compareTo(tundraStrategyList.get(0).getCloseTime()) != 0) {
closeList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(tundraStrategyList.get(0).getCloseTime())
.closeTime(BusinessConstant.DATE_FLAG)
.build()
);
}
} else {
//初始化时间轴
List<SpaceOptimizeTundraStrategy> axis = new ArrayList<>(timerShaft_5.size());
for (DateTime dateTime : timerShaft_5) {
axis.add(
SpaceOptimizeTundraStrategy.builder()
.timestamp(dateTime)
.beUsing(Boolean.FALSE)
.build()
);
}
//先按开井时间再按关井时间排序
tundraStrategyList.sort(Comparator.comparing(SpaceOptimizeDurationDTO::getOpenTime).thenComparing(SpaceOptimizeDurationDTO::getCloseTime));
//渲染时间轴
int nextBegin = 0;
for (SpaceOptimizeDurationDTO durationDTO : tundraStrategyList) {
Date openTime = durationDTO.getOpenTime();
Date closeTime = durationDTO.getCloseTime();
for (int i = nextBegin; i < axis.size(); i++) {
SpaceOptimizeTundraStrategy z = axis.get(i);
if (DateUtil.isIn(z.getTimestamp(), openTime, closeTime)) {
z.setBeUsing(Boolean.TRUE);
}
//记录下一次开始位置
if (z.getTimestamp().compareTo(closeTime) > 0) {
nextBegin = i;
break;
}
}
}
//取关井时间段
System.out.println();
}
System.out.println();
}
}
}
//开启事务
return XTransactionHelper.begin(context, () -> {
int size;
SpaceOptimizeViewMapper optimizeViewMapper = context.getBean(SpaceOptimizeViewMapper.class);
if (CollUtil.isNotEmpty(periodDTOList)) {
size = periodDTOList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizePeriodDTO>> subList = BaseUtils.getSubList(periodDTOList);
subList.forEach(optimizeViewMapper::shortPeriodBatchInsertList);
} else {
optimizeViewMapper.shortPeriodBatchInsertList(periodDTOList);
}
}
if (CollUtil.isNotEmpty(wellheadDTOList)) {
size = wellheadDTOList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeWellheadDTO>> subList = BaseUtils.getSubList(wellheadDTOList);
subList.forEach(optimizeViewMapper::shortWellheadBatchInsertList);
} else {
optimizeViewMapper.shortWellheadBatchInsertList(wellheadDTOList);
}
}
if (CollUtil.isNotEmpty(unOptimizeDurationList)) {
size = unOptimizeDurationList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeDurationDTO>> subList = BaseUtils.getSubList(unOptimizeDurationList);
subList.forEach(optimizeViewMapper::shortDurationBatchInsertList);
} else {
optimizeViewMapper.shortDurationBatchInsertList(unOptimizeDurationList);
}
}
if (CollUtil.isNotEmpty(durationDTOList)) {
size = durationDTOList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeDurationDTO>> subList = BaseUtils.getSubList(durationDTOList);
subList.forEach(optimizeViewMapper::shortDurationBatchInsertList);
} else {
optimizeViewMapper.shortDurationBatchInsertList(durationDTOList);
}
}
// int size;
// SpaceOptimizeViewMapper optimizeViewMapper = context.getBean(SpaceOptimizeViewMapper.class);
// if (CollUtil.isNotEmpty(periodDTOList)) {
// size = periodDTOList.size();
// if (size > BaseUtils.BATCH_SIZE) {
// List<List<SpaceOptimizePeriodDTO>> subList = BaseUtils.getSubList(periodDTOList);
// subList.forEach(optimizeViewMapper::shortPeriodBatchInsertList);
// } else {
// optimizeViewMapper.shortPeriodBatchInsertList(periodDTOList);
// }
// }
// if (CollUtil.isNotEmpty(wellheadDTOList)) {
// size = wellheadDTOList.size();
// if (size > BaseUtils.BATCH_SIZE) {
// List<List<SpaceOptimizeWellheadDTO>> subList = BaseUtils.getSubList(wellheadDTOList);
// subList.forEach(optimizeViewMapper::shortWellheadBatchInsertList);
// } else {
// optimizeViewMapper.shortWellheadBatchInsertList(wellheadDTOList);
// }
// }
// if (CollUtil.isNotEmpty(unOptimizeDurationList)) {
// size = unOptimizeDurationList.size();
// if (size > BaseUtils.BATCH_SIZE) {
// List<List<SpaceOptimizeDurationDTO>> subList = BaseUtils.getSubList(unOptimizeDurationList);
// subList.forEach(optimizeViewMapper::shortDurationBatchInsertList);
// } else {
// optimizeViewMapper.shortDurationBatchInsertList(unOptimizeDurationList);
// }
// }
// if (CollUtil.isNotEmpty(durationDTOList)) {
// size = durationDTOList.size();
// if (size > BaseUtils.BATCH_SIZE) {
// List<List<SpaceOptimizeDurationDTO>> subList = BaseUtils.getSubList(durationDTOList);
// subList.forEach(optimizeViewMapper::shortDurationBatchInsertList);
// } else {
// optimizeViewMapper.shortDurationBatchInsertList(durationDTOList);
// }
// }
return XServiceResult.OK;
});
}
......
package pps.core.space.service.data;
import cn.hutool.core.date.DateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 间开防冻土
*
* @author ZWT
* @date 2024/04/26
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SpaceOptimizeTundraStrategy {
/**
* 时间戳
*/
private DateTime timestamp;
/**
* 是否使用
*/
private Boolean beUsing;
}
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