diff --git a/src/main/java/com/xydl/cac/repository/IcdIedRepository.java b/src/main/java/com/xydl/cac/repository/IcdIedRepository.java index 453ee58..910abab 100644 --- a/src/main/java/com/xydl/cac/repository/IcdIedRepository.java +++ b/src/main/java/com/xydl/cac/repository/IcdIedRepository.java @@ -11,5 +11,5 @@ import java.util.List; @Repository public interface IcdIedRepository extends JpaRepository, JpaSpecificationExecutor { - List findByIcdFileId(String fileId); + List findByIcdFileId(Integer fileId); } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java b/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java index 4f7c6b6..1607621 100644 --- a/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java +++ b/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java @@ -14,4 +14,7 @@ public interface RptparamindexRepository extends JpaRepository findAllByEqmid(Integer eqmid); List findAllByParamindexStartingWith(String param); + + List findAllByParamindexEqualsAndEqmidIsNotNullAndTablenameIsNotNullAndColnameIsNotNull(String paramindex); + } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/task/Client61850Task.java b/src/main/java/com/xydl/cac/task/Client61850Task.java new file mode 100644 index 0000000..4e4d512 --- /dev/null +++ b/src/main/java/com/xydl/cac/task/Client61850Task.java @@ -0,0 +1,101 @@ +package com.xydl.cac.task; + +import com.xydl.cac.entity.*; +import com.xydl.cac.iec.IecClient; +import com.xydl.cac.repository.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Slf4j +public class Client61850Task { + + @Resource + IcdFileRepository fileRepository; + @Resource + IcdIedRepository iedRepository; + @Resource + IcdConfigTypeRepository configRepository; + @Resource + IcdConfigTypeAttRepository attRepository; + @Resource + IcdConfigTypeInstRepository instRepository; + @Resource + RptparamindexRepository rptparamindexRepository; + + @Scheduled(cron = "0 30 * * * ?") + public void collectAll() { + List icdFileList = fileRepository.findAll(); + if (!CollectionUtils.isEmpty(icdFileList)) { + for (IcdFile icdFile : icdFileList) { + this.collectIcdFile(icdFile); + } + } + } + + private void collectIcdFile(IcdFile icdFile) { + List iedList = iedRepository.findByIcdFileId(icdFile.getId()); + if (!CollectionUtils.isEmpty(iedList)) { + for (IcdIed ied : iedList) { + this.collectIed(icdFile.getXml(), ied); + } + } + } + + private void collectIed(String xml, IcdIed ied) { + List configTypeList = configRepository.findByIcdIedId(ied.getId()); + if (CollectionUtils.isEmpty(configTypeList)) { + return; + } + + // 开始连iec61850采集数据 + IecClient iecClient = new IecClient(); + try { + iecClient.connect(ied.getIp(), 102, ied.getApTitle(), xml); + this.collectIedValue(configTypeList, iecClient); + + } catch (Exception ex) { + log.error("61850采集数据异常, ied=" + ied.getName() + ", ip=" + ied.getIp(), ex); + } finally { + iecClient.disconnect(); + } + } + + private void collectIedValue(List configTypeList, IecClient iecClient) throws Exception { + for (IcdConfigType configType : configTypeList) { + List instList = instRepository.findByIcdConfigTypeId(configType.getId()); + List attList = attRepository.findByIcdConfigTypeId(configType.getId()); + for (IcdConfigTypeInst inst : instList) { + String param = configType.getIedName() + configType.getLdeviceInst() + "/" + configType.getLnClass() + + inst.getInst(); + for (IcdConfigTypeAtt att : attList) { + if (att.containInst(inst.getInst())) { + String paramindexOld = param + "$" + att.getParam(); + String paramindexNew = param + "." + att.getDoName() + "." + att.getLastName().replace("$", "."); + String paramindexT = param + "." + att.getDoName() + ".t"; + + List rptList = rptparamindexRepository.findAllByParamindexEqualsAndEqmidIsNotNullAndTablenameIsNotNullAndColnameIsNotNull(paramindexOld); + if (!CollectionUtils.isEmpty(rptList)) { + this.getOneValue(paramindexNew, paramindexT, att.getFc(), rptList.get(0), iecClient); + } + } + } + } + } + } + + private void getOneValue(String paramindexNew, String paramindexT, String fc, Rptparamindex rpt, IecClient iecClient) throws Exception { + + String value = iecClient.getValue(paramindexNew, fc); + log.info(paramindexNew + "=" + value); + + String time = iecClient.getValue(paramindexT, fc); + log.info(paramindexT + "=" + time); + } + +} diff --git a/src/main/java/com/xydl/cac/task/I2syncTask.java b/src/main/java/com/xydl/cac/task/I2syncTask.java index 76a6973..205728f 100644 --- a/src/main/java/com/xydl/cac/task/I2syncTask.java +++ b/src/main/java/com/xydl/cac/task/I2syncTask.java @@ -63,8 +63,10 @@ public class I2syncTask { // 同步一个类型 private void syncOneConfig(I2syncConfig config) throws Exception { + log.info("I2syncTask.syncOneConfig " + config.getTypeName()); List fieldList = i2syncService.listFieldConfig(config.getTableName()); if (CollectionUtils.isEmpty(fieldList)) { + log.info("该类型未配置同步字段."); return; } List points = new ArrayList<>();