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; ...@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import java.util.Collection; import java.util.Collection;
import java.util.List;
/** /**
* 输电线路光伏配置 * 输电线路光伏配置
...@@ -26,6 +27,12 @@ public class DynamicQueryBasePowerLinePlantInput { ...@@ -26,6 +27,12 @@ public class DynamicQueryBasePowerLinePlantInput {
@XText("光伏电站ID") @XText("光伏电站ID")
private String plantId; private String plantId;
@XText("线路名称")
private String lineName;
@XText("组织ID集合")
private List<String> ouIds;
@XText("线路ID集合") @XText("线路ID集合")
private Collection<String> lineIds; private Collection<String> lineIds;
} }
...@@ -23,6 +23,12 @@ public class DynamicQueryBasePowerLineWellheadInput { ...@@ -23,6 +23,12 @@ public class DynamicQueryBasePowerLineWellheadInput {
@XText("线路ID") @XText("线路ID")
private String lineId; private String lineId;
@XText("线路名称")
private String lineName;
@XText("组织ID集合")
private List<String> ouIds;
@XText("线路ID集合") @XText("线路ID集合")
private List<String> lineIds; private List<String> lineIds;
......
...@@ -11,6 +11,7 @@ import xstartup.annotation.XText; ...@@ -11,6 +11,7 @@ import xstartup.annotation.XText;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.List;
/** /**
* 输电线路光伏配置 * 输电线路光伏配置
...@@ -62,6 +63,22 @@ public class BasePowerLinePlantView extends BaseModel implements Serializable { ...@@ -62,6 +63,22 @@ public class BasePowerLinePlantView extends BaseModel implements Serializable {
@TableField @TableField
private Integer areaCode; private Integer areaCode;
/*------------------------ false ------------------------*/
/**
* 线路名称
*/
@XText("线路名称")
@TableField(exist = false)
private String lineName;
/**
* 组织ID集合
*/
@XText("组织ID集合")
@TableField(exist = false)
private List<String> ouIds;
@XText("线路ID集合") @XText("线路ID集合")
@TableField(exist = false) @TableField(exist = false)
private Collection<String> lineIds; private Collection<String> lineIds;
......
...@@ -75,6 +75,22 @@ public class BasePowerLineWellheadView extends BaseModel implements Serializable ...@@ -75,6 +75,22 @@ public class BasePowerLineWellheadView extends BaseModel implements Serializable
@TableField @TableField
private BigDecimal ratedPower; private BigDecimal ratedPower;
/*------------------------ false ------------------------*/
/**
* 线路名称
*/
@XText("线路名称")
@TableField(exist = false)
private String lineName;
/**
* 组织ID集合
*/
@XText("组织ID集合")
@TableField(exist = false)
private List<String> ouIds;
/** /**
* 井口ID集合 * 井口ID集合
*/ */
......
...@@ -129,6 +129,8 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService ...@@ -129,6 +129,8 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
BasePowerLineWellheadViewMapper wellheadViewMapper = context.getBean(BasePowerLineWellheadViewMapper.class); BasePowerLineWellheadViewMapper wellheadViewMapper = context.getBean(BasePowerLineWellheadViewMapper.class);
List<BasePowerLineWellheadView> wellheadViews = wellheadViewMapper.selectWellheadListByParam( List<BasePowerLineWellheadView> wellheadViews = wellheadViewMapper.selectWellheadListByParam(
BasePowerLineWellheadView.builder() BasePowerLineWellheadView.builder()
.ouIds(input.getOuIds())
.lineName(input.getLineName())
.runTypeKey(input.getRunTypeKey()) .runTypeKey(input.getRunTypeKey())
.lineId(input.getLineId()) .lineId(input.getLineId())
.lineIds(input.getLineIds()) .lineIds(input.getLineIds())
...@@ -150,6 +152,8 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService ...@@ -150,6 +152,8 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
BasePowerLinePlantViewMapper mapper = context.getBean(BasePowerLinePlantViewMapper.class); BasePowerLinePlantViewMapper mapper = context.getBean(BasePowerLinePlantViewMapper.class);
List<BasePowerLinePlantView> plantList = mapper.selectPlantListByParam( List<BasePowerLinePlantView> plantList = mapper.selectPlantListByParam(
BasePowerLinePlantView.builder() BasePowerLinePlantView.builder()
.lineName(input.getLineName())
.ouIds(input.getOuIds())
.lineId(input.getLineId()) .lineId(input.getLineId())
.lineIds(input.getLineIds()) .lineIds(input.getLineIds())
.build() .build()
......
...@@ -86,19 +86,30 @@ ...@@ -86,19 +86,30 @@
p.latitude, p.latitude,
p.station_name, p.station_name,
p.total_power 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 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 AND p.is_deleted = 1
<where> <if test="ouIds != null and ouIds.size() > 0 ">
<if test="lineId != null and lineId != ''"> AND b.ou_id in
AND l.line_id = #{lineId} <foreach collection="ouIds" separator="," item="item" open="(" close=")">
</if> #{item}
<if test="lineIds != null"> </foreach>
AND l.line_id IN </if>
<foreach collection="lineIds" open="(" close=")" separator="," item="item"> <if test="lineName != null and lineName != ''">
#{item} AND b.line_name = #{lineName}
</foreach> </if>
</if> <if test="lineId != null and lineId != ''">
</where> 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> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -74,28 +74,40 @@ ...@@ -74,28 +74,40 @@
w.run_type_name, w.run_type_name,
w.rated_power w.rated_power
FROM 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 JOIN base_wellhead w ON l.wellhead_id = w.id
<where> WHERE
<if test="runTypeKey!=null and runTypeKey!=''"> p.is_deleted = 1
AND w.run_type_key = #{runTypeKey} AND l.is_deleted = 1
</if> AND w.is_deleted = 1
<if test="lineId!=null and lineId!=''"> <if test="ouIds != null and ouIds.size() > 0 ">
AND l.line_id = #{lineId} AND p.ou_id in
</if> <foreach collection="ouIds" separator="," item="item" open="(" close=")">
<if test="lineIds != null"> #{item}
AND l.line_id IN </foreach>
<foreach collection="lineIds" open="(" close=")" separator="," item="item"> </if>
#{item} <if test="lineName != null and lineName != ''">
</foreach> AND p.line_name = #{lineName}
</if> </if>
<if test="wellheadIds != null"> <if test="runTypeKey != null and runTypeKey != ''">
AND l.wellhead_id NOT IN AND w.run_type_key = #{runTypeKey}
<foreach collection="wellheadIds" open="(" close=")" separator="," item="item"> </if>
#{item} <if test="lineId != null and lineId != ''">
</foreach> AND p.id = #{lineId}
</if> </if>
</where> <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> </select>
<insert id="batchInsertList" parameterType="list"> <insert id="batchInsertList" parameterType="list">
......
...@@ -15,16 +15,21 @@ import pps.cloud.base.service.data.base_photovoltaic_plant.GetBasePhotovoltaicPl ...@@ -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_photovoltaic_plant.GetBasePhotovoltaicPlantCloudOutput;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineInput; 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.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.SysOrganizationCloudService;
import pps.cloud.system.service.data.sys_organization.GetAllOuListByOuIdInput; import pps.cloud.system.service.data.sys_organization.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.sys_organization.GetSysOrganizationViewOutput; import pps.cloud.system.service.data.sys_organization.GetSysOrganizationViewOutput;
import pps.core.prediction.entity.EnergyConsumptionAnalysisEnt; import pps.core.prediction.entity.*;
import pps.core.prediction.entity.ThirdDailyAccumulationUpdateEnt;
import pps.core.prediction.entity.ThirdDailyAccumulationUpdateView;
import pps.core.prediction.enums.BusinessError; import pps.core.prediction.enums.BusinessError;
import pps.core.prediction.mapper.ThirdActivePowerViewMapper;
import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateMapper; import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateMapper;
import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateViewMapper; 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.energy_consumption_analysis.*;
import pps.core.prediction.service.data.home_page.GetPowerAnalyseOutput;
import xstartup.annotation.XService; import xstartup.annotation.XService;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import xstartup.base.XContext; import xstartup.base.XContext;
...@@ -88,6 +93,88 @@ public class EnergyConsumptionAnalysisService { ...@@ -88,6 +93,88 @@ public class EnergyConsumptionAnalysisService {
return XListResult.success(outputs); 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 { ...@@ -371,4 +458,32 @@ public class EnergyConsumptionAnalysisService {
lineList.throwIfFail(); lineList.throwIfFail();
return lineList.getResult(); 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 { ...@@ -32,6 +32,12 @@ public class QueryEnergyConsumptionAnalysisInput {
@XText("组织机构ID") @XText("组织机构ID")
private String ouId; private String ouId;
/**
* 电站名称
*/
@XText("电站名称")
private String stationName;
/** /**
* 日期类型(1_近7天,2_近30天,3_自定义) * 日期类型(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