Commit 7a5cd918 authored by ZWT's avatar ZWT

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

1.开发间开优化长期间开优化定时任务,完成并网流程绿电消纳优先策略;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent ca7aee96
......@@ -7,6 +7,9 @@ import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 封装工具类
......@@ -16,6 +19,34 @@ import java.util.Date;
*/
public class BaseUtils {
/**
* 按每500个一组分割
*/
public static final Integer BATCH_SIZE = 500;
/**
* 计算批次数
*/
public static Integer countStep(Integer totalSize) {
return (totalSize + BATCH_SIZE - 1) / BATCH_SIZE;
}
/**
* 分批处理
*
* @param list 列表
* @return {@link List}<{@link List}<{@link E}>>
*/
public static <E> List<List<E>> getSubList(List<E> list) {
return Stream.iterate(0, n -> n + 1)
.limit(countStep(list.size()))
.parallel()
.map(a -> list.stream().skip(a * BaseUtils.BATCH_SIZE)
.limit(BATCH_SIZE).parallel()
.collect(Collectors.toList()))
.collect(Collectors.toList());
}
/**
* 设置实体默认值
*
......
package pps.core.space.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceOptimizeLongDurationView;
......@@ -16,4 +17,12 @@ public interface SpaceOptimizeLongDurationViewMapper {
SpaceOptimizeLongDurationView selectOne(SpaceOptimizeLongDurationView record);
List<SpaceOptimizeLongDurationView> selectList(SpaceOptimizeLongDurationView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<SpaceOptimizeLongDurationView> list);
}
package pps.core.space.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceOptimizeLongPeriodView;
......@@ -22,4 +23,12 @@ public interface SpaceOptimizeLongPeriodViewMapper {
* @return {@link List}<{@link SpaceOptimizeLongPeriodView}>
*/
List<SpaceOptimizeLongPeriodView> selectList(SpaceOptimizeLongPeriodView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<SpaceOptimizeLongPeriodView> list);
}
package pps.core.space.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceOptimizeLongWellheadView;
......@@ -16,4 +17,12 @@ public interface SpaceOptimizeLongWellheadViewMapper {
SpaceOptimizeLongWellheadView selectOne(SpaceOptimizeLongWellheadView record);
List<SpaceOptimizeLongWellheadView> selectList(SpaceOptimizeLongWellheadView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<SpaceOptimizeLongWellheadView> list);
}
......@@ -22,9 +22,7 @@ import pps.core.common.entity.BaseModel;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*;
import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.SpaceInstitutionDetailMapper;
import pps.core.space.mapper.SpaceInstitutionDurationMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadViewMapper;
import pps.core.space.mapper.*;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XListResult;
......@@ -169,7 +167,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
for (int w = 0, wellheadSize = wellheadViewList.size(); w < wellheadSize; w++) {
SpaceInstitutionWellheadView wellhead = wellheadViewList.get(w);
String wellheadId = wellhead.getWellheadId();
this.createOptimizeLongWellhead(longWellheadList, longPeriodId, wellheadId, wellhead.getWellNumber());
String recordId = this.createOptimizeLongWellhead(longWellheadList, longPeriodId, wellheadId, wellhead.getWellNumber());
//取当前井口最大发电量
BigDecimal serviceRating = wellhead.getServiceRating();
List<SpaceInstitutionDurationEnt> durationConfigList = durationMap.get(wellhead);
......@@ -209,7 +207,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
}
DynamicQueryPlantPredictedPowerOutput end = avgPowerList.get(endIndex);
String endTimeString = end.getHourTime() + end.getMinTime();
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, wellheadId, null,
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, recordId, wellheadId, null,
openWellTime, StringUtils.substringBeforeLast(endTimeString, BusinessConstant.INITIALIZATION_SECOND)
);
//计算
......@@ -249,7 +247,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
} else {
endTimeString = endTimeOptimize.toString(BusinessConstant.MINUTES_FORMAT);
}
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, wellheadId, null,
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, recordId, wellheadId, null,
openWellTime, endTimeString
);
//取时间间隔(分钟)
......@@ -279,7 +277,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
closeWellTime = endDate.toString(BusinessConstant.MINUTES_FORMAT);
}
//计算偏移
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, wellheadId, null,
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, recordId, wellheadId, null,
offset.toString(BusinessConstant.MINUTES_FORMAT), closeWellTime
);
}
......@@ -317,7 +315,37 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
}
//开启事务
return XTransactionHelper.begin(context, () -> {
int size;
if (CollUtil.isNotEmpty(longPeriodList)) {
SpaceOptimizeLongPeriodViewMapper longPeriodViewMapper = context.getBean(SpaceOptimizeLongPeriodViewMapper.class);
size = longPeriodList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeLongPeriodView>> subList = BaseUtils.getSubList(longPeriodList);
subList.forEach(b -> longPeriodViewMapper.batchInsertList(b));
} else {
longPeriodViewMapper.batchInsertList(longPeriodList);
}
}
if (CollUtil.isNotEmpty(longWellheadList)) {
SpaceOptimizeLongWellheadViewMapper longWellheadViewMapper = context.getBean(SpaceOptimizeLongWellheadViewMapper.class);
size = longWellheadList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeLongWellheadView>> subList = BaseUtils.getSubList(longWellheadList);
subList.forEach(b -> longWellheadViewMapper.batchInsertList(b));
} else {
longWellheadViewMapper.batchInsertList(longWellheadList);
}
}
if (CollUtil.isNotEmpty(longDurationList)) {
SpaceOptimizeLongDurationViewMapper longDurationViewMapper = context.getBean(SpaceOptimizeLongDurationViewMapper.class);
size = longDurationList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeLongDurationView>> subList = BaseUtils.getSubList(longDurationList);
subList.forEach(b -> longDurationViewMapper.batchInsertList(b));
} else {
longDurationViewMapper.batchInsertList(longDurationList);
}
}
return XServiceResult.OK;
});
}
......@@ -352,14 +380,16 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
* @param longPeriodId 长周期id
* @param wellheadId 井口id
* @param wellNumber 井号
* @return {@link String}
*/
private void createOptimizeLongWellhead(List<SpaceOptimizeLongWellheadView> longWellheadList, String longPeriodId, String wellheadId, String wellNumber) {
private String createOptimizeLongWellhead(List<SpaceOptimizeLongWellheadView> longWellheadList, String longPeriodId, String wellheadId, String wellNumber) {
SpaceOptimizeLongWellheadView wellheadView = new SpaceOptimizeLongWellheadView();
BaseUtils.setBaseModelDefaultForJob(wellheadView);
wellheadView.setLongPeriodId(longPeriodId);
wellheadView.setWellheadId(wellheadId);
wellheadView.setWellNumber(wellNumber);
longWellheadList.add(wellheadView);
return wellheadView.getId();
}
/**
......@@ -368,15 +398,17 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
* @param longDurationList 长期清单
* @param durationEnt 持续时间ent
* @param longPeriodId 长周期id
* @param recordId 记录id
* @param wellheadId 井口id
* @param generationTypeKey 生成类型密钥
* @param openWellTime 开井时间
* @param endTimeString 结束时间字符串
*/
private void createOptimizeLongDuration(List<SpaceOptimizeLongDurationView> longDurationList, SpaceInstitutionDurationEnt durationEnt, String longPeriodId,
String wellheadId, String generationTypeKey, String openWellTime, String endTimeString) {
String recordId, String wellheadId, String generationTypeKey, String openWellTime, String endTimeString) {
SpaceOptimizeLongDurationView durationView = new SpaceOptimizeLongDurationView();
BaseUtils.setBaseModelDefaultForJob(durationView);
durationView.setRecordId(recordId);
durationView.setLongPeriodId(longPeriodId);
durationView.setWellheadId(wellheadId);
durationView.setGenerationTypeKey(generationTypeKey);
......@@ -386,6 +418,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
longDurationList.add(durationView);
SpaceOptimizeLongDurationView durationViewUnOptimize = new SpaceOptimizeLongDurationView();
BaseUtils.setBaseModelDefaultForJob(durationViewUnOptimize);
durationViewUnOptimize.setRecordId(recordId);
durationViewUnOptimize.setLongPeriodId(longPeriodId);
durationViewUnOptimize.setWellheadId(wellheadId);
durationViewUnOptimize.setGenerationTypeKey(generationTypeKey);
......
......@@ -52,4 +52,49 @@
where
id=#{id}
</select>
<insert id="batchInsertList" parameterType="list">
INSERT INTO space_optimize_long_duration (
id,
create_by_id,
create_by_name,
create_time,
modify_by_id,
modify_by_name,
modify_time,
record_id,
long_period_id,
wellhead_id,
is_optimize,
generation_type_key,
open_well_time,
close_well_time
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.createById},
#{item.createByName},
#{item.createTime},
#{item.modifyById},
#{item.modifyByName},
#{item.modifyTime},
#{item.recordId},
#{item.longPeriodId},
#{item.wellheadId},
#{item.isOptimize},
<choose>
<when test="item.generationTypeKey != null and item.generationTypeKey != ''">
#{item.generationTypeKey},
</when>
<otherwise>
NULL,
</otherwise>
</choose>
#{item.openWellTime},
#{item.closeWellTime}
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -65,4 +65,27 @@
AND p.line_id = #{lineId}
ORDER BY p.optimize_deadline DESC
</select>
<insert id="batchInsertList" parameterType="list">
INSERT INTO space_optimize_long_period ( id, create_by_id, create_by_name, create_time,
modify_by_id, modify_by_name, modify_time, line_id, institution_id, execution_cycle, optimize_state,
optimize_deadline )
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.createById},
#{item.createByName},
#{item.createTime},
#{item.modifyById},
#{item.modifyByName},
#{item.modifyTime},
#{item.lineId},
#{item.institutionId},
#{item.executionCycle},
#{item.optimizeState},
#{item.optimizeDeadline}
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -44,4 +44,24 @@
where
id=#{id}
</select>
<insert id="batchInsertList" parameterType="list">
INSERT INTO space_optimize_long_wellhead ( id, create_by_id, create_by_name, create_time,
modify_by_id, modify_by_name, modify_time, long_period_id, wellhead_id, well_number )
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.createById},
#{item.createByName},
#{item.createTime},
#{item.modifyById},
#{item.modifyByName},
#{item.modifyTime},
#{item.longPeriodId},
#{item.wellheadId},
#{item.wellNumber}
)
</foreach>
</insert>
</mapper>
\ 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