Commit a9c9522e authored by ZWT's avatar ZWT

feat(零碳): 长庆演示系统新增功能

1.能耗分析模块功能重构,新增今日/昨日/同期电量统计查询接口,添加线上接口文档并完成接口冒烟测试同时添加用例;
2.能耗分析模块功能重构,新增今日天气查询接口,添加线上接口文档并完成接口冒烟测试同时添加用例;
3.能耗分析模块功能重构,新增井场用能分析查询接口,添加线上接口文档并完成接口冒烟测试同时添加用例;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent ff73efdb
......@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.util.Collection;
import java.util.List;
/**
* 输电线路光伏配置
......@@ -26,6 +27,12 @@ public class DynamicQueryBasePowerLinePlantInput {
@XText("光伏电站ID")
private String plantId;
@XText("线路名称")
private String lineName;
@XText("组织ID集合")
private List<String> ouIds;
@XText("线路ID集合")
private Collection<String> lineIds;
}
......@@ -23,6 +23,12 @@ public class DynamicQueryBasePowerLineWellheadInput {
@XText("线路ID")
private String lineId;
@XText("线路名称")
private String lineName;
@XText("组织ID集合")
private List<String> ouIds;
@XText("线路ID集合")
private List<String> lineIds;
......
......@@ -11,6 +11,7 @@ import xstartup.annotation.XText;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
/**
* 输电线路光伏配置
......@@ -62,6 +63,22 @@ public class BasePowerLinePlantView extends BaseModel implements Serializable {
@TableField
private Integer areaCode;
/*------------------------ false ------------------------*/
/**
* 线路名称
*/
@XText("线路名称")
@TableField(exist = false)
private String lineName;
/**
* 组织ID集合
*/
@XText("组织ID集合")
@TableField(exist = false)
private List<String> ouIds;
@XText("线路ID集合")
@TableField(exist = false)
private Collection<String> lineIds;
......
......@@ -75,6 +75,22 @@ public class BasePowerLineWellheadView extends BaseModel implements Serializable
@TableField
private BigDecimal ratedPower;
/*------------------------ false ------------------------*/
/**
* 线路名称
*/
@XText("线路名称")
@TableField(exist = false)
private String lineName;
/**
* 组织ID集合
*/
@XText("组织ID集合")
@TableField(exist = false)
private List<String> ouIds;
/**
* 井口ID集合
*/
......
......@@ -129,6 +129,8 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
BasePowerLineWellheadViewMapper wellheadViewMapper = context.getBean(BasePowerLineWellheadViewMapper.class);
List<BasePowerLineWellheadView> wellheadViews = wellheadViewMapper.selectWellheadListByParam(
BasePowerLineWellheadView.builder()
.ouIds(input.getOuIds())
.lineName(input.getLineName())
.runTypeKey(input.getRunTypeKey())
.lineId(input.getLineId())
.lineIds(input.getLineIds())
......@@ -150,6 +152,8 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
BasePowerLinePlantViewMapper mapper = context.getBean(BasePowerLinePlantViewMapper.class);
List<BasePowerLinePlantView> plantList = mapper.selectPlantListByParam(
BasePowerLinePlantView.builder()
.lineName(input.getLineName())
.ouIds(input.getOuIds())
.lineId(input.getLineId())
.lineIds(input.getLineIds())
.build()
......
......@@ -86,19 +86,30 @@
p.latitude,
p.station_name,
p.total_power
FROM base_power_line_plant l
FROM base_power_line b
JOIN base_power_line_plant l ON b.id = l.line_id
JOIN base_photovoltaic_plant p ON l.plant_id = p.id
WHERE
b.is_deleted = 1
AND l.is_deleted = 1
AND p.is_deleted = 1
<where>
<if test="lineId != null and lineId != ''">
AND l.line_id = #{lineId}
</if>
<if test="lineIds != null">
AND l.line_id IN
<foreach collection="lineIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</where>
<if test="ouIds != null and ouIds.size() > 0 ">
AND b.ou_id in
<foreach collection="ouIds" separator="," item="item" open="(" close=")">
#{item}
</foreach>
</if>
<if test="lineName != null and lineName != ''">
AND b.line_name = #{lineName}
</if>
<if test="lineId != null and lineId != ''">
AND l.line_id = #{lineId}
</if>
<if test="lineIds != null and lineIds.size() > 0 ">
AND l.line_id IN
<foreach collection="lineIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -74,28 +74,40 @@
w.run_type_name,
w.rated_power
FROM
base_power_line_wellhead l
base_power_line p
JOIN base_power_line_wellhead l ON p.id = l.line_id
JOIN base_wellhead w ON l.wellhead_id = w.id
<where>
<if test="runTypeKey!=null and runTypeKey!=''">
AND w.run_type_key = #{runTypeKey}
</if>
<if test="lineId!=null and lineId!=''">
AND l.line_id = #{lineId}
</if>
<if test="lineIds != null">
AND l.line_id IN
<foreach collection="lineIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
<if test="wellheadIds != null">
AND l.wellhead_id NOT IN
<foreach collection="wellheadIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</where>
WHERE
p.is_deleted = 1
AND l.is_deleted = 1
AND w.is_deleted = 1
<if test="ouIds != null and ouIds.size() > 0 ">
AND p.ou_id in
<foreach collection="ouIds" separator="," item="item" open="(" close=")">
#{item}
</foreach>
</if>
<if test="lineName != null and lineName != ''">
AND p.line_name = #{lineName}
</if>
<if test="runTypeKey != null and runTypeKey != ''">
AND w.run_type_key = #{runTypeKey}
</if>
<if test="lineId != null and lineId != ''">
AND p.id = #{lineId}
</if>
<if test="lineIds != null and lineIds.size() > 0 ">
AND p.id IN
<foreach collection="lineIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
<if test="wellheadIds != null">
AND l.wellhead_id NOT IN
<foreach collection="wellheadIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</select>
<insert id="batchInsertList" parameterType="list">
......
......@@ -15,16 +15,21 @@ import pps.cloud.base.service.data.base_photovoltaic_plant.GetBasePhotovoltaicPl
import pps.cloud.base.service.data.base_photovoltaic_plant.GetBasePhotovoltaicPlantCloudOutput;
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_power_line_wellhead.DynamicQueryBasePowerLineWellheadInput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadViewOutput;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.data.sys_organization.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.sys_organization.GetSysOrganizationViewOutput;
import pps.core.prediction.entity.EnergyConsumptionAnalysisEnt;
import pps.core.prediction.entity.ThirdDailyAccumulationUpdateEnt;
import pps.core.prediction.entity.ThirdDailyAccumulationUpdateView;
import pps.core.prediction.entity.*;
import pps.core.prediction.enums.BusinessError;
import pps.core.prediction.mapper.ThirdActivePowerViewMapper;
import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateMapper;
import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateViewMapper;
import pps.core.prediction.mapper.ThirdWellAvgActivePowerViewMapper;
import pps.core.prediction.service.data.energy_consumption_analysis.*;
import pps.core.prediction.service.data.home_page.GetPowerAnalyseOutput;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
......@@ -88,6 +93,88 @@ public class EnergyConsumptionAnalysisService {
return XListResult.success(outputs);
}
/**
* 用能分析
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetPowerAnalyseOutput }>
*/
@XText("首页模块--用能分析")
@XApiGet
public XListResult<GetPowerAnalyseOutput> powerAnalyse(XContext context, QueryEnergyConsumptionAnalysisInput input) {
DynamicQueryBasePowerLineWellheadInput wellheadInput = new DynamicQueryBasePowerLineWellheadInput();
DynamicQueryBasePowerLinePlantInput plantInput = new DynamicQueryBasePowerLinePlantInput();
String stationName = input.getStationName();
if (CharSequenceUtil.isNotBlank(stationName)) {
wellheadInput.setLineName(stationName);
plantInput.setLineName(stationName);
} else {
List<String> orgIds = this.getOrgIdsByPath(context, input.getOuId());
wellheadInput.setOuIds(orgIds);
plantInput.setOuIds(orgIds);
}
input.getBetweenDate();
//用电功率
Map<Date, BigDecimal> avgMap;
List<DynamicQueryBasePowerLineWellheadViewOutput> wellheadList = this.getPowerLineWellheadList(context, wellheadInput);
if (CollUtil.isNotEmpty(wellheadList)) {
ThirdWellAvgActivePowerViewMapper mapper = context.getBean(ThirdWellAvgActivePowerViewMapper.class);
avgMap = mapper.selectPowerConsumptionHour(ThirdWellAvgActivePowerView.builder()
.wellNumbers(wellheadList.stream()
.map(DynamicQueryBasePowerLineWellheadViewOutput::getWellNumber)
.collect(Collectors.toList()))
.startTime(input.getStartTime())
.endTime(input.getEndTime())
.build())
.stream()
.collect(Collectors.toMap(ThirdWellAvgActivePowerView::getInputTime, ThirdWellAvgActivePowerView::getAvgActivePower));
} else {
avgMap = Collections.emptyMap();
}
//发电功率
Map<Date, BigDecimal> powerMap;
List<DynamicQueryBasePowerLinePlantViewOutput> plantList = this.getPowerLinePlantViewList(context, plantInput);
if (CollUtil.isNotEmpty(plantList)) {
ThirdActivePowerViewMapper dailyUpdateMapper = context.getBean(ThirdActivePowerViewMapper.class);
powerMap = dailyUpdateMapper.selectGeneratedPowerHour(ThirdActivePowerView.builder()
.stationNames(plantList.stream()
.map(DynamicQueryBasePowerLinePlantViewOutput::getStationName)
.collect(Collectors.toList()))
.startTime(input.getStartTime())
.endTime(input.getEndTime())
.build())
.stream()
.collect(Collectors.toMap(ThirdActivePowerView::getCreateDate, ThirdActivePowerView::getPhotovoltaicPower));
} else {
powerMap = Collections.emptyMap();
}
//封装数据
List<DateTime> rangeToList = DateUtil.rangeToList(input.getStartTime(), input.getEndTime(), DateField.HOUR_OF_DAY);
List<GetPowerAnalyseOutput> outputs = new ArrayList<>(rangeToList.size());
BigDecimal powerConsumption;
BigDecimal powerGeneration;
for (DateTime dateTime : rangeToList) {
if (avgMap.containsKey(dateTime)) {
powerConsumption = avgMap.get(dateTime).setScale(2, RoundingMode.HALF_UP);
} else {
powerConsumption = BigDecimal.ZERO;
}
if (powerMap.containsKey(dateTime)) {
powerGeneration = powerMap.get(dateTime).setScale(2, RoundingMode.HALF_UP);
} else {
powerGeneration = BigDecimal.ZERO;
}
outputs.add(GetPowerAnalyseOutput.builder()
.dateFormat(dateTime.toString())
.powerConsumption(powerConsumption)
.powerGeneration(powerGeneration)
.build());
}
return XListResult.success(outputs);
}
/**
* 能耗分析--能耗概览
*
......@@ -371,4 +458,32 @@ public class EnergyConsumptionAnalysisService {
lineList.throwIfFail();
return lineList.getResult();
}
/**
* 获取输电线井口列表
*
* @param context 上下文
* @param input 入参
* @return {@link List}<{@link DynamicQueryBasePowerLineWellheadViewOutput}>
*/
private List<DynamicQueryBasePowerLineWellheadViewOutput> getPowerLineWellheadList(XContext context, DynamicQueryBasePowerLineWellheadInput input) {
IBasePowerLineCloudService service = context.getBean(IBasePowerLineCloudService.class);
XListResult<DynamicQueryBasePowerLineWellheadViewOutput> result = service.getPowerLineWellheadList(context, input);
result.throwIfFail();
return result.getResult();
}
/**
* 获取输电线电站列表
*
* @param context 上下文
* @param input 入参
* @return {@link List}<{@link DynamicQueryBasePowerLinePlantViewOutput}>
*/
private List<DynamicQueryBasePowerLinePlantViewOutput> getPowerLinePlantViewList(XContext context, DynamicQueryBasePowerLinePlantInput input) {
IBasePowerLineCloudService service = context.getBean(IBasePowerLineCloudService.class);
XListResult<DynamicQueryBasePowerLinePlantViewOutput> result = service.getPowerLinePlantViewList(context, input);
result.throwIfFail();
return result.getResult();
}
}
......@@ -32,6 +32,12 @@ public class QueryEnergyConsumptionAnalysisInput {
@XText("组织机构ID")
private String ouId;
/**
* 电站名称
*/
@XText("电站名称")
private String stationName;
/**
* 日期类型(1_近7天,2_近30天,3_自定义)
*/
......
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