From 7ff59faf9426b82ec399747ecae406e2147eb5cb Mon Sep 17 00:00:00 2001 From: huangfeng Date: Tue, 9 Jan 2024 11:04:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cac/controller/ParamBindController.java | 9 +++ .../com/xydl/cac/entity/Rptparamindex.java | 46 ++++++++++++ .../java/com/xydl/cac/model/BindingModel.java | 16 +++++ .../repository/RptparamindexRepository.java | 12 ++++ .../xydl/cac/service/ParamBindService.java | 4 ++ .../service/impl/ParamBindServiceImpl.java | 70 ++++++++++++++++++- .../java/com/xydl/cac/util/IcdXmlUtil.java | 2 +- 7 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/xydl/cac/entity/Rptparamindex.java create mode 100644 src/main/java/com/xydl/cac/model/BindingModel.java create mode 100644 src/main/java/com/xydl/cac/repository/RptparamindexRepository.java diff --git a/src/main/java/com/xydl/cac/controller/ParamBindController.java b/src/main/java/com/xydl/cac/controller/ParamBindController.java index a0161cb..387b098 100644 --- a/src/main/java/com/xydl/cac/controller/ParamBindController.java +++ b/src/main/java/com/xydl/cac/controller/ParamBindController.java @@ -2,6 +2,8 @@ package com.xydl.cac.controller; import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.IcdConfigTypeInst; +import com.xydl.cac.entity.Rptparamindex; +import com.xydl.cac.model.BindingModel; import com.xydl.cac.model.Response; import com.xydl.cac.service.ParamBindService; import io.swagger.annotations.Api; @@ -38,4 +40,11 @@ public class ParamBindController extends BasicController { return Response.success(result); } + @PostMapping("preview") + @ApiOperation("预览") + public Response> preview(@Validated @RequestBody BindingModel item) throws Exception { + List result = bindService.preview(item); + return Response.success(result); + } + } diff --git a/src/main/java/com/xydl/cac/entity/Rptparamindex.java b/src/main/java/com/xydl/cac/entity/Rptparamindex.java new file mode 100644 index 0000000..e5ca887 --- /dev/null +++ b/src/main/java/com/xydl/cac/entity/Rptparamindex.java @@ -0,0 +1,46 @@ +package com.xydl.cac.entity; + +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.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Entity +@Table(name = "rptparamindex") +@ApiModel("绑定关系表") +public class Rptparamindex { + + @Id + @ApiModelProperty("61850对象参引") + @Column(name = "paramindex") + private String paramindex; + + @ApiModelProperty("61850对象id") + @Column(name = "objid") + private Integer objid; + + @ApiModelProperty("监测设备id") + @Column(name = "eqmid") + private Integer eqmid; + + @Column(name = "tablename") + private String tablename; + + @Column(name = "colname") + private String colname; + + @Column(name = "phase") + private String phase; + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/model/BindingModel.java b/src/main/java/com/xydl/cac/model/BindingModel.java new file mode 100644 index 0000000..b8b06ae --- /dev/null +++ b/src/main/java/com/xydl/cac/model/BindingModel.java @@ -0,0 +1,16 @@ +package com.xydl.cac.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class BindingModel { + @NotNull(message = "eqmid不能为空") + @ApiModelProperty("eqmid") + Integer eqmid; + @NotNull(message = "逻辑设备实例的Id不能为空") + @ApiModelProperty("逻辑设备实例的Id") + Integer bindingId; +} diff --git a/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java b/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java new file mode 100644 index 0000000..48022cc --- /dev/null +++ b/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java @@ -0,0 +1,12 @@ +package com.xydl.cac.repository; + +import com.xydl.cac.entity.Rptparamindex; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + + +@Repository +public interface RptparamindexRepository extends JpaRepository, JpaSpecificationExecutor { + +} \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/ParamBindService.java b/src/main/java/com/xydl/cac/service/ParamBindService.java index fea8f02..f04fa20 100644 --- a/src/main/java/com/xydl/cac/service/ParamBindService.java +++ b/src/main/java/com/xydl/cac/service/ParamBindService.java @@ -2,6 +2,8 @@ package com.xydl.cac.service; import com.xydl.cac.entity.Bdz; import com.xydl.cac.entity.IcdConfigTypeInst; +import com.xydl.cac.entity.Rptparamindex; +import com.xydl.cac.model.BindingModel; import java.util.List; @@ -10,4 +12,6 @@ public interface ParamBindService { List getTree() throws Exception; List instList(String iedName); + + List preview(BindingModel item) throws Exception; } diff --git a/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java index ee32568..1b6e3ba 100644 --- a/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java +++ b/src/main/java/com/xydl/cac/service/impl/ParamBindServiceImpl.java @@ -1,6 +1,7 @@ package com.xydl.cac.service.impl; import com.xydl.cac.entity.*; +import com.xydl.cac.model.BindingModel; import com.xydl.cac.repository.*; import com.xydl.cac.service.ParamBindService; import lombok.extern.slf4j.Slf4j; @@ -11,6 +12,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service @Slf4j @@ -28,7 +30,11 @@ public class ParamBindServiceImpl implements ParamBindService { @Resource IcdConfigTypeRepository typeRepository; @Resource - IcdConfigTypeInstRepository typeInstRepository; + IcdConfigTypeInstRepository instRepository; + @Resource + IcdConfigTypeAttRepository attRepository; + @Resource + RptparamindexRepository rptparamindexRepository; @Override public List getTree() throws Exception { @@ -56,7 +62,7 @@ public class ParamBindServiceImpl implements ParamBindService { List result = new ArrayList<>(); List typeList = typeRepository.findByIedName(iedName); for (IcdConfigType type : typeList) { - List instList = typeInstRepository.findByIcdConfigTypeId(type.getId()); + List instList = instRepository.findByIcdConfigTypeId(type.getId()); for (IcdConfigTypeInst inst : instList) { String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass() + inst.getInst(); @@ -66,4 +72,64 @@ public class ParamBindServiceImpl implements ParamBindService { } return result; } + + @Override + public List preview(BindingModel item) throws Exception { + Optional optionalInst = instRepository.findById(item.getBindingId()); + if (!optionalInst.isPresent()) { + throw new Exception("未找到该ICD配置类型实例, eqmid=" + item.getEqmid() + ", bindingId=" + item.getBindingId()); + } + IcdConfigTypeInst inst = optionalInst.get(); + Optional optionalType = typeRepository.findById(inst.getIcdConfigTypeId()); + if (!optionalType.isPresent()) { + throw new Exception("未找到该实例对应的ICD配置类型, bindingId=" + item.getBindingId()); + } + IcdConfigType type = optionalType.get(); + + List result = new ArrayList<>(); + String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass() + + inst.getInst(); + List attList = attRepository.findByIcdConfigTypeId(type.getId()); + for (IcdConfigTypeAtt att : attList) { + String paramindex = param + "$" + att.getLastName(); + Optional optionalRpt = rptparamindexRepository.findById(paramindex); + if (!optionalRpt.isPresent()) { + throw new Exception("未找到该Rptparamindex,对象参引=" + paramindex); + } + Rptparamindex rpt = optionalRpt.get(); + rpt.setTablename(type.getTableName()); + rpt.setColname(att.getColName()); + rpt.setEqmid(item.getEqmid()); + result.add(rpt); + } + return result; + } + + private void bindOne(Integer eqmid, Integer bindingId) throws Exception { + Optional optionalInst = instRepository.findById(bindingId); + if (!optionalInst.isPresent()) { + throw new Exception("未找到该ICD配置类型实例, eqmid=" + eqmid + ", bindingId=" + bindingId); + } + IcdConfigTypeInst inst = optionalInst.get(); + Optional optionalType = typeRepository.findById(inst.getIcdConfigTypeId()); + if (!optionalType.isPresent()) { + throw new Exception("未找到该实例对应的ICD配置类型, bindingId=" + bindingId); + } + IcdConfigType type = optionalType.get(); + String param = type.getIedName() + type.getLdeviceInst() + "/" + type.getLnClass() + + inst.getInst(); + List attList = attRepository.findByIcdConfigTypeId(type.getId()); + for (IcdConfigTypeAtt att : attList) { + String paramindex = param + "$" + att.getLastName(); + Optional optionalRpt = rptparamindexRepository.findById(paramindex); + if (!optionalRpt.isPresent()) { + throw new Exception("未找到该Rptparamindex,对象参引=" + paramindex); + } + Rptparamindex rpt = optionalRpt.get(); + rpt.setTablename(type.getTableName()); + rpt.setColname(att.getColName()); + rpt.setEqmid(eqmid); + rptparamindexRepository.save(rpt); + } + } } diff --git a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java index 1638db2..7487eb5 100644 --- a/src/main/java/com/xydl/cac/util/IcdXmlUtil.java +++ b/src/main/java/com/xydl/cac/util/IcdXmlUtil.java @@ -65,7 +65,7 @@ public class IcdXmlUtil { result.put(key, config); } config.addInst(lnInst); - config.addAtt(doName, dai); + config.addAtt(doName, param); } } }