Commit 3e55ca4e authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.开发间开优化结果统计功能,创建间开优化效果统计表,生成对应代码;
2.修改15天,10天,3天,1天间开优化功能,修改代码结构;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 95b7982a
......@@ -2873,7 +2873,7 @@ public class SpaceOptimizeBaseService {
* @param periodTypeKey 周期类型键
* @return int
*/
private int getWeightByPeriodTypeKey(String periodTypeKey) {
public int getWeightByPeriodTypeKey(String periodTypeKey) {
switch (periodTypeKey) {
case BusinessConstant.PERIOD_TYPE_LOW:
return 5;
......
......@@ -6,6 +6,8 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import pps.cloud.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailInput;
import pps.cloud.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailOutput;
import pps.cloud.prediction.service.IPlantPredictedPowerCloudService;
import pps.cloud.prediction.service.IThirdPowerCloudService;
import pps.cloud.prediction.service.data.plant_predicted_power_data.GetPredictedPowerViewInput;
......@@ -19,6 +21,8 @@ import pps.core.space.entity.SpaceOptimizeShortDurationView;
import pps.core.space.entity.SpaceYesterdayGreenRateView;
import pps.core.space.mapper.SpaceOptimizeShortDurationViewMapper;
import pps.core.space.mapper.SpaceYesterdayGreenRateViewMapper;
import pps.core.space.service.data.SpaceOptimizeWeight;
import pps.core.space.utils.ServiceUtil;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XListResult;
......@@ -36,7 +40,7 @@ import java.util.stream.Collectors;
* @date 2024/11/27 15:17
*/
@XService
public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayGreenRateCloudService {
public class SpaceYesterdayGreenRateCloudServiceImpl extends SpaceOptimizeBaseService implements ISpaceYesterdayGreenRateCloudService {
/**
* 昨日绿电占比
......@@ -99,10 +103,12 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
Collectors.toMap(GetPredictedPowerViewOutput::getCreateTime, GetPredictedPowerViewOutput::getPredictPower)));
}
}
//查市电峰谷
List<GetBasePriceStrategyDetailOutput> strategyList = ServiceUtil.getStrategyDetailList(context, GetBasePriceStrategyDetailInput.builder()
.strategyMonth(String.valueOf(beginOfYesterday.monthBaseOne()))
.build());
//初始化时间轴
List<DateTime> rangeToList = DateUtil.rangeToList(DateUtil.offsetDay(BusinessConstant.DATE_FLAG, -1), BusinessConstant.DATE_FLAG, DateField.MINUTE, 30);
Map<Date, BigDecimal> activePowerMap;
Map<Date, BigDecimal> predictionPowerMap;
List<SpaceOptimizeShortDurationView> unOptimizeList;
List<SpaceOptimizeShortDurationView> optimizeList;
TreeMap<Integer, Map<Integer, List<SpaceOptimizeShortDurationView>>> wellSortMap;
......@@ -114,8 +120,12 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
DateTime closeWellTime;
for (Map.Entry<String, Map<Integer, Map<Integer, List<SpaceOptimizeShortDurationView>>>> lineEntry : durationCollect.entrySet()) {
String lineName = lineEntry.getKey();
activePowerMap = activeMap.getOrDefault(lineName, Collections.emptyMap());
predictionPowerMap = predictionMap.getOrDefault(lineName, Collections.emptyMap());
// if (!lineName.equals("扶余东+8-28平台")) {
// continue;
// }
//初始化轴
Map<DateTime, SpaceOptimizeWeight> activeWeightMap = this.obtainTimeline(strategyList, rangeToList, activeMap.getOrDefault(lineName, Collections.emptyMap()));
Map<DateTime, SpaceOptimizeWeight> predictionWeightMap = this.obtainTimeline(strategyList, rangeToList, predictionMap.getOrDefault(lineName, Collections.emptyMap()));
//按顺序排
wellSortMap = new TreeMap<>(lineEntry.getValue());
BigDecimal sumServiceRating = BigDecimal.ZERO;
......@@ -142,7 +152,8 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
//计算优化前后功率
for (DateTime dateTime : rangeToList) {
//计算实际
BigDecimal activePower = activePowerMap.getOrDefault(dateTime, BigDecimal.ZERO);
SpaceOptimizeWeight optimizeWeight = activeWeightMap.get(dateTime);
BigDecimal activePower = optimizeWeight.getPower();
unOptimizeDuration = unOptimizeList.get(unOptimizeIndex);
//时间转换
openWellTime = this.parseDateTime(unOptimizeDuration.getOpenWellTime());
......@@ -151,16 +162,18 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
//计算发电功率
if (activePower.compareTo(BigDecimal.ZERO) <= 0) {
//不管
} else if (activePower.compareTo(sumServiceRating) >= 0) {
} else if (activePower.compareTo(serviceRating) >= 0) {
//光伏发电功率大于运行负荷: 该时段光伏用电量量=运行负荷*0.5
wellGreenPowerActual = wellGreenPowerActual.add(serviceRating.multiply(BusinessConstant.BIG_DECIMAL_0_5));
activeWeightMap.get(dateTime).setPower(activePower.subtract(serviceRating));
} else {
//光伏发电功率-井口累计发电功率 : 小于等于0不管
BigDecimal subtract = activePower.subtract(sumServiceRating).add(serviceRating);
BigDecimal subtract = activePower.subtract(serviceRating);
if (subtract.compareTo(BigDecimal.ZERO) > 0) {
//光伏发电功率小于井的运行负荷: 该时段光伏用电量=(光伏发电功率-井口累计发电功率+当前井口运行功率)*0.5
//光伏发电功率小于井的运行负荷: 该时段光伏用电量=光伏发电功率*0.5
wellGreenPowerActual = wellGreenPowerActual.add(subtract.multiply(BusinessConstant.BIG_DECIMAL_0_5));
}
activeWeightMap.get(dateTime).setPower(BigDecimal.ZERO);
}
//累加开井时长
runHourActual = runHourActual.add(BusinessConstant.BIG_DECIMAL_0_5);
......@@ -172,7 +185,8 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
}
/*--------------------------------------------------*/
if (optimizeListFlag) {
BigDecimal predictionPower = predictionPowerMap.getOrDefault(dateTime, BigDecimal.ZERO);
SpaceOptimizeWeight predictionWeight = predictionWeightMap.get(dateTime);
BigDecimal predictionPower = predictionWeight.getPower();
optimizeDuration = optimizeList.get(optimizeIndex);
//时间转换
openWellTime = this.parseDateTime(optimizeDuration.getOpenWellTime());
......@@ -184,13 +198,15 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
} else if (predictionPower.compareTo(sumServiceRating) >= 0) {
//光伏发电功率大于运行负荷: 该时段光伏用电量量=运行负荷*0.5
wellGreenPowerOptimize = wellGreenPowerOptimize.add(serviceRating.multiply(BusinessConstant.BIG_DECIMAL_0_5));
predictionWeightMap.get(dateTime).setPower(predictionPower.subtract(serviceRating));
} else {
//光伏发电功率-井口累计发电功率 : 小于等于0不管
BigDecimal subtract = predictionPower.subtract(sumServiceRating).add(serviceRating);
BigDecimal subtract = predictionPower.subtract(serviceRating);
if (subtract.compareTo(BigDecimal.ZERO) > 0) {
//光伏发电功率小于井的运行负荷: 该时段光伏用电量=(光伏发电功率-井口累计发电功率+当前井口运行功率)*0.5
wellGreenPowerOptimize = wellGreenPowerOptimize.add(subtract.multiply(BusinessConstant.BIG_DECIMAL_0_5));
}
predictionWeightMap.get(dateTime).setPower(predictionPower.subtract(serviceRating));
}
//累加开井时长
runHourOptimize = runHourOptimize.add(BusinessConstant.BIG_DECIMAL_0_5);
......@@ -235,6 +251,52 @@ public class SpaceYesterdayGreenRateCloudServiceImpl implements ISpaceYesterdayG
});
}
/**
* 获取时间线
*
* @param strategyList 战略列表
* @param rangeToList 要列出范围
* @param activePowerMap 有功功率图
* @return {@link Map }<{@link DateTime }, {@link SpaceOptimizeWeight }>
*/
private Map<DateTime, SpaceOptimizeWeight> obtainTimeline(List<GetBasePriceStrategyDetailOutput> strategyList, List<DateTime> rangeToList, Map<Date, BigDecimal> activePowerMap) {
Map<DateTime, SpaceOptimizeWeight> weightMap = new HashMap<>(strategyList.size());
GetBasePriceStrategyDetailOutput strategy;
int strategyIndex = 0;
Date openTime;
Date closeTime;
SpaceOptimizeWeight weight;
DateTime dateTime;
for (int i = 0; i < rangeToList.size(); i++) {
dateTime = rangeToList.get(i);
weight = new SpaceOptimizeWeight();
weight.setPower(activePowerMap.getOrDefault(dateTime, BigDecimal.ZERO));
weight.setTimestamp(dateTime);
weight.setSort(i);
strategy = strategyList.get(strategyIndex);
openTime = strategy.getOpenTime();
closeTime = strategy.getCloseTime();
if (ObjectUtil.isNull(strategy.getCloseTime()) && CharSequenceUtil.equals(strategy.getEndTime(), BusinessConstant.END_OF_DAY_TIME)) {
closeTime = BusinessConstant.DATE_FLAG;
}
if (DateUtil.isIn(dateTime, openTime, closeTime)) {
weight.setWeight(super.getWeightByPeriodTypeKey(strategy.getPeriodTypeKey()));
weight.setElectricityPrice(strategy.getElectrovalence());
if (DateUtil.compare(dateTime, closeTime) == 0) {
strategyIndex++;
}
} else {
strategyIndex++;
}
if (strategyIndex == strategyList.size()) {
strategyIndex = strategyList.size() - 1;
}
weightMap.put(dateTime, weight);
}
return weightMap;
}
/**
* 转换时间
*
......
......@@ -59,4 +59,9 @@ public class SpaceOptimizeWeight {
* 发电类型key
*/
private String generationTypeKey;
/**
* 电价
*/
private BigDecimal electricityPrice;
}
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