diff --git a/src/main/java/com/xydl/cac/controller/IcdConfigController.java b/src/main/java/com/xydl/cac/controller/IcdConfigController.java index c710145..9714c6f 100644 --- a/src/main/java/com/xydl/cac/controller/IcdConfigController.java +++ b/src/main/java/com/xydl/cac/controller/IcdConfigController.java @@ -179,7 +179,7 @@ public class IcdConfigController extends BasicController { realTimeDataService.stopCollect(ied.getId()); ied.setStart(Constants.FALSE); iedRepository.save(ied); - throw ex; + return Response.fail(ex.getMessage()); } } diff --git a/src/main/java/com/xydl/cac/entity/IcdIed.java b/src/main/java/com/xydl/cac/entity/IcdIed.java index 818be12..3c23efc 100644 --- a/src/main/java/com/xydl/cac/entity/IcdIed.java +++ b/src/main/java/com/xydl/cac/entity/IcdIed.java @@ -46,4 +46,9 @@ public class IcdIed { @ApiModelProperty(name = "端口") @Column(name = "port") private Integer port; + + @Transient + private boolean connected; + @Transient + private int retry; } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/iec/IecClient.java b/src/main/java/com/xydl/cac/iec/IecClient.java index 958e789..d87fbb0 100644 --- a/src/main/java/com/xydl/cac/iec/IecClient.java +++ b/src/main/java/com/xydl/cac/iec/IecClient.java @@ -34,6 +34,7 @@ public class IecClient implements ClientEventListener { private WebSocketServer webSocketServer; public int retry = 0; public int seconds = 0; + private boolean inRetry = false; public Date lastReportTime; public IecClient() { @@ -184,7 +185,8 @@ public class IecClient implements ClientEventListener { @Override public void associationClosed(IOException e) { - if (keep) { + if (keep && !inRetry) { + inRetry = true; retry = 0; seconds = 0; this.disableReporting(); @@ -207,6 +209,7 @@ public class IecClient implements ClientEventListener { } } } + inRetry = false; } } diff --git a/src/main/java/com/xydl/cac/iec/IecServerService.java b/src/main/java/com/xydl/cac/iec/IecServerService.java index 9a38960..38cc22b 100644 --- a/src/main/java/com/xydl/cac/iec/IecServerService.java +++ b/src/main/java/com/xydl/cac/iec/IecServerService.java @@ -83,6 +83,7 @@ public class IecServerService { @PreDestroy private void stop() { + StaticVariable.shutdown = 1; Iterator it = StaticVariable.iecServerMap.keySet().iterator(); while (it.hasNext()) { Integer key = it.next(); diff --git a/src/main/java/com/xydl/cac/iec/RealTimeDataService.java b/src/main/java/com/xydl/cac/iec/RealTimeDataService.java index 439fadf..7c59672 100644 --- a/src/main/java/com/xydl/cac/iec/RealTimeDataService.java +++ b/src/main/java/com/xydl/cac/iec/RealTimeDataService.java @@ -60,7 +60,6 @@ public class RealTimeDataService { } catch (Exception ex) { String err = "61850订阅异常, ied=" + ied.getName() + ", ip=" + ied.getIp() + ", port=" + ied.getPort(); log.error(err, ex); - iecClient.associationClosed(null); throw new BusinessException(err); } finally { inDoing = false; diff --git a/src/main/java/com/xydl/cac/model/StaticVariable.java b/src/main/java/com/xydl/cac/model/StaticVariable.java index a9bf35a..de05964 100644 --- a/src/main/java/com/xydl/cac/model/StaticVariable.java +++ b/src/main/java/com/xydl/cac/model/StaticVariable.java @@ -31,15 +31,6 @@ public class StaticVariable { public static List zsb_Cache = null; public static ConcurrentHashMap rule_Cache = new ConcurrentHashMap<>(); - public static void wait(int seconds) throws InterruptedException { - for (int i = 0; i < seconds; i++) { - if (shutdown == 1) { - break; - } - Thread.sleep(1000); - } - } - // 更新服务端 public static void updateServerNodeValue(BasicDataAttribute bda) { Iterator it = StaticVariable.iecServerMap.keySet().iterator(); diff --git a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java index 1a02435..87ab193 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -3,7 +3,9 @@ package com.xydl.cac.service.impl; import com.xydl.cac.entity.*; import com.xydl.cac.entity.constants.Constants; import com.xydl.cac.exception.BusinessException; +import com.xydl.cac.iec.IecClient; import com.xydl.cac.model.IcdAttUpdateModel; +import com.xydl.cac.model.StaticVariable; import com.xydl.cac.repository.*; import com.xydl.cac.service.DataService; import com.xydl.cac.service.IcdFileConfigService; @@ -108,6 +110,13 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { List iedList = iedRepository.findByIcdFileId(icdFile.getId()); for (IcdIed ied : iedList) { if (StringUtils.isNotBlank(ied.getIp())) { + ied.setConnected(false); + ied.setRetry(0); + IecClient iecClient = StaticVariable.realTimeClientMap.get(ied.getId()); + if (iecClient != null) { + ied.setRetry(iecClient.retry); + ied.setConnected(iecClient.connected); + } result.add(ied); } }