Commit a6ca38a2 authored by ZWT's avatar ZWT

feat(能源管理系统): 间开优化定时任务

1.开发间开优化短期间开优化定时任务;
2.开发间开优化短期间开优化定时任务,增加大间开井口时段信息初始化逻辑;
3.开发间开优化短期间开优化定时任务,增加间开井井口时段信息初始化逻辑;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 524895a4
......@@ -480,15 +480,8 @@ public class SpaceOptimizeBaseService {
public void createUnOptimizeDuration(List<SpaceOptimizeDurationDTO> unOptimizeDurationList,
SpaceInstitutionDurationEnt durationEnt,
String periodId, String recordId, String wellheadId) {
SpaceOptimizeDurationDTO durationDTO = new SpaceOptimizeDurationDTO();
BaseUtils.setBaseModelDefaultForJob(durationDTO);
durationDTO.setRecordId(recordId);
durationDTO.setPeriodId(periodId);
durationDTO.setWellheadId(wellheadId);
durationDTO.setIsOptimize(BusinessConstant.ONE);
durationDTO.setOpenWellTime(durationEnt.getOpenWellTime());
durationDTO.setCloseWellTime(durationEnt.getCloseWellTime());
unOptimizeDurationList.add(durationDTO);
this.createDuration(unOptimizeDurationList, recordId, periodId, wellheadId, BusinessConstant.ONE,
durationEnt.getOpenWellTime(), durationEnt.getCloseWellTime(), null);
}
/**
......@@ -505,15 +498,34 @@ public class SpaceOptimizeBaseService {
public void createOptimizeDuration(List<SpaceOptimizeDurationDTO> durationDTOList, String periodId,
String recordId, String wellheadId, String generationTypeKey,
String openWellTime, String endTimeString) {
this.createDuration(durationDTOList, recordId, periodId, wellheadId, BusinessConstant.ZERO,
openWellTime, endTimeString, generationTypeKey);
}
/**
* 创建持续时间
*
* @param durationDTOList 持续时间dtolist
* @param recordId 记录id
* @param periodId 期间id
* @param wellheadId 井口id
* @param isOptimize 正在优化
* @param openWellTime 开井时间
* @param closeWellTime 关井时间
* @param generationTypeKey 生成类型密钥
*/
public void createDuration(List<SpaceOptimizeDurationDTO> durationDTOList, String recordId,
String periodId, String wellheadId, Integer isOptimize,
String openWellTime, String closeWellTime, String generationTypeKey) {
SpaceOptimizeDurationDTO durationDTO = new SpaceOptimizeDurationDTO();
BaseUtils.setBaseModelDefaultForJob(durationDTO);
durationDTO.setRecordId(recordId);
durationDTO.setPeriodId(periodId);
durationDTO.setWellheadId(wellheadId);
durationDTO.setGenerationTypeKey(generationTypeKey);
durationDTO.setIsOptimize(BusinessConstant.ZERO);
durationDTO.setIsOptimize(isOptimize);
durationDTO.setOpenWellTime(openWellTime);
durationDTO.setCloseWellTime(endTimeString);
durationDTO.setCloseWellTime(closeWellTime);
durationDTO.setGenerationTypeKey(generationTypeKey);
durationDTOList.add(durationDTO);
}
......
......@@ -8,11 +8,8 @@ import org.apache.commons.lang3.StringUtils;
import pps.cloud.space.service.ISpaceOptimizeShortCloudService;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*;
import pps.core.space.mapper.SpaceInstitutionDurationMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadMapper;
import pps.core.space.mapper.SpaceOptimizeShortPeriodMapper;
import pps.core.space.mapper.*;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
......@@ -41,9 +38,6 @@ public class SpaceOptimizeShortCloudServiceImpl extends SpaceOptimizeBaseService
DateTime date = DateUtil.date();
String curDate = date.toString(BusinessConstant.DATE_FORMAT_DAY);
List<SpaceInstitutionDetailEnt> detailEntList = super.getEffectiveSpaceInstitution(context, curDate);
List<String> institutionIdList = detailEntList.stream()
.map(BaseModel::getId)
.collect(Collectors.toList());
List<SpaceOptimizePeriodDTO> periodDTOList = new ArrayList<>(32);
List<SpaceOptimizeWellheadDTO> wellheadDTOList = new ArrayList<>(64);
List<SpaceOptimizeDurationDTO> durationDTOList = new ArrayList<>(128);
......@@ -131,7 +125,7 @@ public class SpaceOptimizeShortCloudServiceImpl extends SpaceOptimizeBaseService
Integer totalDays = openWellDay + closeWellDay;
if (!totalDays.equals(0)) {
//获取间开井口创建时间和当天的时间差
int betweenDay = (int) DateUtil.betweenDay(wellhead.getCreateTime(), DateUtil.date(), true);
int betweenDay = (int) DateUtil.betweenDay(wellhead.getCreateTime(), date, true);
switch (totalDays.compareTo(betweenDay)) {
case -1:
//按周期取余数和开井时间比较,超过开井时间就是关井
......@@ -170,8 +164,8 @@ public class SpaceOptimizeShortCloudServiceImpl extends SpaceOptimizeBaseService
closeWellTime = BusinessConstant.END_OF_DAY_TIME;
}
//创建间开记录
this.createDuration(unOptimizeDurationList, recordId, periodId, wellheadId, BusinessConstant.ONE, BusinessConstant.START_OF_DAY_TIME, closeWellTime);
this.createDuration(durationDTOList, recordId, periodId, wellheadId, BusinessConstant.ZERO, BusinessConstant.START_OF_DAY_TIME, closeWellTime);
super.createDuration(unOptimizeDurationList, recordId, periodId, wellheadId, BusinessConstant.ONE, BusinessConstant.START_OF_DAY_TIME, closeWellTime, null);
super.createDuration(durationDTOList, recordId, periodId, wellheadId, BusinessConstant.ZERO, BusinessConstant.START_OF_DAY_TIME, closeWellTime, null);
}
break;
default:
......@@ -179,38 +173,62 @@ public class SpaceOptimizeShortCloudServiceImpl extends SpaceOptimizeBaseService
}
}
}
//需要优化的井口
//需要优化的井口(匹配中短期优化配置)
List<SpaceInstitutionWellheadEnt> needToOptimizeWellheadList = interval.get(true);
if (CollUtil.isNotEmpty(needToOptimizeWellheadList)) {
//查最近的中短期优化记录
SpaceOptimizeMidPeriodMapper midPeriodMapper = context.getBean(SpaceOptimizeMidPeriodMapper.class);
SpaceOptimizeMidPeriodEnt midPeriodEnt = midPeriodMapper.selectOne(new LambdaQueryWrapper<SpaceOptimizeMidPeriodEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeMidPeriodEnt::getInstitutionId, detailId)
.orderByDesc(BaseModel::getCreateTime)
.last("LIMIT 1")
);
//如果有中短期优化记录,通过记录ID查优化过的时段按井口ID分组
Map<String, List<SpaceOptimizeMidDurationEnt>> optimizeMidDurationMap = new HashMap<>(0);
if (Objects.nonNull(midPeriodEnt)) {
SpaceOptimizeMidDurationMapper midDurationMapper = context.getBean(SpaceOptimizeMidDurationMapper.class);
List<SpaceOptimizeMidDurationEnt> optimizeMidDurationEntList = midDurationMapper.selectList(new LambdaQueryWrapper<SpaceOptimizeMidDurationEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeMidDurationEnt::getIsOptimize, BusinessConstant.ZERO)
.eq(SpaceOptimizeMidDurationEnt::getMidPeriodId, midPeriodEnt.getId())
.orderByAsc(BaseModel::getCreateTime)
);
if (CollUtil.isNotEmpty(optimizeMidDurationEntList)) {
optimizeMidDurationMap = optimizeMidDurationEntList.stream()
.collect(Collectors.groupingBy(SpaceOptimizeMidDurationEnt::getWellheadId));
}
}
for (SpaceInstitutionWellheadEnt wellhead : needToOptimizeWellheadList) {
String wellheadId = wellhead.getWellheadId();
String recordId = super.createOptimizeWellhead(wellheadDTOList, periodId, wellheadId, wellhead.getWellNumber());
if (!durationListMap.containsKey(wellheadId)) {
continue;
}
//初始化未优化间开
List<SpaceInstitutionDurationEnt> durationList = durationListMap.get(wellheadId);
for (SpaceInstitutionDurationEnt durationEnt : durationList) {
super.createUnOptimizeDuration(unOptimizeDurationList, durationEnt, periodId, recordId, wellheadId);
if (optimizeMidDurationMap.containsKey(wellheadId)) {
//优化记录转换
List<SpaceOptimizeMidDurationEnt> midDurationEntList = optimizeMidDurationMap.get(wellheadId);
for (SpaceOptimizeMidDurationEnt midDurationEnt : midDurationEntList) {
super.createDuration(durationDTOList, recordId, periodId, wellheadId, BusinessConstant.ZERO,
midDurationEnt.getOpenWellTime(), midDurationEnt.getCloseWellTime(), midDurationEnt.getGenerationTypeKey());
}
//初始化未优化间开
for (SpaceInstitutionDurationEnt durationEnt : durationList) {
super.createUnOptimizeDuration(unOptimizeDurationList, durationEnt, periodId, recordId, wellheadId);
}
} else {
//缺少优化记录,不优化
for (SpaceInstitutionDurationEnt durationEnt : durationList) {
super.createUnOptimizeDuration(unOptimizeDurationList, durationEnt, periodId, recordId, wellheadId);
super.createOptimizeDuration(durationDTOList, periodId, recordId, wellheadId, null,
durationEnt.getOpenWellTime(), durationEnt.getCloseWellTime()
);
}
}
}
}
}
return XServiceResult.OK;
}
private void createDuration(List<SpaceOptimizeDurationDTO> durationDTOList, String recordId,
String periodId, String wellheadId, Integer isOptimize,
String openWellTime, String closeWellTime) {
SpaceOptimizeDurationDTO durationDTO = new SpaceOptimizeDurationDTO();
BaseUtils.setBaseModelDefaultForJob(durationDTO);
durationDTO.setRecordId(recordId);
durationDTO.setPeriodId(periodId);
durationDTO.setWellheadId(wellheadId);
durationDTO.setIsOptimize(isOptimize);
durationDTO.setOpenWellTime(openWellTime);
durationDTO.setCloseWellTime(closeWellTime);
durationDTOList.add(durationDTO);
}
}
\ No newline at end of file
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