Commit 8859c948 authored by ZWT's avatar ZWT

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

1.新建油田配置表同时生成相关代码及mapper文件,修改部分第三方数据抽取定时任务,增加针对不同井场开关控制逻辑,同时修改首页页面展示逻辑,通过油田配置功能区分不同首页展示功能;
2.新建定时任务配置表同时生成相关代码及mapper文件,定时任务模块增加mybatis配置,用以操作数据库,修改部分第三方数据抽取定时任务,修改使用方式使其脱离框架方便动态控制;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 7a377485
......@@ -3,6 +3,7 @@ package pps.core.space.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
......@@ -46,6 +47,7 @@ import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -107,6 +109,13 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
List<SpaceOptimizeShortDurationView> durationList;
GetThirdActivePowerOutput thirdActivePower;
BigDecimal dailyElectricityConsumption;
BigDecimal photovoltaicPower;
BigDecimal serviceRating;
BigDecimal sumValleyElectricOpenHour;
BigDecimal sumRunDuration;
BigDecimal dailyGreenOpenHour;
BigDecimal valleyElectricOpenHour;
List<GetBasePriceStrategyDetailOutput> strategyList;
//遍历全量电站
for (String stationName : powerMap.keySet()) {
//取存在的间开
......@@ -117,9 +126,15 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
startSeqMap = lineMap.get(stationName).stream()
.collect(Collectors.groupingBy(SpaceOptimizeShortDurationView::getStartSeq));
//光伏日累计用电(绿电)
BigDecimal photovoltaicPower = BigDecimal.ZERO;
photovoltaicPower = BigDecimal.ZERO;
//按启动顺序取时间段列表
BigDecimal serviceRating = BigDecimal.ZERO;
serviceRating = BigDecimal.ZERO;
//取谷电时间
strategyList = strategyMap.get(plantStrategyMap.get(stationName));
//谷电总开井时长
sumValleyElectricOpenHour = BigDecimal.ZERO;
//总运行时长时长
sumRunDuration = BigDecimal.ZERO;
for (int i = 1; i <= startSeqMap.size(); i++) {
durationList = startSeqMap.get(i);
//当前井口
......@@ -131,7 +146,9 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
//累加运行功率
serviceRating.add(currentServiceRating);
//绿电开井时间(h)
BigDecimal dailyGreenOpenHour = BigDecimal.ZERO;
dailyGreenOpenHour = BigDecimal.ZERO;
//谷电开井时长(h)
valleyElectricOpenHour = BigDecimal.ZERO;
//记录每一次计算结束位置
int index = 0;
for (SpaceOptimizeShortDurationView duration : durationList) {
......@@ -152,6 +169,33 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
dailyGreenOpenHour = dailyGreenOpenHour.add(BusinessConstant.BIG_DECIMAL_0_25);
}
}
//谷电时长计算
if (CollUtil.isNotEmpty(strategyList)) {
for (GetBasePriceStrategyDetailOutput strategy : strategyList) {
//时间转换
DateTime startTime = DateUtil.parse(strategy.getStartTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
if (DateUtil.compare(startTime, closeWellTime) >= 0) {
continue;
}
DateTime endTime;
if (CharSequenceUtil.equals(strategy.getEndTime(), BusinessConstant.END_OF_DAY_TIME)) {
endTime = BusinessConstant.DATE_FLAG;
} else {
endTime = DateUtil.parse(strategy.getEndTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
}
if (DateUtil.compare(endTime, openWellTime) <= 0) {
continue;
}
//计算谷电时长
if (DateUtil.compare(openWellTime, startTime) > 0) {
startTime = openWellTime;
}
if (DateUtil.compare(closeWellTime, endTime) < 0) {
endTime = closeWellTime;
}
valleyElectricOpenHour = BigDecimal.valueOf(DateUtil.between(startTime, endTime, DateUnit.MINUTE)).divide(BusinessConstant.BIG_DECIMAL_60, 2, RoundingMode.HALF_UP);
}
}
}
//单井绿电用电:运行功率*绿电阶段开井时间
BigDecimal dailyGreenConsumption = dailyGreenOpenHour.multiply(currentServiceRating);
......@@ -159,39 +203,43 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
photovoltaicPower = photovoltaicPower.add(dailyGreenConsumption);
//用电趋势结果计算
wellSaveList.add(this.getWellDailyElectricityTrendView(wellProductionMap.get(wellNumber), wellNumber,
wellInfo.getRunDuration(), dailyGreenOpenHour, dailyGreenConsumption, yesterday));
wellInfo.getRunDuration(), dailyGreenOpenHour, dailyGreenConsumption, yesterday, valleyElectricOpenHour));
//累加总运行时长
sumRunDuration = sumRunDuration.add(wellInfo.getRunDuration());
//累加谷电运行时长
sumValleyElectricOpenHour = sumValleyElectricOpenHour.add(valleyElectricOpenHour);
}
//计算封装井场用电趋势数据
dailyElectricityConsumption = Optional.ofNullable(dailyUpdatePowerMap.get(stationName)).orElse(BigDecimal.ZERO);
stationSaveList.add(
this.getLineDailyElectricityTrendView(lastElectricityTrendMap.get(stationName),
dailyElectricityConsumption, photovoltaicPower, stationName, yesterday)
dailyElectricityConsumption, photovoltaicPower, stationName, yesterday, sumRunDuration, sumValleyElectricOpenHour)
);
}
}
//开启事务批量插入
return XTransactionHelper.begin(context, () -> {
// int size;
// if (CollUtil.isNotEmpty(stationSaveList)) {
// LineDailyElectricityTrendViewMapper mapper = context.getBean(LineDailyElectricityTrendViewMapper.class);
// size = stationSaveList.size();
// if (size > BaseUtils.BATCH_SIZE) {
// List<List<LineDailyElectricityTrendView>> subList = BaseUtils.getSubList(stationSaveList);
// subList.forEach(mapper::batchInsert);
// } else {
// mapper.batchInsert(stationSaveList);
// }
// }
// if (CollUtil.isNotEmpty(wellSaveList)) {
// WellDailyElectricityTrendViewMapper mapper = context.getBean(WellDailyElectricityTrendViewMapper.class);
// size = wellSaveList.size();
// if (size > BaseUtils.BATCH_SIZE) {
// List<List<WellDailyElectricityTrendView>> subList = BaseUtils.getSubList(wellSaveList);
// subList.forEach(mapper::batchInsert);
// } else {
// mapper.batchInsert(wellSaveList);
// }
// }
int size;
if (CollUtil.isNotEmpty(stationSaveList)) {
LineDailyElectricityTrendViewMapper mapper = context.getBean(LineDailyElectricityTrendViewMapper.class);
size = stationSaveList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<LineDailyElectricityTrendView>> subList = BaseUtils.getSubList(stationSaveList);
subList.forEach(mapper::batchInsert);
} else {
mapper.batchInsert(stationSaveList);
}
}
if (CollUtil.isNotEmpty(wellSaveList)) {
WellDailyElectricityTrendViewMapper mapper = context.getBean(WellDailyElectricityTrendViewMapper.class);
size = wellSaveList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<WellDailyElectricityTrendView>> subList = BaseUtils.getSubList(wellSaveList);
subList.forEach(mapper::batchInsert);
} else {
mapper.batchInsert(wellSaveList);
}
}
return XServiceResult.OK;
});
}
......@@ -385,13 +433,14 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
* @param wellNumber 井号
* @param runDuration 运行持续时间
* @param dailyGreenOpenHour 每日绿色开放时间
* @param dailyGreenConsumption 绿电用电
* @param dailyGreenConsumption 日常绿色消费
* @param yesterday 昨天
* @param valleyElectricOpenHour 山谷电力开放时间
* @return {@link WellDailyElectricityTrendView }
*/
private WellDailyElectricityTrendView getWellDailyElectricityTrendView(GetWellheadDailyProductionSituationOutput productionSituationOutput,
String wellNumber, BigDecimal runDuration, BigDecimal dailyGreenOpenHour,
BigDecimal dailyGreenConsumption, Date yesterday) {
BigDecimal dailyGreenConsumption, Date yesterday, BigDecimal valleyElectricOpenHour) {
WellDailyElectricityTrendView view;
if (ObjectUtil.isNotNull(productionSituationOutput)) {
view = WellDailyElectricityTrendView.builder()
......@@ -406,6 +455,9 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
.dailyCarbonReduction(dailyGreenConsumption.multiply(BusinessConstant.BIG_DECIMAL_6_67))
//绿电占比:绿电开井时长/开井时长*100%
.greenElectricityRate(BaseUtils.getRate(dailyGreenOpenHour, runDuration))
.valleyElectricOpenHour(valleyElectricOpenHour)
//谷电占比:所有井的谷电时间开井时长/所有井开井时长保留2位小数
.valleyElectricRate(BaseUtils.getRate(valleyElectricOpenHour, runDuration))
.createDate(yesterday)
.systemSource("长庆")
.build();
......@@ -422,6 +474,9 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
.dailyCarbonReduction(dailyGreenConsumption.multiply(BusinessConstant.BIG_DECIMAL_6_67))
//绿电占比:绿电开井时长/开井时长*100%
.greenElectricityRate(BaseUtils.getRate(dailyGreenOpenHour, runDuration))
.valleyElectricOpenHour(valleyElectricOpenHour)
//谷电占比:所有井的谷电时间开井时长/所有井开井时长保留2位小数
.valleyElectricRate(BaseUtils.getRate(valleyElectricOpenHour, runDuration))
.createDate(yesterday)
.systemSource("长庆")
.build();
......@@ -437,10 +492,12 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
* @param photovoltaicPower 光伏发电
* @param stationName 车站名称
* @param yesterday 昨天
* @param sumRunDuration 总运行时间
* @param sumValleyElectricOpenHour sum valley电力开放时间
* @return {@link LineDailyElectricityTrendView }
*/
private LineDailyElectricityTrendView getLineDailyElectricityTrendView(LineDailyElectricityTrendEnt ent, BigDecimal dailyElectricityConsumption,
BigDecimal photovoltaicPower, String stationName, Date yesterday) {
BigDecimal photovoltaicPower, String stationName, Date yesterday, BigDecimal sumRunDuration, BigDecimal sumValleyElectricOpenHour) {
LineDailyElectricityTrendView view;
BigDecimal municipalPower = dailyElectricityConsumption.subtract(photovoltaicPower);
if (municipalPower.compareTo(BigDecimal.ZERO) < 0) {
......@@ -460,6 +517,9 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
.totalRatio(BaseUtils.getRate(dailyElectricityConsumption, ent.getTotalPower()))
.photovoltaicRatio(BaseUtils.getRate(photovoltaicPower, ent.getPhotovoltaicPower()))
.municipalRatio(BaseUtils.getRate(municipalPower, ent.getMunicipalPower()))
.valleyElectricOpenHour(sumValleyElectricOpenHour)
//谷电占比:所有井的谷电时间开井时长/所有井开井时长保留2位小数
.valleyElectricRate(BaseUtils.getRate(sumValleyElectricOpenHour, sumRunDuration))
.createDate(yesterday)
.systemSource("长庆")
.build();
......@@ -476,6 +536,9 @@ public class DailyElectricityTrendCloudServiceImpl implements IDailyElectricityT
.totalRatio(BigDecimal.ZERO)
.photovoltaicRatio(BigDecimal.ZERO)
.municipalRatio(BigDecimal.ZERO)
.valleyElectricOpenHour(sumValleyElectricOpenHour)
//谷电占比:所有井的谷电时间开井时长/所有井开井时长保留2位小数
.valleyElectricRate(BaseUtils.getRate(sumValleyElectricOpenHour, sumRunDuration))
.createDate(yesterday)
.systemSource("长庆")
.build();
......
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