feat: 增加ied数据单独保存和关联处理

dev
huangfeng 8 months ago
parent 1b17bb4f2a
commit 29234aa17b

@ -27,17 +27,9 @@ public class IcdConfigType {
@Column(name = "id") @Column(name = "id")
private Integer id; private Integer id;
@ApiModelProperty(name = "ICD文件id") @ApiModelProperty(name = "Iedid")
@Column(name = "icd_file_id") @Column(name = "icd_ied_id")
private Integer icdFileId; private Integer icdIedId;
@ApiModelProperty(name = "ip")
@Column(name = "ip")
private String ip;
@ApiModelProperty(name = "OSI-AP-Title")
@Column(name = "ap_title")
private String apTitle;
@ApiModelProperty(name = "IED名称") @ApiModelProperty(name = "IED名称")
@Column(name = "ied_name") @Column(name = "ied_name")

@ -36,4 +36,6 @@ public class IcdFile {
@Transient @Transient
private List<IcdConfigType> configList; private List<IcdConfigType> configList;
@Transient
private List<IcdIed> iedList;
} }

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

@ -11,6 +11,8 @@ import java.util.List;
@Repository @Repository
public interface IcdConfigTypeRepository extends JpaRepository<IcdConfigType, Integer>, JpaSpecificationExecutor<IcdConfigType> { public interface IcdConfigTypeRepository extends JpaRepository<IcdConfigType, Integer>, JpaSpecificationExecutor<IcdConfigType> {
List<IcdConfigType> findByIcdIedId(Integer iedId);
List<IcdConfigType> findByIedName(String iedName); List<IcdConfigType> findByIedName(String iedName);
List<IcdConfigType> findByIedNameAndLdeviceInstAndLnClass(String iedName, String ldeviceInst, String lnClass); List<IcdConfigType> findByIedNameAndLdeviceInstAndLnClass(String iedName, String ldeviceInst, String lnClass);

@ -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<IcdIed, Integer>, JpaSpecificationExecutor<IcdIed> {
List<IcdIed> findByIcdFileId(String fileId);
}

@ -25,6 +25,8 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
@Resource @Resource
IcdFileRepository fileRepository; IcdFileRepository fileRepository;
@Resource @Resource
IcdIedRepository iedRepository;
@Resource
IcdConfigTypeRepository configRepository; IcdConfigTypeRepository configRepository;
@Resource @Resource
IcdConfigTypeAttRepository attRepository; IcdConfigTypeAttRepository attRepository;
@ -46,8 +48,15 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
IcdFile icdFile = IcdXmlUtil.loadIcdType(xml); IcdFile icdFile = IcdXmlUtil.loadIcdType(xml);
icdFile.setMd5(md5); icdFile.setMd5(md5);
fileRepository.save(icdFile); fileRepository.save(icdFile);
for (IcdIed ied : icdFile.getIedList()) {
ied.setIcdFileId(icdFile.getId());
iedRepository.save(ied);
}
for (IcdConfigType config : icdFile.getConfigList()) { 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); configRepository.save(config);
attRepository.deleteByIcdConfigTypeId(config.getId()); attRepository.deleteByIcdConfigTypeId(config.getId());
@ -71,6 +80,15 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
} }
} }
private IcdIed findIcdIed(List<IcdIed> list, String name) {
for (IcdIed ied : list) {
if (ied.getName().equalsIgnoreCase(name)) {
return ied;
}
}
return null;
}
@Override @Override
public List<String> iedList() { public List<String> iedList() {
String sql = "SELECT DISTINCT ied_name FROM icd_config_type"; String sql = "SELECT DISTINCT ied_name FROM icd_config_type";
@ -152,6 +170,7 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
attRepository.deleteAll(); attRepository.deleteAll();
configRepository.deleteAll(); configRepository.deleteAll();
fileRepository.deleteAll(); fileRepository.deleteAll();
iedRepository.deleteAll();
} }
@Override @Override

@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.xydl.cac.entity.IcdConfigType; import com.xydl.cac.entity.IcdConfigType;
import com.xydl.cac.entity.IcdFile; import com.xydl.cac.entity.IcdFile;
import com.xydl.cac.entity.IcdIed;
import com.xydl.cac.exception.BusinessException; import com.xydl.cac.exception.BusinessException;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -26,60 +27,61 @@ public class IcdXmlUtil {
IcdFile icdFile = IcdFile.builder() IcdFile icdFile = IcdFile.builder()
.xml(xml) .xml(xml)
.build(); .build();
LinkedHashMap<String, IcdConfigType> iedMap = processTypeRoot(root); processTypeRoot(root, icdFile);
icdFile.setConfigList(new ArrayList<>(iedMap.values()));
return icdFile; return icdFile;
} }
private static LinkedHashMap<String, IcdConfigType> processTypeRoot(JsonNode root) { private static void processTypeRoot(JsonNode root, IcdFile icdFile) {
LinkedHashMap<String, IcdConfigType> iedMap = new LinkedHashMap<>(); LinkedHashMap<String, IcdConfigType> configMap = new LinkedHashMap<>();
Map<String, JsonNode> mapLNodeType = buildLNodeTypeMap(root); Map<String, JsonNode> mapLNodeType = buildLNodeTypeMap(root);
Map<String, JsonNode> mapDOType = buildDOTypeMap(root); Map<String, JsonNode> mapDOType = buildDOTypeMap(root);
Map<String, JsonNode> mapDAType = buildDATypeMap(root); Map<String, JsonNode> mapDAType = buildDATypeMap(root);
List<JsonNode> iedList = findNodes(root, "IED"); List<JsonNode> iedNodeList = findNodes(root, "IED");
for (JsonNode iedNode : iedList) { for (JsonNode iedNode : iedNodeList) {
processIEDNode(iedMap, iedNode, processIEDNode(configMap, iedNode,
mapLNodeType, mapDOType, mapDAType); mapLNodeType, mapDOType, mapDAType);
} }
icdFile.setConfigList(new ArrayList<>(configMap.values()));
List<IcdIed> iedList = new ArrayList<>();
List<JsonNode> apList = findNodes(root, "ConnectedAP"); List<JsonNode> apList = findNodes(root, "ConnectedAP");
for (JsonNode apNode : apList) { for (JsonNode apNode : apList) {
String iedName = apNode.get("iedName").asText(); IcdIed ied = processAPNode(apNode);
IcdConfigType config = iedMap.get(iedName); iedList.add(ied);
if (config != null) {
processAPNode(apNode, config);
}
} }
icdFile.setIedList(iedList);
return iedMap;
} }
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<JsonNode> pList = findNodes(apNode, "P"); List<JsonNode> pList = findNodes(apNode, "P");
for (JsonNode pNode : pList) { for (JsonNode pNode : pList) {
String type = pNode.get("type").asText(); String type = pNode.get("type").asText();
if ("IP".equalsIgnoreCase(type)) { if ("IP".equalsIgnoreCase(type)) {
config.setIp(pNode.asText()); ied.setIp(pNode.get("").asText());
} else if ("OSI-AP-Title".equalsIgnoreCase(type)) { } else if ("OSI-AP-Title".equalsIgnoreCase(type)) {
config.setApTitle(pNode.asText()); ied.setApTitle(pNode.get("").asText());
} }
} }
return ied;
} }
private static void processIEDNode(LinkedHashMap<String, IcdConfigType> iedMap, JsonNode iedNode, private static void processIEDNode(LinkedHashMap<String, IcdConfigType> configMap, JsonNode iedNode,
Map<String, JsonNode> mapLNodeType, Map<String, JsonNode> mapDOType, Map<String, JsonNode> mapDAType) { Map<String, JsonNode> mapLNodeType, Map<String, JsonNode> mapDOType, Map<String, JsonNode> mapDAType) {
String iedName = iedNode.get("name").asText(); String iedName = iedNode.get("name").asText();
List<JsonNode> devList = findNodes(iedNode, "LDevice"); List<JsonNode> devList = findNodes(iedNode, "LDevice");
for (JsonNode dev : devList) { for (JsonNode dev : devList) {
processTypeDeviceNode(iedMap, iedName, dev, processTypeDeviceNode(configMap, iedName, dev,
mapLNodeType, mapDOType, mapDAType); mapLNodeType, mapDOType, mapDAType);
} }
} }
private static void processTypeDeviceNode(LinkedHashMap<String, IcdConfigType> iedMap, String iedName, JsonNode deviceNode, private static void processTypeDeviceNode(LinkedHashMap<String, IcdConfigType> configMap, String iedName, JsonNode deviceNode,
Map<String, JsonNode> mapLNodeType, Map<String, JsonNode> mapDOType, Map<String, JsonNode> mapDAType) { Map<String, JsonNode> mapLNodeType, Map<String, JsonNode> mapDOType, Map<String, JsonNode> mapDAType) {
String ldeviceInst = deviceNode.get("inst").asText(); String ldeviceInst = deviceNode.get("inst").asText();
Map<String, JsonNode> mapLN = buildLNMap(deviceNode); Map<String, JsonNode> mapLN = buildLNMap(deviceNode);
@ -111,7 +113,7 @@ public class IcdXmlUtil {
String key = iedName + ldeviceInst + "/" + lnClass; String key = iedName + ldeviceInst + "/" + lnClass;
if ("MX".equals(fc)) { if ("MX".equals(fc)) {
IcdConfigType config = iedMap.get(key); IcdConfigType config = configMap.get(key);
if (config == null) { if (config == null) {
config = IcdConfigType.builder() config = IcdConfigType.builder()
.iedName(iedName) .iedName(iedName)
@ -119,20 +121,20 @@ public class IcdXmlUtil {
.lnClass(lnClass) .lnClass(lnClass)
.lnDesc(lnDesc) .lnDesc(lnDesc)
.build(); .build();
iedMap.put(key, config); configMap.put(key, config);
} }
String param = fc + "$" + doName + "$" + lastname; String param = fc + "$" + doName + "$" + lastname;
config.addInst(lnInst); config.addInst(lnInst);
config.addAtt(doName, doDesc, param, lnInst); config.addAtt(doName, doDesc, param, lnInst);
} else if ("ST".equals(fc)) { } else if ("ST".equals(fc)) {
IcdConfigType config = iedMap.get(key); IcdConfigType config = configMap.get(key);
if (config == null) { if (config == null) {
config = IcdConfigType.builder() config = IcdConfigType.builder()
.iedName(iedName) .iedName(iedName)
.ldeviceInst(ldeviceInst) .ldeviceInst(ldeviceInst)
.lnClass(lnClass) .lnClass(lnClass)
.build(); .build();
iedMap.put(key, config); configMap.put(key, config);
} }
String param = fc + "$" + doName + "$" + lastname; String param = fc + "$" + doName + "$" + lastname;
config.addInst(lnInst); config.addInst(lnInst);

Loading…
Cancel
Save