diff --git a/src/main/java/com/xydl/cac/controller/ParamIndexController.java b/src/main/java/com/xydl/cac/controller/ParamIndexController.java new file mode 100644 index 0000000..c628f43 --- /dev/null +++ b/src/main/java/com/xydl/cac/controller/ParamIndexController.java @@ -0,0 +1,56 @@ +package com.xydl.cac.controller; + +import com.xydl.cac.entity.Rptparamindex; +import com.xydl.cac.exception.BusinessException; +import com.xydl.cac.model.BindDetail; +import com.xydl.cac.model.BindingModel; +import com.xydl.cac.model.Response; +import com.xydl.cac.service.ParamIndexService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.repository.query.Param; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.constraints.NotNull; +import java.util.List; + +@RestController +@Api(tags = {"rptparam相关接口"}) +@RequestMapping("rptparam") +@Slf4j +public class ParamIndexController extends BasicController { + + @Resource + ParamIndexService service; + + @GetMapping("listRpt") + @ApiOperation("查询可用rptparam") + public Response> listRpt(String param) throws Exception { + if (param == null) { + throw new BusinessException("param不能为空!"); + } + List result = service.listRpt(param); + return Response.success(result); + } + + @GetMapping("getRpt") + @ApiOperation("查询绑定信息") + public Response getRpt(@Validated @NotNull(message = "sensorId不能为空!") @Param("sensorId") Integer sensorId) throws Exception { + if (sensorId == null) { + throw new BusinessException("sensorId不能为空!"); + } + BindDetail result = service.getRpt(sensorId); + return Response.success(result); + } + + @PostMapping("updateRpt") + @ApiOperation("绑定") + public Response updateRpt(@Validated @RequestBody BindingModel item) throws Exception { + service.updateRpt(item); + return Response.success("OK"); + } + +} diff --git a/src/main/java/com/xydl/cac/model/BindDetail.java b/src/main/java/com/xydl/cac/model/BindDetail.java index d103d76..965361a 100644 --- a/src/main/java/com/xydl/cac/model/BindDetail.java +++ b/src/main/java/com/xydl/cac/model/BindDetail.java @@ -1,6 +1,7 @@ package com.xydl.cac.model; import com.xydl.cac.entity.IcdConfigTypeAtt; +import com.xydl.cac.entity.Rptparamindex; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -18,4 +19,7 @@ public class BindDetail { List columnList; @ApiModelProperty("绑定关系") List attList; + + @ApiModelProperty("已配置数据") + List rptList; } diff --git a/src/main/java/com/xydl/cac/model/BindingModel.java b/src/main/java/com/xydl/cac/model/BindingModel.java index 0ca99f6..df86a0e 100644 --- a/src/main/java/com/xydl/cac/model/BindingModel.java +++ b/src/main/java/com/xydl/cac/model/BindingModel.java @@ -1,9 +1,11 @@ package com.xydl.cac.model; +import com.xydl.cac.entity.Rptparamindex; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; +import java.util.List; @Data public class BindingModel { @@ -13,4 +15,6 @@ public class BindingModel { @NotNull(message = "逻辑设备实例的Id不能为空") @ApiModelProperty("逻辑设备实例的Id") Integer icdid; + @ApiModelProperty("配置数据") + List rptList; } diff --git a/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java b/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java index 48022cc..4f7c6b6 100644 --- a/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java +++ b/src/main/java/com/xydl/cac/repository/RptparamindexRepository.java @@ -5,8 +5,13 @@ 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 RptparamindexRepository extends JpaRepository, JpaSpecificationExecutor { + List findAllByEqmid(Integer eqmid); + + List findAllByParamindexStartingWith(String param); } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/service/ParamIndexService.java b/src/main/java/com/xydl/cac/service/ParamIndexService.java new file mode 100644 index 0000000..712ceae --- /dev/null +++ b/src/main/java/com/xydl/cac/service/ParamIndexService.java @@ -0,0 +1,17 @@ +package com.xydl.cac.service; + + +import com.xydl.cac.entity.Rptparamindex; +import com.xydl.cac.model.BindDetail; +import com.xydl.cac.model.BindingModel; + +import java.util.List; + +public interface ParamIndexService { + + List listRpt(String param); + + BindDetail getRpt(Integer sensorId) throws Exception; + + void updateRpt(BindingModel item) throws Exception; +} diff --git a/src/main/java/com/xydl/cac/service/impl/ParamIndexServiceImpl.java b/src/main/java/com/xydl/cac/service/impl/ParamIndexServiceImpl.java new file mode 100644 index 0000000..ac605a7 --- /dev/null +++ b/src/main/java/com/xydl/cac/service/impl/ParamIndexServiceImpl.java @@ -0,0 +1,116 @@ +package com.xydl.cac.service.impl; + +import com.xydl.cac.entity.*; +import com.xydl.cac.exception.BusinessException; +import com.xydl.cac.model.BindDetail; +import com.xydl.cac.model.BindingModel; +import com.xydl.cac.model.ColumnModel; +import com.xydl.cac.repository.*; +import com.xydl.cac.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Optional; + +@Service +@Slf4j +@Transactional(rollbackFor = Exception.class) +public class ParamIndexServiceImpl implements ParamIndexService { + + @Resource + NSensorRepository sensorRepository; + @Resource + ModevTypeService modevTypeService; + @Resource + IcdFileConfigService configService; + @Resource + RptparamindexRepository rptparamindexRepository; + @Resource + ParamBindService bindService; + @Resource + DataService dataService; + + @Override + public List listRpt(String param) { + List list = rptparamindexRepository.findAllByParamindexStartingWith(param); + return list; + } + + @Override + public BindDetail getRpt(Integer sensorId) throws Exception { + Optional optionalNSensor = sensorRepository.findById(sensorId); + if (!optionalNSensor.isPresent()) { + throw new BusinessException("未找到该监测装置"); + } + NSensor sensor = optionalNSensor.get(); + ModevType modevType = modevTypeService.detail(sensor.getTypeId()); + sensor.setTableName(modevType.getTablename()); + + BindDetail result = new BindDetail(); + result.setSensorId(sensorId); + if (StringUtils.isNotBlank(sensor.getTableName())) { + List columnList = dataService.getDataTableColumns(sensor.getTableName()); + result.setColumnList(columnList); + } + + List rptList = rptparamindexRepository.findAllByEqmid(sensor.getDevId()); + result.setRptList(rptList); + if (!CollectionUtils.isEmpty(rptList)) { + this.findMatchIed(result, rptList.get(0).getParamindex()); + } + return result; + } + + private void findMatchIed(BindDetail result, String paramindex) { + List iedList = configService.iedList(); + for (String ied : iedList) { + if (paramindex.startsWith(ied)) { + List instList = bindService.instList(ied); + for (IcdConfigTypeInst inst : instList) { + if (paramindex.startsWith(inst.getParamIndex())) { + result.setIcdid(inst.getId()); + result.setIedName(ied); + return; + } + } + } + } + } + + @Override + public void updateRpt(BindingModel item) throws Exception { + Optional optionalNSensor = sensorRepository.findById(item.getSensorId()); + if (!optionalNSensor.isPresent()) { + throw new BusinessException("未找到该监测装置"); + } + NSensor sensor = optionalNSensor.get(); + ModevType modevType = modevTypeService.detail(sensor.getTypeId()); + sensor.setTableName(modevType.getTablename()); + + // 清除旧的 + List rptList = rptparamindexRepository.findAllByEqmid(sensor.getDevId()); + for (Rptparamindex rpt : rptList) { + rpt.setEqmid(null); + rpt.setColname(null); + rpt.setTablename(null); + rptparamindexRepository.save(rpt); + } + + // 设置新的 + for (Rptparamindex rpt : item.getRptList()) { + Optional optional = rptparamindexRepository.findById(rpt.getParamindex()); + if (optional.isPresent()) { + Rptparamindex record = optional.get(); + record.setTablename(sensor.getTableName()); + record.setEqmid(sensor.getDevId()); + record.setColname(rpt.getColname()); + rptparamindexRepository.save(record); + } + } + } +}