From 29234aa17b3853b3be211e88eda9c54396100e3e Mon Sep 17 00:00:00 2001 From: huangfeng Date: Tue, 8 Oct 2024 10:56:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0ied=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E4=BF=9D=E5=AD=98=E5=92=8C=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xydl/cac/entity/IcdConfigType.java | 14 ++---- .../java/com/xydl/cac/entity/IcdFile.java | 2 + src/main/java/com/xydl/cac/entity/IcdIed.java | 44 ++++++++++++++++ .../repository/IcdConfigTypeRepository.java | 2 + .../xydl/cac/repository/IcdIedRepository.java | 15 ++++++ .../impl/IcdFileConfigServiceImpl.java | 21 +++++++- .../java/com/xydl/cac/util/IcdXmlUtil.java | 50 ++++++++++--------- 7 files changed, 112 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/xydl/cac/entity/IcdIed.java create mode 100644 src/main/java/com/xydl/cac/repository/IcdIedRepository.java diff --git a/src/main/java/com/xydl/cac/entity/IcdConfigType.java b/src/main/java/com/xydl/cac/entity/IcdConfigType.java index 6a0bfc7..f001479 100644 --- a/src/main/java/com/xydl/cac/entity/IcdConfigType.java +++ b/src/main/java/com/xydl/cac/entity/IcdConfigType.java @@ -27,17 +27,9 @@ public class IcdConfigType { @Column(name = "id") private Integer id; - @ApiModelProperty(name = "ICD文件id") - @Column(name = "icd_file_id") - private Integer icdFileId; - - @ApiModelProperty(name = "ip") - @Column(name = "ip") - private String ip; - - @ApiModelProperty(name = "OSI-AP-Title") - @Column(name = "ap_title") - private String apTitle; + @ApiModelProperty(name = "Iedid") + @Column(name = "icd_ied_id") + private Integer icdIedId; @ApiModelProperty(name = "IED名称") @Column(name = "ied_name") diff --git a/src/main/java/com/xydl/cac/entity/IcdFile.java b/src/main/java/com/xydl/cac/entity/IcdFile.java index 35d917c..d74bb0a 100644 --- a/src/main/java/com/xydl/cac/entity/IcdFile.java +++ b/src/main/java/com/xydl/cac/entity/IcdFile.java @@ -36,4 +36,6 @@ public class IcdFile { @Transient private List configList; + @Transient + private List iedList; } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/IcdIed.java b/src/main/java/com/xydl/cac/entity/IcdIed.java new file mode 100644 index 0000000..395ae1f --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/IcdIed.java @@ -0,0 +1,44 @@ +package com.xydl.cac.entity; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "icd_ied") +@ApiModel("ied信息表") +public class IcdIed { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @ApiModelProperty(name = "ICD文件id") + @Column(name = "icd_file_id") + private Integer icdFileId; + + @ApiModelProperty(name = "ip") + @Column(name = "ip") + private String ip; + + @ApiModelProperty(name = "OSI-AP-Title") + @Column(name = "ap_title") + private String apTitle; + + @ApiModelProperty(name = "IED名称") + @Column(name = "name") + private String name; + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/IcdConfigTypeRepository.java b/src/main/java/com/xydl/cac/repository/IcdConfigTypeRepository.java index 8115ca3..bcde212 100644 --- a/src/main/java/com/xydl/cac/repository/IcdConfigTypeRepository.java +++ b/src/main/java/com/xydl/cac/repository/IcdConfigTypeRepository.java @@ -11,6 +11,8 @@ import java.util.List; @Repository public interface IcdConfigTypeRepository extends JpaRepository, JpaSpecificationExecutor { + List findByIcdIedId(Integer iedId); + List findByIedName(String iedName); List findByIedNameAndLdeviceInstAndLnClass(String iedName, String ldeviceInst, String lnClass); diff --git a/src/main/java/com/xydl/cac/repository/IcdIedRepository.java b/src/main/java/com/xydl/cac/repository/IcdIedRepository.java new file mode 100644 index 0000000..453ee58 --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/IcdIedRepository.java @@ -0,0 +1,15 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.IcdIed; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +@Repository +public interface IcdIedRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByIcdFileId(String fileId); +} \ No newline at end of file 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 f75382a..23348c2 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -25,6 +25,8 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { @Resource IcdFileRepository fileRepository; @Resource + IcdIedRepository iedRepository; + @Resource IcdConfigTypeRepository configRepository; @Resource IcdConfigTypeAttRepository attRepository; @@ -46,8 +48,15 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { IcdFile icdFile = IcdXmlUtil.loadIcdType(xml); icdFile.setMd5(md5); fileRepository.save(icdFile); + for (IcdIed ied : icdFile.getIedList()) { + ied.setIcdFileId(icdFile.getId()); + iedRepository.save(ied); + } for (IcdConfigType config : icdFile.getConfigList()) { - config.setIcdFileId(icdFile.getId()); + IcdIed ied = this.findIcdIed(icdFile.getIedList(), config.getIedName()); + if (ied != null) { + config.setIcdIedId(ied.getId()); + } configRepository.save(config); attRepository.deleteByIcdConfigTypeId(config.getId()); @@ -71,6 +80,15 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { } } + private IcdIed findIcdIed(List list, String name) { + for (IcdIed ied : list) { + if (ied.getName().equalsIgnoreCase(name)) { + return ied; + } + } + return null; + } + @Override public List iedList() { String sql = "SELECT DISTINCT ied_name FROM icd_config_type"; @@ -152,6 +170,7 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { attRepository.deleteAll(); configRepository.deleteAll(); fileRepository.deleteAll(); + iedRepository.deleteAll(); } @Override diff --git a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java index d574069..64e662c 100644 --- a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java +++ b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.xydl.cac.entity.IcdConfigType; import com.xydl.cac.entity.IcdFile; +import com.xydl.cac.entity.IcdIed; import com.xydl.cac.exception.BusinessException; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; @@ -26,60 +27,61 @@ public class IcdXmlUtil { IcdFile icdFile = IcdFile.builder() .xml(xml) .build(); - LinkedHashMap iedMap = processTypeRoot(root); - icdFile.setConfigList(new ArrayList<>(iedMap.values())); + processTypeRoot(root, icdFile); return icdFile; } - private static LinkedHashMap processTypeRoot(JsonNode root) { - LinkedHashMap iedMap = new LinkedHashMap<>(); + private static void processTypeRoot(JsonNode root, IcdFile icdFile) { + LinkedHashMap configMap = new LinkedHashMap<>(); Map mapLNodeType = buildLNodeTypeMap(root); Map mapDOType = buildDOTypeMap(root); Map mapDAType = buildDATypeMap(root); - List iedList = findNodes(root, "IED"); - for (JsonNode iedNode : iedList) { - processIEDNode(iedMap, iedNode, + List iedNodeList = findNodes(root, "IED"); + for (JsonNode iedNode : iedNodeList) { + processIEDNode(configMap, iedNode, mapLNodeType, mapDOType, mapDAType); } + icdFile.setConfigList(new ArrayList<>(configMap.values())); + List iedList = new ArrayList<>(); List apList = findNodes(root, "ConnectedAP"); for (JsonNode apNode : apList) { - String iedName = apNode.get("iedName").asText(); - IcdConfigType config = iedMap.get(iedName); - if (config != null) { - processAPNode(apNode, config); - } + IcdIed ied = processAPNode(apNode); + iedList.add(ied); } - - return iedMap; + icdFile.setIedList(iedList); } - private static void processAPNode(JsonNode apNode, IcdConfigType config) { + private static IcdIed processAPNode(JsonNode apNode) { + IcdIed ied = new IcdIed(); + String iedName = apNode.get("iedName").asText(); + ied.setName(iedName); List pList = findNodes(apNode, "P"); for (JsonNode pNode : pList) { String type = pNode.get("type").asText(); if ("IP".equalsIgnoreCase(type)) { - config.setIp(pNode.asText()); + ied.setIp(pNode.get("").asText()); } else if ("OSI-AP-Title".equalsIgnoreCase(type)) { - config.setApTitle(pNode.asText()); + ied.setApTitle(pNode.get("").asText()); } } + return ied; } - private static void processIEDNode(LinkedHashMap iedMap, JsonNode iedNode, + private static void processIEDNode(LinkedHashMap configMap, JsonNode iedNode, Map mapLNodeType, Map mapDOType, Map mapDAType) { String iedName = iedNode.get("name").asText(); List devList = findNodes(iedNode, "LDevice"); for (JsonNode dev : devList) { - processTypeDeviceNode(iedMap, iedName, dev, + processTypeDeviceNode(configMap, iedName, dev, mapLNodeType, mapDOType, mapDAType); } } - private static void processTypeDeviceNode(LinkedHashMap iedMap, String iedName, JsonNode deviceNode, + private static void processTypeDeviceNode(LinkedHashMap configMap, String iedName, JsonNode deviceNode, Map mapLNodeType, Map mapDOType, Map mapDAType) { String ldeviceInst = deviceNode.get("inst").asText(); Map mapLN = buildLNMap(deviceNode); @@ -111,7 +113,7 @@ public class IcdXmlUtil { String key = iedName + ldeviceInst + "/" + lnClass; if ("MX".equals(fc)) { - IcdConfigType config = iedMap.get(key); + IcdConfigType config = configMap.get(key); if (config == null) { config = IcdConfigType.builder() .iedName(iedName) @@ -119,20 +121,20 @@ public class IcdXmlUtil { .lnClass(lnClass) .lnDesc(lnDesc) .build(); - iedMap.put(key, config); + configMap.put(key, config); } String param = fc + "$" + doName + "$" + lastname; config.addInst(lnInst); config.addAtt(doName, doDesc, param, lnInst); } else if ("ST".equals(fc)) { - IcdConfigType config = iedMap.get(key); + IcdConfigType config = configMap.get(key); if (config == null) { config = IcdConfigType.builder() .iedName(iedName) .ldeviceInst(ldeviceInst) .lnClass(lnClass) .build(); - iedMap.put(key, config); + configMap.put(key, config); } String param = fc + "$" + doName + "$" + lastname; config.addInst(lnInst);