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