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

dev
huangfeng 1 year ago
parent 666dc613fd
commit fefd41731e

@ -7,6 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@ -34,10 +36,26 @@ public class IcdFileConfig {
@Column(name = "do_name")
private String doName;
@Column(name = "last_name")
private String lastName;
@Column(name = "table_name")
private String tableName;
@Column(name = "col_name")
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;
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.service.IcdFileConfigService;
import com.xydl.cac.util.IcdXmlUtil;
@ -22,6 +24,8 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
@Resource
IcdFileConfigRepository repository;
@Resource
IcdFileConfigInstRepository instRepository;
@Override
public void upload(String xml) throws Exception {
@ -32,17 +36,28 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
config.getIedName(), config.getLdeviceInst(), config.getLnClass(), config.getDoName());
if (CollectionUtils.isEmpty(list)) {
repository.save(config);
List<IcdFileConfigInst> instList = config.getInstList();
for (IcdFileConfigInst item : instList) {
item.setConfigId(config.getId());
}
instRepository.saveAll(instList);
}
}
}
@Override
public List<IcdFileConfig> list(String iedName) throws Exception {
List<IcdFileConfig> result;
if (StringUtils.isNotBlank(iedName)) {
return repository.findByIedName(iedName);
result = repository.findByIedName(iedName);
} else {
return repository.findAll();
result = repository.findAll();
}
for (IcdFileConfig item : result) {
List<IcdFileConfigInst> list = instRepository.findByConfigId(item.getId());
item.setInstList(list);
}
return result;
}
@Override
@ -52,6 +67,7 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService {
@Override
public void delete(Integer id) {
instRepository.deleteByConfigId(id);
repository.deleteById(id);
}

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