From aa3a3c5c8ac2113db713dcbbfdf587280fef8412 Mon Sep 17 00:00:00 2001 From: huangfeng Date: Sun, 27 Apr 2025 10:16:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=8A=8A=E9=87=87?= =?UTF-8?q?=E9=9B=86=E7=9A=84=E8=B0=B1=E5=9B=BE=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E7=BB=99=E5=81=A5=E5=BA=B7=E8=AF=84=E4=BC=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/upgrade20250501.sql | 5 ++ .../java/com/xydl/cac/entity/IedDlConfig.java | 4 ++ .../java/com/xydl/cac/entity/IedDlRecord.java | 7 +++ .../com/xydl/cac/iec/IEDCollectService.java | 10 +++- .../java/com/xydl/cac/task/AsyncTask.java | 6 +- src/main/java/com/xydl/cac/util/JkpgFtp.java | 59 +++++++++++++++++++ src/main/resources/application-dev.yml | 6 ++ src/main/resources/application-prod.yml | 8 ++- 8 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 db/upgrade20250501.sql create mode 100644 src/main/java/com/xydl/cac/util/JkpgFtp.java diff --git a/db/upgrade20250501.sql b/db/upgrade20250501.sql new file mode 100644 index 0000000..0f8ffb0 --- /dev/null +++ b/db/upgrade20250501.sql @@ -0,0 +1,5 @@ +ALTER TABLE `ied_dl_config` +ADD COLUMN `upload` INT NULL COMMENT '0:不传; 1:要传;' AFTER `active`; + +ALTER TABLE `ied_dl_record` +ADD COLUMN `upload` INT(11) NULL DEFAULT NULL COMMENT '0:未传; 1:已传;' AFTER `data`; diff --git a/src/main/java/com/xydl/cac/entity/IedDlConfig.java b/src/main/java/com/xydl/cac/entity/IedDlConfig.java index 0c468e3..7fe2d31 100644 --- a/src/main/java/com/xydl/cac/entity/IedDlConfig.java +++ b/src/main/java/com/xydl/cac/entity/IedDlConfig.java @@ -58,6 +58,10 @@ public class IedDlConfig { @Column(name = "active") private Integer active; + @ApiModelProperty("是否上传健康评估 0:不传 1:要传") + @Column(name = "upload") + private Integer upload; + @Transient private NSensor sensor; @Transient diff --git a/src/main/java/com/xydl/cac/entity/IedDlRecord.java b/src/main/java/com/xydl/cac/entity/IedDlRecord.java index e16b61f..a5c2201 100644 --- a/src/main/java/com/xydl/cac/entity/IedDlRecord.java +++ b/src/main/java/com/xydl/cac/entity/IedDlRecord.java @@ -61,6 +61,13 @@ public class IedDlRecord { @Column(name = "data") private String data; + @ApiModelProperty("是否上传健康评估 0:未传 1:已传") + @Column(name = "upload") + private Integer upload; + + @Transient + String localFullPath; + @Transient IedDlConfig config; @Transient diff --git a/src/main/java/com/xydl/cac/iec/IEDCollectService.java b/src/main/java/com/xydl/cac/iec/IEDCollectService.java index 6b292dc..9bcc318 100644 --- a/src/main/java/com/xydl/cac/iec/IEDCollectService.java +++ b/src/main/java/com/xydl/cac/iec/IEDCollectService.java @@ -12,6 +12,7 @@ import com.xydl.cac.service.IedDlRecordService; import com.xydl.cac.socket.WebSocketServer; import com.xydl.cac.spectrogram.SpectrogramHandler; import com.xydl.cac.util.DateUtil; +import com.xydl.cac.util.JkpgFtp; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; @@ -36,6 +37,7 @@ public class IEDCollectService { WarningRepository _warningRepository; SpectrogramHandler _spectrogramHandler; boolean _warning; + JkpgFtp _jkpgFtp; String folder = "/record"; HashMap eqmidTimeMap = new HashMap<>(); @@ -45,7 +47,8 @@ public class IEDCollectService { IedDlRecordService dlRecordService, DataService dataService, String xml, IcdIed ied, WebSocketServer webSocketServer, BizConfig bizConfig, boolean warning, - WarningRepository warningRepository, SpectrogramHandler spectrogramHandler) { + WarningRepository warningRepository, SpectrogramHandler spectrogramHandler, + JkpgFtp jkpgFtp) { _configRepository = configRepository; _attRepository = attRepository; _instRepository = instRepository; @@ -59,6 +62,7 @@ public class IEDCollectService { _warning = warning; _warningRepository = warningRepository; _spectrogramHandler = spectrogramHandler; + _jkpgFtp = jkpgFtp; iecClient = new IecClient(); } @@ -236,10 +240,14 @@ public class IEDCollectService { if (!exist) { String relativePath = localPath + "/" + filename; String localFullPath = _bizConfig.getDatapath() + relativePath; + record.setLocalFullPath(localFullPath); iecClient.getFile(record.getRemotePath(), localFullPath, config.getTodel()); record.setPath(_bizConfig.getDataNginxPath() + relativePath); log.info("采集到" + record.getRemotePath()); _spectrogramHandler.processFile(record); + if (config.getUpload() != null && config.getUpload().intValue() == Constants.TRUE) { + _jkpgFtp.upload(record); + } _dlRecordService.add(record); } } diff --git a/src/main/java/com/xydl/cac/task/AsyncTask.java b/src/main/java/com/xydl/cac/task/AsyncTask.java index 50f930e..c08f330 100644 --- a/src/main/java/com/xydl/cac/task/AsyncTask.java +++ b/src/main/java/com/xydl/cac/task/AsyncTask.java @@ -8,6 +8,7 @@ import com.xydl.cac.service.DataService; import com.xydl.cac.service.IedDlRecordService; import com.xydl.cac.socket.WebSocketServer; import com.xydl.cac.spectrogram.SpectrogramHandler; +import com.xydl.cac.util.JkpgFtp; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -39,6 +40,8 @@ public class AsyncTask { WarningRepository warningRepository; @Resource SpectrogramHandler spectrogramHandler; + @Resource + JkpgFtp jkpgFtp; @Async public void collectIed(String xml, IcdIed ied, List rptList, List dlList) { @@ -47,7 +50,8 @@ public class AsyncTask { dlRecordService, dataService, xml, ied, webSocketServer, bizConfig, warning, - warningRepository, spectrogramHandler); + warningRepository, spectrogramHandler, + jkpgFtp); iedService.collectAndSave(rptList, dlList); } } diff --git a/src/main/java/com/xydl/cac/util/JkpgFtp.java b/src/main/java/com/xydl/cac/util/JkpgFtp.java new file mode 100644 index 0000000..0f5d269 --- /dev/null +++ b/src/main/java/com/xydl/cac/util/JkpgFtp.java @@ -0,0 +1,59 @@ +package com.xydl.cac.util; + +import com.jcraft.jsch.JSchException; +import com.xydl.cac.entity.IedDlRecord; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class JkpgFtp { + @Value("${cac.jkpg.ip:}") + private String ip; + @Value("${cac.jkpg.port:22}") + private Integer port; + @Value("${cac.jkpg.user:}") + private String user; + @Value("${cac.jkpg.pass:}") + private String pass; + @Value("${cac.jkpg.pass:}") + private String path; + + SFTPTool sftpTool = new SFTPTool(); + boolean connected = false; + + public void connect() { + if (StringUtils.isBlank(ip)) { + log.error("健康评估的IP未配置"); + return; + } + if (StringUtils.isBlank(user)) { + log.error("健康评估的user未配置"); + return; + } + try { + sftpTool.connect(ip, port, user, pass); + sftpTool.cdmkdir(path); + connected = true; + } catch (Exception e) { + log.error("SFTP连接健康评估失败", e); + connected = false; + } + } + + public void upload(IedDlRecord record) { + if (!connected) { + this.connect(); + } + if (connected) { + try { + sftpTool.upload(record.getLocalFullPath(), record.getFilename()); + log.info("SFTP上传健康评估成功, " + record.getFilename()); + } catch (Exception e) { + log.error("SFTP上传健康评估失败, " + record.getFilename(), e); + } + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a97d917..bf6c032 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -55,3 +55,9 @@ cac: name: ttyCH341USB0 intervaltime: 60 warntime: 5 + jkpg: + ip: 192.168.1.190 + port: 22 + user: sftpuser + pass: 123456 + path: filestore/comtrad diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 4fbec2b..b0860eb 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -54,4 +54,10 @@ cac: warnport: name: ttyCH341USB0 intervaltime: 60 - warntime: 5 \ No newline at end of file + warntime: 5 + jkpg: + ip: 192.168.1.190 + port: 22 + user: sftpuser + pass: 123456 + path: filestore/comtrad