Commit 01be9511 authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.修改系统首页大屏总览接口,增加区分组织机构逻辑,完成接口冒烟测试;
2.修改系统首页获取井场列表接口,增加区分组织机构逻辑,完成接口冒烟测试;
3.修改系统首页井场功能下钻后提示报错问题,修改用电功率数据获取逻辑,修复报错问题;
4.修改输电线路分页列表查询接口,增加查询条件,在查询父线路列表时只查询10千伏线路,修改线上接口文档同时完成接口冒烟测试;
5.修改系统首页井场实时监控接口,增加区分组织机构逻辑,完成接口冒烟测试;
6.修改系统首页用能分析接口,增加区分组织机构逻辑,完成接口冒烟测试;
7.修改系统首页井场用能分析(双坐标轴)接口,增加区分组织机构逻辑,完成接口冒烟测试;
8.修改系统首页累积用电接口,增加区分组织机构逻辑,完成接口冒烟测试;
9.修改系统首页光伏实时监控接口,增加区分组织机构逻辑,完成接口冒烟测试;
10.修改系统首页井场效果评价接口,增加区分组织机构逻辑,完成接口冒烟测试;
11.修改系统首页先导实验井间开制度接口,增加区分组织机构逻辑,完成接口冒烟测试;
12.修改极短期间开优化模块井口生产情况油井状态接口,增加区分组织机构逻辑,完成接口冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent c67cd465
...@@ -2,24 +2,19 @@ package pps.core.space.service; ...@@ -2,24 +2,19 @@ package pps.core.space.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.cloud.base.service.IBasePriceStrategyCloudService;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineInput;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineOutput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantInput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantViewOutput;
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.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerInput;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerOutput;
import pps.core.common.constant.BusinessConstant; import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel; import pps.core.common.entity.BaseModel;
import pps.core.space.entity.*; import pps.core.space.entity.SpaceOptimizeShortDurationEnt;
import pps.core.space.mapper.*; import pps.core.space.entity.SpaceOptimizeShortWellheadEnt;
import pps.core.space.entity.SpaceOptimizeUltraDurationEnt;
import pps.core.space.entity.SpaceOptimizeUltraWellheadEnt;
import pps.core.space.mapper.SpaceOptimizeShortDurationMapper;
import pps.core.space.mapper.SpaceOptimizeShortWellheadMapper;
import pps.core.space.mapper.SpaceOptimizeUltraDurationMapper;
import pps.core.space.mapper.SpaceOptimizeUltraWellheadMapper;
import pps.core.space.service.data.SpaceOptimizeDateDuration; import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.service.data.space_optimize_short_wellhead.QuerySpaceOptimizeShortWellheadInput; import pps.core.space.service.data.space_optimize_short_wellhead.QuerySpaceOptimizeShortWellheadInput;
import pps.core.space.service.data.space_optimize_short_wellhead.QuerySpaceOptimizeShortWellheadOutput; import pps.core.space.service.data.space_optimize_short_wellhead.QuerySpaceOptimizeShortWellheadOutput;
...@@ -29,12 +24,8 @@ import xstartup.annotation.XText; ...@@ -29,12 +24,8 @@ import xstartup.annotation.XText;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.base.util.XCopyUtils; import xstartup.base.util.XCopyUtils;
import xstartup.data.XListResult; import xstartup.data.XListResult;
import xstartup.data.XServiceResult;
import xstartup.feature.api.annotation.XApiGet;
import xstartup.feature.api.annotation.XApiPost; import xstartup.feature.api.annotation.XApiPost;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -48,186 +39,6 @@ import java.util.stream.Collectors; ...@@ -48,186 +39,6 @@ import java.util.stream.Collectors;
@XText("间开优化对外提供接口服务") @XText("间开优化对外提供接口服务")
public class SpaceOptimizeApiService extends SpaceOptimizeBaseService { public class SpaceOptimizeApiService extends SpaceOptimizeBaseService {
@XApiGet(anonymous = true)
@XText("极短期间开优化--计算一个率")
public XServiceResult getOptimization(XContext context) {
DateTime of = DateTime.of("2024-04-02", "yyyy-MM-dd");
//市电峰谷
IBasePriceStrategyCloudService strategyCloudService = context.getBean(IBasePriceStrategyCloudService.class);
SpaceInstitutionDetailMapper detailMapper = context.getBean(SpaceInstitutionDetailMapper.class);
SpaceInstitutionWellheadMapper wellheadMapper = context.getBean(SpaceInstitutionWellheadMapper.class);
SpaceOptimizeShortDurationMapper shortDurationMapper = context.getBean(SpaceOptimizeShortDurationMapper.class);
SpaceInstitutionDetailEnt detailEnt;
List<SpaceInstitutionWellheadEnt> wellheadList;
XListResult<DynamicQueryBasePowerLinePlantViewOutput> plantResult;
List<DynamicQueryBasePowerLinePlantViewOutput> plantList;
XListResult<GetBasePriceStrategyDetailOutput> strategyResult;
List<GetBasePriceStrategyDetailOutput> strategyList;
List<SpaceOptimizeShortDurationEnt> shortDurationList;
List<DynamicQueryPlantPredictedPowerOutput> generationHourList;
List<DynamicQueryBasePowerLineOutput> lineList = ServiceUtil.getPowerLineList(context, DynamicQueryBasePowerLineInput.builder()
.gridTypeKey("1")
.build());
//分母(谷电和光伏发电去重总时间)
long lowAndPowerSumMinute = 0;
//分子已优化(谷电和光伏发电去重总时间内间开时间)
long optimizeSumMinute = 0;
//分子未优化(谷电和光伏发电去重总时间内间开时间)
long unOptimizeSumMinute = 0;
for (DynamicQueryBasePowerLineOutput line : lineList) {
//查对应间开制度
detailEnt = detailMapper.selectOne(new LambdaQueryWrapper<SpaceInstitutionDetailEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceInstitutionDetailEnt::getIsCurrentBasic, BusinessConstant.ZERO)
.eq(SpaceInstitutionDetailEnt::getLineId, line.getId())
);
if (ObjectUtil.isEmpty(detailEnt)) {
continue;
}
//查间开关联井口(间抽井,小间开)
wellheadList = wellheadMapper.selectList(new LambdaQueryWrapper<SpaceInstitutionWellheadEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceInstitutionWellheadEnt::getInstitutionId, detailEnt.getId())
.eq(SpaceInstitutionWellheadEnt::getRunTypeKey, BusinessConstant.INTERVAL_PUMPING_WELL)
.eq(SpaceInstitutionWellheadEnt::getIntervalTypeKey, "0")
.orderByAsc(SpaceInstitutionWellheadEnt::getStartSeq)
);
if (CollUtil.isEmpty(wellheadList)) {
continue;
}
//查线路下所有电站
plantList = ServiceUtil.getPowerLinePlantList(context, DynamicQueryBasePowerLinePlantInput.builder()
.lineId(line.getId())
.build());
if (CollUtil.isEmpty(plantList)) {
continue;
}
//查线路关联市电峰谷
strategyResult = strategyCloudService.queryStrategyDetailList(context, GetBasePriceStrategyDetailInput.builder()
.lineId(line.getId())
.periodTypeKey(BusinessConstant.PERIOD_TYPE_LOW)
.strategyMonth("4")
.build());
strategyList = strategyResult.getResult();
if (CollUtil.isEmpty(strategyList)) {
continue;
}
//查间开时间段
shortDurationList = shortDurationMapper.selectList(new LambdaQueryWrapper<SpaceOptimizeShortDurationEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeShortDurationEnt::getOptimizeDate, of)
.in(SpaceOptimizeShortDurationEnt::getWellheadId, wellheadList.stream()
.map(SpaceInstitutionWellheadEnt::getWellheadId)
.collect(Collectors.toList())
)
.orderByAsc(SpaceOptimizeShortDurationEnt::getOpenWellTime)
);
if (CollUtil.isEmpty(shortDurationList)) {
continue;
}
//查当日预测发电时间段
generationHourList = this.getAveragePowerGeneration15List(context, DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(plantList.stream()
.map(DynamicQueryBasePowerLinePlantViewOutput::getPlantId)
.collect(Collectors.toList()))
.startTime(of.toString())
.endTime(DateUtil.offsetDay(of, 1).toString())
.dateType(BusinessConstant.ONE)
.build());
//取有发电量的时间段
generationHourList = generationHourList.stream()
.filter(generationHour -> generationHour.getPower().compareTo(BigDecimal.ZERO) > 0)
.collect(Collectors.toList());
if (CollUtil.isEmpty(generationHourList)) {
continue;
}
List<SpaceOptimizeDurationDTO> powerSpaceList = new ArrayList<>(4);
DateTime beginDate = DateUtil.date(generationHourList.get(0).getCreateTime());
DateTime endDate = DateUtil.date(generationHourList.get(generationHourList.size() - 1).getCreateTime());
powerSpaceList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(beginDate)
.closeTime(endDate)
.build()
);
//计算发电时间(分钟)
long powerMinute = DateUtil.between(beginDate, endDate, DateUnit.MINUTE);
for (GetBasePriceStrategyDetailOutput strategyDetail : strategyList) {
DateTime startTime = DateUtil.parse(strategyDetail.getStartTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
DateTime endTime;
if (CharSequenceUtil.equals(strategyDetail.getEndTime(), BusinessConstant.END_OF_DAY_TIME)) {
endTime = BusinessConstant.DATE_FLAG;
} else {
endTime = DateUtil.parse(strategyDetail.getEndTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
}
//判断
if (startTime.compareTo(beginDate) <= 0 && endTime.compareTo(beginDate) >= 0) {
endTime = beginDate;
} else if (startTime.compareTo(endDate) <= 0 && endTime.compareTo(endDate) >= 0) {
startTime = endDate;
} else if (startTime.compareTo(beginDate) >= 0 && endTime.compareTo(endDate) <= 0) {
//时间段和发电时间重合,排除
continue;
}
powerSpaceList.add(
SpaceOptimizeDurationDTO.builder()
.openTime(startTime)
.closeTime(endTime)
.build()
);
//计算谷电时间(分钟) 累加
powerMinute += DateUtil.between(startTime, endTime, DateUnit.MINUTE);
}
lowAndPowerSumMinute += powerMinute;
//优化时长(分钟)
long optimizeMinute = 0;
//未优化时长(分钟)
long unOptimizeMinute = 0;
//计算间开时间
for (SpaceOptimizeShortDurationEnt duration : shortDurationList) {
DateTime openWellTime = DateUtil.parse(duration.getOpenWellTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
DateTime closeWellTime;
if (CharSequenceUtil.equals(duration.getCloseWellTime(), BusinessConstant.END_OF_DAY_TIME)) {
closeWellTime = BusinessConstant.DATE_FLAG;
} else {
closeWellTime = DateUtil.parse(duration.getCloseWellTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
}
for (SpaceOptimizeDurationDTO dto : powerSpaceList) {
DateTime openTime = DateUtil.date(dto.getOpenTime());
DateTime closeTime = DateUtil.date(dto.getCloseTime());
if (openWellTime.compareTo(closeTime) >= 0) {
continue;
} else if (closeWellTime.compareTo(openTime) <= 0) {
continue;
} else if (openWellTime.compareTo(openTime) <= 0 && closeWellTime.compareTo(closeTime) <= 0) {
openWellTime = openTime;
} else if (openWellTime.compareTo(openTime) < 0 && closeWellTime.compareTo(closeTime) > 0) {
openWellTime = openTime;
closeWellTime = closeTime;
} else if (openWellTime.compareTo(openTime) >= 0 && closeWellTime.compareTo(closeTime) >= 0) {
closeWellTime = closeTime;
}
if (duration.getIsOptimize().equals(BusinessConstant.ZERO)) {
optimizeMinute += DateUtil.between(openWellTime, closeWellTime, DateUnit.MINUTE);
optimizeSumMinute += optimizeMinute;
} else {
unOptimizeMinute += DateUtil.between(openWellTime, closeWellTime, DateUnit.MINUTE);
unOptimizeSumMinute += unOptimizeMinute;
}
}
}
}
//分母
BigDecimal denominator = new BigDecimal(lowAndPowerSumMinute);
BigDecimal optimizeNumerator = new BigDecimal(optimizeSumMinute);
BigDecimal unOptimizeNumerator = new BigDecimal(unOptimizeSumMinute);
//计算率
BigDecimal optimizeDivide = optimizeNumerator.divide(denominator, 2, RoundingMode.HALF_UP);
BigDecimal unOptimizeDivide = unOptimizeNumerator.divide(denominator, 2, RoundingMode.HALF_UP);
BigDecimal subtract = optimizeDivide.subtract(unOptimizeDivide);
return XServiceResult.OK;
}
/** /**
* 每日间开优化结果 * 每日间开优化结果
* *
......
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