Commit 7f6c1a32 authored by tianchao's avatar tianchao
parents f52becf8 9a202ef0
...@@ -4,8 +4,6 @@ import xstartup.annotation.XService; ...@@ -4,8 +4,6 @@ import xstartup.annotation.XService;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.data.XServiceResult; import xstartup.data.XServiceResult;
import xstartup.feature.api.annotation.XApiAnonymous;
import xstartup.feature.api.annotation.XApiGet;
/** /**
* 天气数据接收Cloud模块 * 天气数据接收Cloud模块
...@@ -23,8 +21,6 @@ public interface IBaseWeatherCloudService { ...@@ -23,8 +21,6 @@ public interface IBaseWeatherCloudService {
* @param context 上下文 * @param context 上下文
* @return {@link XServiceResult} * @return {@link XServiceResult}
*/ */
@XApiAnonymous
@XApiGet
@XText("天气数据接收Cloud模块--天气数据处理") @XText("天气数据接收Cloud模块--天气数据处理")
XServiceResult weatherDataProcess(XContext context); XServiceResult weatherDataProcess(XContext context);
} }
...@@ -26,6 +26,9 @@ public class DynamicQueryBasePowerLineInput { ...@@ -26,6 +26,9 @@ public class DynamicQueryBasePowerLineInput {
@XText("线路ID集合") @XText("线路ID集合")
private List<String> lineIds; private List<String> lineIds;
@XText("线路名称集合")
private List<String> lineNames;
@XText("组织机构ID") @XText("组织机构ID")
private String ouId; private String ouId;
......
...@@ -23,6 +23,9 @@ public class DynamicQueryBasePowerLineWellheadInput { ...@@ -23,6 +23,9 @@ public class DynamicQueryBasePowerLineWellheadInput {
@XText("线路ID") @XText("线路ID")
private String lineId; private String lineId;
@XText("线路ID集合")
private List<String> lineIds;
@XText("井口ID集合") @XText("井口ID集合")
private List<String> wellheadIds; private List<String> wellheadIds;
} }
...@@ -66,4 +66,11 @@ public class BasePowerLineWellheadView extends BaseModel implements Serializable ...@@ -66,4 +66,11 @@ public class BasePowerLineWellheadView extends BaseModel implements Serializable
@XText("井口ID集合") @XText("井口ID集合")
@TableField(exist = false) @TableField(exist = false)
private List<String> wellheadIds; private List<String> wellheadIds;
/**
* 线路ID集合
*/
@XText("线路ID集合")
@TableField(exist = false)
private List<String> lineIds;
} }
...@@ -69,6 +69,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService ...@@ -69,6 +69,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
public XListResult<DynamicQueryBasePowerLineOutput> getBasePowerLineList(XContext context, DynamicQueryBasePowerLineInput input) { public XListResult<DynamicQueryBasePowerLineOutput> getBasePowerLineList(XContext context, DynamicQueryBasePowerLineInput input) {
String lineId = input.getLineId(); String lineId = input.getLineId();
List<String> lineIds = input.getLineIds(); List<String> lineIds = input.getLineIds();
List<String> lineNames = input.getLineNames();
String ouId = input.getOuId(); String ouId = input.getOuId();
String upperLineId = input.getUpperLineId(); String upperLineId = input.getUpperLineId();
String lineName = input.getLineName(); String lineName = input.getLineName();
...@@ -80,6 +81,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService ...@@ -80,6 +81,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
.select(BaseModel::getId, BasePowerLineEnt::getLineName) .select(BaseModel::getId, BasePowerLineEnt::getLineName)
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE) .eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.in(CollUtil.isNotEmpty(lineIds), BaseModel::getId, lineIds) .in(CollUtil.isNotEmpty(lineIds), BaseModel::getId, lineIds)
.in(CollUtil.isNotEmpty(lineNames), BasePowerLineEnt::getLineName, lineNames)
.eq(StringUtils.isNotBlank(lineId), BaseModel::getId, lineId) .eq(StringUtils.isNotBlank(lineId), BaseModel::getId, lineId)
.eq(StringUtils.isNotBlank(ouId), BasePowerLineEnt::getOuId, ouId) .eq(StringUtils.isNotBlank(ouId), BasePowerLineEnt::getOuId, ouId)
.eq(StringUtils.isNotBlank(upperLineId), BasePowerLineEnt::getUpperLineId, upperLineId) .eq(StringUtils.isNotBlank(upperLineId), BasePowerLineEnt::getUpperLineId, upperLineId)
...@@ -127,6 +129,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService ...@@ -127,6 +129,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
List<BasePowerLineWellheadView> wellheadViews = wellheadViewMapper.selectWellheadListByParam( List<BasePowerLineWellheadView> wellheadViews = wellheadViewMapper.selectWellheadListByParam(
BasePowerLineWellheadView.builder() BasePowerLineWellheadView.builder()
.lineId(input.getLineId()) .lineId(input.getLineId())
.lineIds(input.getLineIds())
.wellheadIds(input.getWellheadIds()) .wellheadIds(input.getWellheadIds())
.build() .build()
); );
......
...@@ -13,9 +13,7 @@ import com.alibaba.fastjson.JSON; ...@@ -13,9 +13,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sun.mail.imap.IMAPFolder;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.web.client.RestTemplate;
import pps.cloud.base.service.IBaseWeatherCloudService; import pps.cloud.base.service.IBaseWeatherCloudService;
import pps.core.base.entity.BasePhotovoltaicPlantView; import pps.core.base.entity.BasePhotovoltaicPlantView;
import pps.core.base.entity.PlantPredictedPowerDataEnt; import pps.core.base.entity.PlantPredictedPowerDataEnt;
...@@ -32,7 +30,6 @@ import xstartup.base.XStartup; ...@@ -32,7 +30,6 @@ import xstartup.base.XStartup;
import xstartup.base.exception.XServiceException; import xstartup.base.exception.XServiceException;
import xstartup.base.tool.XLoggerTool; import xstartup.base.tool.XLoggerTool;
import xstartup.base.util.XCopyUtils; import xstartup.base.util.XCopyUtils;
import xstartup.core.base.helper.XThreadHelper;
import xstartup.data.XServiceResult; import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper; import xstartup.helper.XTransactionHelper;
...@@ -73,22 +70,27 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -73,22 +70,27 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
Store store = null; Store store = null;
Folder folder = null; Folder folder = null;
try { try {
Properties props = System.getProperties(); // Properties props = System.getProperties();
props.setProperty("mail.store.protocol", protocol); // props.setProperty("mail.store.protocol", protocol);
// Session session = Session.getDefaultInstance(props, null);
// store = session.getStore(protocol);
// store.connect(host, username, password);
// folder = store.getFolder("INBOX");
// if (folder instanceof IMAPFolder) {
// IMAPFolder imapFolder = (IMAPFolder) folder;
// // javamail中使用id命令有校验checkOpened, 所以要去掉id方法中的checkOpened();
// imapFolder.doCommand(p -> {
// Map<String, String> gmap = new HashMap<>();
// gmap.put("GUID", "FUTONG");
// p.id(gmap);
// return null;
// });
// }
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null); Session session = Session.getDefaultInstance(props, null);
store = session.getStore(protocol); store = session.getStore(protocol);
store.connect(host, username, password); store.connect(host, username, password);
folder = store.getFolder("INBOX"); folder = store.getFolder("INBOX");
if (folder instanceof IMAPFolder) {
IMAPFolder imapFolder = (IMAPFolder) folder;
// javamail中使用id命令有校验checkOpened, 所以要去掉id方法中的checkOpened();
imapFolder.doCommand(p -> {
Map<String, String> gmap = new HashMap<>();
gmap.put("GUID", "FUTONG");
p.id(gmap);
return null;
});
}
if (Objects.nonNull(folder)) { if (Objects.nonNull(folder)) {
folder.open(Folder.READ_WRITE); folder.open(Folder.READ_WRITE);
} }
...@@ -97,13 +99,16 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -97,13 +99,16 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
if (ArrayUtil.isNotEmpty(messages)) { if (ArrayUtil.isNotEmpty(messages)) {
List<Message> messageList = new ArrayList<>(16); List<Message> messageList = new ArrayList<>(16);
for (Message message : messages) { for (Message message : messages) {
boolean isNew = false; logger.info("------ weatherDataProcess " + message.getSubject() + " ------");
// boolean isNew = false;
for (Flags.Flag flag : message.getFlags().getSystemFlags()) { for (Flags.Flag flag : message.getFlags().getSystemFlags()) {
logger.info("------ weatherDataProcess " + flag.toString() + " ------");
if (flag == Flags.Flag.SEEN) { if (flag == Flags.Flag.SEEN) {
isNew = true; // isNew = true;
} }
} }
if (!isNew && CharSequenceUtil.endWith(message.getSubject(), "天气预测数据")) { // if (!isNew && CharSequenceUtil.endWith(message.getSubject(), "天气预测数据")) {
if (CharSequenceUtil.endWith(message.getSubject(), "天气预测数据")) {
messageList.add(message); messageList.add(message);
} }
} }
...@@ -286,23 +291,24 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService { ...@@ -286,23 +291,24 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
} }
//训练接口http://127.0.0.1:10098/aiprediction/xgbtrain?plantId=018a64635ac47cf58895147b0e1bf7e3 //训练接口http://127.0.0.1:10098/aiprediction/xgbtrain?plantId=018a64635ac47cf58895147b0e1bf7e3
//自动调用预测接口 //自动调用预测接口
XThreadHelper.async(() -> { // XThreadHelper.async(() -> {
try { // try {
Thread.sleep(3000); // Thread.sleep(3000);
logger.info("------ weatherDataProcess http prediction plantId: {} ", plantId); // logger.info("------ weatherDataProcess http prediction plantId: {} ", plantId);
RestTemplate restTemplate = context.getBean(RestTemplate.class); // RestTemplate restTemplate = context.getBean(RestTemplate.class);
String forObject = restTemplate.getForObject("http://127.0.0.1:10098/aiprediction/xgbreason?plantId=" + plantId, String.class); // String forObject = restTemplate.getForObject("http://127.0.0.1:10098/aiprediction/xgbreason?plantId=" + plantId, String.class);
logger.info("------ weatherDataProcess http prediction res: {} ", forObject); // logger.info("------ weatherDataProcess http prediction res: {} ", forObject);
} catch (Exception e) { // } catch (Exception e) {
logger.error("------ weatherDataProcess Exception", e); // logger.error("------ weatherDataProcess Exception", e);
throw new XServiceException(e); // throw new XServiceException(e);
} // }
}); // });
} }
} }
} }
logger.info("------ weatherDataProcess del temp file path: {}", tempFilePath); logger.info("------ weatherDataProcess del temp file path: {}", tempFilePath);
FileUtil.del(tempFilePath); FileUtil.del(tempFilePath);
message.setFlag(Flags.Flag.DELETED, true);
} }
} }
} catch (MessagingException e) { } catch (MessagingException e) {
......
...@@ -72,14 +72,23 @@ ...@@ -72,14 +72,23 @@
FROM FROM
base_power_line_wellhead l base_power_line_wellhead l
JOIN base_wellhead w ON l.wellhead_id = w.id JOIN base_wellhead w ON l.wellhead_id = w.id
WHERE <where>
l.line_id = #{lineId} <if test="lineId!=null and lineId!=''">
<if test="wellheadIds != null"> AND l.line_id = #{lineId}
AND l.wellhead_id NOT IN </if>
<foreach collection="wellheadIds" open="(" close=")" separator="," item="item"> <if test="lineIds != null">
#{item} AND l.line_id IN
</foreach> <foreach collection="lineIds" open="(" close=")" separator="," item="item">
</if> #{item}
</foreach>
</if>
<if test="wellheadIds != null">
AND l.wellhead_id NOT IN
<foreach collection="wellheadIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</where>
</select> </select>
<insert id="batchInsertList" parameterType="list"> <insert id="batchInsertList" parameterType="list">
......
...@@ -33,6 +33,16 @@ public class TaskConstant { ...@@ -33,6 +33,16 @@ public class TaskConstant {
*/ */
public static final String EVERY_DAY = "0 15 0 * * ?"; public static final String EVERY_DAY = "0 15 0 * * ?";
/**
* 每一天 00:30:00
*/
public static final String EVERY_DAY_30 = "0 30 0 * * ?";
/**
* 每一天 00:15:00
*/
public static final String EVERY_DAY_15 = "0 15 0 * * ?";
/** /**
* 每一天 00:00:00 * 每一天 00:00:00
*/ */
...@@ -46,7 +56,7 @@ public class TaskConstant { ...@@ -46,7 +56,7 @@ public class TaskConstant {
/** /**
* 半小时执行一次 12:05:00 12:35:00... * 半小时执行一次 12:05:00 12:35:00...
*/ */
public static final String HALF_HOUR = "0 5/30 * * * ?"; public static final String HALF_HOUR_35 = "0 5/30 * * * ?";
/** /**
* 任务锁定键 * 任务锁定键
......
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;
}
}
...@@ -22,12 +22,12 @@ import xstartup.service.job.annotation.XCronTrigger; ...@@ -22,12 +22,12 @@ import xstartup.service.job.annotation.XCronTrigger;
public class SpaceOptimizeLongJob implements XJob { public class SpaceOptimizeLongJob implements XJob {
/** /**
* 每月一日执行 * 每天00:15执行
* *
* @param xContext x上下文 * @param xContext x上下文
* @return {@link XServiceResult} * @return {@link XServiceResult}
*/ */
@XCronTrigger(value = TaskConstant.FIRST_DAY_OF_THE_MONTH) @XCronTrigger(value = TaskConstant.EVERY_DAY_15)
@Override @Override
public XServiceResult execute(XContext xContext) { public XServiceResult execute(XContext xContext) {
xContext.getLogger().info("------ SpaceOptimizeLongJob start:{}", System.currentTimeMillis()); xContext.getLogger().info("------ SpaceOptimizeLongJob start:{}", System.currentTimeMillis());
......
...@@ -22,12 +22,12 @@ import xstartup.service.job.annotation.XCronTrigger; ...@@ -22,12 +22,12 @@ import xstartup.service.job.annotation.XCronTrigger;
public class ThirdCurrentWellConditionJob implements XJob { public class ThirdCurrentWellConditionJob implements XJob {
/** /**
* 每天0点 * 30分钟一次
* *
* @param xContext x上下文 * @param xContext x上下文
* @return {@link XServiceResult} * @return {@link XServiceResult}
*/ */
@XCronTrigger(value = TaskConstant.EVERY_DAY_ZERO) @XCronTrigger(value = TaskConstant.EVERY_DAY_30)
@Override @Override
public XServiceResult execute(XContext xContext) { public XServiceResult execute(XContext xContext) {
xContext.getLogger().info("------ ThirdCurrentWellConditionJob start:{}", System.currentTimeMillis()); xContext.getLogger().info("------ ThirdCurrentWellConditionJob start:{}", System.currentTimeMillis());
......
...@@ -22,12 +22,12 @@ import xstartup.service.job.annotation.XCronTrigger; ...@@ -22,12 +22,12 @@ import xstartup.service.job.annotation.XCronTrigger;
public class ThirdPhotovoltaicPowerJob implements XJob { public class ThirdPhotovoltaicPowerJob implements XJob {
/** /**
* 半小时一次 * 每天0点
* *
* @param xContext x上下文 * @param xContext x上下文
* @return {@link XServiceResult} * @return {@link XServiceResult}
*/ */
@XCronTrigger(value = TaskConstant.HALF_HOUR_ZERO) @XCronTrigger(value = TaskConstant.EVERY_DAY_ZERO)
@Override @Override
public XServiceResult execute(XContext xContext) { public XServiceResult execute(XContext xContext) {
xContext.getLogger().info("------ ThirdPhotovoltaicPowerJob start:{}", System.currentTimeMillis()); xContext.getLogger().info("------ ThirdPhotovoltaicPowerJob start:{}", System.currentTimeMillis());
......
...@@ -27,7 +27,7 @@ public class WeatherReceiveJob implements XJob { ...@@ -27,7 +27,7 @@ public class WeatherReceiveJob implements XJob {
* @param xContext x上下文 * @param xContext x上下文
* @return {@link XServiceResult} * @return {@link XServiceResult}
*/ */
@XCronTrigger(value = TaskConstant.HALF_HOUR) @XCronTrigger(value = TaskConstant.HALF_HOUR_35)
@Override @Override
public XServiceResult execute(XContext xContext) { public XServiceResult execute(XContext xContext) {
xContext.getLogger().info("------ WeatherReceiveJob start:{}", System.currentTimeMillis()); xContext.getLogger().info("------ WeatherReceiveJob start:{}", System.currentTimeMillis());
......
...@@ -41,4 +41,13 @@ public interface IThirdDataAccessCloudService { ...@@ -41,4 +41,13 @@ public interface IThirdDataAccessCloudService {
*/ */
@XText("第三方光伏日发电量定时任务") @XText("第三方光伏日发电量定时任务")
XServiceResult thirdPhotovoltaicPowerJob(XContext context); XServiceResult thirdPhotovoltaicPowerJob(XContext context);
/**
* 能耗分析定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@XText("能耗分析定时任务")
XServiceResult energyConsumptionAnalysisJob(XContext context);
} }
...@@ -10,10 +10,15 @@ public class ThirdPartyApiConstant { ...@@ -10,10 +10,15 @@ public class ThirdPartyApiConstant {
/*------------------------------ 长庆 ------------------------------*/ /*------------------------------ 长庆 ------------------------------*/
/** /**
* Redis缓存key * Redis缓存key(长庆)
*/ */
public static final String CQ_TOKEN_CACHE_KEY = "pps.third.cq.token"; public static final String CQ_TOKEN_CACHE_KEY = "pps.third.cq.token";
/**
* Redis缓存key(三叠)
*/
public static final String CQ_TOKEN_SAN_DIE_CACHE_KEY = "pps.third.cq.sd.token";
/** /**
* 过期时间 * 过期时间
*/ */
...@@ -28,6 +33,10 @@ public class ThirdPartyApiConstant { ...@@ -28,6 +33,10 @@ public class ThirdPartyApiConstant {
* 长庆Token * 长庆Token
*/ */
public static final String CQ_TOKEN = "/Smart_Well_Data/api/v1/Auth/GetToken"; public static final String CQ_TOKEN = "/Smart_Well_Data/api/v1/Auth/GetToken";
/**
* 长庆三叠Token
*/
public static final String CQ_SD_LOGIN = "http://10.59.249.10:8183/admin-api/system/auth/login";
/** /**
* 获取日耗电日产液等信息 * 获取日耗电日产液等信息
*/ */
......
...@@ -15,7 +15,7 @@ import java.math.BigDecimal; ...@@ -15,7 +15,7 @@ import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/** /**
* 能耗分析表(测试用) * 能耗分析表
* *
* @author ZWT * @author ZWT
* @date 2023/11/23 * @date 2023/11/23
......
package pps.core.prediction.entity; package pps.core.prediction.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import java.io.Serializable; import java.io.Serializable;
...@@ -9,12 +12,15 @@ import java.math.BigDecimal; ...@@ -9,12 +12,15 @@ import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/** /**
* 能耗分析表(测试用) * 能耗分析表
* *
* @author ZWT * @author ZWT
* @date 2023/11/23 * @date 2023/11/23
*/ */
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EnergyConsumptionAnalysisView implements Serializable { public class EnergyConsumptionAnalysisView implements Serializable {
@XText("ID") @XText("ID")
@TableField @TableField
...@@ -24,6 +30,10 @@ public class EnergyConsumptionAnalysisView implements Serializable { ...@@ -24,6 +30,10 @@ public class EnergyConsumptionAnalysisView implements Serializable {
@TableField @TableField
private String lineId; private String lineId;
@XText("井组名称(线路/光伏电站)")
@TableField
private String stationName;
@XText("发电量(kWh)") @XText("发电量(kWh)")
@TableField @TableField
private BigDecimal powerGeneration; private BigDecimal powerGeneration;
...@@ -35,4 +45,8 @@ public class EnergyConsumptionAnalysisView implements Serializable { ...@@ -35,4 +45,8 @@ public class EnergyConsumptionAnalysisView implements Serializable {
@XText("日期") @XText("日期")
@TableField @TableField
private Date dataDate; private Date dataDate;
@XText("来源系统")
@TableField
private String systemSource;
} }
package pps.core.prediction.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import xstartup.annotation.XText;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 第三方有功功率(每日最新数据)
*
* @author ZWT
* @date 2024/03/19
*/
@Data
@TableName("third_active_power_daily_update")
public class ThirdActivePowerDailyUpdateEnt implements Serializable {
@XText("ID")
@TableId(type = IdType.AUTO)
private Long id;
@XText("井组名称(线路/光伏电站)")
@TableField
private String stationName;
@XText("创建时间")
@TableField
private Date createDate;
@XText("光伏有功功率(KW)")
@TableField
private BigDecimal photovoltaicPower;
@XText("电表有功功率(KW)")
@TableField
private BigDecimal meterPower;
@XText("来源系统")
@TableField
private String systemSource;
@XText("入库日期")
@TableField
private Date saveDate;
@XText("入库小时")
@TableField
private Date saveHour;
}
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;
import java.math.BigDecimal;
import java.util.Date;
/**
* 第三方有功功率(每日最新数据)
*
* @author ZWT
* @date 2024/03/19
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ThirdActivePowerDailyUpdateView implements Serializable {
@XText("ID")
@TableField
private Long id;
@XText("井组名称(线路/光伏电站)")
@TableField
private String stationName;
@XText("创建时间")
@TableField
private Date createDate;
@XText("光伏有功功率(KW)")
@TableField
private BigDecimal photovoltaicPower;
@XText("电表有功功率(KW)")
@TableField
private BigDecimal meterPower;
@XText("来源系统")
@TableField
private String systemSource;
@XText("入库日期")
@TableField
private Date saveDate;
@XText("入库小时")
@TableField
private Date saveHour;
}
...@@ -49,4 +49,12 @@ public class WellheadDailyProductionSituationView implements Serializable { ...@@ -49,4 +49,12 @@ public class WellheadDailyProductionSituationView implements Serializable {
@XText("日产液量(t)") @XText("日产液量(t)")
@TableField @TableField
private BigDecimal dailyLiquidProduction; private BigDecimal dailyLiquidProduction;
@XText("线路ID")
@TableField(exist = false)
private String lineId;
@XText("线路名称")
@TableField(exist = false)
private String lineName;
} }
...@@ -12,6 +12,7 @@ public enum BusinessError implements XError { ...@@ -12,6 +12,7 @@ public enum BusinessError implements XError {
DateTypeError(2200, "日期类型错误"), DateTypeError(2200, "日期类型错误"),
TheStartEndDateIsMissing(2201, "缺少开始结束日期"), TheStartEndDateIsMissing(2201, "缺少开始结束日期"),
GetSanDieLoginInfoError(2202, "获取三叠登录信息失败"),
; ;
private int code; private int code;
......
package pps.core.prediction.mapper; package pps.core.prediction.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import pps.core.prediction.entity.EnergyConsumptionAnalysisView; import pps.core.prediction.entity.EnergyConsumptionAnalysisView;
...@@ -16,4 +17,12 @@ public interface EnergyConsumptionAnalysisViewMapper { ...@@ -16,4 +17,12 @@ public interface EnergyConsumptionAnalysisViewMapper {
EnergyConsumptionAnalysisView selectOne(EnergyConsumptionAnalysisView record); EnergyConsumptionAnalysisView selectOne(EnergyConsumptionAnalysisView record);
List<EnergyConsumptionAnalysisView> selectList(EnergyConsumptionAnalysisView record); List<EnergyConsumptionAnalysisView> selectList(EnergyConsumptionAnalysisView record);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<EnergyConsumptionAnalysisView> list);
} }
package pps.core.prediction.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import pps.core.prediction.entity.ThirdActivePowerDailyUpdateEnt;
/**
* 第三方有功功率(每日最新数据)
*
* @author ZWT
* @date 2024/03/19
*/
@Repository(value = "pps.core.prediction.mapper.ThirdActivePowerDailyUpdateMapper")
public interface ThirdActivePowerDailyUpdateMapper extends BaseMapper<ThirdActivePowerDailyUpdateEnt> {
}
package pps.core.prediction.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.prediction.entity.ThirdActivePowerDailyUpdateView;
import java.util.Date;
import java.util.List;
/**
* 第三方有功功率(每日最新数据)
*
* @author ZWT
* @date 2024/03/19
*/
@Repository(value = "pps.core.prediction.mapper.ThirdActivePowerDailyUpdateViewMapper")
public interface ThirdActivePowerDailyUpdateViewMapper {
ThirdActivePowerDailyUpdateView selectOne(ThirdActivePowerDailyUpdateView record);
List<ThirdActivePowerDailyUpdateView> selectList(ThirdActivePowerDailyUpdateView record);
/**
* 删除当日最新数据
*
* @param list 列表
* @param currentDay 当前日期
* @return int
*/
int deleteByCurrentDayData(@Param(value = "list") List<ThirdActivePowerDailyUpdateView> list,
@Param(value = "currentDay") Date currentDay);
/**
* 批量新增
*
* @param list 列表
* @return int
*/
int batchInsertList(@Param(value = "list") List<ThirdActivePowerDailyUpdateView> list);
}
...@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param; ...@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import pps.core.prediction.entity.WellheadDailyProductionSituationView; import pps.core.prediction.entity.WellheadDailyProductionSituationView;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -26,4 +27,12 @@ public interface WellheadDailyProductionSituationViewMapper { ...@@ -26,4 +27,12 @@ public interface WellheadDailyProductionSituationViewMapper {
* @return int * @return int
*/ */
int batchInsertList(@Param(value = "list") List<WellheadDailyProductionSituationView> list); 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.*; ...@@ -33,8 +33,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* 能耗分析模块(测试用) * 能耗分析模块
* todo: 模拟测试用,后续替换
* *
* @author ZWT * @author ZWT
* @date 2023/11/23 * @date 2023/11/23
...@@ -187,6 +186,18 @@ public class EnergyConsumptionAnalysisService { ...@@ -187,6 +186,18 @@ public class EnergyConsumptionAnalysisService {
.absorptionRate(this.getAbsorptionRate(ent.getPowerGeneration(), ent.getPowerConsumption())) .absorptionRate(this.getAbsorptionRate(ent.getPowerGeneration(), ent.getPowerConsumption()))
.build()); .build());
} }
} else {
for (EnergyConsumptionAnalysisEnt ent : list) {
outputs.add(QueryEnergyConsumptionAnalysisViewOutput.builder()
.lineId(ent.getLineId())
.lineName(lineMap.get(ent.getLineId()))
.powerGeneration(ent.getPowerGeneration())
.generationCycleRatio(BigDecimal.ZERO)
.powerConsumption(ent.getPowerConsumption())
.consumptionCycleRatio(BigDecimal.ZERO)
.absorptionRate(this.getAbsorptionRate(ent.getPowerGeneration(), ent.getPowerConsumption()))
.build());
}
} }
} }
} else { } else {
......
...@@ -192,6 +192,7 @@ public class PlantPredictedPowerCloudServiceImpl implements IPlantPredictedPower ...@@ -192,6 +192,7 @@ public class PlantPredictedPowerCloudServiceImpl implements IPlantPredictedPower
String url = XStartup.getCurrent().getProperty("third-party.chang-qing.url"); String url = XStartup.getCurrent().getProperty("third-party.chang-qing.url");
url += ThirdPartyApiConstant.CQ_WELL_TECH_DAILY; url += ThirdPartyApiConstant.CQ_WELL_TECH_DAILY;
String resultStr = client.doPostForm(url, param); String resultStr = client.doPostForm(url, param);
context.getLogger().info("*** CQ_WELL_TECH_DAILY : {}", resultStr);
JSONObject jsonObject = JSON.parseObject(resultStr); JSONObject jsonObject = JSON.parseObject(resultStr);
String data = jsonObject.getString("data"); String data = jsonObject.getString("data");
List<WellheadDailyProductionSituationJob> list = JSON.parseArray(data, WellheadDailyProductionSituationJob.class); List<WellheadDailyProductionSituationJob> list = JSON.parseArray(data, WellheadDailyProductionSituationJob.class);
......
package pps.core.prediction.service; package pps.core.prediction.service;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.core.common.cache.ThirdPartyConfigCache;
import pps.core.prediction.constant.ThirdPartyApiConstant;
import pps.core.prediction.entity.ThirdActivePowerDailyUpdateEnt;
import pps.core.prediction.enums.BusinessError;
import pps.core.prediction.mapper.ThirdActivePowerDailyUpdateMapper;
import pps.core.prediction.service.data.third_active_power.GetThirdSanDieLoginInfoOutput;
import pps.core.prediction.service.data.third_active_power_daily_update.GetThirdActivePowerDailyUpdateInput;
import pps.core.prediction.service.data.third_active_power_daily_update.GetThirdActivePowerDailyUpdateOutput;
import xstartup.annotation.XService; import xstartup.annotation.XService;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.base.exception.XServiceException;
import xstartup.base.util.XCopyUtils;
import xstartup.base.util.XHttpUtils;
import xstartup.data.XListResult;
import xstartup.data.XSingleResult;
import xstartup.feature.api.annotation.XApiAnonymous;
import xstartup.feature.api.annotation.XApiPost;
import java.util.List;
/** /**
* 第三方有功功率 * 第三方有功功率
...@@ -13,4 +37,80 @@ import xstartup.annotation.XText; ...@@ -13,4 +37,80 @@ import xstartup.annotation.XText;
@XService @XService
public class ThirdActivePowerService { public class ThirdActivePowerService {
/**
* 有功功率--用能曲线
* POST /prediction/third-active-power/get-active-power-list
* 接口ID:157089363
* 接口地址:https://app.apifox.com/project/3196988/apis/api-157089363
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link GetThirdActivePowerDailyUpdateOutput}>
*/
@XApiAnonymous
@XText("有功功率--用能曲线")
@XApiPost
public XListResult<GetThirdActivePowerDailyUpdateOutput> getActivePowerList(XContext context, GetThirdActivePowerDailyUpdateInput input) {
ThirdActivePowerDailyUpdateMapper mapper = context.getBean(ThirdActivePowerDailyUpdateMapper.class);
List<ThirdActivePowerDailyUpdateEnt> list = mapper.selectList(new LambdaQueryWrapper<ThirdActivePowerDailyUpdateEnt>()
.eq(ThirdActivePowerDailyUpdateEnt::getSaveDate, input.getQueryDate())
.eq(ThirdActivePowerDailyUpdateEnt::getStationName, input.getStationName())
.orderByAsc(ThirdActivePowerDailyUpdateEnt::getSaveHour)
);
return XListResult.success(XCopyUtils.copyNewList(list, GetThirdActivePowerDailyUpdateOutput.class));
}
/**
* 获取三叠登录信息
*
* @param context 上下文
* @return {@link XSingleResult}<{@link GetThirdSanDieLoginInfoOutput}>
*/
@XApiAnonymous
@XText("第三方--获取三叠登录信息")
@XApiPost
public XSingleResult<GetThirdSanDieLoginInfoOutput> getThirdSanDieLoginInfo(XContext context) {
String loginInfo;
ThirdPartyConfigCache exist = ThirdPartyConfigCache.exist(context, ThirdPartyApiConstant.CQ_TOKEN_SAN_DIE_CACHE_KEY);
if (ObjectUtil.isNull(exist)) {
loginInfo = this.getSanDieToken(context);
} else {
long duration = (long) exist.getDuration();
if (duration - DateUtil.between(exist.getCurrentDate(), DateUtil.date(), DateUnit.SECOND) < ThirdPartyApiConstant.MAX_SECOND) {
loginInfo = this.getSanDieToken(context);
} else {
loginInfo = exist.getCode();
}
}
return XSingleResult.success(JSON.parseObject(loginInfo, GetThirdSanDieLoginInfoOutput.class));
}
/*---------------------------------- 私有方法 ----------------------------------*/
/**
* 获取三叠令牌
*
* @param context 上下文
* @return {@link String}
*/
private String getSanDieToken(XContext context) {
JSONObject param = new JSONObject();
param.put("username", "31b5604627e345ebb48175de8f2ee0bdem55ajAwMQ==kj");
param.put("password", "sdSktfem55ajAwMSFAIzEw8ef354f215d44c0eafd403ab7a1ce74a");
String result = XHttpUtils.postAsJson(ThirdPartyApiConstant.CQ_SD_LOGIN, param.toJSONString());
context.getLogger().info("**** getThirdSanDieLoginInfo result: {}", result);
param = JSON.parseObject(result);
param = param.getJSONObject("data");
if (ObjectUtil.isEmpty(param)) {
throw new XServiceException(context, BusinessError.GetSanDieLoginInfoError);
}
String data = param.toJSONString();
ThirdPartyConfigCache cache = new ThirdPartyConfigCache();
cache.setCodeKey(ThirdPartyApiConstant.CQ_TOKEN_SAN_DIE_CACHE_KEY);
cache.setCode(data);
cache.setValidity(240);
cache.setCurrentDate(DateUtil.date());
ThirdPartyConfigCache.set(context, cache);
return data;
}
} }
package pps.core.prediction.service; package pps.core.prediction.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSON; 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.cloud.prediction.service.IThirdDataAccessCloudService;
import pps.core.prediction.constant.ThirdPartyApiConstant; import pps.core.prediction.constant.ThirdPartyApiConstant;
import pps.core.prediction.entity.ThirdActivePowerView; import pps.core.prediction.entity.*;
import pps.core.prediction.entity.ThirdCurrentWellConditionView; import pps.core.prediction.mapper.*;
import pps.core.prediction.entity.ThirdPhotovoltaicPowerView;
import pps.core.prediction.mapper.ThirdActivePowerViewMapper;
import pps.core.prediction.mapper.ThirdCurrentWellConditionViewMapper;
import pps.core.prediction.mapper.ThirdPhotovoltaicPowerViewMapper;
import pps.core.prediction.service.data.third_active_power.GetThirdActivePowerViewOutput; 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_current_well_condition.GetThirdCurrentWellConditionViewOutput;
import pps.core.prediction.service.data.third_photovoltaic_power.GetThirdPhotovoltaicPowerViewOutput; import pps.core.prediction.service.data.third_photovoltaic_power.GetThirdPhotovoltaicPowerViewOutput;
...@@ -18,13 +19,13 @@ import pps.core.prediction.utils.ServiceUtil; ...@@ -18,13 +19,13 @@ import pps.core.prediction.utils.ServiceUtil;
import xstartup.annotation.XService; import xstartup.annotation.XService;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XServiceResult; import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper; import xstartup.helper.XTransactionHelper;
import java.util.ArrayList; import java.math.BigDecimal;
import java.util.HashMap; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
import java.util.Map;
/** /**
* 第三方数据接入Cloud模块 * 第三方数据接入Cloud模块
...@@ -47,11 +48,16 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer ...@@ -47,11 +48,16 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
String resultStr = ServiceUtil.doPostFormCq(context, String resultStr = ServiceUtil.doPostFormCq(context,
ThirdPartyApiConstant.CQ_WELL_STATION_PV_DATA, ThirdPartyApiConstant.CQ_WELL_STATION_PV_DATA,
new HashMap<>(0)); new HashMap<>(0));
context.getLogger().info("*** CQ_WELL_STATION_PV_DATA : {}", resultStr);
List<GetThirdActivePowerViewOutput> outputs = JSON.parseArray(resultStr, GetThirdActivePowerViewOutput.class); List<GetThirdActivePowerViewOutput> outputs = JSON.parseArray(resultStr, GetThirdActivePowerViewOutput.class);
if (CollUtil.isEmpty(outputs)) { if (CollUtil.isEmpty(outputs)) {
return XServiceResult.OK; return XServiceResult.OK;
} }
List<ThirdActivePowerView> dtoList = new ArrayList<>(outputs.size()); List<ThirdActivePowerView> dtoList = new ArrayList<>(outputs.size());
List<ThirdActivePowerDailyUpdateView> dtoDailyList = new ArrayList<>(outputs.size());
DateTime now = DateTime.now();
DateTime saveDate = DateUtil.beginOfDay(now);
DateTime saveHour = DateUtil.beginOfHour(now);
for (GetThirdActivePowerViewOutput o : outputs) { for (GetThirdActivePowerViewOutput o : outputs) {
dtoList.add( dtoList.add(
ThirdActivePowerView.builder() ThirdActivePowerView.builder()
...@@ -62,10 +68,27 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer ...@@ -62,10 +68,27 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
.systemSource(ThirdPartyApiConstant.CQ_SOURCE) .systemSource(ThirdPartyApiConstant.CQ_SOURCE)
.build() .build()
); );
dtoDailyList.add(
ThirdActivePowerDailyUpdateView.builder()
.stationName(o.getStationName())
.createDate(o.getCreateDate())
.photovoltaicPower(o.getPhotovoltaicPower())
.meterPower(o.getMeterPower())
.systemSource(ThirdPartyApiConstant.CQ_SOURCE)
.saveDate(saveDate)
.saveHour(saveHour)
.build()
);
} }
return XTransactionHelper.begin(context, () -> { return XTransactionHelper.begin(context, () -> {
ThirdActivePowerViewMapper mapper = context.getBean(ThirdActivePowerViewMapper.class); ThirdActivePowerViewMapper mapper = context.getBean(ThirdActivePowerViewMapper.class);
//保存历史数据
mapper.batchInsertList(dtoList); mapper.batchInsertList(dtoList);
ThirdActivePowerDailyUpdateViewMapper dailyMapper = context.getBean(ThirdActivePowerDailyUpdateViewMapper.class);
//删除当日最新数据
dailyMapper.deleteByCurrentDayData(dtoDailyList, saveHour);
//保存当日最新数据
dailyMapper.batchInsertList(dtoDailyList);
return XServiceResult.OK; return XServiceResult.OK;
}); });
} }
...@@ -81,6 +104,7 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer ...@@ -81,6 +104,7 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
String resultStr = ServiceUtil.doPostFormCq(context, String resultStr = ServiceUtil.doPostFormCq(context,
ThirdPartyApiConstant.CQ_WELL_REAL_PV_DATA, ThirdPartyApiConstant.CQ_WELL_REAL_PV_DATA,
new HashMap<>(0)); new HashMap<>(0));
context.getLogger().info("*** CQ_WELL_REAL_PV_DATA : {}", resultStr);
List<GetThirdCurrentWellConditionViewOutput> outputs = JSON.parseArray(resultStr, GetThirdCurrentWellConditionViewOutput.class); List<GetThirdCurrentWellConditionViewOutput> outputs = JSON.parseArray(resultStr, GetThirdCurrentWellConditionViewOutput.class);
if (CollUtil.isEmpty(outputs)) { if (CollUtil.isEmpty(outputs)) {
return XServiceResult.OK; return XServiceResult.OK;
...@@ -93,8 +117,8 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer ...@@ -93,8 +117,8 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
.systemSource(ThirdPartyApiConstant.CQ_SOURCE) .systemSource(ThirdPartyApiConstant.CQ_SOURCE)
.wellNumber(o.getWellNumber()) .wellNumber(o.getWellNumber())
.nextTime(o.getNextTime()) .nextTime(o.getNextTime())
.wellStatus(o.getWellStatus()) .wellStatus(Optional.ofNullable(o.getWellStatus()).orElse("关井"))
.cumulativeProduction(o.getCumulativeProduction()) .cumulativeProduction(Optional.ofNullable(o.getCumulativeProduction()).orElse(BigDecimal.ZERO))
.runningTime(o.getRunningTime()) .runningTime(o.getRunningTime())
.build() .build()
); );
...@@ -120,6 +144,7 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer ...@@ -120,6 +144,7 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
String resultStr = ServiceUtil.doPostFormCq(context, String resultStr = ServiceUtil.doPostFormCq(context,
ThirdPartyApiConstant.CQ_STATION_DAILY_PV_DATA, ThirdPartyApiConstant.CQ_STATION_DAILY_PV_DATA,
param); param);
context.getLogger().info("*** CQ_STATION_DAILY_PV_DATA : {}", resultStr);
List<GetThirdPhotovoltaicPowerViewOutput> outputs = JSON.parseArray(resultStr, GetThirdPhotovoltaicPowerViewOutput.class); List<GetThirdPhotovoltaicPowerViewOutput> outputs = JSON.parseArray(resultStr, GetThirdPhotovoltaicPowerViewOutput.class);
if (CollUtil.isEmpty(outputs)) { if (CollUtil.isEmpty(outputs)) {
return XServiceResult.OK; return XServiceResult.OK;
...@@ -141,4 +166,69 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer ...@@ -141,4 +166,69 @@ public class ThirdDataAccessCloudServiceImpl implements IThirdDataAccessCloudSer
return XServiceResult.OK; 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);
List<WellheadDailyProductionSituationView> situationList = mapper.selectSumDailyElectricityConsumption(yesterday);
Map<String, BigDecimal> collect = situationList.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())
.systemSource(ThirdPartyApiConstant.CQ_SOURCE)
.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();
}
} }
package pps.core.prediction.service.data.third_active_power;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 三叠登录信息
*
* @author ZWT
* @date 2024/03/19 17:57
*/
@NoArgsConstructor
@Data
public class GetThirdSanDieLoginInfoOutput {
/**
* 认证Token
*/
private String accessToken;
/**
* 用户ID
*/
private Integer userId;
/**
* 用户名
*/
private String username;
/**
* 组织名称
*/
private String orgName;
/**
* 组织编码
*/
private String orgCode;
/**
* 别名
*/
private String nickname;
/**
* 过期时间
*/
private Long expiresTime;
/**
* refreshToken
*/
private String refreshToken;
}
package pps.core.prediction.service.data.third_active_power_daily_update;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import xstartup.annotation.XText;
import java.util.Date;
/**
* 第三方有功功率(每日最新数据)
*
* @author ZWT
* @date 2024/03/19
*/
@Data
public class GetThirdActivePowerDailyUpdateInput {
@XText("井组名称(线路/光伏电站)")
@NotBlank(message = "缺少井组名称")
private String stationName;
@XText("查询日期")
@NotNull(message = "缺少查询日期")
private Date queryDate;
}
package pps.core.prediction.service.data.third_active_power_daily_update;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
import java.util.Date;
/**
* 第三方有功功率(每日最新数据)
*
* @author ZWT
* @date 2024/03/19
*/
@Data
public class GetThirdActivePowerDailyUpdateOutput {
@XText("井组名称(线路/光伏电站)")
private String stationName;
@XText("光伏有功功率(KW)")
private BigDecimal photovoltaicPower;
@XText("电表有功功率(KW)")
private BigDecimal meterPower;
@XText("小时")
private Date saveHour;
}
package pps.core.prediction.service.data.third_photovoltaic_power; package pps.core.prediction.service.data.third_photovoltaic_power;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import pps.core.prediction.enums.BusinessError;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import xstartup.base.exception.XServiceException;
import java.util.Date; import java.util.Date;
import java.math.BigDecimal;
/**
* 能耗分析
*
* @author ZWT
* @date 2024/03/20
*/
@Data
public class GetThirdPhotovoltaicPowerInput { public class GetThirdPhotovoltaicPowerInput {
@XText("ID")
private Long id;
@XText("井组名称(线路/光伏电站)")
private String stationName;
@XText("创建时间")
private Date createDate;
@XText("光伏发电量(KW·h)")
private BigDecimal photovoltaicPower;
@XText("来源系统")
private String systemSource;
public Long getId() {
return this.id;
}
public void setId(Long value) {
this.id = value;
}
public String getStationName() {
return this.stationName;
}
public void setStationName(String value) {
this.stationName = value;
}
public Date getCreateDate() {
return this.createDate;
}
public void setCreateDate(Date value) {
this.createDate = value;
}
public BigDecimal getPhotovoltaicPower() {
return this.photovoltaicPower;
}
public void setPhotovoltaicPower(BigDecimal value) {
this.photovoltaicPower = value;
}
public String getSystemSource() { /**
return this.systemSource; * 组织机构ID
*/
@NotBlank(message = "缺少组织机构ID")
@XText("组织机构ID")
private String ouId;
/**
* 日期类型(1_近7天,2_近30天,3_自定义)
*/
@NotNull(message = "缺少日期类型")
@XText("日期类型(1_近7天,2_近30天,3_自定义)")
private Integer dateType;
/**
* 开始时间
*/
@XText("开始时间")
private Date startTime;
/**
* 结束时间
*/
@XText("结束时间")
private Date endTime;
/**
* 初始化开始结束日期
* 近7天:昨天开始前七天;近30天:昨天开始前30天;上期:所选周期往前推一个周期
*/
public void getBetweenDate() {
switch (this.dateType) {
case 1:
this.endTime = DateUtil.beginOfDay(DateUtil.yesterday());
this.startTime = DateUtil.offsetDay(endTime, -6);
break;
case 2:
this.endTime = DateUtil.beginOfDay(DateUtil.yesterday());
this.startTime = DateUtil.offsetDay(endTime, -29);
break;
case 3:
if (ObjectUtil.isNull(this.endTime) || ObjectUtil.isNull(this.startTime)) {
throw new XServiceException(BusinessError.TheStartEndDateIsMissing);
}
break;
default:
throw new XServiceException(BusinessError.DateTypeError);
}
} }
public void setSystemSource(String value) {
this.systemSource = value;
}
} }
package pps.core.prediction.service.data.third_photovoltaic_power; package pps.core.prediction.service.data.third_photovoltaic_power;
import lombok.Data;
import xstartup.annotation.XText; import xstartup.annotation.XText;
import java.util.Date;
import java.math.BigDecimal; import java.math.BigDecimal;
/**
* 能耗分析
*
* @author ZWT
* @date 2024/03/20
*/
@Data
public class GetThirdPhotovoltaicPowerOutput { public class GetThirdPhotovoltaicPowerOutput {
@XText("ID") @XText("发电量(kWh)")
private Long id; private BigDecimal powerGeneration;
@XText("井组名称(线路/光伏电站)")
private String stationName;
@XText("创建时间")
private Date createDate;
@XText("光伏发电量(KW·h)")
private BigDecimal photovoltaicPower;
@XText("来源系统")
private String systemSource;
public Long getId() {
return this.id;
}
public void setId(Long value) {
this.id = value;
}
public String getStationName() {
return this.stationName;
}
public void setStationName(String value) {
this.stationName = value;
}
public Date getCreateDate() {
return this.createDate;
}
public void setCreateDate(Date value) {
this.createDate = value;
}
public BigDecimal getPhotovoltaicPower() {
return this.photovoltaicPower;
}
public void setPhotovoltaicPower(BigDecimal value) {
this.photovoltaicPower = value;
}
public String getSystemSource() {
return this.systemSource;
}
public void setSystemSource(String value) { @XText("用电量(kWh)")
this.systemSource = value; private BigDecimal powerConsumption;
}
@XText("消纳率(%)")
private BigDecimal absorptionRate;
} }
...@@ -2,6 +2,7 @@ package pps.core.prediction.utils; ...@@ -2,6 +2,7 @@ package pps.core.prediction.utils;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
...@@ -10,6 +11,7 @@ import pps.core.common.cache.ThirdPartyConfigCache; ...@@ -10,6 +11,7 @@ import pps.core.common.cache.ThirdPartyConfigCache;
import pps.core.prediction.constant.ThirdPartyApiConstant; import pps.core.prediction.constant.ThirdPartyApiConstant;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.base.XStartup; import xstartup.base.XStartup;
import xstartup.base.exception.XServiceException;
import xstartup.base.util.XHttpUtils; import xstartup.base.util.XHttpUtils;
import java.util.HashMap; import java.util.HashMap;
...@@ -80,6 +82,9 @@ public class ServiceUtil { ...@@ -80,6 +82,9 @@ public class ServiceUtil {
String result = XHttpUtils.postAsForm(url, param); String result = XHttpUtils.postAsForm(url, param);
JSONObject jsonObject = JSON.parseObject(result); JSONObject jsonObject = JSON.parseObject(result);
String token = jsonObject.getString("token"); String token = jsonObject.getString("token");
if (CharSequenceUtil.isBlank(token)) {
throw new XServiceException("获取长庆Token失败");
}
ServiceUtil.setThirdPartyConfigCache(context, token); ServiceUtil.setThirdPartyConfigCache(context, token);
return token; return token;
} }
......
...@@ -32,4 +32,20 @@ ...@@ -32,4 +32,20 @@
where where
id=#{id} id=#{id}
</select> </select>
<insert id="batchInsertList" parameterType="list">
INSERT INTO energy_consumption_analysis ( line_id, station_name, power_generation, power_consumption,
data_date, system_source )
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.lineId},
#{item.stationName},
#{item.powerGeneration},
#{item.powerConsumption},
#{item.dataDate},
#{item.systemSource}
)
</foreach>
</insert>
</mapper> </mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pps.core.prediction.mapper.ThirdActivePowerDailyUpdateViewMapper">
<resultMap id="BaseResultMap" type="pps.core.prediction.entity.ThirdActivePowerDailyUpdateView">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="station_name" property="stationName" jdbcType="VARCHAR"/>
<result column="create_date" property="createDate" jdbcType="DATE"/>
<result column="photovoltaic_power" property="photovoltaicPower" jdbcType="DECIMAL"/>
<result column="meter_power" property="meterPower" jdbcType="DECIMAL"/>
<result column="system_source" property="systemSource" jdbcType="VARCHAR"/>
<result column="save_date" property="saveDate" jdbcType="DATE"/>
<result column="save_hour" property="saveHour" jdbcType="DATE"/>
</resultMap>
<sql id="Base_Column_List">
id
,
station_name,
create_date,
photovoltaic_power,
meter_power,
system_source,
save_date,
save_hour
</sql>
<select id="selectOne" parameterType="pps.core.prediction.entity.ThirdActivePowerDailyUpdateView"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from third_active_power_daily_update
where
id=#{id}
</select>
<select id="selectList" parameterType="pps.core.prediction.entity.ThirdActivePowerDailyUpdateView"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from third_active_power_daily_update
where
id=#{id}
</select>
<delete id="deleteByCurrentDayData" parameterType="java.util.List">
delete
from third_active_power_daily_update
where save_hour = #{currentDay}
and station_name IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.stationName}
</foreach>
</delete>
<insert id="batchInsertList" parameterType="java.util.List">
insert into third_active_power_daily_update (station_name, create_date, photovoltaic_power, meter_power,
system_source, save_date, save_hour)
values
<foreach collection="list" item="item" separator=",">
(
#{item.stationName},
#{item.createDate},
#{item.photovoltaicPower},
#{item.meterPower},
#{item.systemSource},
#{item.saveDate},
#{item.saveHour}
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
...@@ -52,4 +52,23 @@ ...@@ -52,4 +52,23 @@
) )
</foreach> </foreach>
</insert> </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"
resultType="pps.core.prediction.entity.WellheadDailyProductionSituationView">
SELECT w.line_id AS line_id,
l.line_name AS 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> </mapper>
\ No newline at end of file
...@@ -36,6 +36,7 @@ public class DeployPpsAllApplication { ...@@ -36,6 +36,7 @@ public class DeployPpsAllApplication {
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdActivePowerJob.class)); 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(ThirdCurrentWellConditionJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdPhotovoltaicPowerJob.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(XJobFeature.class).config(new XJobServiceConf(PlantPredictedPowerLongTermDataJob.class));
startup.run(args); startup.run(args);
} }
......
...@@ -53,6 +53,7 @@ x.job.service=pps.core.task.job.TestJob,\ ...@@ -53,6 +53,7 @@ x.job.service=pps.core.task.job.TestJob,\
pps.core.task.job.ThirdActivePowerJob,\ pps.core.task.job.ThirdActivePowerJob,\
pps.core.task.job.ThirdCurrentWellConditionJob,\ pps.core.task.job.ThirdCurrentWellConditionJob,\
pps.core.task.job.ThirdPhotovoltaicPowerJob,\ pps.core.task.job.ThirdPhotovoltaicPowerJob,\
pps.core.task.job.EnergyConsumptionAnalysisJob,\
pps.core.task.job.PlantPredictedPowerLongTermDataJob,\ pps.core.task.job.PlantPredictedPowerLongTermDataJob,\
pps.core.task.job.WeatherJob pps.core.task.job.WeatherJob
# redis # redis
......
...@@ -40,6 +40,7 @@ public class DeployPpsTaskApplication { ...@@ -40,6 +40,7 @@ public class DeployPpsTaskApplication {
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdActivePowerJob.class)); 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(ThirdCurrentWellConditionJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(ThirdPhotovoltaicPowerJob.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(XJobFeature.class).config(new XJobServiceConf(PlantPredictedPowerLongTermDataJob.class));
startup.enable(XRpcFeature.class); startup.enable(XRpcFeature.class);
startup.enable(XCloudHuaweiCseFeature.class) startup.enable(XCloudHuaweiCseFeature.class)
......
...@@ -14,6 +14,7 @@ x.job.service=pps.core.task.job.SpaceOptimizeLongJob,\ ...@@ -14,6 +14,7 @@ x.job.service=pps.core.task.job.SpaceOptimizeLongJob,\
pps.core.task.job.ThirdActivePowerJob,\ pps.core.task.job.ThirdActivePowerJob,\
pps.core.task.job.ThirdCurrentWellConditionJob,\ pps.core.task.job.ThirdCurrentWellConditionJob,\
pps.core.task.job.ThirdPhotovoltaicPowerJob,\ pps.core.task.job.ThirdPhotovoltaicPowerJob,\
pps.core.task.job.EnergyConsumptionAnalysisJob,\
pps.core.task.job.PlantPredictedPowerLongTermDataJob pps.core.task.job.PlantPredictedPowerLongTermDataJob
#\uFFFD\uFFFD\u05BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD #\uFFFD\uFFFD\u05BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
x.log.level=@x.log.level@ x.log.level=@x.log.level@
......
...@@ -102,11 +102,11 @@ x.db.pps.core.system.user=root ...@@ -102,11 +102,11 @@ x.db.pps.core.system.user=root
x.db.pps.core.system.password=bZuyzaSCnZ8kmqIIYOk3Ag== x.db.pps.core.system.password=bZuyzaSCnZ8kmqIIYOk3Ag==
x.db.pps.core.system.naming=snake-case x.db.pps.core.system.naming=snake-case
# \u81EA\u5B9A\u4E49\u914D\u7F6E # \u81EA\u5B9A\u4E49\u914D\u7F6E
#weather.file.temp.path=D:/home/weather/temp/receive weather.file.temp.path=D:\\IDE\\Project\\temp\\receive
weather.file.temp.path=/home/weather-jar/temp/receive #weather.file.temp.path=/home/weather-jar/temp/receive
weather.mail.host=mail.petrochina weather.mail.host=mail.petrochina
weather.mail.username=fzygl@petrochina.com.cn weather.mail.username=lingtanproject@petrochina.com.cn
weather.mail.password=wulingjie@xuqi914 weather.mail.password=Cppeilingtan2024
weather.mail.protocol=pop3 weather.mail.protocol=pop3
#\u7B2C\u4E09\u65B9\u63A5\u53E3\u5730\u5740(\u957F\u5E86) #\u7B2C\u4E09\u65B9\u63A5\u53E3\u5730\u5740(\u957F\u5E86)
third-party.chang-qing.url=http://10.78.7.253 third-party.chang-qing.url=http://10.78.7.253
......
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