Commit 05220e73 authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.邮件发送服务代码修改,修改配置文件及发送逻辑,解决邮件名称唯一性;
2.邮件接收功能修改,解决邮件接收协议修改后导致的一系列问题;
3.长期间开优化功能修改,修改定时任务处理逻辑及执行周期;
4.中期间开优化功能修改,修改定时任务处理逻辑及执行周期;
5.超长期间开优化功能开发,开发相关接口及定时任务,创建对应数据表,生成对应接口文档并完成接口冒烟测试;
6.超短期间开优化功能开发,开发相关接口及定时任务,创建对应数据表,生成对应接口文档并完成接口冒烟测试;
7.组织线路树功能修改,重构查询逻辑;
8.间开优化历史功能修改,重构查询逻辑;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 6d79981e
......@@ -39,7 +39,6 @@ import xstartup.base.exception.XServiceException;
import xstartup.data.XListResult;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
......@@ -415,165 +414,175 @@ public class SpaceOptimizeBaseService {
}
//离网优化
if (CollUtil.isNotEmpty(offGridPeriodList)) {
BigDecimal avgRatedDischargeEfficiency = BigDecimal.ZERO;
BigDecimal avgRatedDischargeDepth = BigDecimal.ZERO;
BigDecimal avgRatedDischargePower = BigDecimal.ZERO;
Iterator<DynamicQueryStoragePredictedPowerOutput> iterator = null;
if (storageAvgMap.containsKey(detail.getLineId())) {
//查获取前一个月该时间点储能剩余电量,求平均数
List<DynamicQueryStoragePredictedPowerOutput> averageEnergyStorageList = this.getAverageEnergyStorageListByParam(context, input);
if (CollUtil.isEmpty(averageEnergyStorageList)) {
//没有储能发电量,无法计算
return;
}
//取储能计算参数
List<DynamicQueryBasePowerLineStorageViewOutput> avgStorageViewList = storageAvgMap.get(detail.getLineId());
DynamicQueryBasePowerLineStorageViewOutput avgStorageView = avgStorageViewList.get(0);
//平均额定放电效率(%)
avgRatedDischargeEfficiency = avgStorageView.getRatedDischargeEfficiency();
//平均额定放电深度(%)
avgRatedDischargeDepth = avgStorageView.getRatedDischargeDepth();
//平均额定放电功率(KW)
avgRatedDischargePower = avgStorageView.getRatedDischargePower();
//逐15分钟计算光伏出力-井场运行功率之和,获得光伏出力不足时间段,并计算储能可用时长
iterator = averageEnergyStorageList.iterator();
}
//截取从第一次开井时间往后的时间段
List<DynamicQueryPlantPredictedPowerOutput> subAvgPowerList = CollUtil.sub(avgPowerList, firstIndex, avgPowerList.size());
if (CollUtil.isEmpty(subAvgPowerList)) {
//没有时间段,无法计算
return;
}
for (DynamicQueryPlantPredictedPowerOutput avg : subAvgPowerList) {
if (totalOperatingPower.compareTo(avg.getPower()) >= 0) {
//电量不足,计算储能可用时长
avg.setBatteryLowFlag(false);
String hourTime = avg.getHourTime();
String minTime = avg.getMinTime();
if (Objects.isNull(iterator)) {
avg.setPowerDuration(0);
} else {
while (iterator.hasNext()) {
DynamicQueryStoragePredictedPowerOutput storagePredicted = iterator.next();
if (StringUtils.equals(hourTime, storagePredicted.getHourTime()) && StringUtils.equals(minTime, storagePredicted.getMinTime())) {
//计算储能可供电时长:(储能剩余容量*放电深度*放电效率)/额定放电功率
avg.setPowerDuration(
storagePredicted.getPower()
.multiply(avgRatedDischargeDepth)
.multiply(avgRatedDischargeEfficiency)
.divide(avgRatedDischargePower, 6, BigDecimal.ROUND_HALF_UP)
.setScale(BusinessConstant.ZERO, RoundingMode.DOWN)
.intValueExact()
);
break;
}
//删除计算过的时间段
iterator.remove();
}
}
} else {
avg.setBatteryLowFlag(true);
}
}
// BigDecimal avgRatedDischargeEfficiency = BigDecimal.ZERO;
// BigDecimal avgRatedDischargeDepth = BigDecimal.ZERO;
// BigDecimal avgRatedDischargePower = BigDecimal.ZERO;
// Iterator<DynamicQueryStoragePredictedPowerOutput> iterator = null;
// if (storageAvgMap.containsKey(detail.getLineId())) {
// //查获取前一个月该时间点储能剩余电量,求平均数
// List<DynamicQueryStoragePredictedPowerOutput> averageEnergyStorageList = this.getAverageEnergyStorageListByParam(context, input);
// if (CollUtil.isEmpty(averageEnergyStorageList)) {
// //没有储能发电量,无法计算
// return;
// }
// //取储能计算参数
// List<DynamicQueryBasePowerLineStorageViewOutput> avgStorageViewList = storageAvgMap.get(detail.getLineId());
// DynamicQueryBasePowerLineStorageViewOutput avgStorageView = avgStorageViewList.get(0);
// //平均额定放电效率(%)
// avgRatedDischargeEfficiency = avgStorageView.getRatedDischargeEfficiency();
// //平均额定放电深度(%)
// avgRatedDischargeDepth = avgStorageView.getRatedDischargeDepth();
// //平均额定放电功率(KW)
// avgRatedDischargePower = avgStorageView.getRatedDischargePower();
// //逐15分钟计算光伏出力-井场运行功率之和,获得光伏出力不足时间段,并计算储能可用时长
// iterator = averageEnergyStorageList.iterator();
// }
// //截取从第一次开井时间往后的时间段
// List<DynamicQueryPlantPredictedPowerOutput> subAvgPowerList = CollUtil.sub(avgPowerList, firstIndex, avgPowerList.size());
// if (CollUtil.isEmpty(subAvgPowerList)) {
// //没有时间段,无法计算
// return;
// }
// for (DynamicQueryPlantPredictedPowerOutput avg : subAvgPowerList) {
// if (totalOperatingPower.compareTo(avg.getPower()) >= 0) {
// //电量不足,计算储能可用时长
// avg.setBatteryLowFlag(false);
// String hourTime = avg.getHourTime();
// String minTime = avg.getMinTime();
// if (Objects.isNull(iterator)) {
// avg.setPowerDuration(0);
// } else {
// while (iterator.hasNext()) {
// DynamicQueryStoragePredictedPowerOutput storagePredicted = iterator.next();
// if (StringUtils.equals(hourTime, storagePredicted.getHourTime()) && StringUtils.equals(minTime, storagePredicted.getMinTime())) {
// //计算储能可供电时长:(储能剩余容量*放电深度*放电效率)/额定放电功率
// avg.setPowerDuration(
// storagePredicted.getPower()
// .multiply(avgRatedDischargeDepth)
// .multiply(avgRatedDischargeEfficiency)
// .divide(avgRatedDischargePower, 6, BigDecimal.ROUND_HALF_UP)
// .setScale(BusinessConstant.ZERO, RoundingMode.DOWN)
// .intValueExact()
// );
// break;
// }
// //删除计算过的时间段
// iterator.remove();
// }
// }
// } else {
// avg.setBatteryLowFlag(true);
// }
// }
//拆分时间段
for (SpaceOptimizeDurationDTO durationDTO : offGridPeriodList) {
Date openTime = durationDTO.getOpenTime();
Date closeTime = durationDTO.getCloseTime();
//-----------------------------------大庆暂时不用储能
DateTime closeTime = DateUtil.date(durationDTO.getCloseTime());
String endTime = closeTime.toString(BusinessConstant.MINUTES_FORMAT);
if (closeTime.compareTo(BusinessConstant.DATE_FLAG) > 0) {
closeTime = DateUtil.endOfDay(DateUtil.date());
endTime = BusinessConstant.END_OF_DAY_TIME;
}
//匹配时间
for (DynamicQueryPlantPredictedPowerOutput avg : subAvgPowerList) {
DateTime createTime = DateUtil.date(avg.getCreateTime());
//计算时间范围:大于等于开始时间,小于等于结束时间
if (createTime.compareTo(openTime) >= 0 && createTime.compareTo(closeTime) < 0) {
String endString = createTime.offsetNew(DateField.MINUTE, 15).toString(BusinessConstant.MINUTES_FORMAT);
String startString = createTime.toString(BusinessConstant.MINUTES_FORMAT);
if (StringUtils.equals(endString, BusinessConstant.START_OF_DAY_TIME)) {
endString = BusinessConstant.END_OF_DAY_TIME;
}
//电量满足跳过
if (avg.getBatteryLowFlag()) {
//创建光伏
this.createOptimizeDuration(durationDTOList, periodId, durationDTO.getRecordId(), durationDTO.getWellheadId(), BusinessConstant.PHOTOVOLTAIC,
startString, endString
);
} else {
int powerDuration = avg.getPowerDuration();
powerDuration = Math.min(powerDuration, 15);
String offset = createTime.offsetNew(DateField.MINUTE, powerDuration).toString(BusinessConstant.MINUTES_FORMAT);
if (StringUtils.equals(offset, BusinessConstant.START_OF_DAY_TIME)) {
offset = BusinessConstant.END_OF_DAY_TIME;
}
if (0 != powerDuration) {
//储能发电时长
this.createOptimizeDuration(durationDTOList, periodId, durationDTO.getRecordId(), durationDTO.getWellheadId(), BusinessConstant.STORED_ENERGY,
startString, offset
);
}
if (15 != powerDuration) {
//柴发发电时长
this.createOptimizeDuration(durationDTOList, periodId, durationDTO.getRecordId(), durationDTO.getWellheadId(), BusinessConstant.DIESEL_POWER,
offset, endString
DateUtil.date(durationDTO.getOpenTime()).toString(BusinessConstant.MINUTES_FORMAT), endTime
);
}
}
}
}
//-----------------------------------原始逻辑
// Date openTime = durationDTO.getOpenTime();
// Date closeTime = durationDTO.getCloseTime();
// if (closeTime.compareTo(BusinessConstant.DATE_FLAG) > 0) {
// closeTime = DateUtil.endOfDay(DateUtil.date());
// }
//匹配时间
// for (DynamicQueryPlantPredictedPowerOutput avg : subAvgPowerList) {
// DateTime createTime = DateUtil.date(avg.getCreateTime());
// //计算时间范围:大于等于开始时间,小于等于结束时间
// if (createTime.compareTo(openTime) >= 0 && createTime.compareTo(closeTime) < 0) {
// String endString = createTime.offsetNew(DateField.MINUTE, 15).toString(BusinessConstant.MINUTES_FORMAT);
// String startString = createTime.toString(BusinessConstant.MINUTES_FORMAT);
// if (StringUtils.equals(endString, BusinessConstant.START_OF_DAY_TIME)) {
// endString = BusinessConstant.END_OF_DAY_TIME;
// }
// //电量满足跳过
// if (avg.getBatteryLowFlag()) {
// //创建光伏
// this.createOptimizeDuration(durationDTOList, periodId, durationDTO.getRecordId(), durationDTO.getWellheadId(), BusinessConstant.PHOTOVOLTAIC,
// startString, endString
// );
// } else {
// int powerDuration = avg.getPowerDuration();
// powerDuration = Math.min(powerDuration, 15);
// String offset = createTime.offsetNew(DateField.MINUTE, powerDuration).toString(BusinessConstant.MINUTES_FORMAT);
// if (StringUtils.equals(offset, BusinessConstant.START_OF_DAY_TIME)) {
// offset = BusinessConstant.END_OF_DAY_TIME;
// }
// if (0 != powerDuration) {
// //储能发电时长
// this.createOptimizeDuration(durationDTOList, periodId, durationDTO.getRecordId(), durationDTO.getWellheadId(), BusinessConstant.STORED_ENERGY,
// startString, offset
// );
// }
// if (15 != powerDuration) {
// //柴发发电时长
// this.createOptimizeDuration(durationDTOList, periodId, durationDTO.getRecordId(), durationDTO.getWellheadId(), BusinessConstant.DIESEL_POWER,
// offset, endString
// );
// }
// }
// }
// }
}
//时间段优化
if (CollUtil.isNotEmpty(durationDTOList)) {
List<SpaceOptimizeDurationDTO> finallyList = new ArrayList<>(durationDTOList.size());
List<SpaceOptimizeDurationDTO> offList = new ArrayList<>(durationDTOList.size());
for (SpaceOptimizeDurationDTO durationDTO : durationDTOList) {
if (StringUtils.equals(periodId, durationDTO.getPeriodId())) {
offList.add(durationDTO);
} else {
finallyList.add(durationDTO);
}
}
//优化
if (CollUtil.isNotEmpty(offList)) {
Map<String, List<SpaceOptimizeDurationDTO>> collect = offList.stream()
.collect(Collectors.groupingBy(SpaceOptimizeDurationDTO::getWellheadId));
for (String wellheadId : collect.keySet()) {
List<SpaceOptimizeDurationDTO> list = collect.get(wellheadId).stream()
.sorted(Comparator.comparing(SpaceOptimizeDurationDTO::getOpenWellTime))
.collect(Collectors.toList());
int size = list.size();
if (size == 1) {
finallyList.add(list.get(0));
continue;
}
List<SpaceOptimizeDurationDTO> temporarilyList = CollUtil.newArrayList(list.get(0));
for (int i = 1; i < size; i++) {
SpaceOptimizeDurationDTO end = temporarilyList.get(temporarilyList.size() - 1);
SpaceOptimizeDurationDTO durationDTO = list.get(i);
boolean equals = StringUtils.equals(end.getGenerationTypeKey(), durationDTO.getGenerationTypeKey());
//判断类型和时间段
if (!equals) {
SpaceOptimizeDurationDTO begin = temporarilyList.get(0);
begin.setCloseWellTime(end.getCloseWellTime());
finallyList.add(begin);
temporarilyList = new ArrayList<>(12);
} else if (!StringUtils.equals(end.getCloseWellTime(), durationDTO.getOpenWellTime()) && !StringUtils.equals(end.getId(), durationDTO.getId())) {
SpaceOptimizeDurationDTO begin = temporarilyList.get(0);
begin.setCloseWellTime(end.getCloseWellTime());
finallyList.add(begin);
temporarilyList = new ArrayList<>(12);
}
temporarilyList.add(durationDTO);
if (i == size - 1) {
SpaceOptimizeDurationDTO begin = temporarilyList.get(0);
begin.setCloseWellTime(durationDTO.getCloseWellTime());
finallyList.add(begin);
}
}
}
CollUtil.clear(durationDTOList);
durationDTOList.addAll(finallyList);
}
}
// if (CollUtil.isNotEmpty(durationDTOList)) {
// List<SpaceOptimizeDurationDTO> finallyList = new ArrayList<>(durationDTOList.size());
// List<SpaceOptimizeDurationDTO> offList = new ArrayList<>(durationDTOList.size());
// for (SpaceOptimizeDurationDTO durationDTO : durationDTOList) {
// if (StringUtils.equals(periodId, durationDTO.getPeriodId())) {
// offList.add(durationDTO);
// } else {
// finallyList.add(durationDTO);
// }
// }
// //优化
// if (CollUtil.isNotEmpty(offList)) {
// Map<String, List<SpaceOptimizeDurationDTO>> collect = offList.stream()
// .collect(Collectors.groupingBy(SpaceOptimizeDurationDTO::getWellheadId));
// for (String wellheadId : collect.keySet()) {
// List<SpaceOptimizeDurationDTO> list = collect.get(wellheadId).stream()
// .sorted(Comparator.comparing(SpaceOptimizeDurationDTO::getOpenWellTime))
// .collect(Collectors.toList());
// int size = list.size();
// if (size == 1) {
// finallyList.add(list.get(0));
// continue;
// }
// List<SpaceOptimizeDurationDTO> temporarilyList = CollUtil.newArrayList(list.get(0));
// for (int i = 1; i < size; i++) {
// SpaceOptimizeDurationDTO end = temporarilyList.get(temporarilyList.size() - 1);
// SpaceOptimizeDurationDTO durationDTO = list.get(i);
// boolean equals = StringUtils.equals(end.getGenerationTypeKey(), durationDTO.getGenerationTypeKey());
// //判断类型和时间段
// if (!equals) {
// SpaceOptimizeDurationDTO begin = temporarilyList.get(0);
// begin.setCloseWellTime(end.getCloseWellTime());
// finallyList.add(begin);
// temporarilyList = new ArrayList<>(12);
// } else if (!StringUtils.equals(end.getCloseWellTime(), durationDTO.getOpenWellTime()) && !StringUtils.equals(end.getId(), durationDTO.getId())) {
// SpaceOptimizeDurationDTO begin = temporarilyList.get(0);
// begin.setCloseWellTime(end.getCloseWellTime());
// finallyList.add(begin);
// temporarilyList = new ArrayList<>(12);
// }
// temporarilyList.add(durationDTO);
// if (i == size - 1) {
// SpaceOptimizeDurationDTO begin = temporarilyList.get(0);
// begin.setCloseWellTime(durationDTO.getCloseWellTime());
// finallyList.add(begin);
// }
// }
// }
// CollUtil.clear(durationDTOList);
// durationDTOList.addAll(finallyList);
// }
// }
}
}
......
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