Commit 2237627e authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.长庆演示首页功能开发,新增查询井场/场站列表接口,添加接口文档并完成接口冒烟测试;
2.长庆演示首页功能开发,新增总览信息统计接口,添加接口文档并完成接口冒烟测试;
3.长庆演示首页功能开发,新增用能分析统计接口,添加接口文档并完成接口冒烟测试;
4.长庆演示首页功能开发,新增累计用电统计接口,添加接口文档并完成接口冒烟测试;
5.长庆演示首页功能开发,新增光伏实时监控统计接口,添加接口文档并完成接口冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 54ac8cf4
...@@ -10,6 +10,7 @@ import xstartup.annotation.XText; ...@@ -10,6 +10,7 @@ import xstartup.annotation.XText;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 第三方有功功率(每日最新数据) * 第三方有功功率(每日最新数据)
...@@ -57,4 +58,12 @@ public class ThirdActivePowerDailyUpdateView implements Serializable { ...@@ -57,4 +58,12 @@ public class ThirdActivePowerDailyUpdateView implements Serializable {
@XText("入库小时") @XText("入库小时")
@TableField @TableField
private Date saveHour; private Date saveHour;
@XText("小时")
@TableField(exist = false)
private Integer hourNumber;
@XText("井组ID列表")
@TableField(exist = false)
private List<String> stationIds;
} }
...@@ -55,6 +55,6 @@ public class ThirdActivePowerView implements Serializable { ...@@ -55,6 +55,6 @@ public class ThirdActivePowerView implements Serializable {
private Date inputTime; private Date inputTime;
@XText("小时") @XText("小时")
@TableField @TableField(exist = false)
private Integer saveHour; private Integer saveHour;
} }
...@@ -36,4 +36,12 @@ public interface ThirdActivePowerDailyUpdateViewMapper { ...@@ -36,4 +36,12 @@ public interface ThirdActivePowerDailyUpdateViewMapper {
* @return int * @return int
*/ */
int batchInsertList(@Param(value = "list") List<ThirdActivePowerDailyUpdateView> list); int batchInsertList(@Param(value = "list") List<ThirdActivePowerDailyUpdateView> list);
/**
* 查询用能曲线
*
* @param record 记录
* @return {@link List}<{@link ThirdActivePowerDailyUpdateView}>
*/
List<ThirdActivePowerDailyUpdateView> selectEnergyUseCurve(ThirdActivePowerDailyUpdateView record);
} }
...@@ -22,8 +22,12 @@ import pps.cloud.system.service.SysOrganizationCloudService; ...@@ -22,8 +22,12 @@ import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.data.GetAllOuListByOuIdInput; import pps.cloud.system.service.data.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.GetSysOrganizationViewOutput; import pps.cloud.system.service.data.GetSysOrganizationViewOutput;
import pps.core.prediction.entity.EnergyConsumptionAnalysisEnt; import pps.core.prediction.entity.EnergyConsumptionAnalysisEnt;
import pps.core.prediction.entity.PredictedPowerView;
import pps.core.prediction.entity.ThirdActivePowerDailyUpdateView;
import pps.core.prediction.entity.ThirdCurrentWellConditionEnt; import pps.core.prediction.entity.ThirdCurrentWellConditionEnt;
import pps.core.prediction.mapper.EnergyConsumptionAnalysisMapper; import pps.core.prediction.mapper.EnergyConsumptionAnalysisMapper;
import pps.core.prediction.mapper.PredictedPowerViewMapper;
import pps.core.prediction.mapper.ThirdActivePowerDailyUpdateViewMapper;
import pps.core.prediction.mapper.ThirdCurrentWellConditionMapper; import pps.core.prediction.mapper.ThirdCurrentWellConditionMapper;
import pps.core.prediction.service.data.energy_consumption_analysis.DynamicQueryEnergyConsumptionAnalysisViewOutput; import pps.core.prediction.service.data.energy_consumption_analysis.DynamicQueryEnergyConsumptionAnalysisViewOutput;
import pps.core.prediction.service.data.energy_consumption_analysis.QueryEnergyConsumptionAnalysisInput; import pps.core.prediction.service.data.energy_consumption_analysis.QueryEnergyConsumptionAnalysisInput;
...@@ -38,6 +42,7 @@ import xstartup.feature.api.annotation.XApiGet; ...@@ -38,6 +42,7 @@ import xstartup.feature.api.annotation.XApiGet;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -238,6 +243,69 @@ public class HomePageService { ...@@ -238,6 +243,69 @@ public class HomePageService {
.build()); .build());
} }
/**
* 光伏实时监控
*
* @param context 上下文
* @param input 输入
* @return {@link XSingleResult}<{@link GetPowerPredictionOutput}>
*/
@XApiAnonymous
@XText("首页模块--光伏实时监控")
@XApiGet
public XListResult<GetPowerPredictionOutput> getPowerPrediction(XContext context, GetStationViewInput input) {
String plantId = input.getPlantId();
List<GetBasePhotovoltaicPlantCloudOutput> plantList;
List<String> plantIds = null;
if (CharSequenceUtil.isNotBlank(plantId)) {
input.setStationId(null);
} else {
plantList = this.getPlantList(context, input.getStationId());
plantIds = plantList.stream().map(GetBasePhotovoltaicPlantCloudOutput::getId).collect(Collectors.toList());
}
DateTime day = DateUtil.beginOfDay(DateUtil.date());
//预测发电量
PredictedPowerViewMapper mapper = context.getBean(PredictedPowerViewMapper.class);
Map<String, BigDecimal> shortPowerMap = mapper.selectShortPowerHourList(PredictedPowerView.builder()
.createTime(day)
.plantIds(plantIds)
.plantId(plantId)
.build()).stream()
.collect(Collectors.toMap(PredictedPowerView::getHourTime, PredictedPowerView::getPower));
//实时数据
ThirdActivePowerDailyUpdateViewMapper nowMapper = context.getBean(ThirdActivePowerDailyUpdateViewMapper.class);
Map<Integer, ThirdActivePowerDailyUpdateView> powerMap = nowMapper.selectEnergyUseCurve(ThirdActivePowerDailyUpdateView.builder()
.stationIds(plantIds)
.stationId(plantId)
.saveDate(day)
.build()).stream()
.collect(Collectors.toMap(ThirdActivePowerDailyUpdateView::getHourNumber, Function.identity()));
List<GetPowerPredictionOutput> outputs = new ArrayList<>(24);
ThirdActivePowerDailyUpdateView powerDaily;
for (int i = 0; i < 24; i++) {
BigDecimal predictPower = BigDecimal.ZERO;
BigDecimal actualPower = BigDecimal.ZERO;
BigDecimal meterPower = BigDecimal.ZERO;
if (shortPowerMap.containsKey(i)) {
predictPower = shortPowerMap.get(i);
}
if (powerMap.containsKey(i)) {
powerDaily = powerMap.get(i);
actualPower = powerDaily.getPhotovoltaicPower();
meterPower = powerDaily.getMeterPower();
}
outputs.add(
GetPowerPredictionOutput.builder()
.hourNumber(i)
.predictPower(predictPower)
.actualPower(actualPower)
.meterPower(meterPower)
.build()
);
}
return XListResult.success(outputs);
}
/*------------------------------------------------- private ---------------------------------------------------------*/ /*------------------------------------------------- private ---------------------------------------------------------*/
/** /**
......
package pps.core.prediction.service.data.home_page;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.math.BigDecimal;
/**
* 光伏实时监控
*
* @author ZWT
* @date 2024/03/26 14:30
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetPowerPredictionOutput {
@XText("小时")
private Integer hourNumber;
@XText("预测功率")
private BigDecimal predictPower;
@XText("实际功率")
private BigDecimal actualPower;
@XText("电表功率")
@TableField
private BigDecimal meterPower;
}
\ No newline at end of file
...@@ -14,4 +14,7 @@ public class GetStationViewInput { ...@@ -14,4 +14,7 @@ public class GetStationViewInput {
@XText("站ID") @XText("站ID")
private String stationId; private String stationId;
@XText("电站ID")
private String plantId;
} }
...@@ -107,17 +107,26 @@ ...@@ -107,17 +107,26 @@
HOUR( data_date ) AS create_time HOUR( data_date ) AS create_time
FROM FROM
plant_predicted_power_short_term plant_predicted_power_short_term
WHERE <where>
plant_id IN <if test="plantIds != null">
AND plant_id IN
<foreach collection="plantIds" item="item" open="(" separator="," close=")"> <foreach collection="plantIds" item="item" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if>
<if test="startTime != null and endTime != null"> <if test="startTime != null and endTime != null">
AND AND
data_date BETWEEN data_date BETWEEN
#{startTime} AND #{startTime} AND
#{endTime} #{endTime}
</if> </if>
<if test="createTime != null">
AND DATE( data_date ) = #{createTime}
</if>
<if test="plantId != null">
AND plant_id = #{plantId}
</if>
</where>
) a ) a
GROUP BY GROUP BY
a.create_time a.create_time
......
...@@ -69,4 +69,34 @@ ...@@ -69,4 +69,34 @@
) )
</foreach> </foreach>
</insert> </insert>
<resultMap id="ExtBaseResultMap" type="pps.core.prediction.entity.ThirdActivePowerDailyUpdateView"
extends="BaseResultMap">
<result column="hour_number" property="hourNumber" jdbcType="INTEGER"/>
</resultMap>
<select id="selectEnergyUseCurve" resultMap="ExtBaseResultMap">
SELECT hour_str AS hour_number,
IFNULL(AVG(photovoltaic_power), 0) AS photovoltaic_power,
IFNULL(AVG(meter_power), 0) AS meter_power
FROM (SELECT station_name, HOUR ( create_date ) AS hour_str, photovoltaic_power, meter_power
FROM third_active_power_daily_update
<where>
<if test="stationId != null">
AND station_id = #{stationId}
</if>
<if test="saveDate != null">
AND save_date = #{saveDate}
</if>
<if test="stationIds != null">
AND station_id IN
<foreach collection="stationIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
) z
GROUP BY hour_str
ORDER BY hour_str
</select>
</mapper> </mapper>
\ No newline at end of file
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