Commit 7d29ad47 authored by ZWT's avatar ZWT

feat(零碳): 长庆

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

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent cf91e291
......@@ -66,4 +66,8 @@ public class SpaceOptimizeDurationDTO extends BaseModel implements Serializable
@XText("关井时间")
@TableField(exist = false)
private Date closeTime;
@XText("开井时长(分钟)")
@TableField(exist = false)
private long duration;
}
......@@ -82,7 +82,7 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
List<SpaceOptimizeDurationDTO> durationDTOList = new ArrayList<>(128);
List<SpaceOptimizeDurationDTO> unOptimizeDurationList = new ArrayList<>(128);
//取当前时间
DateTime startDate = DateUtil.beginOfDay(DateTime.now());
DateTime startDate = DateUtil.beginOfDay(DateTime.now().offset(DateField.DAY_OF_MONTH, 2));
//取生效中的基础间开
List<SpaceInstitutionDetailEnt> detailEntList = this.getEffectiveSpaceInstitution(context, startDate.toString());
//取线路ID和制度ID
......@@ -267,23 +267,28 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
if (tundraStrategyList.size() == 1) {
//记录第一段开始时间之前的关井时间
if (BusinessConstant.DATE_FLAG_BEGIN.compareTo(tundraStrategyList.get(0).getOpenTime()) != 0) {
long between = DateUtil.between(BusinessConstant.DATE_FLAG_BEGIN, tundraStrategyList.get(0).getOpenTime(), DateUnit.MINUTE);
totalOpenTime += between;
closeList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(BusinessConstant.DATE_FLAG_BEGIN)
.closeTime(tundraStrategyList.get(0).getOpenTime())
.duration(between)
.build()
);
totalOpenTime += DateUtil.between(BusinessConstant.DATE_FLAG_BEGIN, tundraStrategyList.get(0).getOpenTime(), DateUnit.MINUTE);
}
//记录最后一段停井时间之后的关井时间
if (BusinessConstant.DATE_FLAG.compareTo(tundraStrategyList.get(0).getCloseTime()) != 0) {
long between = DateUtil.between(tundraStrategyList.get(0).getCloseTime(), BusinessConstant.DATE_FLAG, DateUnit.MINUTE);
totalOpenTime += between;
closeList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(tundraStrategyList.get(0).getCloseTime())
.closeTime(BusinessConstant.DATE_FLAG)
.duration(between)
.build()
);
totalOpenTime += DateUtil.between(tundraStrategyList.get(0).getCloseTime(), BusinessConstant.DATE_FLAG, DateUnit.MINUTE);
}
} else {
//初始化时间轴
......@@ -322,14 +327,16 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
SpaceOptimizeTundraStrategy z = axis.get(i);
Boolean beUsing = z.getBeUsing();
if (isClose && beUsing) {
long between = DateUtil.between(axis.get(beginIndex).getTimestamp(), axis.get(i).getTimestamp(), DateUnit.MINUTE);
totalOpenTime += between;
//存时间段,重置状态
closeList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(axis.get(beginIndex).getTimestamp())
.closeTime(axis.get(i).getTimestamp())
.duration(between)
.build()
);
totalOpenTime += DateUtil.between(axis.get(beginIndex).getTimestamp(), axis.get(i).getTimestamp(), DateUnit.MINUTE);
isClose = Boolean.FALSE;
} else if (!isClose && !beUsing) {
//确定开始位置
......@@ -339,13 +346,15 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
}
//补充最后一段
if (isClose) {
long between = DateUtil.between(axis.get(beginIndex).getTimestamp(), axis.get(axis.size() - 1).getTimestamp(), DateUnit.MINUTE);
totalOpenTime += between;
closeList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(axis.get(beginIndex).getTimestamp())
.closeTime(axis.get(axis.size() - 1).getTimestamp())
.duration(between)
.build()
);
totalOpenTime += DateUtil.between(axis.get(beginIndex).getTimestamp(), axis.get(axis.size() - 1).getTimestamp(), DateUnit.MINUTE);
}
}
//计算权重时间轴
......@@ -365,8 +374,44 @@ public class SpaceOptimizeShortPeriodService extends SpaceOptimizeBaseService {
}
//关井时间优化
if (CollUtil.isNotEmpty(closeList)) {
//每日开井时长
int dayOpenMinute = tundraStrategyWellhead.getRunDuration()
.multiply(BusinessConstant.SIXTY)
.intValue();
//计算需要补的时间
long supplementaryTime = dayOpenMinute - totalOpenTime;
//补时间
for (SpaceOptimizeWeightDuration weightDuration : weightDurationList) {
DateTime openTimeWeight = weightDuration.getOpenTime();
DateTime closeTimeWeight = weightDuration.getCloseTime();
long duration = weightDuration.getDuration();
boolean include = false;
int except = 0;
for (int i = 0; i < closeList.size(); i++) {
SpaceOptimizeDurationDTO close = closeList.get(i);
Date openTime = close.getOpenTime();
Date closeTime = close.getCloseTime();
if (DateUtil.compare(openTime, openTimeWeight) <= 0 && DateUtil.compare(closeTime, closeTimeWeight) >= 0) {
//可优化时间段在开井范围内跳过
include = true;
break;
}
if (DateUtil.compare(openTime, closeTimeWeight) >= 0 || DateUtil.compare(closeTime, openTimeWeight) <= 0) {
//判断时间段是否在开井范围之外
except++;
continue;
}
if (DateUtil.isIn(openTime, openTimeWeight, closeTimeWeight)) {
//重新计算结束时间及总开井时长
long between = DateUtil.between(openTime, closeTimeWeight, DateUnit.MINUTE);
}
if (DateUtil.isIn(closeTime, openTimeWeight, closeTimeWeight)) {
//重新计算开始时间及总开井时长
long between = DateUtil.between(openTimeWeight, closeTime, DateUnit.MINUTE);
}
}
}
System.out.println();
} else {
//不需要补时间,需要优化计算
this.timePeriodOptimization(closeList, weightDurationList, firstOpenWellTime, wellheadList.size(),
......
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