Commit 172b802c authored by ZWT's avatar ZWT

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

1.修改第三方日累计数据推送表表结构,增加日累计储能放电量字段,同时修改代码对应实体及mapper文件,修改相关接口增加储能日累计放电量接收逻辑;
2.修改首页井场收益分析模块接口,修改获取储能累计放电量逻辑;
3.设计并创建井口日用电趋势表,生成对应实体类及mapper文件;
4.统计分析模块,新增本月累计节电经济效益查询接口,添加线上接口文档并完成接口冒烟测试;
5.统计分析模块,新增本月累计减碳量查询接口,添加线上接口文档并完成接口冒烟测试;
6.统计分析模块,新增光伏发电趋势查询接口,添加线上接口文档并完成接口冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent d439e60a
......@@ -10,6 +10,8 @@ import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -140,11 +142,10 @@ public class BaseUtils {
* @return {@link String}
*/
public static String getExecutionCycleForCalibration(Date date, int offset) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(DateUtil.format(date, BusinessConstant.DATE_FORMAT_DAY_C))
.append('-')
.append(DateUtil.format(DateUtil.offsetDay(date, offset - 1), BusinessConstant.DATE_FORMAT_DAY_C));
return stringBuilder.toString();
String stringBuilder = DateUtil.format(date, BusinessConstant.DATE_FORMAT_DAY_C) +
'-' +
DateUtil.format(DateUtil.offsetDay(date, offset - 1), BusinessConstant.DATE_FORMAT_DAY_C);
return stringBuilder;
}
/**
......@@ -155,11 +156,10 @@ public class BaseUtils {
* @return {@link String}
*/
public static String getExecutionCycleForCalibration(Date startDate, Date endDate) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(DateUtil.format(startDate, BusinessConstant.DATE_FORMAT_DAY_C))
.append('-')
.append(DateUtil.format(endDate, BusinessConstant.DATE_FORMAT_DAY_C));
return stringBuilder.toString();
String stringBuilder = DateUtil.format(startDate, BusinessConstant.DATE_FORMAT_DAY_C) +
'-' +
DateUtil.format(endDate, BusinessConstant.DATE_FORMAT_DAY_C);
return stringBuilder;
}
/**
......@@ -208,4 +208,21 @@ public class BaseUtils {
}
return month;
}
/**
* 除法
*
* @param one 一
* @param two 二
* @return {@link BigDecimal }
*/
public static BigDecimal divide(BigDecimal one, BigDecimal two) {
BigDecimal result;
if (two.compareTo(BigDecimal.ZERO) > 0) {
result = one.divide(two, 2, RoundingMode.HALF_UP);
} else {
result = BigDecimal.ZERO;
}
return result;
}
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package pps.cloud.space.service;
import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyElectricityTrendInput;
import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyElectricityTrendOutput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendInput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendOutput;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
......@@ -36,4 +38,14 @@ public interface IDailyElectricityTrendCloudService {
*/
@XText("日用电趋势计算Cloud模块--用电趋势统计")
XListResult<GetLineDailyElectricityTrendOutput> queryDailyElectricityTrend(XContext context, GetLineDailyElectricityTrendInput input);
/**
* 井口分析
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetWellDailyElectricityTrendOutput }>
*/
@XText("日用电趋势计算Cloud模块--井口分析")
XListResult<GetWellDailyElectricityTrendOutput> queryWellheadAnalysis(XContext context, GetWellDailyElectricityTrendInput input);
}
package pps.cloud.space.service.data.well_daily_electricity_trend;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* 用电趋势统计
*
* @author ZWT
* @date 2024/05/27
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetWellDailyElectricityTrendInput {
/**
* 开始时间
*/
private Date createDate;
/**
* 井号列表
*/
private List<String> wellNumberList;
}
package pps.cloud.space.service.data.well_daily_electricity_trend;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.math.BigDecimal;
/**
* 用电趋势统计
*
* @author ZWT
* @date 2024/05/27
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetWellDailyElectricityTrendOutput {
@XText("井号")
private String wellNumber;
@XText("间开每日运行时长(h)")
private BigDecimal spaceRunDuration;
@XText("日产液量(m³)")
private BigDecimal dailyLiquidProduction;
@XText("绿电占比(%)")
private BigDecimal greenElectricityRate;
@XText("日减碳量(吨)")
private BigDecimal dailyCarbonReduction;
@XText("月绿电占比(%)")
private BigDecimal monthGreenElectricityRate;
@XText("月减碳量(吨)")
private BigDecimal monthDailyCarbonReduction;
@XText("年绿电占比(%)")
private BigDecimal yearGreenElectricityRate;
@XText("年减碳量(吨)")
private BigDecimal yearDailyCarbonReduction;
}
......@@ -10,6 +10,7 @@ import xstartup.annotation.XText;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 井口日用电趋势
......@@ -69,4 +70,60 @@ public class WellDailyElectricityTrendView implements Serializable {
@XText("来源系统")
@TableField
private String systemSource;
/*---------------------------- other ----------------------------*/
/**
* 月份
*/
@TableField(exist = false)
private Integer month;
/**
* 年份
*/
@TableField(exist = false)
private Integer year;
/**
* 井号列表
*/
@TableField(exist = false)
private List<String> wellNumberList;
/**
* 月间开运行时长(h)
*/
@TableField(exist = false)
private BigDecimal monthSpaceRunDuration;
/**
* 月绿电开井时间(h)
*/
@TableField(exist = false)
private BigDecimal monthDailyGreenOpenHour;
/**
* 月绿电用电量(kW-h)
*/
@TableField(exist = false)
private BigDecimal monthDailyGreenConsumption;
/**
* 年间开运行时长(h)
*/
@TableField(exist = false)
private BigDecimal yearSpaceRunDuration;
/**
* 年绿电开井时间(h)
*/
@TableField(exist = false)
private BigDecimal yearDailyGreenOpenHour;
/**
* 年绿电用电量(kW-h)
*/
@TableField(exist = false)
private BigDecimal yearDailyGreenConsumption;
}
......@@ -38,4 +38,12 @@ public interface WellDailyElectricityTrendViewMapper {
* @return int
*/
int batchInsert(@Param(value = "list") List<WellDailyElectricityTrendView> list);
/**
* 井口分析
*
* @param record 记录
* @return {@link List }<{@link WellDailyElectricityTrendView }>
*/
List<WellDailyElectricityTrendView> selectWellheadAnalysis(WellDailyElectricityTrendView record);
}
......@@ -17,6 +17,8 @@ import pps.cloud.prediction.service.data.wellhead_daily_production_situation.Get
import pps.cloud.space.service.IDailyElectricityTrendCloudService;
import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyElectricityTrendInput;
import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyElectricityTrendOutput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendInput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendOutput;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.LineDailyElectricityTrendEnt;
......@@ -194,6 +196,47 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
return XListResult.success(XCopyUtils.copyNewList(list, GetLineDailyElectricityTrendOutput.class));
}
/**
* 井口分析
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetWellDailyElectricityTrendOutput }>
*/
@Override
public XListResult<GetWellDailyElectricityTrendOutput> queryWellheadAnalysis(XContext context, GetWellDailyElectricityTrendInput input) {
DateTime date = DateUtil.date(input.getCreateDate());
WellDailyElectricityTrendViewMapper mapper = context.getBean(WellDailyElectricityTrendViewMapper.class);
List<WellDailyElectricityTrendView> list = mapper.selectWellheadAnalysis(
WellDailyElectricityTrendView.builder()
.createDate(date)
.month(date.monthBaseOne())
.year(date.year())
.wellNumberList(input.getWellNumberList())
.build()
);
List<GetWellDailyElectricityTrendOutput> output;
if (CollUtil.isNotEmpty(list)) {
output = new ArrayList<>(list.size());
for (WellDailyElectricityTrendView view : list) {
output.add(GetWellDailyElectricityTrendOutput.builder()
.wellNumber(view.getWellNumber())
.spaceRunDuration(view.getSpaceRunDuration())
.dailyLiquidProduction(view.getDailyLiquidProduction())
.greenElectricityRate(view.getGreenElectricityRate())
.dailyCarbonReduction(view.getDailyCarbonReduction())
.monthGreenElectricityRate(this.getRate(view.getMonthDailyGreenOpenHour(), view.getMonthSpaceRunDuration()))
.monthDailyCarbonReduction(view.getMonthDailyGreenConsumption().multiply(BusinessConstant.BIG_DECIMAL_6_67))
.yearGreenElectricityRate(this.getRate(view.getYearDailyGreenOpenHour(), view.getYearSpaceRunDuration()))
.yearDailyCarbonReduction(view.getYearDailyGreenConsumption().multiply(BusinessConstant.BIG_DECIMAL_6_67))
.build());
}
} else {
output = Collections.emptyList();
}
return XListResult.success(output);
}
/*------------------------------------- private -------------------------------------*/
/**
......
......@@ -67,4 +67,60 @@
)
</foreach>
</insert>
<resultMap id="ExtResultMap" type="pps.core.space.entity.WellDailyElectricityTrendView" extends="BaseResultMap">
<result column="month_daily_green_open_hour" property="monthDailyGreenOpenHour" jdbcType="DECIMAL"/>
<result column="month_space_run_duration" property="monthSpaceRunDuration" jdbcType="DECIMAL"/>
<result column="month_daily_green_consumption" property="monthDailyGreenConsumption" jdbcType="DECIMAL"/>
<result column="year_daily_green_open_hour" property="yearDailyGreenOpenHour" jdbcType="DECIMAL"/>
<result column="year_space_run_duration" property="yearSpaceRunDuration" jdbcType="DECIMAL"/>
<result column="year_daily_green_consumption" property="yearDailyGreenConsumption" jdbcType="DECIMAL"/>
</resultMap>
<select id="selectWellheadAnalysis" parameterType="pps.core.space.entity.WellDailyElectricityTrendView"
resultMap="ExtResultMap">
SELECT t.well_number,
t.space_run_duration,
t.daily_liquid_production,
t.green_electricity_rate,
t.daily_carbon_reduction,
m.month_daily_green_open_hour,
m.month_space_run_duration,
m.month_daily_green_consumption,
y.year_daily_green_open_hour,
y.year_space_run_duration,
y.year_daily_green_consumption
FROM well_daily_electricity_trend t
LEFT JOIN (SELECT well_number,
SUM(daily_green_open_hour) AS month_daily_green_open_hour,
SUM(space_run_duration) AS month_space_run_duration,
SUM(daily_green_consumption) AS month_daily_green_consumption
FROM well_daily_electricity_trend
WHERE
MONTH ( create_date ) = #{month}
AND well_number IN
<foreach collection="wellNumberList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
GROUP BY
well_number) m ON t.well_number = m.well_number
LEFT JOIN (SELECT well_number,
SUM(daily_green_open_hour) AS year_daily_green_open_hour,
SUM(space_run_duration) AS year_space_run_duration,
SUM(daily_green_consumption) AS year_daily_green_consumption
FROM well_daily_electricity_trend
WHERE
YEAR ( create_date ) = #{year}
AND well_number IN
<foreach collection="wellNumberList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
GROUP BY
well_number) y ON t.well_number = y.well_number
WHERE t.create_date = #{createDate}
AND t.well_number IN
<foreach collection="wellNumberList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -26,10 +26,13 @@ import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyEle
import pps.cloud.space.service.data.line_daily_electricity_trend.GetLineDailyElectricityTrendOutput;
import pps.cloud.space.service.data.space_institution_wellhead.GetSpaceInstitutionWellheadInput;
import pps.cloud.space.service.data.space_institution_wellhead.GetSpaceInstitutionWellheadOutput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendInput;
import pps.cloud.space.service.data.well_daily_electricity_trend.GetWellDailyElectricityTrendOutput;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.data.sys_organization.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.sys_organization.GetSysOrganizationViewOutput;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.utils.BaseUtils;
import pps.core.prediction.constant.ThirdPartyApiConstant;
import pps.core.prediction.entity.*;
import pps.core.prediction.enums.BusinessError;
......@@ -382,7 +385,7 @@ public class EnergyConsumptionAnalysisService {
dailyLiquidProduction = analysisEnt.getDailyLiquidProduction();
dailyElectricityConsumption = analysisEnt.getDailyElectricityConsumption();
greenElectricityRate = this.getAbsorptionRate(analysisEnt.getInPlaceConsumption(), analysisEnt.getDailyElectricityConsumption());
avoidPeakRate = this.divide(analysisEnt.getPhotovoltaicPower(), analysisEnt.getInPlaceConsumption());
avoidPeakRate = BaseUtils.divide(analysisEnt.getPhotovoltaicPower(), analysisEnt.getInPlaceConsumption());
//发电功率
ThirdActivePowerDailyUpdateMapper activeMapper = context.getBean(ThirdActivePowerDailyUpdateMapper.class);
ThirdActivePowerDailyUpdateEnt activeEnt = activeMapper.selectOne(new QueryWrapper<ThirdActivePowerDailyUpdateEnt>()
......@@ -670,6 +673,86 @@ public class EnergyConsumptionAnalysisService {
return XListResult.success(outputs);
}
/**
* 井口分析
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetWellheadAnalysisOutput }>
*/
@XText("间开效果评价--井口分析")
@XApiGet
public XListResult<GetWellheadAnalysisOutput> wellheadAnalysis(XContext context, GetEnergyConsumptionAnalysisInput input) {
DynamicQueryBasePowerLineWellheadInput wellheadInput = new DynamicQueryBasePowerLineWellheadInput();
String stationName = input.getStationName();
if (CharSequenceUtil.isNotBlank(stationName)) {
wellheadInput.setLineName(stationName);
} else {
List<String> orgIds = this.getOrgIdsByPath(context, input.getOuId());
wellheadInput.setOuIds(orgIds);
}
List<GetWellheadAnalysisOutput> outputs = Collections.emptyList();
BigDecimal spaceRunDuration = BigDecimal.ZERO;
BigDecimal dailyLiquidProduction = BigDecimal.ZERO;
BigDecimal greenElectricityRate = BigDecimal.ZERO;
BigDecimal dailyCarbonReduction = BigDecimal.ZERO;
BigDecimal monthGreenElectricityRate = BigDecimal.ZERO;
BigDecimal monthDailyCarbonReduction = BigDecimal.ZERO;
BigDecimal yearGreenElectricityRate = BigDecimal.ZERO;
BigDecimal yearDailyCarbonReduction = BigDecimal.ZERO;
List<DynamicQueryBasePowerLineWellheadViewOutput> wellheadList = this.getPowerLineWellheadList(context, wellheadInput);
if (CollUtil.isNotEmpty(wellheadList)) {
DateTime yesterday = DateUtil.beginOfDay(DateUtil.yesterday());
IDailyElectricityTrendCloudService service = context.getBean(IDailyElectricityTrendCloudService.class);
XListResult<GetWellDailyElectricityTrendOutput> result = service.queryWellheadAnalysis(context, GetWellDailyElectricityTrendInput.builder()
.createDate(yesterday)
.wellNumberList(wellheadList.stream().map(DynamicQueryBasePowerLineWellheadViewOutput::getWellNumber)
.collect(Collectors.toList()))
.build());
result.throwIfFail();
List<GetWellDailyElectricityTrendOutput> list = result.getResult();
if (CollUtil.isNotEmpty(list)) {
outputs = new ArrayList<>(list.size());
for (GetWellDailyElectricityTrendOutput output : list) {
outputs.add(GetWellheadAnalysisOutput.builder()
.wellNumber(output.getWellNumber())
.spaceRunDuration(output.getSpaceRunDuration())
.dailyLiquidProduction(output.getDailyLiquidProduction())
.greenElectricityRate(output.getGreenElectricityRate())
.dailyCarbonReduction(output.getDailyCarbonReduction())
.monthGreenElectricityRate(output.getMonthGreenElectricityRate())
.monthDailyCarbonReduction(output.getMonthDailyCarbonReduction())
.yearGreenElectricityRate(output.getYearGreenElectricityRate())
.yearDailyCarbonReduction(output.getYearDailyCarbonReduction())
.build());
spaceRunDuration = spaceRunDuration.add(output.getSpaceRunDuration());
dailyLiquidProduction = dailyLiquidProduction.add(output.getDailyLiquidProduction());
greenElectricityRate = greenElectricityRate.add(output.getGreenElectricityRate());
dailyCarbonReduction = dailyCarbonReduction.add(output.getDailyCarbonReduction());
monthGreenElectricityRate = monthGreenElectricityRate.add(output.getMonthGreenElectricityRate());
monthDailyCarbonReduction = monthDailyCarbonReduction.add(output.getMonthDailyCarbonReduction());
yearGreenElectricityRate = yearGreenElectricityRate.add(output.getYearGreenElectricityRate());
yearDailyCarbonReduction = yearDailyCarbonReduction.add(output.getYearDailyCarbonReduction());
}
BigDecimal avg = BigDecimal.valueOf(list.size());
monthGreenElectricityRate = monthGreenElectricityRate.divide(avg, 2, RoundingMode.HALF_UP);
yearGreenElectricityRate = yearGreenElectricityRate.divide(avg, 2, RoundingMode.HALF_UP);
}
}
outputs.add(GetWellheadAnalysisOutput.builder()
.wellNumber("合计")
.spaceRunDuration(spaceRunDuration)
.dailyLiquidProduction(dailyLiquidProduction)
.greenElectricityRate(greenElectricityRate)
.dailyCarbonReduction(dailyCarbonReduction)
.monthGreenElectricityRate(monthGreenElectricityRate)
.monthDailyCarbonReduction(monthDailyCarbonReduction)
.yearGreenElectricityRate(yearGreenElectricityRate)
.yearDailyCarbonReduction(yearDailyCarbonReduction)
.build());
return XListResult.success(outputs);
}
/*------------------------------ 能耗分析(废弃) ------------------------------*/
/**
......@@ -870,23 +953,6 @@ public class EnergyConsumptionAnalysisService {
.orderByAsc(ThirdDailyAccumulationUpdateEnt::getPhotovoltaicPower);
}
/**
* 除法
*
* @param one 一
* @param two 二
* @return {@link BigDecimal }
*/
private BigDecimal divide(BigDecimal one, BigDecimal two) {
BigDecimal result;
if (two.compareTo(BigDecimal.ZERO) > 0) {
result = one.divide(two, 2, RoundingMode.HALF_UP);
} else {
result = BigDecimal.ZERO;
}
return result;
}
/**
* 获取消纳率
* 消纳率:就地消纳量/累计用电*100%
......@@ -906,26 +972,6 @@ 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(BusinessConstant.BIG_DECIMAL_100);
} else {
cycleRatio = BigDecimal.ZERO;
}
return cycleRatio;
}
/**
* 获取所有path包含组织ID的组织
*
......@@ -1186,4 +1232,24 @@ public class EnergyConsumptionAnalysisService {
}
return carbonReduction;
}
/**
* 获取环比
* (本期-上期) /上期*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(BusinessConstant.BIG_DECIMAL_100);
} else {
cycleRatio = BigDecimal.ZERO;
}
return cycleRatio;
}
}
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 java.math.BigDecimal;
/**
* 井口分析
*
* @author ZWT
* @date 2024/05/27
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetWellheadAnalysisOutput {
@XText("井号")
private String wellNumber;
@XText("间开每日运行时长(h)")
private BigDecimal spaceRunDuration;
@XText("日产液量(m³)")
private BigDecimal dailyLiquidProduction;
@XText("绿电占比(%)")
private BigDecimal greenElectricityRate;
@XText("日减碳量(吨)")
private BigDecimal dailyCarbonReduction;
@XText("月绿电占比(%)")
private BigDecimal monthGreenElectricityRate;
@XText("月减碳量(吨)")
private BigDecimal monthDailyCarbonReduction;
@XText("年绿电占比(%)")
private BigDecimal yearGreenElectricityRate;
@XText("年减碳量(吨)")
private BigDecimal yearDailyCarbonReduction;
}
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