From 7de8d2b40685e60064be04e4ec6cebf8b01a0857 Mon Sep 17 00:00:00 2001 From: huangfeng Date: Tue, 15 Oct 2024 11:27:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E5=92=8C=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?paramindex=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cac/controller/IcdConfigController.java | 8 +++++ .../cac/controller/IecServerController.java | 8 +++++ .../xydl/cac/entity/IcdConfigTypeInst.java | 14 ++++++++ .../com/xydl/cac/iec/IecServerService.java | 35 ++++++++++++++++--- .../cac/service/IcdFileConfigService.java | 3 ++ .../impl/IcdFileConfigServiceImpl.java | 23 ++++++++++++ 6 files changed, 87 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/xydl/cac/controller/IcdConfigController.java b/src/main/java/com/xydl/cac/controller/IcdConfigController.java index c1fff63..e888739 100644 --- a/src/main/java/com/xydl/cac/controller/IcdConfigController.java +++ b/src/main/java/com/xydl/cac/controller/IcdConfigController.java @@ -1,6 +1,7 @@ package com.xydl.cac.controller; import com.xydl.cac.entity.IcdConfigType; +import com.xydl.cac.entity.IcdConfigTypeInst; import com.xydl.cac.entity.IcdFile; import com.xydl.cac.entity.IcdIed; import com.xydl.cac.entity.constants.Constants; @@ -15,6 +16,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +import org.springframework.data.repository.query.Param; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -143,6 +145,12 @@ public class IcdConfigController extends BasicController { return Response.success("OK"); } + @GetMapping("listParamindex") + @ApiOperation("查询该IED下的paramindex数据") + public Response> listParamindex(@Validated @NotNull(message = "iedName不能为空!") @Param("iedName") String iedName) throws Exception { + List result = configService.listParamindex(iedName); + return Response.success(result); + } @PostMapping("startCollect") @ApiOperation("开始实时采集转发") diff --git a/src/main/java/com/xydl/cac/controller/IecServerController.java b/src/main/java/com/xydl/cac/controller/IecServerController.java index 3bdb18d..2c7a00f 100644 --- a/src/main/java/com/xydl/cac/controller/IecServerController.java +++ b/src/main/java/com/xydl/cac/controller/IecServerController.java @@ -1,5 +1,6 @@ package com.xydl.cac.controller; +import com.xydl.cac.entity.IcdConfigTypeInst; import com.xydl.cac.entity.IcdFile; import com.xydl.cac.entity.IcdTransform; import com.xydl.cac.entity.constants.Constants; @@ -79,6 +80,13 @@ public class IecServerController extends BasicController { return Response.success(map); } + @GetMapping("listParamindex") + @ApiOperation("查询该IED下的paramindex数据") + public Response> listParamindex(@Validated @NotNull(message = "fileId不能为空!") Integer fileId) throws Exception { + List result = iecServerService.listParamindex(fileId); + return Response.success(result); + } + @PostMapping("addTransform") @ApiOperation("addTransform") public Response addTransform(@Validated @RequestBody IcdTransform icdTransform) throws Exception { diff --git a/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java b/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java index 7717f36..f693da7 100644 --- a/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java +++ b/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java @@ -9,6 +9,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) @Data @@ -36,4 +38,16 @@ public class IcdConfigTypeInst { @Transient private String paramIndex; + @Transient + private List attList; + + public void addAtt(String att) { + if (attList == null) { + attList = new ArrayList<>(); + } + if (!attList.contains(att)) { + attList.add(att); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/iec/IecServerService.java b/src/main/java/com/xydl/cac/iec/IecServerService.java index 2cfa9fe..4272df1 100644 --- a/src/main/java/com/xydl/cac/iec/IecServerService.java +++ b/src/main/java/com/xydl/cac/iec/IecServerService.java @@ -1,9 +1,10 @@ package com.xydl.cac.iec; -import com.xydl.cac.entity.IcdFile; +import com.xydl.cac.entity.*; import com.xydl.cac.entity.constants.Constants; import com.xydl.cac.exception.BusinessException; import com.xydl.cac.repository.IcdFileRepository; +import com.xydl.cac.util.IcdXmlUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -11,9 +12,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; +import java.util.*; @Service @Slf4j @@ -84,4 +83,32 @@ public class IecServerService { map.put("fileId", iecServer.fileId); return map; } + + public List listParamindex(Integer fileId) throws Exception { + Optional optional = fileRepository.findById(fileId); + if (!optional.isPresent()) { + throw new BusinessException("未找到该文件"); + } + List result = new ArrayList<>(); + IcdFile icdFile = IcdXmlUtil.loadIcdType(optional.get().getXml()); + for (IcdConfigType config : icdFile.getConfigList()) { + if (config.getAttMap() != null && config.getInstMap() != null) { + Collection instList = config.getInstMap().values(); + Collection attList = config.getAttMap().values(); + for (IcdConfigTypeInst inst : instList) { + String param = config.getIedName() + config.getLdeviceInst() + "/" + config.getLnClass() + + inst.getInst(); + inst.setParamIndex(param); + for (IcdConfigTypeAtt att : attList) { + if (att.containInst(inst.getInst())) { + String paramindex = param + "$" + att.getDoName(); + inst.addAtt(paramindex); + } + } + } + result.addAll(instList); + } + } + return result; + } } diff --git a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java index 9a99cc3..a384b2e 100644 --- a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java +++ b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java @@ -1,6 +1,7 @@ package com.xydl.cac.service; import com.xydl.cac.entity.IcdConfigType; +import com.xydl.cac.entity.IcdConfigTypeInst; import com.xydl.cac.entity.IcdFile; import com.xydl.cac.entity.IcdIed; import com.xydl.cac.model.IcdAttUpdateModel; @@ -32,4 +33,6 @@ public interface IcdFileConfigService { List compare61850(); void generateParamindex() throws Exception; + + List listParamindex(String iedName); } 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 65cff09..087ca13 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -274,4 +274,27 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { } } + @Override + public List listParamindex(String iedName) { + List result = new ArrayList<>(); + List typeList = configRepository.findByIedName(iedName); + 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(); + inst.setParamIndex(param); + for (IcdConfigTypeAtt att : attList) { + if (att.containInst(inst.getInst())) { + String paramindex = param + "$" + att.getDoName(); + inst.addAtt(paramindex); + } + } + } + result.addAll(instList); + } + return result; + } + }