Commit 2f931b48 authored by ZWT's avatar ZWT

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

1.开发间开优化长期间开优化定时任务,完成并网流程绿电消纳优先策略;
2.开发间开优化长期间开优化定时任务,完成并网流程消峰平谷策略;
3.开发间开优化中短期间开优化定时任务,创建定时任务并添加配置;
4.抽取间开优化定时任务逻辑处理父类,对长期间开优化定时任务/中短期间开优化定时任务代码结构进行优化;
5.开发间开优化中短期间开优化定时任务,完成并网流程绿电消纳优先策略;
6.开发间开优化中短期间开优化定时任务,完成并网流程消峰平谷策略;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent da34211b
......@@ -592,4 +592,66 @@ public class SpaceOptimizeBaseService {
}
}
}
/**
* 并网优化
*
* @param context 上下文
* @param durationMapper 持续时间映射器
* @param wellheadDTOList 井口dtolist
* @param durationDTOList 持续时间dtolist
* @param unOptimizeDurationList 取消优化工期列表
* @param spaceWellheadList 空间井口清单
* @param avgPowerList 平均功率列表
* @param detail 细节
* @param monthNum 月份
* @param detailId 详细信息id
* @param periodId 期间id
* @param lineId 线路id
*/
public void gridConnectedOptimization(XContext context, SpaceInstitutionDurationMapper durationMapper, List<SpaceOptimizeWellheadDTO> wellheadDTOList,
List<SpaceOptimizeDurationDTO> durationDTOList, List<SpaceOptimizeDurationDTO> unOptimizeDurationList,
List<SpaceInstitutionWellheadView> spaceWellheadList, List<DynamicQueryPlantPredictedPowerOutput> avgPowerList,
SpaceInstitutionDetailEnt detail, int monthNum, String detailId, String periodId, String lineId) {
//取光伏出力峰值
BigDecimal powerMax = this.getPowerMax(avgPowerList);
//取当前制度下井口的总功率
BigDecimal wellheadTotalPower = this.getWellheadTotalPower(spaceWellheadList, detailId);
//根据类型过滤井口:大间开,连抽井不优化
List<SpaceInstitutionWellheadView> wellheadViewList = this.getWellheadViewList(spaceWellheadList, detailId);
if (CollUtil.isEmpty(wellheadViewList)) {
return;
}
Map<String, List<SpaceInstitutionDurationEnt>> durationMap = this.getDurationMap(durationMapper, detailId);
if (CollUtil.isEmpty(durationMap)) {
//没有设置时间段,无法优化
return;
}
//光伏出力峰值大于等于井口总功率:绿电消纳优先策略
if (powerMax.compareTo(wellheadTotalPower) >= BusinessConstant.ZERO) {
//---------------------------------绿电消纳策略---------------------------------
this.greenElectricityConsumptionStrategy(wellheadDTOList, unOptimizeDurationList, durationDTOList,
wellheadViewList, avgPowerList, durationMap, detail, periodId);
} else {
//遍历井口,按发电功率大于等于光伏出力峰值条件分组
Map<Boolean, List<SpaceInstitutionWellheadView>> collect = this.getWellheadViewMapByPower(wellheadViewList, powerMax);
List<SpaceInstitutionWellheadView> lowWellheadList = collect.get(false);
int size = spaceWellheadList.size();
int lowWellheadListSize = lowWellheadList.size();
//光伏出力峰值<任何一口井的运行功率:消峰平谷策略
if (size == lowWellheadListSize) {
//---------------------------------消峰平谷策略---------------------------------
this.peakEliminationAndValleyLevelingStrategy(context, wellheadDTOList, unOptimizeDurationList, durationDTOList, wellheadViewList,
durationMap, detail, lineId, monthNum, periodId);
}
//光伏出力峰值>=线路哪部分井口运行功率:满足的部分井口采用绿电消纳优先,不满足的井采用消峰平谷
else {
List<SpaceInstitutionWellheadView> highWellheadList = collect.get(true);
this.greenElectricityConsumptionStrategy(wellheadDTOList, unOptimizeDurationList, durationDTOList,
highWellheadList, avgPowerList, durationMap, detail, periodId);
this.peakEliminationAndValleyLevelingStrategy(context, wellheadDTOList, unOptimizeDurationList, durationDTOList,
lowWellheadList, durationMap, detail, lineId, monthNum, periodId);
}
}
}
}
\ No newline at end of file
......@@ -9,14 +9,14 @@ import pps.cloud.space.service.ISpaceOptimizeLongCloudService;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*;
import pps.core.space.mapper.*;
import pps.core.space.mapper.SpaceInstitutionDurationMapper;
import pps.core.space.mapper.SpaceOptimizeViewMapper;
import pps.core.space.service.data.SpaceOptimizeWellheadAndPlant;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -67,7 +67,7 @@ public class SpaceOptimizeLongCloudServiceImpl extends SpaceOptimizeBaseService
String detailId = detail.getId();
String lineId = detail.getLineId();
//创建记录
String longPeriodId = super.createOptimizePeriod(periodDTOList, detailId, lineId, executionCycleForMonth, optimizeDeadline);
String periodId = super.createOptimizePeriod(periodDTOList, detailId, lineId, executionCycleForMonth, optimizeDeadline);
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
......@@ -79,46 +79,8 @@ public class SpaceOptimizeLongCloudServiceImpl extends SpaceOptimizeBaseService
.monthTime(month)
.build()
);
//取光伏出力峰值
BigDecimal powerMax = super.getPowerMax(avgPowerList);
//取当前制度下井口的总功率
BigDecimal wellheadTotalPower = super.getWellheadTotalPower(spaceWellheadList, detailId);
//根据类型过滤井口:大间开,连抽井不优化
List<SpaceInstitutionWellheadView> wellheadViewList = super.getWellheadViewList(spaceWellheadList, detailId);
if (CollUtil.isEmpty(wellheadViewList)) {
continue;
}
Map<String, List<SpaceInstitutionDurationEnt>> durationMap = super.getDurationMap(durationMapper, detailId);
if (CollUtil.isEmpty(durationMap)) {
//没有设置时间段,无法优化
continue;
}
//光伏出力峰值大于等于井口总功率:绿电消纳优先策略
if (powerMax.compareTo(wellheadTotalPower) >= BusinessConstant.ZERO) {
//---------------------------------绿电消纳策略---------------------------------
super.greenElectricityConsumptionStrategy(wellheadDTOList, unOptimizeDurationList, durationDTOList,
wellheadViewList, avgPowerList, durationMap, detail, longPeriodId);
} else {
//遍历井口,按发电功率大于等于光伏出力峰值条件分组
Map<Boolean, List<SpaceInstitutionWellheadView>> collect = super.getWellheadViewMapByPower(wellheadViewList, powerMax);
List<SpaceInstitutionWellheadView> lowWellheadList = collect.get(false);
int size = spaceWellheadList.size();
int lowWellheadListSize = lowWellheadList.size();
//光伏出力峰值<任何一口井的运行功率:消峰平谷策略
if (size == lowWellheadListSize) {
//---------------------------------消峰平谷策略---------------------------------
super.peakEliminationAndValleyLevelingStrategy(context, wellheadDTOList, unOptimizeDurationList, durationDTOList, wellheadViewList,
durationMap, detail, lineId, monthNum, longPeriodId);
}
//光伏出力峰值>=线路哪部分井口运行功率:满足的部分井口采用绿电消纳优先,不满足的井采用消峰平谷
else {
List<SpaceInstitutionWellheadView> highWellheadList = collect.get(true);
super.greenElectricityConsumptionStrategy(wellheadDTOList, unOptimizeDurationList, durationDTOList,
highWellheadList, avgPowerList, durationMap, detail, longPeriodId);
super.peakEliminationAndValleyLevelingStrategy(context, wellheadDTOList, unOptimizeDurationList, durationDTOList, lowWellheadList,
durationMap, detail, lineId, monthNum, longPeriodId);
}
}
super.gridConnectedOptimization(context, durationMapper, wellheadDTOList, durationDTOList, unOptimizeDurationList,
spaceWellheadList, avgPowerList, detail, monthNum, detailId, periodId, lineId);
break;
//离网型优化
case "0":
......
......@@ -17,7 +17,6 @@ import xstartup.base.XContext;
import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -63,7 +62,7 @@ public class SpaceOptimizeMidCloudServiceImpl extends SpaceOptimizeBaseService i
String detailId = detail.getId();
String lineId = detail.getLineId();
//创建记录
String midPeriodId = super.createOptimizePeriod(periodDTOList, detailId, lineId, executionCycleForWeek, optimizeDeadline);
String periodId = super.createOptimizePeriod(periodDTOList, detailId, lineId, executionCycleForWeek, optimizeDeadline);
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
......@@ -75,46 +74,8 @@ public class SpaceOptimizeMidCloudServiceImpl extends SpaceOptimizeBaseService i
.endTime(nextWeek)
.build()
);
//取光伏出力峰值
BigDecimal powerMax = super.getPowerMax(avgPowerList);
//取当前制度下井口的总功率
BigDecimal wellheadTotalPower = super.getWellheadTotalPower(spaceWellheadList, detailId);
//根据类型过滤井口:大间开,连抽井不优化
List<SpaceInstitutionWellheadView> wellheadViewList = super.getWellheadViewList(spaceWellheadList, detailId);
if (CollUtil.isEmpty(wellheadViewList)) {
continue;
}
Map<String, List<SpaceInstitutionDurationEnt>> durationMap = super.getDurationMap(durationMapper, detailId);
if (CollUtil.isEmpty(durationMap)) {
//没有设置时间段,无法优化
continue;
}
//光伏出力峰值大于等于井口总功率:绿电消纳优先策略
if (powerMax.compareTo(wellheadTotalPower) >= BusinessConstant.ZERO) {
//---------------------------------绿电消纳策略---------------------------------
super.greenElectricityConsumptionStrategy(wellheadDTOList, unOptimizeDurationList, durationDTOList,
wellheadViewList, avgPowerList, durationMap, detail, midPeriodId);
} else {
//遍历井口,按发电功率大于等于光伏出力峰值条件分组
Map<Boolean, List<SpaceInstitutionWellheadView>> collect = super.getWellheadViewMapByPower(wellheadViewList, powerMax);
List<SpaceInstitutionWellheadView> lowWellheadList = collect.get(false);
int size = spaceWellheadList.size();
int lowWellheadListSize = lowWellheadList.size();
//光伏出力峰值<任何一口井的运行功率:消峰平谷策略
if (size == lowWellheadListSize) {
//---------------------------------消峰平谷策略---------------------------------
super.peakEliminationAndValleyLevelingStrategy(context, wellheadDTOList, unOptimizeDurationList, durationDTOList, wellheadViewList,
durationMap, detail, lineId, monthNum, midPeriodId);
}
//光伏出力峰值>=线路哪部分井口运行功率:满足的部分井口采用绿电消纳优先,不满足的井采用消峰平谷
else {
List<SpaceInstitutionWellheadView> highWellheadList = collect.get(true);
super.greenElectricityConsumptionStrategy(wellheadDTOList, unOptimizeDurationList, durationDTOList,
highWellheadList, avgPowerList, durationMap, detail, midPeriodId);
super.peakEliminationAndValleyLevelingStrategy(context, wellheadDTOList, unOptimizeDurationList, durationDTOList,
lowWellheadList, durationMap, detail, lineId, monthNum, midPeriodId);
}
}
super.gridConnectedOptimization(context, durationMapper, wellheadDTOList, durationDTOList, unOptimizeDurationList,
spaceWellheadList, avgPowerList, detail, monthNum, detailId, periodId, lineId);
break;
//离网型优化
case "0":
......@@ -168,4 +129,5 @@ public class SpaceOptimizeMidCloudServiceImpl extends SpaceOptimizeBaseService i
}
/*-----------------------------------private-----------------------------------*/
}
\ 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