diff --git a/sql/init.sql b/sql/init.sql index d561993..a78989d 100644 --- a/sql/init.sql +++ b/sql/init.sql @@ -4,8 +4,17 @@ CREATE TABLE `icd_file_config` ( `ldevice_inst` varchar(45) NOT NULL, `ln_class` varchar(45) NOT NULL, `do_name` varchar(45) NOT NULL, + `last_name` varchar(45) DEFAULT NULL, `table_name` varchar(45) DEFAULT NULL, `col_name` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idxKey` (`ied_name`,`ldevice_inst`,`ln_class`,`do_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE `icd_file_config_inst` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `config_id` int(11) NOT NULL, + `inst` varchar(45) DEFAULT NULL, + `paramindex` varchar(200) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idxConfigid` (`config_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/src/main/java/com/xydl/cac/controller/IcdConfigController.java b/src/main/java/com/xydl/cac/controller/IcdConfigController.java index aed7712..a8a152c 100644 --- a/src/main/java/com/xydl/cac/controller/IcdConfigController.java +++ b/src/main/java/com/xydl/cac/controller/IcdConfigController.java @@ -48,6 +48,17 @@ public class IcdConfigController extends BasicController { } } + @GetMapping("iedList") + @ApiOperation("查询IED列表") + public Response> iedList() { + try { + List result = configService.iedList(); + return Response.success(result); + } catch (Exception ex) { + return Response.fail(ex.getMessage()); + } + } + @PostMapping("update") @ApiOperation("更新ICD类型配置") public Response update(@RequestBody IcdFileConfig item) { diff --git a/src/main/java/com/xydl/cac/controller/IcdController.java b/src/main/java/com/xydl/cac/controller/IcdController.java deleted file mode 100644 index 8f4b5b4..0000000 --- a/src/main/java/com/xydl/cac/controller/IcdController.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.xydl.cac.controller; - -import com.xydl.cac.model.Response; -import com.xydl.cac.service.IcdService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.annotation.Resource; -import java.util.List; - -@RestController -@Api(tags = {"Icd相关接口"}) -@RequestMapping("icd") -@Slf4j -public class IcdController extends BasicController { - - @Resource - IcdService service; - - @PostMapping("process") - @ApiOperation("处理icd文件") - public Response> process(@RequestParam("file") MultipartFile file) throws Exception { - if (file != null && file.getInputStream() != null) { - List paramList = service.loadXml(file.getInputStream()); - return Response.success(paramList); - } else { - return Response.fail("缺少上传文件"); - } - } - -} diff --git a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java index 383edf9..f5da924 100644 --- a/src/main/java/com/xydl/cac/service/IcdFileConfigService.java +++ b/src/main/java/com/xydl/cac/service/IcdFileConfigService.java @@ -8,6 +8,8 @@ public interface IcdFileConfigService { void upload(String xml) throws Exception; + List iedList(); + List list(String iedName) throws Exception; void update(IcdFileConfig item); diff --git a/src/main/java/com/xydl/cac/service/IcdService.java b/src/main/java/com/xydl/cac/service/IcdService.java deleted file mode 100644 index 752b60f..0000000 --- a/src/main/java/com/xydl/cac/service/IcdService.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.xydl.cac.service; - -import java.io.InputStream; -import java.util.List; - -public interface IcdService { - List loadXml(InputStream input) throws Exception; - - List loadXml(String xml) throws Exception; -} 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 5eb3be7..c2bd2dc 100644 --- a/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/IcdFileConfigServiceImpl.java @@ -8,6 +8,7 @@ import com.xydl.cac.service.IcdFileConfigService; import com.xydl.cac.util.IcdXmlUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -26,6 +27,8 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { IcdFileConfigRepository repository; @Resource IcdFileConfigInstRepository instRepository; + @Resource + private JdbcTemplate jdbcTemplate; @Override public void upload(String xml) throws Exception { @@ -45,6 +48,13 @@ public class IcdFileConfigServiceImpl implements IcdFileConfigService { } } + @Override + public List iedList() { + String sql = "SELECT DISTINCT ied_name FROM icd_file_config"; + List list = jdbcTemplate.queryForList(sql, String.class); + return list; + } + @Override public List list(String iedName) throws Exception { List result; diff --git a/src/main/java/com/xydl/cac/service/impl/IcdServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/IcdServiceImpl.java deleted file mode 100644 index 6d2668c..0000000 --- a/src/main/java/com/xydl/cac/service/impl/IcdServiceImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.xydl.cac.service.impl; - -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.service.IcdService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import java.io.InputStream; -import java.util.*; - -@Service -@Slf4j -public class IcdServiceImpl implements IcdService { - - @Override - public List loadXml(InputStream input) throws Exception { - XmlMapper xmlMapper = XmlMapper.builder() - .build(); - JsonNode root = xmlMapper.readTree(input); - List paramList = this.processRoot(root); - return paramList; - } - - @Override - public List loadXml(String xml) throws Exception { - XmlMapper xmlMapper = XmlMapper.builder() - .build(); - JsonNode root = xmlMapper.readTree(xml); - List paramList = this.processRoot(root); - return paramList; - } - - private List processRoot(JsonNode root) { - List paramList = new ArrayList<>(); - List iedList = this.findNodes(root, "IED"); - - for (JsonNode iedNode : iedList) { - String iedName = iedNode.get("name").asText(); - - List devList = this.findNodes(iedNode, "LDevice"); - for (JsonNode dev : devList) { - this.processDeviceNode(dev, iedName, paramList); - } - } - return paramList; - } - - private void processDeviceNode(JsonNode deviceNode, String iedName, List paramList) { - String inst = deviceNode.get("inst").asText(); - Map lnMap = this.buildLNMap(deviceNode); - - List fcdaList = this.findNodes(deviceNode, "FCDA"); - for (JsonNode fcdaNode : fcdaList) { - String lnClass = fcdaNode.get("lnClass").asText(); - String lnInst = fcdaNode.get("lnInst").asText(); - String doName = fcdaNode.get("doName").asText(); - String fc = fcdaNode.get("fc").asText(); - - JsonNode lnNode = lnMap.get(lnClass + lnInst); - String dai = this.findLN_DOI_DAI(lnNode, doName); - String param = iedName + inst + "/" + lnClass + lnInst + "$" + fc + "$" + doName + "$" + dai; - paramList.add(param); - } - } - - private Map buildLNMap(JsonNode deviceNode) { - Map map = new HashMap<>(); - List lnList = this.findNodes(deviceNode, "LN"); - for (JsonNode lnNode : lnList) { - String lnClass = lnNode.get("lnClass").asText(); - String inst = lnNode.get("inst").asText(); - map.put(lnClass + inst, lnNode); - } - return map; - } - - private String findLN_DOI_DAI(JsonNode lnNode, String doName) { - String result = ""; - List doiList = this.findNodes(lnNode, "DOI"); - for (JsonNode doiNode : doiList) { - String doiName = doiNode.get("name").asText(); - if (doiName.equals(doName)) { - JsonNode pnode = doiNode; - List sdiList = this.findNodes(doiNode, "SDI"); - if (sdiList.size() > 0) { - JsonNode sdiNode = sdiList.get(0); - result = sdiNode.get("name").asText(); - pnode = sdiNode; - } - List daiList = this.findNodes(pnode, "DAI"); - if (daiList.size() > 0) { - JsonNode daiNode = daiList.get(0); - String daiName = daiNode.get("name").asText(); - if (StringUtils.isNotBlank(result)) { - result = result + "$" + daiName; - } else { - result = daiName; - } - } - break; - } - } - return result; - } - - private List findNodes(JsonNode root, String fieldName) { - List result = new ArrayList<>(); - List list = root.findValues(fieldName); - for (JsonNode node : list) { - if (node instanceof ObjectNode) { - result.add(node); - } - if (node instanceof ArrayNode) { - ArrayNode array = (ArrayNode) node; - Iterator elements = array.elements(); - while (elements.hasNext()) { - JsonNode item = elements.next(); - result.add(item); - } - } - } - return result; - } -}