From eb55a2cfc6d2c5ce940301798c16365232dafcb3 Mon Sep 17 00:00:00 2001 From: huangfeng Date: Mon, 8 Jan 2024 13:58:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4icd=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=8C=89=E7=B1=BB=E5=9E=8B=E9=85=8D=E7=BD=AE=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cac/controller/IcdConfigController.java | 16 +++- .../com/xydl/cac/entity/IcdConfigType.java | 74 +++++++++++++++++ .../com/xydl/cac/entity/IcdConfigTypeAtt.java | 39 +++++++++ .../xydl/cac/entity/IcdConfigTypeInst.java | 31 +++++++ .../IcdConfigTypeAttRepository.java | 17 ++++ .../IcdConfigTypeInstRepository.java | 17 ++++ .../repository/IcdConfigTypeRepository.java | 18 +++++ .../cac/service/IcdFileConfigService.java | 9 ++- .../impl/IcdFileConfigServiceImpl.java | 80 +++++++++++++------ .../java/com/xydl/cac/util/IcdXmlUtil.java | 29 ++++--- 10 files changed, 284 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/xydl/cac/entity/IcdConfigType.java create mode 100644 src/main/java/com/xydl/cac/entity/IcdConfigTypeAtt.java create mode 100644 src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java create mode 100644 src/main/java/com/xydl/cac/repository/IcdConfigTypeAttRepository.java create mode 100644 src/main/java/com/xydl/cac/repository/IcdConfigTypeInstRepository.java create mode 100644 src/main/java/com/xydl/cac/repository/IcdConfigTypeRepository.java diff --git a/src/main/java/com/xydl/cac/controller/IcdConfigController.java b/src/main/java/com/xydl/cac/controller/IcdConfigController.java index dd54395..d9e2d51 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.IcdFileConfig; +import com.xydl.cac.entity.IcdConfigType; +import com.xydl.cac.entity.IcdConfigTypeAtt; import com.xydl.cac.model.Response; import com.xydl.cac.service.DataService; import com.xydl.cac.service.IcdFileConfigService; @@ -42,8 +43,8 @@ public class IcdConfigController extends BasicController { @GetMapping("list") @ApiOperation("查询全部类型列表") - public Response> list(String iedName) throws Exception { - List result = configService.list(iedName); + public Response> list(String iedName) throws Exception { + List result = configService.list(iedName); return Response.success(result); } @@ -56,11 +57,18 @@ public class IcdConfigController extends BasicController { @PostMapping("update") @ApiOperation("更新ICD类型配置") - public Response update(@RequestBody IcdFileConfig item) { + public Response update(@RequestBody IcdConfigType item) throws Exception { configService.update(item); return Response.success("OK"); } + @PostMapping("updateAtt") + @ApiOperation("更新ICD类型属性配置") + public Response updateAtt(@RequestBody IcdConfigTypeAtt item) throws Exception { + configService.updateAtt(item); + return Response.success("OK"); + } + @PostMapping("delete") @ApiOperation("删除ICD类型配置") public Response delete(@Validated @NotNull(message = "ID不能为空!") Integer id) { diff --git a/src/main/java/com/xydl/cac/entity/IcdConfigType.java b/src/main/java/com/xydl/cac/entity/IcdConfigType.java new file mode 100644 index 0000000..b2bc03c --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/IcdConfigType.java @@ -0,0 +1,74 @@ +package com.xydl.cac.entity; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.LinkedHashMap; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "icd_config_type") +@ApiModel("ICD配置类型表") +public class IcdConfigType { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "ied_name") + private String iedName; + + @Column(name = "ldevice_inst") + private String ldeviceInst; + + @Column(name = "ln_class") + private String lnClass; + + @Column(name = "table_name") + private String tableName; + + @Transient + private LinkedHashMap attMap; + @Transient + private List attList; + + @Transient + private LinkedHashMap instMap; + @Transient + private List instList; + + public void addAtt(String doName, String lastname) { + if (attMap == null) { + attMap = new LinkedHashMap<>(); + } + if (!attMap.containsKey(doName)) { + IcdConfigTypeAtt item = IcdConfigTypeAtt.builder() + .doName(doName) + .lastName(lastname) + .build(); + attMap.put(doName, item); + } + } + + public void addInst(String inst) { + if (instMap == null) { + instMap = new LinkedHashMap<>(); + } + if (!instMap.containsKey(inst)) { + IcdConfigTypeInst item = IcdConfigTypeInst.builder() + .inst(inst) + .build(); + instMap.put(inst, item); + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/IcdConfigTypeAtt.java b/src/main/java/com/xydl/cac/entity/IcdConfigTypeAtt.java new file mode 100644 index 0000000..58fef02 --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/IcdConfigTypeAtt.java @@ -0,0 +1,39 @@ +package com.xydl.cac.entity; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "icd_config_type_att") +@ApiModel("ICD配置类型属性表") +public class IcdConfigTypeAtt { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "icd_config_type_id") + private Integer icdConfigTypeId; + + @Column(name = "do_name") + private String doName; + + @Column(name = "last_name") + private String lastName; + + @Column(name = "col_name") + private String colName; + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java b/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java new file mode 100644 index 0000000..ef036e2 --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/IcdConfigTypeInst.java @@ -0,0 +1,31 @@ +package com.xydl.cac.entity; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "icd_config_type_inst") +@ApiModel("ICD配置类型实例表") +public class IcdConfigTypeInst { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + + @Column(name = "icd_config_type_id") + private Integer icdConfigTypeId; + + @Column(name = "inst") + private String inst; + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/IcdConfigTypeAttRepository.java b/src/main/java/com/xydl/cac/repository/IcdConfigTypeAttRepository.java new file mode 100644 index 0000000..cd3432e --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/IcdConfigTypeAttRepository.java @@ -0,0 +1,17 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.IcdConfigTypeAtt; +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 IcdConfigTypeAttRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByIcdConfigTypeId(Integer icdConfigTypeId); + + void deleteByIcdConfigTypeId(Integer icdConfigTypeId); +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/repository/IcdConfigTypeInstRepository.java b/src/main/java/com/xydl/cac/repository/IcdConfigTypeInstRepository.java new file mode 100644 index 0000000..15b459b --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/IcdConfigTypeInstRepository.java @@ -0,0 +1,17 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.IcdConfigTypeInst; +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 IcdConfigTypeInstRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByIcdConfigTypeId(Integer icdConfigTypeId); + + void deleteByIcdConfigTypeId(Integer icdConfigTypeId); +} \ 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 new file mode 100644 index 0000000..8115ca3 --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/IcdConfigTypeRepository.java @@ -0,0 +1,18 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.IcdConfigType; +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 IcdConfigTypeRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByIedName(String iedName); + + List findByIedNameAndLdeviceInstAndLnClass(String iedName, String ldeviceInst, String lnClass); + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java index f5da924..220fd3d 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.IcdFileConfig; +import com.xydl.cac.entity.IcdConfigType; +import com.xydl.cac.entity.IcdConfigTypeAtt; import java.util.List; @@ -10,9 +11,11 @@ public interface IcdFileConfigService { List iedList(); - List list(String iedName) throws Exception; + List list(String iedName) throws Exception; - void update(IcdFileConfig item); + void update(IcdConfigType item) throws Exception; + + void updateAtt(IcdConfigTypeAtt item) throws Exception; void delete(Integer id); } 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 c2bd2dc..362a123 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -1,9 +1,7 @@ package com.xydl.cac.service.impl; -import com.xydl.cac.entity.IcdFileConfig; -import com.xydl.cac.entity.IcdFileConfigInst; -import com.xydl.cac.repository.IcdFileConfigInstRepository; -import com.xydl.cac.repository.IcdFileConfigRepository; +import com.xydl.cac.entity.*; +import com.xydl.cac.repository.*; import com.xydl.cac.service.IcdFileConfigService; import com.xydl.cac.util.IcdXmlUtil; import lombok.extern.slf4j.Slf4j; @@ -17,6 +15,7 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; +import java.util.Optional; @Service @Slf4j @@ -24,60 +23,93 @@ import java.util.List; public class IcdFileConfigServiceImpl implements IcdFileConfigService { @Resource - IcdFileConfigRepository repository; + IcdConfigTypeRepository repository; @Resource - IcdFileConfigInstRepository instRepository; + IcdConfigTypeAttRepository attRepository; + @Resource + IcdConfigTypeInstRepository instRepository; @Resource private JdbcTemplate jdbcTemplate; @Override public void upload(String xml) throws Exception { - LinkedHashMap result = IcdXmlUtil.loadIcdType(xml); - Collection configList = result.values(); - for (IcdFileConfig config : configList) { - List list = repository.findByIedNameAndLdeviceInstAndLnClassAndDoName( - config.getIedName(), config.getLdeviceInst(), config.getLnClass(), config.getDoName()); + LinkedHashMap result = IcdXmlUtil.loadIcdType(xml); + Collection configList = result.values(); + for (IcdConfigType config : configList) { + List list = repository.findByIedNameAndLdeviceInstAndLnClass( + config.getIedName(), config.getLdeviceInst(), config.getLnClass()); if (CollectionUtils.isEmpty(list)) { repository.save(config); - List instList = config.getInstList(); - for (IcdFileConfigInst item : instList) { - item.setConfigId(config.getId()); + + if (config.getAttMap() != null) { + Collection attList = config.getAttMap().values(); + for (IcdConfigTypeAtt item : attList) { + item.setIcdConfigTypeId(config.getId()); + } + attRepository.saveAll(attList); + } + + if (config.getInstMap() != null) { + Collection instList = config.getInstMap().values(); + for (IcdConfigTypeInst item : instList) { + item.setIcdConfigTypeId(config.getId()); + } + instRepository.saveAll(instList); } - instRepository.saveAll(instList); } } } @Override public List iedList() { - String sql = "SELECT DISTINCT ied_name FROM icd_file_config"; + String sql = "SELECT DISTINCT ied_name FROM icd_config_type"; List list = jdbcTemplate.queryForList(sql, String.class); return list; } @Override - public List list(String iedName) throws Exception { - List result; + public List list(String iedName) throws Exception { + List result; if (StringUtils.isNotBlank(iedName)) { result = repository.findByIedName(iedName); } else { result = repository.findAll(); } - for (IcdFileConfig item : result) { - List list = instRepository.findByConfigId(item.getId()); - item.setInstList(list); + for (IcdConfigType item : result) { + List atts = attRepository.findByIcdConfigTypeId(item.getId()); + item.setAttList(atts); + List insts = instRepository.findByIcdConfigTypeId(item.getId()); + item.setInstList(insts); } return result; } @Override - public void update(IcdFileConfig item) { - repository.save(item); + public void update(IcdConfigType item) throws Exception { + Optional optional = repository.findById(item.getId()); + if (!optional.isPresent()) { + throw new Exception("未找到该项"); + } + IcdConfigType r = optional.get(); + r.setTableName(item.getTableName()); + repository.save(r); + } + + @Override + public void updateAtt(IcdConfigTypeAtt item) throws Exception { + Optional optional = attRepository.findById(item.getId()); + if (!optional.isPresent()) { + throw new Exception("未找到该项"); + } + IcdConfigTypeAtt r = optional.get(); + r.setColName(item.getColName()); + attRepository.save(r); } @Override public void delete(Integer id) { - instRepository.deleteByConfigId(id); + instRepository.deleteByIcdConfigTypeId(id); + attRepository.deleteByIcdConfigTypeId(id); repository.deleteById(id); } diff --git a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java index 66746d2..1638db2 100644 --- a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java +++ b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java @@ -4,23 +4,23 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.xydl.cac.entity.IcdFileConfig; +import com.xydl.cac.entity.IcdConfigType; import org.apache.commons.lang3.StringUtils; import java.util.*; public class IcdXmlUtil { - public static LinkedHashMap loadIcdType(String xml) throws Exception { + public static LinkedHashMap loadIcdType(String xml) throws Exception { XmlMapper xmlMapper = XmlMapper.builder() .build(); JsonNode root = xmlMapper.readTree(xml); - LinkedHashMap result = processTypeRoot(root); + LinkedHashMap result = processTypeRoot(root); return result; } - private static LinkedHashMap processTypeRoot(JsonNode root) { - LinkedHashMap result = new LinkedHashMap<>(); + private static LinkedHashMap processTypeRoot(JsonNode root) { + LinkedHashMap result = new LinkedHashMap<>(); List iedList = findNodes(root, "IED"); for (JsonNode iedNode : iedList) { @@ -29,7 +29,7 @@ public class IcdXmlUtil { return result; } - private static void processIEDNode(JsonNode iedNode, LinkedHashMap result) { + private static void processIEDNode(JsonNode iedNode, LinkedHashMap result) { String iedName = iedNode.get("name").asText(); List devList = findNodes(iedNode, "LDevice"); @@ -38,8 +38,8 @@ public class IcdXmlUtil { } } - private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap result) { - String ldInst = deviceNode.get("inst").asText(); + private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap result) { + String ldeviceInst = deviceNode.get("inst").asText(); Map lnMap = buildLNMap(deviceNode); List fcdaList = findNodes(deviceNode, "FCDA"); @@ -52,21 +52,20 @@ public class IcdXmlUtil { JsonNode lnNode = lnMap.get(lnClass + lnInst); String dai = findLN_DOI_DAI(lnNode, doName); - String key = iedName + ldInst + "/" + lnClass + "/" + doName; + String key = iedName + ldeviceInst + "/" + lnClass; String param = fc + "$" + doName + "$" + dai; if ("MX".equals(fc)) { - IcdFileConfig config = result.get(key); + IcdConfigType config = result.get(key); if (config == null) { - config = IcdFileConfig.builder() + config = IcdConfigType.builder() .iedName(iedName) - .ldeviceInst(ldInst) + .ldeviceInst(ldeviceInst) .lnClass(lnClass) - .doName(doName) - .lastName(dai) .build(); result.put(key, config); } - config.addInst(lnInst, param); + config.addInst(lnInst); + config.addAtt(doName, dai); } } }