Commit 77cab980 authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.对接第三方接口,接入第三方数据,完成Token接口验证,抽取公用方法封装调用工具类;
2.对接第三方接口,完成获取日耗电日产液等信息接口调用,创建数据表,同时生成对应代码,开发定时任务及对外接口,完成第三方数据接入及系统展示功能,添加线上接口文档并完成接口及定时任务冒烟测试;
3.对接第三方接口,完成获取有功功率数据信息接口调用,创建数据表,同时生成对应代码,开发定时任务及对外接口,完成第三方数据接入及系统展示功能,添加线上接口文档并完成接口及定时任务冒烟测试;
4.对接第三方接口,完成获取甘特图数据接口调用,创建数据表,同时生成对应代码,开发定时任务及对外接口,完成第三方数据接入及系统展示功能,添加线上接口文档并完成接口及定时任务冒烟测试;
5.对接第三方接口,完成本日累计数据接口调用,创建数据表,同时生成对应代码,开发定时任务及对外接口,完成第三方数据接入及系统展示功能,添加线上接口文档并完成接口及定时任务冒烟测试;
6.对接第三方接口,完成光伏发电量接口调用,创建数据表,同时生成对应代码,开发定时任务及对外接口,完成第三方数据接入及系统展示功能,添加线上接口文档并完成接口及定时任务冒烟测试;
7.对接第三方接口,完成三叠登录接口调用,添加线上接口文档并完成接口及定时任务冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 2abbfd25
......@@ -26,6 +26,9 @@ public class DynamicQueryBasePowerLineInput {
@XText("线路ID集合")
private List<String> lineIds;
@XText("线路名称集合")
private List<String> lineNames;
@XText("组织机构ID")
private String ouId;
......
......@@ -69,6 +69,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
public XListResult<DynamicQueryBasePowerLineOutput> getBasePowerLineList(XContext context, DynamicQueryBasePowerLineInput input) {
String lineId = input.getLineId();
List<String> lineIds = input.getLineIds();
List<String> lineNames = input.getLineNames();
String ouId = input.getOuId();
String upperLineId = input.getUpperLineId();
String lineName = input.getLineName();
......@@ -80,6 +81,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
.select(BaseModel::getId, BasePowerLineEnt::getLineName)
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.in(CollUtil.isNotEmpty(lineIds), BaseModel::getId, lineIds)
.in(CollUtil.isNotEmpty(lineNames), BasePowerLineEnt::getLineName, lineNames)
.eq(StringUtils.isNotBlank(lineId), BaseModel::getId, lineId)
.eq(StringUtils.isNotBlank(ouId), BasePowerLineEnt::getOuId, ouId)
.eq(StringUtils.isNotBlank(upperLineId), BasePowerLineEnt::getUpperLineId, upperLineId)
......
......@@ -33,6 +33,11 @@ public class TaskConstant {
*/
public static final String EVERY_DAY = "0 15 0 * * ?";
/**
* 每一天 00:30:00
*/
public static final String EVERY_DAY_30 = "0 30 0 * * ?";
/**
* 每一天 00:00:00
*/
......
package pps.core.task.job;
import cn.hutool.core.util.ObjectUtil;
import pps.cloud.prediction.service.IThirdDataAccessCloudService;
import pps.core.common.cache.TaskLockCache;
import pps.core.task.constant.TaskConstant;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
import xstartup.service.job.XJob;
import xstartup.service.job.annotation.XCronTrigger;
/**
* 能耗分析定时任务
*
* @author ZWT
* @date 2024/03/20 14:17
*/
@XText("能耗分析定时任务")
@XService
public class EnergyConsumptionAnalysisJob implements XJob {
/**
* 每天0点30执行
*
* @param xContext x上下文
* @return {@link XServiceResult}
*/
@XCronTrigger(value = TaskConstant.EVERY_DAY_30)
@Override
public XServiceResult execute(XContext xContext) {
xContext.getLogger().info("------ EnergyConsumptionAnalysisJob start:{}", System.currentTimeMillis());
String key = TaskConstant.TASK_LOCK_KEY + "EnergyConsumptionAnalysisJob";
TaskLockCache exist = TaskLockCache.exist(xContext, key);
if (ObjectUtil.isNull(exist)) {
TaskLockCache cache = new TaskLockCache();
cache.setRedisKey(key);
cache.setRedisValue(key);
TaskLockCache.set(xContext, cache);
try {
IThirdDataAccessCloudService service = xContext.getBean(IThirdDataAccessCloudService.class);
XServiceResult result = service.energyConsumptionAnalysisJob(xContext);
result.throwIfFail();
} catch (Exception e) {
xContext.getLogger().error("------ EnergyConsumptionAnalysisJob Exception: ", e);
} finally {
xContext.getLogger().info("------ EnergyConsumptionAnalysisJob end:{}", System.currentTimeMillis());
TaskLockCache.delete(xContext, key);
}
}
return XServiceResult.OK;
}
}
......@@ -41,4 +41,13 @@ public interface IThirdDataAccessCloudService {
*/
@XText("第三方光伏日发电量定时任务")
XServiceResult thirdPhotovoltaicPowerJob(XContext context);
/**
* 能耗分析定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@XText("能耗分析定时任务")
XServiceResult energyConsumptionAnalysisJob(XContext context);
}
......@@ -15,7 +15,7 @@ import java.math.BigDecimal;
import java.util.Date;
/**
* 能耗分析表(测试用)
* 能耗分析表
*
* @author ZWT
* @date 2023/11/23
......
package pps.core.prediction.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.io.Serializable;
......@@ -9,12 +12,15 @@ import java.math.BigDecimal;
import java.util.Date;
/**
* 能耗分析表(测试用)
* 能耗分析表
*
* @author ZWT
* @date 2023/11/23
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EnergyConsumptionAnalysisView implements Serializable {
@XText("ID")
@TableField
......@@ -24,6 +30,10 @@ public class EnergyConsumptionAnalysisView implements Serializable {
@TableField
private String lineId;
@XText("井组名称(线路/光伏电站)")
@TableField
private String stationName;
@XText("发电量(kWh)")
@TableField
private BigDecimal powerGeneration;
......
......@@ -49,4 +49,12 @@ public class WellheadDailyProductionSituationView implements Serializable {
@XText("日产液量(t)")
@TableField
private BigDecimal dailyLiquidProduction;
@XText("线路ID")
@TableField(exist = false)
private String lineId;
@XText("线路名称")
@TableField(exist = false)
private String lineName;
}
package pps.core.prediction.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.prediction.entity.EnergyConsumptionAnalysisView;
......@@ -16,4 +17,12 @@ public interface EnergyConsumptionAnalysisViewMapper {
EnergyConsumptionAnalysisView selectOne(EnergyConsumptionAnalysisView record);
List<EnergyConsumptionAnalysisView> selectList(EnergyConsumptionAnalysisView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<EnergyConsumptionAnalysisView> list);
}
......@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.prediction.entity.WellheadDailyProductionSituationView;
import java.util.Date;
import java.util.List;
/**
......@@ -26,4 +27,12 @@ public interface WellheadDailyProductionSituationViewMapper {
* @return int
*/
int batchInsertList(@Param(value = "list") List<WellheadDailyProductionSituationView> list);
/**
* 选择每日用电量总和
*
* @param date 日期
* @return {@link List}<{@link WellheadDailyProductionSituationView}>
*/
List<WellheadDailyProductionSituationView> selectSumDailyElectricityConsumption(@Param("date") Date date);
}
......@@ -33,8 +33,7 @@ import java.util.*;
import java.util.stream.Collectors;
/**
* 能耗分析模块(测试用)
* todo: 模拟测试用,后续替换
* 能耗分析模块
*
* @author ZWT
* @date 2023/11/23
......
......@@ -4,16 +4,14 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.cloud.base.service.IBasePowerLineCloudService;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineInput;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineOutput;
import pps.cloud.prediction.service.IThirdDataAccessCloudService;
import pps.core.prediction.constant.ThirdPartyApiConstant;
import pps.core.prediction.entity.ThirdActivePowerDailyUpdateView;
import pps.core.prediction.entity.ThirdActivePowerView;
import pps.core.prediction.entity.ThirdCurrentWellConditionView;
import pps.core.prediction.entity.ThirdPhotovoltaicPowerView;
import pps.core.prediction.mapper.ThirdActivePowerDailyUpdateViewMapper;
import pps.core.prediction.mapper.ThirdActivePowerViewMapper;
import pps.core.prediction.mapper.ThirdCurrentWellConditionViewMapper;
import pps.core.prediction.mapper.ThirdPhotovoltaicPowerViewMapper;
import pps.core.prediction.entity.*;
import pps.core.prediction.mapper.*;
import pps.core.prediction.service.data.third_active_power.GetThirdActivePowerViewOutput;
import pps.core.prediction.service.data.third_current_well_condition.GetThirdCurrentWellConditionViewOutput;
import pps.core.prediction.service.data.third_photovoltaic_power.GetThirdPhotovoltaicPowerViewOutput;
......@@ -21,13 +19,16 @@ import pps.core.prediction.utils.ServiceUtil;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 第三方数据接入Cloud模块
......@@ -165,4 +166,67 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
return XServiceResult.OK;
});
}
/**
* 能耗分析定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@Override
public XServiceResult energyConsumptionAnalysisJob(XContext context) {
DateTime yesterday = DateUtil.yesterday();
//查昨日光伏发电量
ThirdPhotovoltaicPowerMapper powerMapper = context.getBean(ThirdPhotovoltaicPowerMapper.class);
List<ThirdPhotovoltaicPowerEnt> powerList = powerMapper.selectList(new LambdaQueryWrapper<ThirdPhotovoltaicPowerEnt>()
.eq(ThirdPhotovoltaicPowerEnt::getCreateDate, yesterday)
);
if (CollUtil.isEmpty(powerList)) {
return XServiceResult.OK;
}
//通过场站名查线路ID
Map<String, String> lineMap = this.getBasePowerLineListByNames(context, powerList.stream()
.map(ThirdPhotovoltaicPowerEnt::getStationName)
.collect(Collectors.toList())).stream()
.collect(Collectors.toMap(DynamicQueryBasePowerLineOutput::getLineName, DynamicQueryBasePowerLineOutput::getId));
//查昨日井口耗电量
WellheadDailyProductionSituationViewMapper mapper = context.getBean(WellheadDailyProductionSituationViewMapper.class);
Map<String, BigDecimal> collect = mapper.selectSumDailyElectricityConsumption(yesterday).stream()
.collect(Collectors.toMap(WellheadDailyProductionSituationView::getLineId, WellheadDailyProductionSituationView::getDailyElectricityConsumption));
//封装
List<EnergyConsumptionAnalysisView> analysisList = new ArrayList<>(powerList.size());
for (ThirdPhotovoltaicPowerEnt power : powerList) {
String lineId = lineMap.get(power.getStationName());
analysisList.add(EnergyConsumptionAnalysisView.builder()
.lineId(lineId)
.stationName(power.getStationName())
.powerGeneration(power.getPhotovoltaicPower())
.powerConsumption(collect.get(lineId))
.dataDate(power.getCreateDate())
.build());
}
return XTransactionHelper.begin(context, () -> {
EnergyConsumptionAnalysisViewMapper energyMapper = context.getBean(EnergyConsumptionAnalysisViewMapper.class);
energyMapper.batchInsertList(analysisList);
return XServiceResult.OK;
});
}
/*----------------------------------- private -----------------------------------*/
/**
* 查询线路列表通过线路名称
*
* @param context 上下文
* @param lineNames ou-id列表
* @return {@link List}<{@link DynamicQueryBasePowerLineOutput}>
*/
private List<DynamicQueryBasePowerLineOutput> getBasePowerLineListByNames(XContext context, List<String> lineNames) {
IBasePowerLineCloudService basePowerLineCloudService = context.getBean(IBasePowerLineCloudService.class);
XListResult<DynamicQueryBasePowerLineOutput> lineList = basePowerLineCloudService.getBasePowerLineList(context, DynamicQueryBasePowerLineInput.builder()
.lineNames(lineNames)
.build());
lineList.throwIfFail();
return lineList.getResult();
}
}
......@@ -32,4 +32,6 @@
where
id=#{id}
</select>
<insert id=""
</mapper>
\ No newline at end of file
......@@ -52,4 +52,22 @@
)
</foreach>
</insert>
<resultMap id="SumResultMap" type="pps.core.prediction.entity.WellheadDailyProductionSituationView"
extends="BaseResultMap">
<result column="line_id" property="lineId" jdbcType="VARCHAR"/>
<result column="line_name" property="lineName" jdbcType="VARCHAR"/>
</resultMap>
<select id="selectSumDailyElectricityConsumption" parameterType="date">
SELECT w.line_id,
l.line_name,
IFNULL(SUM(s.daily_electricity_consumption), 0) AS daily_electricity_consumption
FROM base_power_line_wellhead w
JOIN wellhead_daily_production_situation s ON w.wellhead_id = s.wellhead_id
LEFT JOIN base_power_line l ON w.line_id = l.id
WHERE w.is_deleted = 1
AND s.data_date = #{date}
GROUP BY w.line_id
</select>
</mapper>
\ No newline at end of file
......@@ -36,6 +36,7 @@ public class DeployPpsAllApplication {
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdActivePowerJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdCurrentWellConditionJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdPhotovoltaicPowerJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(EnergyConsumptionAnalysisJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(PlantPredictedPowerLongTermDataJob.class));
startup.run(args);
}
......
......@@ -53,6 +53,7 @@ x.job.service=pps.core.task.job.TestJob,\
pps.core.task.job.ThirdActivePowerJob,\
pps.core.task.job.ThirdCurrentWellConditionJob,\
pps.core.task.job.ThirdPhotovoltaicPowerJob,\
pps.core.task.job.EnergyConsumptionAnalysisJob,\
pps.core.task.job.PlantPredictedPowerLongTermDataJob,\
pps.core.task.job.WeatherJob
# redis
......
......@@ -40,6 +40,7 @@ public class DeployPpsTaskApplication {
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdActivePowerJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdCurrentWellConditionJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdPhotovoltaicPowerJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(EnergyConsumptionAnalysisJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(PlantPredictedPowerLongTermDataJob.class));
startup.enable(XRpcFeature.class);
startup.enable(XCloudHuaweiCseFeature.class)
......
......@@ -14,6 +14,7 @@ x.job.service=pps.core.task.job.SpaceOptimizeLongJob,\
pps.core.task.job.ThirdActivePowerJob,\
pps.core.task.job.ThirdCurrentWellConditionJob,\
pps.core.task.job.ThirdPhotovoltaicPowerJob,\
pps.core.task.job.EnergyConsumptionAnalysisJob,\
pps.core.task.job.PlantPredictedPowerLongTermDataJob
#\uFFFD\uFFFD\u05BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
x.log.level=@x.log.level@
......
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