Commit e5d4eaa3 authored by ZWT's avatar ZWT

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

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

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 6350a9eb
......@@ -111,6 +111,11 @@ public class BusinessConstant {
*/
public static final BigDecimal BIG_DECIMAL_0_25 = BigDecimal.valueOf(0.25);
/**
* 0.35
*/
public static final BigDecimal BIG_DECIMAL_0_35 = BigDecimal.valueOf(0.35);
/**
* 6.67
*/
......
......@@ -23,4 +23,7 @@ public class DynamicQueryBasePowerLineOutput {
@XText("市电峰谷配置ID")
private String strategyId;
@XText("电网类型key(字典获取)")
private String gridTypeKey;
}
......@@ -79,7 +79,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
String strategyId = input.getStrategyId();
BasePowerLineMapper mapper = context.getBean(BasePowerLineMapper.class);
List<BasePowerLineEnt> selectList = mapper.selectList(new LambdaQueryWrapper<BasePowerLineEnt>()
.select(BaseModel::getId, BasePowerLineEnt::getLineName, BasePowerLineEnt::getStrategyId)
.select(BaseModel::getId, BasePowerLineEnt::getLineName, BasePowerLineEnt::getStrategyId, BasePowerLineEnt::getGridTypeKey)
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.in(CollUtil.isNotEmpty(lineIds), BaseModel::getId, lineIds)
.in(CollUtil.isNotEmpty(lineNames), BasePowerLineEnt::getLineName, lineNames)
......
......@@ -427,46 +427,67 @@ public class HomePageService {
@XApiGet
public XSingleResult<GetIncomeAnalysisOutput> getIncomeAnalysis(XContext context, GetStationViewInput input) {
String stationId = input.getStationId();
List<String> lineNameList = this.getLineList(context, stationId, null, null).stream()
.map(DynamicQueryBasePowerLineOutput::getLineName)
.collect(Collectors.toList());
ThirdDailyAccumulationUpdateMapper analysisMapper = context.getBean(ThirdDailyAccumulationUpdateMapper.class);
ThirdDailyAccumulationUpdateEnt analysisEnt = analysisMapper.selectOne(new QueryWrapper<ThirdDailyAccumulationUpdateEnt>()
.select("IFNULL( SUM( photovoltaic_power ), 0 ) AS photovoltaic_power",
"IFNULL( SUM( daily_electricity_consumption ), 0 ) AS daily_electricity_consumption",
"IFNULL( SUM( daily_liquid_production ), 0 ) AS daily_liquid_production",
"IFNULL( SUM( energy_storage_discharge ), 0 ) AS energy_storage_discharge",
"IFNULL( SUM( in_place_consumption ), 0 ) AS in_place_consumption")
.lambda()
.in(ThirdDailyAccumulationUpdateEnt::getStationName, lineNameList)
);
//发电量
BigDecimal powerGeneration = analysisEnt.getPhotovoltaicPower()
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//用电量
BigDecimal dailyElectricityConsumption = analysisEnt.getDailyElectricityConsumption()
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//储能日累计放电量
BigDecimal energyStorageCapacity = analysisEnt.getEnergyStorageDischarge()
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//累计减碳量
BigDecimal carbonReduction = analysisEnt.getPhotovoltaicPower()
.multiply(BusinessConstant.BIG_DECIMAL_6_67)
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//经济效益
BigDecimal economicBenefit = analysisEnt.getPhotovoltaicPower()
.multiply(BigDecimal.valueOf(0.6))
.subtract(analysisEnt.getPhotovoltaicPower()
.multiply(BigDecimal.valueOf(0.28)))
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//绿电占比:累计就地消纳量/累计井场用电量*100%
BigDecimal greenElectricityRate = analysisEnt.getInPlaceConsumption()
.multiply(BusinessConstant.BIG_DECIMAL_100)
.divide(analysisEnt.getDailyElectricityConsumption(), 2, RoundingMode.HALF_UP);
//余电上网:发电量-就地消纳量
BigDecimal avoidPeakRate = analysisEnt.getPhotovoltaicPower()
.subtract(analysisEnt.getInPlaceConsumption())
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
boolean isOffGrid = false;
Set<String> lineNameList;
BigDecimal powerGeneration = BigDecimal.ZERO;
BigDecimal dailyElectricityConsumption = BigDecimal.ZERO;
BigDecimal energyStorageCapacity = BigDecimal.ZERO;
BigDecimal carbonReduction = BigDecimal.ZERO;
BigDecimal economicBenefit = BigDecimal.ZERO;
String greenElectricityRate = "-";
String zeroGreenElectricityRate = "100";
BigDecimal avoidPeakRate = BigDecimal.ZERO;
List<DynamicQueryBasePowerLineOutput> lineList = this.getLineList(context, stationId, null, null);
if (CollUtil.isNotEmpty(lineList)) {
lineNameList = new HashSet<>(lineList.size());
for (DynamicQueryBasePowerLineOutput line : lineList) {
lineNameList.add(line.getLineName());
if (CharSequenceUtil.equals(line.getGridTypeKey(), "0")) {
isOffGrid = true;
}
}
ThirdDailyAccumulationUpdateMapper analysisMapper = context.getBean(ThirdDailyAccumulationUpdateMapper.class);
ThirdDailyAccumulationUpdateEnt analysisEnt = analysisMapper.selectOne(new QueryWrapper<ThirdDailyAccumulationUpdateEnt>()
.select("IFNULL( SUM( photovoltaic_power ), 0 ) AS photovoltaic_power",
"IFNULL( SUM( daily_electricity_consumption ), 0 ) AS daily_electricity_consumption",
"IFNULL( SUM( daily_liquid_production ), 0 ) AS daily_liquid_production",
"IFNULL( SUM( energy_storage_discharge ), 0 ) AS energy_storage_discharge",
"IFNULL( SUM( in_place_consumption ), 0 ) AS in_place_consumption")
.lambda()
.in(ThirdDailyAccumulationUpdateEnt::getStationName, lineNameList)
);
//发电量
powerGeneration = analysisEnt.getPhotovoltaicPower()
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//用电量
dailyElectricityConsumption = analysisEnt.getDailyElectricityConsumption()
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//储能日累计放电量
energyStorageCapacity = analysisEnt.getEnergyStorageDischarge()
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//累计减碳量
carbonReduction = analysisEnt.getPhotovoltaicPower()
.multiply(BusinessConstant.BIG_DECIMAL_6_67)
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//经济效益
economicBenefit = analysisEnt.getPhotovoltaicPower()
.multiply(BigDecimal.valueOf(0.6))
.subtract(analysisEnt.getPhotovoltaicPower()
.multiply(BigDecimal.valueOf(0.28)))
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
//近零碳井场绿电占比:(100-(累计就地消纳量/累计井场用电量*100%))*0.35
greenElectricityRate = BusinessConstant.BIG_DECIMAL_100.subtract(analysisEnt.getInPlaceConsumption()
.multiply(BusinessConstant.BIG_DECIMAL_100)
.divide(analysisEnt.getDailyElectricityConsumption(), 6, RoundingMode.HALF_UP)
).multiply(BusinessConstant.BIG_DECIMAL_0_35).setScale(2, RoundingMode.HALF_UP)
.toString();
//零碳井场绿电占比:有离网线路的默认100%
zeroGreenElectricityRate = isOffGrid || ObjectUtil.isEmpty(stationId) ? zeroGreenElectricityRate : "-";
//余电上网:发电量-就地消纳量
avoidPeakRate = analysisEnt.getPhotovoltaicPower()
.subtract(analysisEnt.getInPlaceConsumption())
.divide(BusinessConstant.BIG_DECIMAL_10000, 2, RoundingMode.HALF_UP);
}
return XSingleResult.success(GetIncomeAnalysisOutput.builder()
.absorptionRate(BusinessConstant.BIG_DECIMAL_100)
.avoidPeakRate(avoidPeakRate)
......@@ -476,6 +497,7 @@ public class HomePageService {
.carbonReduction(carbonReduction)
.economicBenefit(economicBenefit)
.dailyElectricityConsumption(dailyElectricityConsumption)
.zeroGreenElectricityRate(zeroGreenElectricityRate)
.build());
}
......
......@@ -32,9 +32,6 @@ public class GetIncomeAnalysisOutput {
@XText("发电量(万度)")
private BigDecimal powerGeneration;
@XText("绿电占比")
private BigDecimal greenElectricityRate;
@XText("减碳量")
private BigDecimal carbonReduction;
......@@ -43,4 +40,10 @@ public class GetIncomeAnalysisOutput {
@XText("累计用电量")
private BigDecimal dailyElectricityConsumption;
@XText("近零碳井场绿电占比")
private String greenElectricityRate;
@XText("零碳井场绿电占比")
private String zeroGreenElectricityRate;
}
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