Commit 34275020 authored by ZWT's avatar ZWT

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

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

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent f7a3a3f3
......@@ -148,6 +148,11 @@ public class BusinessConstant {
*/
public static final String DATE_FORMAT_ALL = "yyyy-MM-dd HH:mm:ss";
/**
* 日期格式到小时
*/
public static final String DATE_FORMAT_HOUR = "yyyy-MM-dd HH:00:00";
/**
* 日期格式化到天(年月日)
*/
......
package pps.core.prediction.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.core.prediction.entity.PlantPredictedPowerUltraTermEnt;
import pps.core.prediction.mapper.PlantPredictedPowerUltraTermMapper;
import pps.core.prediction.service.data.plant_predicted_power_mid_term.GetPlantPredictedPowerMidTermOutput;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.core.common.constant.BusinessConstant;
import pps.core.prediction.entity.ConfigShowEnt;
import pps.core.prediction.mapper.ConfigShowMapper;
import pps.core.prediction.service.data.plant_predicted_power_data.GetPredictedPowerOutput;
import pps.core.prediction.service.data.plant_predicted_power_ultra_term.GetPlantPredictedPowerUltraTermInput;
import pps.core.prediction.utils.ServiceUtil;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.base.util.XCopyUtils;
import xstartup.base.util.XDateUtils;
import xstartup.base.util.XStringUtils;
import xstartup.data.XListResult;
import xstartup.feature.api.annotation.XApiGet;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@XService
@XText("电站预测功率4小时数据")
public class PlantPredictedPowerUltraTermService {
/**
* 小时功率预测
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult }<{@link GetPredictedPowerOutput }>
*/
@XApiGet
@XText("根据电站预测功率4小时数据")
public XListResult<GetPlantPredictedPowerMidTermOutput> getPlantPredictedPowerUltraTermList(XContext context, GetPlantPredictedPowerUltraTermInput input) {
//4小时数据,往前推1天,往后推4小时
PlantPredictedPowerUltraTermMapper mapper = context.getBean(PlantPredictedPowerUltraTermMapper.class);
String startTime;
String endTime;
if (XStringUtils.isEmpty(input.getStartTime())) {
startTime = XDateUtils.getString(XDateUtils.addDays(new Date(), -1));
endTime = XDateUtils.getString(XDateUtils.addHours(new Date(), 4));
public XListResult<GetPredictedPowerOutput> getPlantPredictedPowerUltraTermList(XContext context, GetPlantPredictedPowerUltraTermInput input) {
DateTime now = DateUtil.date();
DateTime inputTime;
String inputStartTime = input.getStartTime();
if (CharSequenceUtil.isBlank(inputStartTime)) {
inputTime = DateUtil.beginOfHour(now);
} else {
Date dateString = XDateUtils.parse(XDateUtils.getDateString(new Date()) + " " + input.getStartTime() + ":00");
startTime = XDateUtils.getString(XDateUtils.addDays(dateString, -1));
endTime = XDateUtils.getString(XDateUtils.addHours(dateString, 4));
inputTime = DateUtil.parseDate(now.toString(BusinessConstant.DATE_FORMAT_DAY) + " " + inputStartTime);
}
QueryWrapper<PlantPredictedPowerUltraTermEnt> queryWrapper = setQueryWrapper(input.getPlantId(), startTime, endTime);
List<PlantPredictedPowerUltraTermEnt> list = mapper.selectList(queryWrapper);
List<GetPlantPredictedPowerMidTermOutput> outputs = XCopyUtils.copyNewList(list, GetPlantPredictedPowerMidTermOutput.class);
ThirdActivePowerServiceHelper.getActivePower(context, outputs, input.getPlantId(), null);
return XListResult.success(outputs);
//检查演示配置
ConfigShowMapper configMapper = context.getBean(ConfigShowMapper.class);
ConfigShowEnt configShowEnt = configMapper.selectOne(new LambdaQueryWrapper<ConfigShowEnt>()
.last("LIMIT 1"));
//时间出力截至时间
Date showTime = inputTime;
int betweenDay = 0;
if (ObjectUtil.isAllNotEmpty(configShowEnt, configShowEnt.getIsEnable(), configShowEnt.getChoiceDate())) {
DateTime day = configShowEnt.getIsEnable().equals(0) ? DateUtil.date(configShowEnt.getChoiceDate()) : inputTime;
showTime = DateUtil.parse(day.toString(BusinessConstant.DATE_FORMAT_DAY) + " " + inputTime.toString(BusinessConstant.TIME_FORMAT));
//计算偏移
betweenDay = (int) DateUtil.betweenDay(inputTime, day, true);
if (DateUtil.compare(day, inputTime) > 0) {
betweenDay = -betweenDay;
}
private QueryWrapper<PlantPredictedPowerUltraTermEnt> setQueryWrapper(String plantId, String startTime, String endTime) {
QueryWrapper<PlantPredictedPowerUltraTermEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(PlantPredictedPowerUltraTermEnt::getPlantId, plantId);
queryWrapper.lambda().ge(PlantPredictedPowerUltraTermEnt::getDataDate, startTime);
queryWrapper.lambda().le(PlantPredictedPowerUltraTermEnt::getDataDate, endTime);
queryWrapper.lambda().orderByAsc(PlantPredictedPowerUltraTermEnt::getDataDate);
return queryWrapper;
}
//计算时间范围,开始时间往前推1天,结束时间往后推4小时
DateTime beginTime = DateUtil.offsetMinute(showTime, -1441);
DateTime endTime = DateUtil.offsetHour(showTime, 4);
//查光伏预测
Map<Date, BigDecimal> predictedMap = ServiceUtil.getPredictedPowerMap15(context, 3, input.getPlantId(), beginTime, endTime);
//查实际功率
Map<Date, BigDecimal> powerMap = ServiceUtil.getActivePowerMap15(context, input.getPlantId(), beginTime, showTime);
return XListResult.success(ServiceUtil.getPowerOutput(DateUtil.offsetDay(showTime, -1), endTime, betweenDay, now, predictedMap, powerMap));
}
}
\ No newline at end of file
......@@ -14,14 +14,8 @@ import pps.core.auth.HttpRequestClient;
import pps.core.common.cache.ThirdPartyConfigCache;
import pps.core.common.constant.BusinessConstant;
import pps.core.prediction.constant.ThirdPartyApiConstant;
import pps.core.prediction.entity.ConfigShowEnt;
import pps.core.prediction.entity.PlantPredictedPowerMidTermEnt;
import pps.core.prediction.entity.PlantPredictedPowerShortTermEnt;
import pps.core.prediction.entity.ThirdActivePowerView;
import pps.core.prediction.mapper.ConfigShowMapper;
import pps.core.prediction.mapper.PlantPredictedPowerMidTermMapper;
import pps.core.prediction.mapper.PlantPredictedPowerShortTermMapper;
import pps.core.prediction.mapper.ThirdActivePowerViewMapper;
import pps.core.prediction.entity.*;
import pps.core.prediction.mapper.*;
import pps.core.prediction.service.data.plant_predicted_power_data.GetPredictedPowerOutput;
import xstartup.base.XContext;
import xstartup.base.XStartup;
......@@ -173,6 +167,21 @@ public class ServiceUtil {
predictedMap = Collections.emptyMap();
}
break;
case 3:
//4小时功率预测
PlantPredictedPowerUltraTermMapper ultraMapper = context.getBean(PlantPredictedPowerUltraTermMapper.class);
List<PlantPredictedPowerUltraTermEnt> ultraList = ultraMapper.selectList(new LambdaQueryWrapper<PlantPredictedPowerUltraTermEnt>()
.eq(PlantPredictedPowerUltraTermEnt::getPlantId, stationId)
.between(PlantPredictedPowerUltraTermEnt::getDataDate, beginTime, endTime)
.orderByAsc(PlantPredictedPowerUltraTermEnt::getDataDate)
);
if (CollUtil.isNotEmpty(ultraList)) {
predictedMap = ultraList.stream()
.collect(Collectors.toMap(x -> DateUtil.parse(x.getDataDate()), PlantPredictedPowerUltraTermEnt::getPredictPower));
} else {
predictedMap = Collections.emptyMap();
}
break;
default:
predictedMap = Collections.emptyMap();
}
......@@ -217,7 +226,7 @@ public class ServiceUtil {
* @param powerMap 功率图
* @return {@link List }<{@link GetPredictedPowerOutput }>
*/
public static List<GetPredictedPowerOutput> getPowerOutput(DateTime beginTime, DateTime endTime, int betweenDay, DateTime now,
public static List<GetPredictedPowerOutput> getPowerOutput(DateTime beginTime, DateTime endTime, int betweenDay, Date now,
Map<Date, BigDecimal> predictedMap, Map<Date, BigDecimal> powerMap) {
//取时间范围
List<DateTime> rangeToList = DateUtil.rangeToList(beginTime, endTime, DateField.MINUTE, 15);
......
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