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; ...@@ -7,6 +7,9 @@ import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession; import pps.core.common.session.PpsUserSession;
import java.util.Date; 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; ...@@ -16,6 +19,34 @@ import java.util.Date;
*/ */
public class BaseUtils { 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; package pps.core.space.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceOptimizeLongDurationView; import pps.core.space.entity.SpaceOptimizeLongDurationView;
...@@ -16,4 +17,12 @@ public interface SpaceOptimizeLongDurationViewMapper { ...@@ -16,4 +17,12 @@ public interface SpaceOptimizeLongDurationViewMapper {
SpaceOptimizeLongDurationView selectOne(SpaceOptimizeLongDurationView record); SpaceOptimizeLongDurationView selectOne(SpaceOptimizeLongDurationView record);
List<SpaceOptimizeLongDurationView> selectList(SpaceOptimizeLongDurationView record); List<SpaceOptimizeLongDurationView> selectList(SpaceOptimizeLongDurationView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<SpaceOptimizeLongDurationView> list);
} }
package pps.core.space.mapper; package pps.core.space.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceOptimizeLongPeriodView; import pps.core.space.entity.SpaceOptimizeLongPeriodView;
...@@ -22,4 +23,12 @@ public interface SpaceOptimizeLongPeriodViewMapper { ...@@ -22,4 +23,12 @@ public interface SpaceOptimizeLongPeriodViewMapper {
* @return {@link List}<{@link SpaceOptimizeLongPeriodView}> * @return {@link List}<{@link SpaceOptimizeLongPeriodView}>
*/ */
List<SpaceOptimizeLongPeriodView> selectList(SpaceOptimizeLongPeriodView record); List<SpaceOptimizeLongPeriodView> selectList(SpaceOptimizeLongPeriodView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<SpaceOptimizeLongPeriodView> list);
} }
package pps.core.space.mapper; package pps.core.space.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceOptimizeLongWellheadView; import pps.core.space.entity.SpaceOptimizeLongWellheadView;
...@@ -16,4 +17,12 @@ public interface SpaceOptimizeLongWellheadViewMapper { ...@@ -16,4 +17,12 @@ public interface SpaceOptimizeLongWellheadViewMapper {
SpaceOptimizeLongWellheadView selectOne(SpaceOptimizeLongWellheadView record); SpaceOptimizeLongWellheadView selectOne(SpaceOptimizeLongWellheadView record);
List<SpaceOptimizeLongWellheadView> selectList(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; ...@@ -22,9 +22,7 @@ import pps.core.common.entity.BaseModel;
import pps.core.common.utils.BaseUtils; import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*; import pps.core.space.entity.*;
import pps.core.space.enums.BusinessError; import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.SpaceInstitutionDetailMapper; import pps.core.space.mapper.*;
import pps.core.space.mapper.SpaceInstitutionDurationMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadViewMapper;
import xstartup.annotation.XService; import xstartup.annotation.XService;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.data.XListResult; import xstartup.data.XListResult;
...@@ -169,7 +167,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -169,7 +167,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
for (int w = 0, wellheadSize = wellheadViewList.size(); w < wellheadSize; w++) { for (int w = 0, wellheadSize = wellheadViewList.size(); w < wellheadSize; w++) {
SpaceInstitutionWellheadView wellhead = wellheadViewList.get(w); SpaceInstitutionWellheadView wellhead = wellheadViewList.get(w);
String wellheadId = wellhead.getWellheadId(); String wellheadId = wellhead.getWellheadId();
this.createOptimizeLongWellhead(longWellheadList, longPeriodId, wellheadId, wellhead.getWellNumber()); String recordId = this.createOptimizeLongWellhead(longWellheadList, longPeriodId, wellheadId, wellhead.getWellNumber());
//取当前井口最大发电量 //取当前井口最大发电量
BigDecimal serviceRating = wellhead.getServiceRating(); BigDecimal serviceRating = wellhead.getServiceRating();
List<SpaceInstitutionDurationEnt> durationConfigList = durationMap.get(wellhead); List<SpaceInstitutionDurationEnt> durationConfigList = durationMap.get(wellhead);
...@@ -209,7 +207,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -209,7 +207,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
} }
DynamicQueryPlantPredictedPowerOutput end = avgPowerList.get(endIndex); DynamicQueryPlantPredictedPowerOutput end = avgPowerList.get(endIndex);
String endTimeString = end.getHourTime() + end.getMinTime(); 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) openWellTime, StringUtils.substringBeforeLast(endTimeString, BusinessConstant.INITIALIZATION_SECOND)
); );
//计算 //计算
...@@ -249,7 +247,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -249,7 +247,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
} else { } else {
endTimeString = endTimeOptimize.toString(BusinessConstant.MINUTES_FORMAT); endTimeString = endTimeOptimize.toString(BusinessConstant.MINUTES_FORMAT);
} }
this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, wellheadId, null, this.createOptimizeLongDuration(longDurationList, duration, longPeriodId, recordId, wellheadId, null,
openWellTime, endTimeString openWellTime, endTimeString
); );
//取时间间隔(分钟) //取时间间隔(分钟)
...@@ -279,7 +277,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -279,7 +277,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
closeWellTime = endDate.toString(BusinessConstant.MINUTES_FORMAT); 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 offset.toString(BusinessConstant.MINUTES_FORMAT), closeWellTime
); );
} }
...@@ -317,7 +315,37 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -317,7 +315,37 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
} }
//开启事务 //开启事务
return XTransactionHelper.begin(context, () -> { 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; return XServiceResult.OK;
}); });
} }
...@@ -352,14 +380,16 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -352,14 +380,16 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
* @param longPeriodId 长周期id * @param longPeriodId 长周期id
* @param wellheadId 井口id * @param wellheadId 井口id
* @param wellNumber 井号 * @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(); SpaceOptimizeLongWellheadView wellheadView = new SpaceOptimizeLongWellheadView();
BaseUtils.setBaseModelDefaultForJob(wellheadView); BaseUtils.setBaseModelDefaultForJob(wellheadView);
wellheadView.setLongPeriodId(longPeriodId); wellheadView.setLongPeriodId(longPeriodId);
wellheadView.setWellheadId(wellheadId); wellheadView.setWellheadId(wellheadId);
wellheadView.setWellNumber(wellNumber); wellheadView.setWellNumber(wellNumber);
longWellheadList.add(wellheadView); longWellheadList.add(wellheadView);
return wellheadView.getId();
} }
/** /**
...@@ -368,15 +398,17 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -368,15 +398,17 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
* @param longDurationList 长期清单 * @param longDurationList 长期清单
* @param durationEnt 持续时间ent * @param durationEnt 持续时间ent
* @param longPeriodId 长周期id * @param longPeriodId 长周期id
* @param recordId 记录id
* @param wellheadId 井口id * @param wellheadId 井口id
* @param generationTypeKey 生成类型密钥 * @param generationTypeKey 生成类型密钥
* @param openWellTime 开井时间 * @param openWellTime 开井时间
* @param endTimeString 结束时间字符串 * @param endTimeString 结束时间字符串
*/ */
private void createOptimizeLongDuration(List<SpaceOptimizeLongDurationView> longDurationList, SpaceInstitutionDurationEnt durationEnt, String longPeriodId, 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(); SpaceOptimizeLongDurationView durationView = new SpaceOptimizeLongDurationView();
BaseUtils.setBaseModelDefaultForJob(durationView); BaseUtils.setBaseModelDefaultForJob(durationView);
durationView.setRecordId(recordId);
durationView.setLongPeriodId(longPeriodId); durationView.setLongPeriodId(longPeriodId);
durationView.setWellheadId(wellheadId); durationView.setWellheadId(wellheadId);
durationView.setGenerationTypeKey(generationTypeKey); durationView.setGenerationTypeKey(generationTypeKey);
...@@ -386,6 +418,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou ...@@ -386,6 +418,7 @@ public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongClou
longDurationList.add(durationView); longDurationList.add(durationView);
SpaceOptimizeLongDurationView durationViewUnOptimize = new SpaceOptimizeLongDurationView(); SpaceOptimizeLongDurationView durationViewUnOptimize = new SpaceOptimizeLongDurationView();
BaseUtils.setBaseModelDefaultForJob(durationViewUnOptimize); BaseUtils.setBaseModelDefaultForJob(durationViewUnOptimize);
durationViewUnOptimize.setRecordId(recordId);
durationViewUnOptimize.setLongPeriodId(longPeriodId); durationViewUnOptimize.setLongPeriodId(longPeriodId);
durationViewUnOptimize.setWellheadId(wellheadId); durationViewUnOptimize.setWellheadId(wellheadId);
durationViewUnOptimize.setGenerationTypeKey(generationTypeKey); durationViewUnOptimize.setGenerationTypeKey(generationTypeKey);
......
...@@ -52,4 +52,49 @@ ...@@ -52,4 +52,49 @@
where where
id=#{id} id=#{id}
</select> </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> </mapper>
\ No newline at end of file
...@@ -65,4 +65,27 @@ ...@@ -65,4 +65,27 @@
AND p.line_id = #{lineId} AND p.line_id = #{lineId}
ORDER BY p.optimize_deadline DESC ORDER BY p.optimize_deadline DESC
</select> </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> </mapper>
\ No newline at end of file
...@@ -44,4 +44,24 @@ ...@@ -44,4 +44,24 @@
where where
id=#{id} id=#{id}
</select> </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> </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