diff --git a/db/upgrade20250501.sql b/db/upgrade20250501.sql new file mode 100644 index 0000000..5eb6c69 --- /dev/null +++ b/db/upgrade20250501.sql @@ -0,0 +1,8 @@ +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`; + +ALTER TABLE `i2sync_field` +ADD COLUMN `conversion` VARCHAR(45) NULL COMMENT '单位换算' AFTER `attach`; diff --git a/src/main/java/com/xydl/cac/entity/I2syncField.java b/src/main/java/com/xydl/cac/entity/I2syncField.java index 98d1a05..d770945 100644 --- a/src/main/java/com/xydl/cac/entity/I2syncField.java +++ b/src/main/java/com/xydl/cac/entity/I2syncField.java @@ -36,4 +36,7 @@ public class I2syncField { @Column(name = "attach") private String attach; + @Column(name = "conversion") + private String conversion; + } \ No newline at end of file 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/transform/I2DataTransformer.java b/src/main/java/com/xydl/cac/transform/I2DataTransformer.java index 3dab3fe..dc85d65 100644 --- a/src/main/java/com/xydl/cac/transform/I2DataTransformer.java +++ b/src/main/java/com/xydl/cac/transform/I2DataTransformer.java @@ -6,6 +6,7 @@ import com.xydl.cac.model.i2sync.Attr; import com.xydl.cac.model.i2sync.Datanode; import com.xydl.cac.model.i2sync.Monitordata; import com.xydl.cac.model.i2sync.Request; +import com.xydl.cac.util.DataUtil; import com.xydl.cac.util.DateUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -65,6 +66,9 @@ public class I2DataTransformer { List attrs = new ArrayList<>(); for (I2syncField field : fieldList) { Object value = dataMap.get(field.getFieldName()); + if (StringUtils.isNotBlank(field.getConversion())) { + value = DataUtil.convert(value, field.getConversion()); + } if (value != null) { Attr attr = new Attr(); attr.setName(field.getDestFieldName()); diff --git a/src/main/java/com/xydl/cac/util/DataUtil.java b/src/main/java/com/xydl/cac/util/DataUtil.java index a22ca43..87c68a5 100644 --- a/src/main/java/com/xydl/cac/util/DataUtil.java +++ b/src/main/java/com/xydl/cac/util/DataUtil.java @@ -66,4 +66,28 @@ public class DataUtil { list.addAll(newlist); } } + + public static Object convert(Object obj, String conversion) { + if (obj instanceof Number) { + float f = (float) obj; + if (conversion.startsWith("*")) { + float c = Float.parseFloat(conversion.replaceAll("\\*", ""). + replaceAll(" ", "")); + return f * c; + } else if (conversion.startsWith("/")) { + float c = Float.parseFloat(conversion.replaceAll("\\/", ""). + replaceAll(" ", "")); + return f / c; + } else if (conversion.startsWith("+")) { + float c = Float.parseFloat(conversion.replaceAll("\\+", ""). + replaceAll(" ", "")); + return f + c; + } else if (conversion.startsWith("-")) { + float c = Float.parseFloat(conversion.replaceAll("\\-", ""). + replaceAll(" ", "")); + return f - c; + } + } + return obj; + } } 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