Commit 0253e8a2 authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.开发中间库表结构及数据导出功能,检查中间库表结构是否有变动,同时获取最新数据,验证数据是否更新;
2.创建场站每日信息统计记录表,新建场站日信息数据采集汇总定时任务,整理汇总场站纬度每日数据,完成功能验证;
3.针对吉林提供的统计数据,对吉林首页部分功能修改;
4.针对中间库每日井口数据统计表结构变动,修改井口日统计定时任务数据处理逻辑,完成功能验证;
5.修改日发电量统计定时任务,排查数据丢失问题,完成功能验证;
6.修改场站每日信息汇总统计定时任务,增加统计每日光伏发电量逻辑,修改表结构及数据结构和业务处理逻辑,完成功能验证;
7.修改吉林首页线路详情接口,区分部署环境,增加吉林个性化数据处理逻辑,完成接口冒烟测试;
8.修改实际发电功率统计定时任务,排查数据丢失问题,完成功能验证;
9.修改实际发电量统计定时任务,排查数据丢失问题,完成功能验证;
10.修改吉林首页井场效果评价数据统计接口,区分部署环境,增加吉林个性化数据处理逻辑,完成接口冒烟测试;
11.能耗分析页面开发吉林个性化功能,完成电量统计接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
12.能耗分析页面开发吉林个性化功能,完成发电量统计接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
13.能耗分析页面开发吉林个性化功能,完成用电量统计接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
14.能耗分析页面开发吉林个性化功能,完成峰谷能耗对比分析接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
15.能耗分析页面开发吉林个性化功能,完成用能分析接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
16.间开效果评价页面开发吉林个性化功能,完成发电效益统计接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
17.间开效果评价页面开发吉林个性化功能,完成发减碳量统计接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
18.间开效果评价页面开发吉林个性化功能,完成累节电能统计接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;
19.间开效果评价页面开发吉林个性化功能,完成场站分析接口开发,编辑线上接口文档并生成接口用例,完成接口冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 039f2deb
package pps.core.prediction.entity; package pps.core.prediction.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText; 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.Date; import java.util.Date;
/** /**
...@@ -15,6 +19,9 @@ import java.util.Date; ...@@ -15,6 +19,9 @@ import java.util.Date;
* @date 2024/10/20 * @date 2024/10/20
*/ */
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class StationDailyProductionSituationView implements Serializable { public class StationDailyProductionSituationView implements Serializable {
@XText("ID") @XText("ID")
@TableField @TableField
...@@ -95,4 +102,44 @@ public class StationDailyProductionSituationView implements Serializable { ...@@ -95,4 +102,44 @@ public class StationDailyProductionSituationView implements Serializable {
@XText("创建时间") @XText("创建时间")
@TableField @TableField
private Date createDate; private Date createDate;
/*--------------------------*/
/**
* 月份
*/
@TableField(exist = false)
private Integer month;
/**
* 年份
*/
@TableField(exist = false)
private Integer year;
/**
* 井组名列表
*/
@TableField(exist = false)
private Collection<String> stationNameList;
/**
* 开始时间
*/
@TableField(exist = false)
private Date beginTime;
/**
* 结束时间
*/
@TableField(exist = false)
private Date endTime;
@XText("月累积光伏发电量(KW·h)")
@TableField(exist = false)
private BigDecimal monthPhotovoltaicPower;
@XText("年累积光伏发电量(KW·h)")
@TableField(exist = false)
private BigDecimal yearPhotovoltaicPower;
} }
...@@ -25,4 +25,12 @@ public interface StationDailyProductionSituationViewMapper { ...@@ -25,4 +25,12 @@ public interface StationDailyProductionSituationViewMapper {
* @return int * @return int
*/ */
int batchInsert(@Param(value = "list") List<StationDailyProductionSituationView> dtoList); int batchInsert(@Param(value = "list") List<StationDailyProductionSituationView> dtoList);
/**
* 场站分析列表
*
* @param record 记录
* @return {@link List }<{@link StationDailyProductionSituationView }>
*/
List<StationDailyProductionSituationView> selectStationAnalysisList(StationDailyProductionSituationView record);
} }
...@@ -10,6 +10,8 @@ import cn.hutool.core.util.ObjectUtil; ...@@ -10,6 +10,8 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
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.PageInfo;
import com.github.pagehelper.page.PageMethod;
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.DynamicQueryBasePowerLinePlantInput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantViewOutput; import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantViewOutput;
...@@ -68,6 +70,56 @@ public class EnergyConsumptionAnalysisService { ...@@ -68,6 +70,56 @@ public class EnergyConsumptionAnalysisService {
/*------------------------------ 间开效果评价(吉林) ------------------------------*/ /*------------------------------ 间开效果评价(吉林) ------------------------------*/
/**
* 场站分析
*
* @param context 上下文
* @param input 输入
* @return {@link XPageResult }<{@link GetWellheadAnalysisOutput }>
*/
@XText("间开效果评价--场站分析")
@XApiPost
public XPageResult<GetWellheadAnalysisOutput> wellStatisticsPage(XContext context, GetStatisticsPageInput input) {
Set<String> lineNameSet = this.getLineNameSet(context, input.getOuId());
if (CollUtil.isNotEmpty(lineNameSet)) {
//日期初始化
input.getBetweenDate();
Date beginTime = input.getBeginTime();
Date endTime = input.getEndTime();
DateTime now = DateUtil.date();
//分页查询
PageMethod.startPage(input.getPage(), input.getLimit());
StationDailyProductionSituationViewMapper mapper = context.getBean(StationDailyProductionSituationViewMapper.class);
List<StationDailyProductionSituationView> list = mapper.selectStationAnalysisList(StationDailyProductionSituationView.builder()
.beginTime(beginTime)
.endTime(endTime)
.stationName(input.getWellNumber())
.stationNameList(lineNameSet)
.month(now.monthBaseOne())
.year(now.year())
.build());
if (CollUtil.isEmpty(list)) {
return XPageResult.success(Collections.emptyList(), input, 0);
}
PageInfo<StationDailyProductionSituationView> pageInfo = new PageInfo<>(list);
List<StationDailyProductionSituationView> items = pageInfo.getList();
List<GetWellheadAnalysisOutput> outputs = new ArrayList<>(items.size());
for (StationDailyProductionSituationView item : items) {
outputs.add(GetWellheadAnalysisOutput.builder()
.wellNumber(item.getStationName())
.spaceRunDuration(item.getProductionTime())
.dailyLiquidProduction(item.getDailyLiquidProduction())
.dailyElectricityConsumption(item.getDailyElectricityConsumption())
.dailyCarbonReduction(ServiceUtil.calculateCarbonReductionTon(item.getPhotovoltaicPower()))
.monthDailyCarbonReduction(ServiceUtil.calculateCarbonReductionTon(item.getMonthPhotovoltaicPower()))
.yearDailyCarbonReduction(ServiceUtil.calculateCarbonReductionTon(item.getYearPhotovoltaicPower()))
.build());
}
return XPageResult.success(outputs, input, pageInfo.getTotal());
}
return XPageResult.success(Collections.emptyList(), input, 0);
}
/** /**
* 累节电能 * 累节电能
* *
...@@ -98,7 +150,6 @@ public class EnergyConsumptionAnalysisService { ...@@ -98,7 +150,6 @@ public class EnergyConsumptionAnalysisService {
DateTime now = DateUtil.date(); DateTime now = DateUtil.date();
List<DateTime> rangeToList = DateUtil.rangeToList(beginTime, endTime, yearFlag ? DateField.MONTH : DateField.DAY_OF_YEAR); List<DateTime> rangeToList = DateUtil.rangeToList(beginTime, endTime, yearFlag ? DateField.MONTH : DateField.DAY_OF_YEAR);
List<GetEconomicBenefitsOutput> outputs = new ArrayList<>(rangeToList.size()); List<GetEconomicBenefitsOutput> outputs = new ArrayList<>(rangeToList.size());
GetEconomicBenefitsOutput output;
BigDecimal power; BigDecimal power;
for (DateTime dateTime : rangeToList) { for (DateTime dateTime : rangeToList) {
if (DateUtil.compare(dateTime, now) > 0) { if (DateUtil.compare(dateTime, now) > 0) {
......
package pps.core.prediction.service.data.energy_consumption_analysis;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.Data;
import pps.core.prediction.enums.BusinessError;
import xstartup.base.data.XPageInput;
import xstartup.base.exception.XServiceException;
import java.util.Date;
/**
* 入参
*
* @author ZWT
* @date 2024/10/20 20:36
*/
@Data
public class GetStatisticsPageInput extends XPageInput {
/**
* 组织机构id
*/
private String ouId;
/**
* 日期类型(1_本周;2_本月;3_本年)
*/
private Integer dateType;
/**
* 开始时间
*/
private Date beginTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 井号
*/
private String wellNumber;
/**
* 初始化开始结束日期
* 1_本周;2_本月;3_本年
*/
public void getBetweenDate() {
if (ObjectUtil.isAllEmpty(this.beginTime, this.endTime)) {
DateTime now = DateUtil.date();
switch (ObjectUtil.defaultIfNull(this.dateType, 1)) {
case 1:
this.beginTime = DateUtil.beginOfWeek(now);
this.endTime = DateUtil.endOfWeek(now);
break;
case 2:
this.beginTime = DateUtil.beginOfMonth(now);
this.endTime = DateUtil.endOfMonth(now);
break;
case 3:
this.beginTime = DateUtil.beginOfYear(now);
this.endTime = DateUtil.endOfYear(now);
break;
default:
throw new XServiceException(BusinessError.DateTypeError);
}
} else {
this.beginTime = DateUtil.beginOfDay(this.beginTime);
this.endTime = DateUtil.endOfDay(this.endTime);
this.dateType = 1;
}
}
}
...@@ -29,6 +29,9 @@ public class GetWellheadAnalysisOutput { ...@@ -29,6 +29,9 @@ public class GetWellheadAnalysisOutput {
@XText("日产液量(m³)") @XText("日产液量(m³)")
private BigDecimal dailyLiquidProduction; private BigDecimal dailyLiquidProduction;
@XText("日耗电量(kW-h)")
private BigDecimal dailyElectricityConsumption;
@XText("绿电占比(%)") @XText("绿电占比(%)")
private BigDecimal greenElectricityRate; private BigDecimal greenElectricityRate;
......
...@@ -107,4 +107,62 @@ ...@@ -107,4 +107,62 @@
) )
</foreach> </foreach>
</insert> </insert>
<resultMap id="ExtResultMap" type="pps.core.prediction.entity.StationDailyProductionSituationView"
extends="BaseResultMap">
<result column="month_photovoltaic_power" property="monthPhotovoltaicPower" jdbcType="DECIMAL"/>
<result column="year_photovoltaic_power" property="yearPhotovoltaicPower" jdbcType="DECIMAL"/>
</resultMap>
<select id="selectStationAnalysisList"
parameterType="pps.core.prediction.entity.StationDailyProductionSituationView"
resultMap="ExtResultMap">
SELECT
d.station_name,
d.production_time,
d.daily_liquid_production,
d.daily_electricity_consumption,
d.photovoltaic_power,
m.month_photovoltaic_power,
y.year_photovoltaic_power
FROM
(
SELECT
station_name,
IFNULL( AVG( production_time ), 0 ) AS production_time,
IFNULL( AVG( daily_liquid_production ), 0 ) AS daily_liquid_production,
IFNULL( AVG( daily_electricity_consumption ), 0 ) AS daily_electricity_consumption,
IFNULL( AVG( photovoltaic_power ), 0 ) AS photovoltaic_power
FROM
station_daily_production_situation WHERE
data_date BETWEEN #{beginTime} AND #{endTime}
AND station_name IN
<foreach collection="stationNameList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
GROUP BY
station_name
) d
JOIN ( SELECT IFNULL( SUM( photovoltaic_power ), 0 ) AS month_photovoltaic_power, station_name FROM
station_daily_production_situation WHERE MONTH ( data_date ) = #{month}
AND station_name IN
<foreach collection="stationNameList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
GROUP BY station_name ) m ON d.station_name = m.station_name
JOIN ( SELECT IFNULL( SUM( photovoltaic_power ), 0 ) AS year_photovoltaic_power, station_name FROM
station_daily_production_situation WHERE YEAR ( data_date ) = #{year}
AND station_name IN
<foreach collection="stationNameList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
GROUP BY station_name ) y ON
d.station_name = y.station_name
<where>
<if test="stationName != null and stationName !=''">
AND d.station_name LIKE CONCAT( '%', #{stationName}, '%' )
</if>
</where>
ORDER BY d.station_name
</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