Commit f555382e authored by ZWT's avatar ZWT

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

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

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent e064b014
...@@ -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;
/** /**
* 第三方井场日累计数据(每日最新数据) * 第三方井场日累计数据(每日最新数据)
...@@ -65,4 +66,48 @@ public class ThirdDailyAccumulationUpdateView implements Serializable { ...@@ -65,4 +66,48 @@ public class ThirdDailyAccumulationUpdateView implements Serializable {
@XText("保存时间") @XText("保存时间")
@TableField @TableField
private Date saveHour; private Date saveHour;
/*------------------------------ other ------------------------------*/
/**
* 今天
*/
@TableField(exist = false)
private Date today;
/**
* 昨天
*/
@TableField(exist = false)
private Date yesterday;
/**
* 去年
*/
@TableField(exist = false)
private Date lastYear;
/**
* 电站名称列表
*/
@TableField(exist = false)
private List<String> stationNameList;
/**
* 日期标识
*/
@TableField(exist = false)
private Integer dayFlag;
/**
* 余电上网
*/
@TableField(exist = false)
private BigDecimal avoidPeakRate;
/**
* 绿电占比
*/
@TableField(exist = false)
private BigDecimal greenElectricityRate;
} }
...@@ -25,4 +25,12 @@ public interface ThirdDailyAccumulationUpdateViewMapper { ...@@ -25,4 +25,12 @@ public interface ThirdDailyAccumulationUpdateViewMapper {
* @return int * @return int
*/ */
int batchInsertList(@Param(value = "list") List<ThirdDailyAccumulationUpdateView> dtoList); int batchInsertList(@Param(value = "list") List<ThirdDailyAccumulationUpdateView> dtoList);
/**
* 按日期统计
*
* @param view 看法
* @return {@link List }<{@link ThirdDailyAccumulationUpdateView }>
*/
List<ThirdDailyAccumulationUpdateView> selectPowerStatisticsByDate(ThirdDailyAccumulationUpdateView view);
} }
package pps.core.prediction.service; package pps.core.prediction.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import pps.cloud.base.service.BasePhotovoltaicPlantCloudService;
import pps.cloud.base.service.IBasePowerLineCloudService; import pps.cloud.base.service.IBasePowerLineCloudService;
import pps.cloud.base.service.data.base_photovoltaic_plant.GetBasePhotovoltaicPlantCloudInput;
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.system.service.SysOrganizationCloudService; import pps.cloud.system.service.SysOrganizationCloudService;
...@@ -15,13 +20,16 @@ import pps.cloud.system.service.data.sys_organization.GetAllOuListByOuIdInput; ...@@ -15,13 +20,16 @@ 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.EnergyConsumptionAnalysisEnt;
import pps.core.prediction.entity.ThirdDailyAccumulationUpdateEnt; 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.ThirdDailyAccumulationUpdateMapper; import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateMapper;
import pps.core.prediction.mapper.ThirdDailyAccumulationUpdateViewMapper;
import pps.core.prediction.service.data.energy_consumption_analysis.*; import pps.core.prediction.service.data.energy_consumption_analysis.*;
import xstartup.annotation.XService; import xstartup.annotation.XService;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.base.exception.XServiceException; import xstartup.base.exception.XServiceException;
import xstartup.base.util.XCopyUtils;
import xstartup.data.XListResult; import xstartup.data.XListResult;
import xstartup.data.XPageResult; import xstartup.data.XPageResult;
import xstartup.data.XSingleResult; import xstartup.data.XSingleResult;
...@@ -42,6 +50,44 @@ import java.util.stream.Collectors; ...@@ -42,6 +50,44 @@ import java.util.stream.Collectors;
@XService @XService
public class EnergyConsumptionAnalysisService { public class EnergyConsumptionAnalysisService {
/**
* 今日/昨日/同期电量统计
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link PowerStatisticsOutput }>
*/
@XText("能耗分析--今日/昨日/同期电量统计")
@XApiGet
public XListResult<PowerStatisticsOutput> powerStatistics(XContext context, GetEnergyConsumptionAnalysisInput input) {
String stationName = input.getStationName();
List<String> stationNameList = new ArrayList<>(16);
if (CharSequenceUtil.isNotBlank(stationName)) {
stationNameList.add(stationName);
} else {
List<GetBasePhotovoltaicPlantCloudOutput> plantList = this.getBasePhotovoltaicPlantList(context, this.getOrgIdsByPath(context, input.getOuId()));
if (CollUtil.isNotEmpty(plantList)) {
plantList.forEach(s -> stationNameList.add(s.getStationName()));
}
}
List<PowerStatisticsOutput> outputs;
//电站名称列表有值再查
if (CollUtil.isNotEmpty(stationNameList)) {
DateTime today = DateUtil.date();
ThirdDailyAccumulationUpdateViewMapper mapper = context.getBean(ThirdDailyAccumulationUpdateViewMapper.class);
List<ThirdDailyAccumulationUpdateView> viewList = mapper.selectPowerStatisticsByDate(ThirdDailyAccumulationUpdateView.builder()
.today(DateUtil.beginOfDay(today))
.yesterday(DateUtil.beginOfDay(DateUtil.yesterday()))
.lastYear(DateUtil.beginOfDay(DateUtil.offset(today, DateField.YEAR, -1)))
.stationNameList(stationNameList)
.build());
outputs = XCopyUtils.copyNewList(viewList, PowerStatisticsOutput.class);
} else {
outputs = Collections.emptyList();
}
return XListResult.success(outputs);
}
/** /**
* 能耗分析--能耗概览 * 能耗分析--能耗概览
* *
...@@ -309,4 +355,20 @@ public class EnergyConsumptionAnalysisService { ...@@ -309,4 +355,20 @@ public class EnergyConsumptionAnalysisService {
lineList.throwIfFail(); lineList.throwIfFail();
return lineList.getResult(); return lineList.getResult();
} }
/**
* 查询组织列表下所有电站
*
* @param context 上下文
* @param ouIdList ou-id列表
* @return {@link List }<{@link GetBasePhotovoltaicPlantCloudOutput }>
*/
private List<GetBasePhotovoltaicPlantCloudOutput> getBasePhotovoltaicPlantList(XContext context, List<String> ouIdList) {
BasePhotovoltaicPlantCloudService service = context.getBean(BasePhotovoltaicPlantCloudService.class);
XListResult<GetBasePhotovoltaicPlantCloudOutput> lineList = service.getBasePhotovoltaicPlantList(context, GetBasePhotovoltaicPlantCloudInput.builder()
.ouIds(ouIdList)
.build());
lineList.throwIfFail();
return lineList.getResult();
}
} }
package pps.core.prediction.service.data.energy_consumption_analysis;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
/**
* 能耗分析
*
* @author ZWT
* @date 2024/05/21
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetEnergyConsumptionAnalysisInput {
/**
* 组织机构ID
*/
@NotBlank(message = "缺少组织机构ID")
@XText("组织机构ID")
private String ouId;
/**
* 电站名称
*/
@XText("电站名称")
private String stationName;
}
package pps.core.prediction.service.data.energy_consumption_analysis;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
/**
* 电量统计
*
* @author ZWT
* @date 2024/05/21 10:44
*/
@Data
public class PowerStatisticsOutput {
/**
* 日期标识(1_今日,2_昨日,3_同期)
*/
@XText("日期标识(1_今日,2_昨日,3_同期)")
private Integer dayFlag;
/**
* 光伏日累计发电(KW·h)
*/
@XText("光伏日累计发电(KW·h)")
private BigDecimal photovoltaicPower;
/**
* 日累计用电量(KW·h)
*/
@XText("日累计用电量(KW·h)")
private BigDecimal dailyElectricityConsumption;
/**
* 上网电量(KW·h)
*/
@XText("上网电量(KW·h)")
private BigDecimal avoidPeakRate;
/**
* 绿电占比(%)
*/
@XText("绿电占比(%)")
private BigDecimal greenElectricityRate;
}
...@@ -65,4 +65,57 @@ ...@@ -65,4 +65,57 @@
) )
</foreach> </foreach>
</insert> </insert>
<resultMap id="ExtResultMap" type="pps.core.prediction.entity.ThirdDailyAccumulationUpdateView"
extends="BaseResultMap">
<result column="day_flag" property="dayFlag" jdbcType="INTEGER"/>
<result column="green_electricity_rate" property="greenElectricityRate" jdbcType="DECIMAL"/>
<result column="avoid_peak_rate" property="avoidPeakRate" jdbcType="DECIMAL"/>
</resultMap>
<select id="selectPowerStatisticsByDate" parameterType="pps.core.prediction.entity.ThirdDailyAccumulationUpdateView"
resultMap="ExtResultMap">
SELECT z.day_flag,
ROUND(z.photovoltaic_power, 2) AS photovoltaic_power,
ROUND(z.daily_electricity_consumption, 2) AS daily_electricity_consumption,
IFNULL(ROUND(z.in_place_consumption / z.daily_electricity_consumption * 100, 2),
0) AS green_electricity_rate,
IFNULL(ROUND(z.photovoltaic_power - z.in_place_consumption, 2), 0) AS avoid_peak_rate
FROM (SELECT IFNULL(SUM(photovoltaic_power), 0) AS photovoltaic_power,
IFNULL(SUM(daily_electricity_consumption), 0) AS daily_electricity_consumption,
IFNULL(SUM(in_place_consumption), 0) AS in_place_consumption,
1 AS day_flag
FROM third_daily_accumulation_update
WHERE
DATE ( create_date) = #{today}
AND station_name IN
<foreach collection="stationNameList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
UNION
SELECT IFNULL(SUM(photovoltaic_power), 0) AS photovoltaic_power,
IFNULL(SUM(daily_electricity_consumption), 0) AS daily_electricity_consumption,
IFNULL(SUM(in_place_consumption), 0) AS in_place_consumption,
2 AS day_flag
FROM third_daily_accumulation_update
WHERE
DATE ( create_date ) = #{yesterday}
AND station_name IN
<foreach collection="stationNameList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
UNION
SELECT IFNULL(SUM(photovoltaic_power), 0) AS photovoltaic_power,
IFNULL(SUM(daily_electricity_consumption), 0) AS daily_electricity_consumption,
IFNULL(SUM(in_place_consumption), 0) AS in_place_consumption,
3 AS day_flag
FROM third_daily_accumulation_update
WHERE
DATE ( create_date ) = #{lastYear}
AND station_name IN
<foreach collection="stationNameList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
) z
</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