Commit 93e86022 authored by ZWT's avatar ZWT

feat[零碳项目]: 松原演示

[
1.统计分析-井组监控页功能开发,开发井组生产详情接口,完成接口冒烟测试并编写线上接口文档生成接口用例;
2.统计分析-井组监控页功能开发,开发井口实时信息接口,完成接口冒烟测试并编写线上接口文档生成接口用例;
]
parent 0bbdac01
......@@ -34,4 +34,7 @@ public class DynamicQueryBaseWellheadInput {
@XText("组织ID集合")
private List<String> ouIds;
@XText("运行类型")
private String runTypeKey;
}
......@@ -26,6 +26,9 @@ public class DynamicQueryBaseWellheadOutput {
@XText("运行类型key(字典获取)")
private String runTypeKey;
@XText("运行类型name(字典获取)")
private String runTypeName;
@XText("运行功率(KW)")
private BigDecimal serviceRating;
......
......@@ -41,12 +41,14 @@ public class BaseWellheadCloudServiceImpl implements IBaseWellheadCloudService {
List<String> wellNumbers = input.getWellNumbers();
String ouId = input.getOuId();
List<String> ouIds = input.getOuIds();
String runTypeKey = input.getRunTypeKey();
BaseWellheadMapper mapper = context.getBean(BaseWellheadMapper.class);
List<BaseWellheadEnt> list = mapper.selectList(
new LambdaQueryWrapper<BaseWellheadEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(CharSequenceUtil.isNotBlank(wellheadId), BaseModel::getId, wellheadId)
.eq(CharSequenceUtil.isNotBlank(ouId), BaseWellheadEnt::getOuId, ouId)
.eq(CharSequenceUtil.isNotBlank(runTypeKey), BaseWellheadEnt::getRunTypeKey, runTypeKey)
.in(CollUtil.isNotEmpty(wellheadIds), BaseModel::getId, wellheadIds)
.in(CollUtil.isNotEmpty(wellNumbers), BaseWellheadEnt::getWellNumber, wellNumbers)
.in(CollUtil.isNotEmpty(ouIds), BaseWellheadEnt::getOuId, ouIds)
......
......@@ -2,9 +2,12 @@ package pps.cloud.space.service;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetMonthlyWellCountInput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetMonthlyWellCountOutput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadInput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadOutput;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XServiceResult;
import xstartup.data.XSingleResult;
......@@ -36,4 +39,14 @@ public interface ISpaceOptimizeShortCloudService {
*/
@XText("短期间开开优化Cloud模块--月度井口统计")
XSingleResult<GetMonthlyWellCountOutput> monthlyWellCount(XContext context, GetMonthlyWellCountInput input);
/**
* 每日优化结果
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetSpaceOptimizeShortWellheadOutput }>
*/
@XText("短期间开开优化Cloud模块--日优化结果")
XListResult<GetSpaceOptimizeShortWellheadOutput> dailyOptimizationResult(XContext context, GetSpaceOptimizeShortWellheadInput input);
}
package pps.cloud.space.service.data.space_optimize_short_wellhead;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.util.List;
/**
* 获得空间优化短井口输入
*
* @author ZWT
* @date 2024/07/26
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetSpaceOptimizeShortWellheadInput {
/**
* 线路id
*/
@XText("线路ID")
private String lineId;
/**
* 井口id
*/
@XText("井口ID")
private String wellheadId;
/**
* 井口id列表
*/
@XText("井口ID列表")
private List<String> wellheadIds;
}
package pps.cloud.space.service.data.space_optimize_short_wellhead;
import lombok.Data;
import xstartup.annotation.XText;
import java.util.List;
/**
* 获得空间优化短井口产量
*
* @author ZWT
* @date 2024/07/26
*/
@Data
public class GetSpaceOptimizeShortWellheadOutput {
@XText("井口ID")
private String wellheadId;
@XText("井号")
private String wellNumber;
/**
* 井口配置(已优化)
*/
@XText("井口配置(已优化)")
private List<SpaceOptimizeDateDuration> optimizeList;
}
package pps.cloud.space.service.data.space_optimize_short_wellhead;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
/**
* 空间优化日期持续时间
*
* @author ZWT
* @date 2024/07/26
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SpaceOptimizeDateDuration {
@XText("开井时间")
private String openWellTime;
@XText("关井时间")
private String closeWellTime;
@XText("井口状态:0_关井,1_开井")
private Integer isOpen;
}
package pps.core.space.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.cloud.space.service.ISpaceOptimizeShortCloudService;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetMonthlyWellCountInput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetMonthlyWellCountOutput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadInput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadOutput;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.SpaceOptimizeDurationDTO;
import pps.core.space.entity.SpaceOptimizePeriodDTO;
import pps.core.space.entity.SpaceOptimizeShortWellheadEnt;
import pps.core.space.entity.SpaceOptimizeWellheadDTO;
import pps.core.space.entity.*;
import pps.core.space.mapper.SpaceOptimizeShortDurationMapper;
import pps.core.space.mapper.SpaceOptimizeShortWellheadMapper;
import pps.core.space.mapper.SpaceOptimizeViewMapper;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.utils.ServiceUtil;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.base.util.XCopyUtils;
import xstartup.data.XListResult;
import xstartup.data.XServiceResult;
import xstartup.data.XSingleResult;
import xstartup.helper.XTransactionHelper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 极短期间开优化Cloud模块
......@@ -106,4 +117,40 @@ public class SpaceOptimizeShortCloudServiceImpl extends SpaceOptimizeBaseService
.wellNumber(count)
.build());
}
/**
* 每日优化结果
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetSpaceOptimizeShortWellheadOutput }>
*/
@Override
public XListResult<GetSpaceOptimizeShortWellheadOutput> dailyOptimizationResult(XContext context, GetSpaceOptimizeShortWellheadInput input) {
DateTime today = DateUtil.beginOfDay(DateUtil.date());
SpaceOptimizeShortWellheadMapper wellheadMapper = context.getBean(SpaceOptimizeShortWellheadMapper.class);
List<SpaceOptimizeShortWellheadEnt> wellheadList = wellheadMapper.selectList(new LambdaQueryWrapper<SpaceOptimizeShortWellheadEnt>()
.in(SpaceOptimizeShortWellheadEnt::getWellheadId, input.getWellheadIds())
.eq(SpaceOptimizeShortWellheadEnt::getOptimizeDate, today)
);
if (CollUtil.isEmpty(wellheadList)) {
return XListResult.success(Collections.emptyList());
}
List<pps.core.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadOutput> wellheadOutputs = XCopyUtils.copyNewList(wellheadList, pps.core.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadOutput.class);
SpaceOptimizeShortDurationMapper durationMapper = context.getBean(SpaceOptimizeShortDurationMapper.class);
List<SpaceOptimizeShortDurationEnt> durationList = durationMapper.selectList(new LambdaQueryWrapper<SpaceOptimizeShortDurationEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeShortDurationEnt::getIsOptimize, BusinessConstant.ZERO)
.in(SpaceOptimizeShortDurationEnt::getWellheadId, input.getWellheadIds())
.eq(SpaceOptimizeShortDurationEnt::getOptimizeDate, today)
.orderByAsc(SpaceOptimizeShortDurationEnt::getIsOptimize, SpaceOptimizeShortDurationEnt::getOpenWellTime)
);
List<SpaceOptimizeDateDuration> durationOutputs = XCopyUtils.copyNewList(durationList, SpaceOptimizeDateDuration.class);
Map<String, List<SpaceOptimizeDateDuration>> collect = durationOutputs.stream()
.collect(Collectors.groupingBy(SpaceOptimizeDateDuration::getWellheadId));
for (pps.core.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadOutput wellhead : wellheadOutputs) {
wellhead.setOptimizeList(ServiceUtil.getAllDateDuration(collect.get(wellhead.getWellheadId())));
}
return XListResult.success(XCopyUtils.copyNewList(wellheadOutputs, GetSpaceOptimizeShortWellheadOutput.class));
}
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package pps.core.prediction.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
......@@ -27,8 +28,7 @@ import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyEle
import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyElectricityTrendOutput;
import pps.cloud.space.service.data.space_institution_wellhead.GetSpaceInstitutionWellheadInput;
import pps.cloud.space.service.data.space_institution_wellhead.GetSpaceInstitutionWellheadOutput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetMonthlyWellCountInput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.GetMonthlyWellCountOutput;
import pps.cloud.space.service.data.space_optimize_short_wellhead.*;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyAverageInput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendInput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendOutput;
......@@ -43,6 +43,7 @@ import pps.core.prediction.enums.BusinessError;
import pps.core.prediction.mapper.*;
import pps.core.prediction.service.data.energy_consumption_analysis.*;
import pps.core.prediction.service.data.home_page.GetPowerAnalyseOutput;
import pps.core.prediction.service.data.third_current_well_condition.GetRealTimeInfoOutput;
import pps.core.prediction.service.data.third_current_well_condition.GetThirdCurrentWellConditionOutput;
import pps.core.prediction.utils.ServiceUtil;
import xstartup.annotation.XService;
......@@ -879,6 +880,75 @@ public class EnergyConsumptionAnalysisService {
.build());
}
/**
* 井口实时信息
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetRealTimeInfoOutput }>
*/
@XText("井组监控--井口实时信息")
@XApiGet
public XListResult<GetRealTimeInfoOutput> wellRealTimeInfo(XContext context, GetEnergyConsumptionAnalysisInput input) {
List<GetRealTimeInfoOutput> currentList = Collections.emptyList();
List<DynamicQueryBaseWellheadOutput> wellList = this.getWellListByOuId(context, this.getOrgIdsByPath(context, input.getOuId()), input.getRunTypeKey());
if (CollUtil.isNotEmpty(wellList)) {
String wellStatus = input.getWellStatus();
Map<String, DynamicQueryBaseWellheadOutput> collect = new HashMap<>(wellList.size());
List<String> wellIds = new ArrayList<>(wellList.size());
for (DynamicQueryBaseWellheadOutput well : wellList) {
collect.put(well.getWellNumber(), well);
wellIds.add(well.getId());
}
ThirdCurrentWellConditionMapper mapper = context.getBean(ThirdCurrentWellConditionMapper.class);
List<ThirdCurrentWellConditionEnt> list = mapper.selectList(new LambdaQueryWrapper<ThirdCurrentWellConditionEnt>()
.in(ThirdCurrentWellConditionEnt::getWellNumber, collect.keySet())
.eq(CharSequenceUtil.isNotBlank(wellStatus), ThirdCurrentWellConditionEnt::getWellStatus, wellStatus)
);
if (CollUtil.isNotEmpty(list)) {
//当日间开
ISpaceOptimizeShortCloudService service = context.getBean(ISpaceOptimizeShortCloudService.class);
XListResult<GetSpaceOptimizeShortWellheadOutput> result = service.dailyOptimizationResult(context, GetSpaceOptimizeShortWellheadInput.builder()
.wellheadIds(wellIds)
.build());
result.throwIfFail();
List<GetSpaceOptimizeShortWellheadOutput> optimizeWellheadList = result.getResult();
Map<String, List<SpaceOptimizeDateDuration>> listMap;
if (CollUtil.isNotEmpty(optimizeWellheadList)) {
listMap = optimizeWellheadList.stream()
.collect(Collectors.toMap(GetSpaceOptimizeShortWellheadOutput::getWellNumber, GetSpaceOptimizeShortWellheadOutput::getOptimizeList));
} else {
listMap = Collections.emptyMap();
}
//查生效中的所有井口
BigDecimal nextOpen;
currentList = new ArrayList<>(list.size());
DateTime now = DateUtil.date();
for (ThirdCurrentWellConditionEnt ent : list) {
if (ObjectUtil.isNull(ent.getNextTime()) ||
CharSequenceUtil.contains(DateUtil.date(ent.getNextTime()).toString(), ThirdPartyApiConstant.DATE_FLAG) ||
DateUtil.compare(now, ent.getNextTime()) >= 0) {
nextOpen = BigDecimal.valueOf(-1);
} else {
nextOpen = BaseUtils.divide(BigDecimal.valueOf(DateUtil.between(ent.getNextTime(), now, DateUnit.MINUTE)), BusinessConstant.BIG_DECIMAL_60);
}
currentList.add(
GetRealTimeInfoOutput.builder()
.wellNumber(ent.getWellNumber())
.nextOpen(nextOpen)
.wellStatus(ent.getWellStatus())
.runTypeName(collect.get(ent.getWellNumber()).getRunTypeName())
.ratedPower(collect.get(ent.getWellNumber()).getRatedPower())
.optimizeList(listMap.getOrDefault(ent.getWellNumber(), Collections.emptyList()))
.build()
);
}
}
}
return XListResult.success(currentList);
}
/*------------------------------ 能耗分析(废弃) ------------------------------*/
/**
......@@ -1212,6 +1282,24 @@ public class EnergyConsumptionAnalysisService {
return result.getResult();
}
/**
* 获取井口列表
*
* @param context 上下文
* @param ouIds ou-ids
* @param runTypeKey 运行类型键
* @return {@link List }<{@link DynamicQueryBaseWellheadOutput }>
*/
private List<DynamicQueryBaseWellheadOutput> getWellListByOuId(XContext context, List<String> ouIds, String runTypeKey) {
IBaseWellheadCloudService service = context.getBean(IBaseWellheadCloudService.class);
XListResult<DynamicQueryBaseWellheadOutput> result = service.queryBaseWellheadListByParam(context, DynamicQueryBaseWellheadInput.builder()
.ouIds(ouIds)
.runTypeKey(runTypeKey)
.build());
result.throwIfFail();
return result.getResult();
}
/**
* 查询用电功率
*
......
......@@ -37,4 +37,16 @@ public class GetEnergyConsumptionAnalysisInput {
*/
@XText("日期范围类型(0_本月;1_本年)")
private Integer dateType;
/**
* 运行类型
*/
@XText("运行类型key(字典获取)")
private String runTypeKey;
/**
* 井口状态
*/
@XText("井口状态(开/停井)")
private String wellStatus;
}
package pps.core.prediction.service.data.third_current_well_condition;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import pps.cloud.space.service.data.space_optimize_short_wellhead.SpaceOptimizeDateDuration;
import xstartup.annotation.XText;
import java.math.BigDecimal;
import java.util.List;
/**
* 井口实时信息输出
*
* @author ZWT
* @date 2024/07/26
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetRealTimeInfoOutput {
@XText("井号")
private String wellNumber;
@XText("距下次启停小时")
private BigDecimal nextOpen;
@XText("井口状态(开/停井)")
private String wellStatus;
@XText("运行类型(字典获取)")
private String runTypeName;
@XText("额定功率(KW)")
private BigDecimal ratedPower;
@XText("井口配置(已优化)")
private List<SpaceOptimizeDateDuration> optimizeList;
}
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