feat: 增加ConfigInst子项,以及对应的接口功能

dev
huangfeng 1 year ago
parent 666dc613fd
commit fefd41731e

@ -7,6 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Data @Data
@Builder @Builder
@ -34,10 +36,26 @@ public class IcdFileConfig {
@Column(name = "do_name") @Column(name = "do_name")
private String doName; private String doName;
@Column(name = "last_name")
private String lastName;
@Column(name = "table_name") @Column(name = "table_name")
private String tableName; private String tableName;
@Column(name = "col_name") @Column(name = "col_name")
private String colName; private String colName;
@Transient
private List<IcdFileConfigInst> instList;
public void addInst(String inst, String paramindex) {
if (instList == null) {
instList = new ArrayList<>();
}
IcdFileConfigInst item = IcdFileConfigInst.builder()
.inst(inst)
.paramindex(paramindex)
.build();
instList.add(item);
}
} }

@ -0,0 +1,34 @@
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_file_config_inst")
@ApiModel("ICD文件实例表")
public class IcdFileConfigInst {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "config_id")
private Integer configId;
@Column(name = "inst")
private String inst;
@Column(name = "paramindex")
private String paramindex;
}

@ -0,0 +1,18 @@
package com.xydl.cac.repository;
import com.xydl.cac.entity.IcdFileConfigInst;
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 IcdFileConfigInstRepository extends JpaRepository<IcdFileConfigInst, Integer>, JpaSpecificationExecutor<IcdFileConfigInst> {
List<IcdFileConfigInst> findByConfigId(Integer configId);
void deleteByConfigId(Integer configId);
}

@ -1,6 +1,8 @@
package com.xydl.cac.service.impl; package com.xydl.cac.service.impl;
import com.xydl.cac.entity.IcdFileConfig; 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.repository.IcdFileConfigRepository;
import com.xydl.cac.service.IcdFileConfigService; import com.xydl.cac.service.IcdFileConfigService;
import com.xydl.cac.util.IcdXmlUtil; import com.xydl.cac.util.IcdXmlUtil;
@ -22,6 +24,8 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
@Resource @Resource
IcdFileConfigRepository repository; IcdFileConfigRepository repository;
@Resource
IcdFileConfigInstRepository instRepository;
@Override @Override
public void upload(String xml) throws Exception { public void upload(String xml) throws Exception {
@ -32,17 +36,28 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
config.getIedName(), config.getLdeviceInst(), config.getLnClass(), config.getDoName()); config.getIedName(), config.getLdeviceInst(), config.getLnClass(), config.getDoName());
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
repository.save(config); repository.save(config);
List<IcdFileConfigInst> instList = config.getInstList();
for (IcdFileConfigInst item : instList) {
item.setConfigId(config.getId());
}
instRepository.saveAll(instList);
} }
} }
} }
@Override @Override
public List<IcdFileConfig> list(String iedName) throws Exception { public List<IcdFileConfig> list(String iedName) throws Exception {
List<IcdFileConfig> result;
if (StringUtils.isNotBlank(iedName)) { if (StringUtils.isNotBlank(iedName)) {
return repository.findByIedName(iedName); result = repository.findByIedName(iedName);
} else { } else {
return repository.findAll(); result = repository.findAll();
}
for (IcdFileConfig item : result) {
List<IcdFileConfigInst> list = instRepository.findByConfigId(item.getId());
item.setInstList(list);
} }
return result;
} }
@Override @Override
@ -52,6 +67,7 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
@Override @Override
public void delete(Integer id) { public void delete(Integer id) {
instRepository.deleteByConfigId(id);
repository.deleteById(id); repository.deleteById(id);
} }

@ -21,21 +21,26 @@ public class IcdXmlUtil {
private static LinkedHashMap<String, IcdFileConfig> processTypeRoot(JsonNode root) { private static LinkedHashMap<String, IcdFileConfig> processTypeRoot(JsonNode root) {
LinkedHashMap<String, IcdFileConfig> result = new LinkedHashMap<>(); LinkedHashMap<String, IcdFileConfig> result = new LinkedHashMap<>();
List<JsonNode> iedList = findNodes(root, "IED");
List<JsonNode> iedList = findNodes(root, "IED");
for (JsonNode iedNode : iedList) { for (JsonNode iedNode : iedList) {
String iedName = iedNode.get("name").asText(); processIEDNode(iedNode, result);
List<JsonNode> devList = findNodes(iedNode, "LDevice");
for (JsonNode dev : devList) {
processTypeDeviceNode(dev, iedName, result);
}
} }
return result; return result;
} }
private static void processIEDNode(JsonNode iedNode, LinkedHashMap<String, IcdFileConfig> result) {
String iedName = iedNode.get("name").asText();
List<JsonNode> devList = findNodes(iedNode, "LDevice");
for (JsonNode dev : devList) {
processTypeDeviceNode(dev, iedName, result);
}
}
private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap<String, IcdFileConfig> result) { private static void processTypeDeviceNode(JsonNode deviceNode, String iedName, LinkedHashMap<String, IcdFileConfig> result) {
String inst = deviceNode.get("inst").asText(); String ldInst = deviceNode.get("inst").asText();
Map<String, JsonNode> lnMap = buildLNMap(deviceNode);
List<JsonNode> fcdaList = findNodes(deviceNode, "FCDA"); List<JsonNode> fcdaList = findNodes(deviceNode, "FCDA");
for (JsonNode fcdaNode : fcdaList) { for (JsonNode fcdaNode : fcdaList) {
@ -44,15 +49,24 @@ public class IcdXmlUtil {
String doName = fcdaNode.get("doName").asText(); String doName = fcdaNode.get("doName").asText();
String fc = fcdaNode.get("fc").asText(); String fc = fcdaNode.get("fc").asText();
String key = iedName + "/" + inst + "/" + lnClass + "/" + doName; JsonNode lnNode = lnMap.get(lnClass + lnInst);
if (!result.containsKey(key) && "MX".equals(fc)) { String dai = findLN_DOI_DAI(lnNode, doName);
IcdFileConfig config = IcdFileConfig.builder()
.iedName(iedName) String key = iedName + ldInst + "/" + lnClass + "/" + doName;
.ldeviceInst(inst) String param = iedName + ldInst + "/" + lnClass + lnInst + "$" + fc + "$" + doName + "$" + dai;
.lnClass(lnClass) if ("MX".equals(fc)) {
.doName(doName) IcdFileConfig config = result.get(key);
.build(); if (config == null) {
result.put(key, config); config = IcdFileConfig.builder()
.iedName(iedName)
.ldeviceInst(ldInst)
.lnClass(lnClass)
.doName(doName)
.lastName(dai)
.build();
result.put(key, config);
}
config.addInst(lnInst, param);
} }
} }
} }

Loading…
Cancel
Save