From 34ae67905a2cf3b55fc9a4dd2e242e91f4f9743b Mon Sep 17 00:00:00 2001 From: huangfeng Date: Sun, 7 Apr 2024 09:58:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0ST=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=EF=BC=8C=E6=AF=94=E5=AF=B961850?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cac/controller/IcdConfigController.java | 7 +++ .../cac/service/IcdFileConfigService.java | 2 + .../impl/IcdFileConfigServiceImpl.java | 46 +++++++++++++++++-- .../java/com/xydl/cac/util/IcdXmlUtil.java | 38 ++++++++++----- 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/xydl/cac/controller/IcdConfigController.java b/src/main/java/com/xydl/cac/controller/IcdConfigController.java index f603c76..290966d 100644 --- a/src/main/java/com/xydl/cac/controller/IcdConfigController.java +++ b/src/main/java/com/xydl/cac/controller/IcdConfigController.java @@ -113,4 +113,11 @@ public class IcdConfigController extends BasicController { return Response.success("OK"); } + @GetMapping("compare61850") + @ApiOperation("比对61850的不同点") + public Response> compare61850() throws Exception { + List result = configService.compare61850(); + return Response.success(result); + } + } diff --git a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java index 2390684..b8094d8 100644 --- a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java +++ b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java @@ -22,4 +22,6 @@ public interface IcdFileConfigService { void deleteAtt(Integer attid); void clearAll(); + + List compare61850(); } 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 4620f5b..511100e 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -14,10 +14,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Optional; +import java.util.*; @Service @Slf4j @@ -32,6 +29,8 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { IcdConfigTypeInstRepository instRepository; @Resource private JdbcTemplate jdbcTemplate; + @Resource + RptparamindexRepository rptparamindexRepository; @Override public void upload(String xml) throws Exception { @@ -149,4 +148,43 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { repository.deleteAll(); } + @Override + public List compare61850() { + List param618List = new ArrayList<>(); + List rptList = rptparamindexRepository.findAll(); + for (Rptparamindex rpt : rptList) { + param618List.add(rpt.getParamindex()); + } + + List paramList = new ArrayList<>(); + List typeLIst = repository.findAll(); + for (IcdConfigType type : typeLIst) { + List instList = instRepository.findByIcdConfigTypeId(type.getId()); + List attList = attRepository.findByIcdConfigTypeId(type.getId()); + for (IcdConfigTypeInst inst : instList) { + String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass() + + inst.getInst(); + for (IcdConfigTypeAtt att : attList) { + if (att.containInst(inst.getInst())) { + String paramindex = param + "$" + att.getParam(); + paramList.add(paramindex); + } + } + } + } + + List result = new ArrayList<>(); + for (String str : param618List) { + if (!paramList.contains(str)) { + result.add("少了" + str); + } + } + for (String str : paramList) { + if (!param618List.contains(str)) { + result.add("多了" + str); + } + } + return result; + } + } diff --git a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java index 653ab07..d9c616a 100644 --- a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java +++ b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java @@ -98,18 +98,18 @@ public class IcdXmlUtil { config.addInst(lnInst); config.addAtt(doName, doDesc, param, lnInst); } else if ("ST".equals(fc)) { -// IcdConfigType config = result.get(key); -// if (config == null) { -// config = IcdConfigType.builder() -// .iedName(iedName) -// .ldeviceInst(ldeviceInst) -// .lnClass(lnClass) -// .build(); -// result.put(key, config); -// } -// String param = fc + "$" + doName + "$" + lastname; -// config.addInst(lnInst); -// config.addAtt(doName, param); + IcdConfigType config = result.get(key); + if (config == null) { + config = IcdConfigType.builder() + .iedName(iedName) + .ldeviceInst(ldeviceInst) + .lnClass(lnClass) + .build(); + result.put(key, config); + } + String param = fc + "$" + doName + "$" + lastname; + config.addInst(lnInst); + config.addAtt(doName, doDesc, param, lnInst); } } } @@ -174,6 +174,7 @@ public class IcdXmlUtil { for (JsonNode daNode : daList) { String fc = daNode.get("fc").asText(); String bType = daNode.get("bType").asText(); + JsonNode dchgNode = daNode.get("dchg"); if (bType.equals("Struct") && fc.equals(fcname)) { result = daNode.get("name").asText(); JsonNode typeNode = daNode.get("type"); @@ -188,6 +189,19 @@ public class IcdXmlUtil { } } break; + } else if (dchgNode != null && dchgNode.asText().equals("true") && fc.equals(fcname)) { + result = daNode.get("name").asText(); + JsonNode typeNode = daNode.get("type"); + if (typeNode != null && StringUtils.isNotBlank(typeNode.asText())) { + JsonNode nodeDAType = mapDAType.get(typeNode.asText()); + if (nodeDAType != null) { + List bdaList = findNodes(nodeDAType, "BDA"); + if (!CollectionUtils.isEmpty(bdaList)) { + String name = bdaList.get(0).get("name").asText(); + result = result + "$" + name; + } + } + } } } return result;