feat: 调整icd文件按类型配置的功能

haikang
huangfeng 1 year ago
parent c2fc6c974b
commit eb55a2cfc6

@ -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<IcdFileConfig>> list(String iedName) throws Exception {
List<IcdFileConfig> result = configService.list(iedName);
public Response<List<IcdConfigType>> list(String iedName) throws Exception {
List<IcdConfigType> result = configService.list(iedName);
return Response.success(result);
}
@ -56,11 +57,18 @@ public class IcdConfigController extends BasicController {
@PostMapping("update")
@ApiOperation("更新ICD类型配置")
public Response<String> update(@RequestBody IcdFileConfig item) {
public Response<String> update(@RequestBody IcdConfigType item) throws Exception {
configService.update(item);
return Response.success("OK");
}
@PostMapping("updateAtt")
@ApiOperation("更新ICD类型属性配置")
public Response<String> updateAtt(@RequestBody IcdConfigTypeAtt item) throws Exception {
configService.updateAtt(item);
return Response.success("OK");
}
@PostMapping("delete")
@ApiOperation("删除ICD类型配置")
public Response<String> delete(@Validated @NotNull(message = "ID不能为空!") Integer id) {

@ -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<String, IcdConfigTypeAtt> attMap;
@Transient
private List<IcdConfigTypeAtt> attList;
@Transient
private LinkedHashMap<String, IcdConfigTypeInst> instMap;
@Transient
private List<IcdConfigTypeInst> 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);
}
}
}

@ -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;
}

@ -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;
}

@ -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<IcdConfigTypeAtt, Integer>, JpaSpecificationExecutor<IcdConfigTypeAtt> {
List<IcdConfigTypeAtt> findByIcdConfigTypeId(Integer icdConfigTypeId);
void deleteByIcdConfigTypeId(Integer icdConfigTypeId);
}

@ -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<IcdConfigTypeInst, Integer>, JpaSpecificationExecutor<IcdConfigTypeInst> {
List<IcdConfigTypeInst> findByIcdConfigTypeId(Integer icdConfigTypeId);
void deleteByIcdConfigTypeId(Integer icdConfigTypeId);
}

@ -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<IcdConfigType, Integer>, JpaSpecificationExecutor<IcdConfigType> {
List<IcdConfigType> findByIedName(String iedName);
List<IcdConfigType> findByIedNameAndLdeviceInstAndLnClass(String iedName, String ldeviceInst, String lnClass);
}

@ -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<String> iedList();
List<IcdFileConfig> list(String iedName) throws Exception;
List<IcdConfigType> 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);
}

@ -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<String, IcdFileConfig> result = IcdXmlUtil.loadIcdType(xml);
Collection<IcdFileConfig> configList = result.values();
for (IcdFileConfig config : configList) {
List<IcdFileConfig> list = repository.findByIedNameAndLdeviceInstAndLnClassAndDoName(
config.getIedName(), config.getLdeviceInst(), config.getLnClass(), config.getDoName());
LinkedHashMap<String, IcdConfigType> result = IcdXmlUtil.loadIcdType(xml);
Collection<IcdConfigType> configList = result.values();
for (IcdConfigType config : configList) {
List<IcdConfigType> list = repository.findByIedNameAndLdeviceInstAndLnClass(
config.getIedName(), config.getLdeviceInst(), config.getLnClass());
if (CollectionUtils.isEmpty(list)) {
repository.save(config);
List<IcdFileConfigInst> instList = config.getInstList();
for (IcdFileConfigInst item : instList) {
item.setConfigId(config.getId());
if (config.getAttMap() != null) {
Collection<IcdConfigTypeAtt> attList = config.getAttMap().values();
for (IcdConfigTypeAtt item : attList) {
item.setIcdConfigTypeId(config.getId());
}
attRepository.saveAll(attList);
}
if (config.getInstMap() != null) {
Collection<IcdConfigTypeInst> instList = config.getInstMap().values();
for (IcdConfigTypeInst item : instList) {
item.setIcdConfigTypeId(config.getId());
}
instRepository.saveAll(instList);
}
instRepository.saveAll(instList);
}
}
}
@Override
public List<String> iedList() {
String sql = "SELECT DISTINCT ied_name FROM icd_file_config";
String sql = "SELECT DISTINCT ied_name FROM icd_config_type";
List<String> list = jdbcTemplate.queryForList(sql, String.class);
return list;
}
@Override
public List<IcdFileConfig> list(String iedName) throws Exception {
List<IcdFileConfig> result;
public List<IcdConfigType> list(String iedName) throws Exception {
List<IcdConfigType> result;
if (StringUtils.isNotBlank(iedName)) {
result = repository.findByIedName(iedName);
} else {
result = repository.findAll();
}
for (IcdFileConfig item : result) {
List<IcdFileConfigInst> list = instRepository.findByConfigId(item.getId());
item.setInstList(list);
for (IcdConfigType item : result) {
List<IcdConfigTypeAtt> atts = attRepository.findByIcdConfigTypeId(item.getId());
item.setAttList(atts);
List<IcdConfigTypeInst> 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<IcdConfigType> 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<IcdConfigTypeAtt> 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);
}

@ -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<String, IcdFileConfig> loadIcdType(String xml) throws Exception {
public static LinkedHashMap<String, IcdConfigType> loadIcdType(String xml) throws Exception {
XmlMapper xmlMapper = XmlMapper.builder()
.build();
JsonNode root = xmlMapper.readTree(xml);
LinkedHashMap<String, IcdFileConfig> result = processTypeRoot(root);
LinkedHashMap<String, IcdConfigType> result = processTypeRoot(root);
return result;
}
private static LinkedHashMap<String, IcdFileConfig> processTypeRoot(JsonNode root) {
LinkedHashMap<String, IcdFileConfig> result = new LinkedHashMap<>();
private static LinkedHashMap<String, IcdConfigType> processTypeRoot(JsonNode root) {
LinkedHashMap<String, IcdConfigType> result = new LinkedHashMap<>();
List<JsonNode> iedList = findNodes(root, "IED");
for (JsonNode iedNode : iedList) {
@ -29,7 +29,7 @@ public class IcdXmlUtil {
return result;
}
private static void processIEDNode(JsonNode iedNode, LinkedHashMap<String, IcdFileConfig> result) {
private static void processIEDNode(JsonNode iedNode, LinkedHashMap<String, IcdConfigType> result) {
String iedName = iedNode.get("name").asText();
List<JsonNode> devList = findNodes(iedNode, "LDevice");
@ -38,8 +38,8 @@ public class IcdXmlUtil {
}
}
private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap<String, IcdFileConfig> result) {
String ldInst = deviceNode.get("inst").asText();
private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap<String, IcdConfigType> result) {
String ldeviceInst = deviceNode.get("inst").asText();
Map<String, JsonNode> lnMap = buildLNMap(deviceNode);
List<JsonNode> 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);
}
}
}

Loading…
Cancel
Save