Commit d0983d84 authored by ZWT's avatar ZWT

feat(能源管理系统): 邮件接收

1.统计分析-能耗分析模块重构,删除原有接口及代码,新建能耗分析测试用数据表,生成相关代码并集成到项目中并上传git;
2.统计分析-能耗分析模块能耗概览接口开发,输电线路Cloud模块新增通过组织结构ID列表查询线路列表接口,完成能耗分析模块能耗概览接口业务逻辑开发,添加线上接口文档并完成接口冒烟测试;
3.统计分析-能耗分析模块,完成绿电消纳/用电趋势接口开发,添加线上接口文档并完成接口冒烟测试;
4.统计分析-能耗分析模块,完成用电详情接口开发,添加线上接口文档并完成接口冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 6c0063f6
......@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.io.Serializable;
......@@ -18,6 +21,9 @@ import java.util.Date;
* @date 2023/11/23
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("energy_consumption_analysis")
public class EnergyConsumptionAnalysisEnt implements Serializable {
@XText("ID")
......
......@@ -2,6 +2,7 @@ package pps.core.prediction.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
......@@ -147,27 +148,46 @@ public class EnergyConsumptionAnalysisService {
Date endTime = input.getEndTime();
//查本期数据
list = mapper.selectList(this.getQueryWrapper4Page(lineIds, startTime, endTime));
PageHelper.clearPage();
//查上期数据
switch (input.getDateType()) {
case 1:
endTime = DateUtil.offsetDay(startTime, -1);
startTime = DateUtil.offsetDay(startTime, -7);
break;
case 2:
endTime = DateUtil.offsetDay(startTime, -1);
startTime = DateUtil.offsetDay(startTime, -30);
break;
case 3:
int betweenDay = (int) DateUtil.betweenDay(startTime, endTime, true) + 1;
endTime = DateUtil.offsetDay(startTime, -1);
startTime = DateUtil.offsetDay(startTime, -betweenDay);
break;
default:
throw new XServiceException(BusinessError.DateTypeError);
if (CollUtil.isNotEmpty(list)) {
PageHelper.clearPage();
//查上期数据
switch (input.getDateType()) {
case 1:
endTime = DateUtil.offsetDay(startTime, -1);
startTime = DateUtil.offsetDay(startTime, -7);
break;
case 2:
endTime = DateUtil.offsetDay(startTime, -1);
startTime = DateUtil.offsetDay(startTime, -30);
break;
case 3:
int betweenDay = (int) DateUtil.betweenDay(startTime, endTime, true) + 1;
endTime = DateUtil.offsetDay(startTime, -1);
startTime = DateUtil.offsetDay(startTime, -betweenDay);
break;
default:
throw new XServiceException(BusinessError.DateTypeError);
}
List<EnergyConsumptionAnalysisEnt> periodList = mapper.selectList(this.getQueryWrapper4Page(lineIds, startTime, endTime));
if (CollUtil.isNotEmpty(periodList)) {
for (EnergyConsumptionAnalysisEnt ent : list) {
EnergyConsumptionAnalysisEnt period = Optional.ofNullable(CollUtil.findOne(periodList, x -> CharSequenceUtil.equals(ent.getLineId(), x.getLineId())))
.orElse(EnergyConsumptionAnalysisEnt.builder()
.powerConsumption(BigDecimal.ZERO)
.powerGeneration(BigDecimal.ZERO)
.build());
outputs.add(QueryEnergyConsumptionAnalysisViewOutput.builder()
.lineId(ent.getLineId())
.lineName(lineMap.get(ent.getLineId()))
.powerGeneration(ent.getPowerGeneration())
.generationCycleRatio(this.getCycleRatio(ent.getPowerGeneration(), period.getPowerGeneration()))
.powerConsumption(ent.getPowerConsumption())
.consumptionCycleRatio(this.getCycleRatio(ent.getPowerConsumption(), period.getPowerConsumption()))
.absorptionRate(this.getAbsorptionRate(ent.getPowerGeneration(), ent.getPowerConsumption()))
.build());
}
}
}
List<EnergyConsumptionAnalysisEnt> energyConsumptionAnalysisEnts = mapper.selectList(this.getQueryWrapper4Page(lineIds, startTime, endTime));
} else {
list = new ArrayList<>(0);
}
......@@ -216,6 +236,26 @@ public class EnergyConsumptionAnalysisService {
return absorptionRate;
}
/**
* 获取环比
* (本期-上期) /上期*100%
*
* @param currentPeriod 本期
* @param lastPeriod 上期
* @return {@link BigDecimal}
*/
private BigDecimal getCycleRatio(BigDecimal currentPeriod, BigDecimal lastPeriod) {
BigDecimal cycleRatio;
if (lastPeriod.compareTo(BigDecimal.ZERO) > 0) {
cycleRatio = currentPeriod.subtract(lastPeriod)
.divide(lastPeriod, 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
} else {
cycleRatio = BigDecimal.ZERO;
}
return cycleRatio;
}
/**
* 获取所有path包含组织ID的组织
*
......
package pps.core.prediction.service.data.energy_consumption_analysis;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import xstartup.base.data.XPageInput;
import java.math.BigDecimal;
import java.util.Date;
/**
* 能耗分析表(测试用)
......@@ -14,22 +15,29 @@ import java.util.Date;
* @date 2023/11/23
*/
@Data
public class QueryEnergyConsumptionAnalysisViewOutput extends XPageInput {
@XText("ID")
private Long id;
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class QueryEnergyConsumptionAnalysisViewOutput {
@XText("线路ID")
private String lineId;
@XText("线路名称")
private String lineName;
@XText("发电量(kWh)")
private BigDecimal powerGeneration;
@XText("发电环比(%)")
private BigDecimal generationCycleRatio;
@XText("用电量(kWh)")
private BigDecimal powerConsumption;
@XText("用电环比(%)")
private BigDecimal consumptionCycleRatio;
@XText("消纳率(%)")
private BigDecimal absorptionRate;
@XText("日期")
private Date dataDate;
}
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