From bbccc14fd814ac105a75594c21b1ba92b4e344c4 Mon Sep 17 00:00:00 2001 From: chenhaojie Date: Mon, 29 Jul 2024 16:22:15 +0800 Subject: [PATCH] =?UTF-8?q?das=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9,das=E6=96=B0=E5=A2=9E=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E8=A1=A8=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node/command/AnalogDataCommand.java | 10 +++ .../das/modules/node/command/BaseCommand.java | 9 +++ .../node/command/HeartbeatCommand.java | 10 +++ .../node/command/HistoryStateDataCommand.java | 10 +++ .../node/command/InitDeviceDataCommand.java | 10 +++ .../node/command/StateDataCommand.java | 10 +++ .../node/controller/SysNodeController.java | 48 +++++++++++++ .../TerminalMessageEventHandler.java | 22 +++++- .../node/domain/dto/BindEquipmentDto.java | 13 ++++ .../node/domain/dto/SysImptabmappingDto.java | 14 ++++ .../node/domain/vo/SysImptabmappingVo.java | 38 ++++++++++ .../modules/node/entity/SysImptabmapping.java | 72 +++++++++++++++++++ .../node/handler/NodeMessageHandler.java | 3 +- .../node/mapper/SysImptabmappingMapper.java | 21 ++++++ .../modules/node/service/SysNodeService.java | 5 ++ .../node/service/impl/SysNodeServiceImpl.java | 27 +++++++ .../mapper/SysImptabmappingMapper.xml | 34 +++++++++ docs/api/node.md | 32 +++++++++ 18 files changed, 384 insertions(+), 4 deletions(-) create mode 100644 das/src/main/java/com/das/modules/node/command/AnalogDataCommand.java create mode 100644 das/src/main/java/com/das/modules/node/command/BaseCommand.java create mode 100644 das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java create mode 100644 das/src/main/java/com/das/modules/node/command/HistoryStateDataCommand.java create mode 100644 das/src/main/java/com/das/modules/node/command/InitDeviceDataCommand.java create mode 100644 das/src/main/java/com/das/modules/node/command/StateDataCommand.java create mode 100644 das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentDto.java create mode 100644 das/src/main/java/com/das/modules/node/domain/dto/SysImptabmappingDto.java create mode 100644 das/src/main/java/com/das/modules/node/domain/vo/SysImptabmappingVo.java create mode 100644 das/src/main/java/com/das/modules/node/entity/SysImptabmapping.java create mode 100644 das/src/main/java/com/das/modules/node/mapper/SysImptabmappingMapper.java create mode 100644 das/src/main/resources/mapper/SysImptabmappingMapper.xml diff --git a/das/src/main/java/com/das/modules/node/command/AnalogDataCommand.java b/das/src/main/java/com/das/modules/node/command/AnalogDataCommand.java new file mode 100644 index 00000000..540e17c9 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/command/AnalogDataCommand.java @@ -0,0 +1,10 @@ +package com.das.modules.node.command; + +import com.das.modules.node.domain.bo.TerminalMessage; + +public class AnalogDataCommand implements BaseCommand{ + @Override + public void doCommand(TerminalMessage data) { + + } +} diff --git a/das/src/main/java/com/das/modules/node/command/BaseCommand.java b/das/src/main/java/com/das/modules/node/command/BaseCommand.java new file mode 100644 index 00000000..39a5eae2 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/command/BaseCommand.java @@ -0,0 +1,9 @@ +package com.das.modules.node.command; + +import com.das.modules.node.domain.bo.TerminalMessage; +import org.springframework.stereotype.Service; + +@Service +public interface BaseCommand { + void doCommand(TerminalMessage data); +} diff --git a/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java new file mode 100644 index 00000000..7d94cf0c --- /dev/null +++ b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java @@ -0,0 +1,10 @@ +package com.das.modules.node.command; + +import com.das.modules.node.domain.bo.TerminalMessage; + +public class HeartbeatCommand implements BaseCommand{ + @Override + public void doCommand(TerminalMessage data) { + + } +} diff --git a/das/src/main/java/com/das/modules/node/command/HistoryStateDataCommand.java b/das/src/main/java/com/das/modules/node/command/HistoryStateDataCommand.java new file mode 100644 index 00000000..e22718e2 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/command/HistoryStateDataCommand.java @@ -0,0 +1,10 @@ +package com.das.modules.node.command; + +import com.das.modules.node.domain.bo.TerminalMessage; + +public class HistoryStateDataCommand implements BaseCommand{ + @Override + public void doCommand(TerminalMessage data) { + + } +} diff --git a/das/src/main/java/com/das/modules/node/command/InitDeviceDataCommand.java b/das/src/main/java/com/das/modules/node/command/InitDeviceDataCommand.java new file mode 100644 index 00000000..5f23f25f --- /dev/null +++ b/das/src/main/java/com/das/modules/node/command/InitDeviceDataCommand.java @@ -0,0 +1,10 @@ +package com.das.modules.node.command; + +import com.das.modules.node.domain.bo.TerminalMessage; + +public class InitDeviceDataCommand implements BaseCommand{ + @Override + public void doCommand(TerminalMessage data) { + + } +} diff --git a/das/src/main/java/com/das/modules/node/command/StateDataCommand.java b/das/src/main/java/com/das/modules/node/command/StateDataCommand.java new file mode 100644 index 00000000..406c97c5 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/command/StateDataCommand.java @@ -0,0 +1,10 @@ +package com.das.modules.node.command; + +import com.das.modules.node.domain.bo.TerminalMessage; + +public class StateDataCommand implements BaseCommand{ + @Override + public void doCommand(TerminalMessage data) { + + } +} diff --git a/das/src/main/java/com/das/modules/node/controller/SysNodeController.java b/das/src/main/java/com/das/modules/node/controller/SysNodeController.java index 3746c307..9842e1ef 100644 --- a/das/src/main/java/com/das/modules/node/controller/SysNodeController.java +++ b/das/src/main/java/com/das/modules/node/controller/SysNodeController.java @@ -6,10 +6,13 @@ import com.das.common.constant.SysAuthorityIds; import com.das.common.exceptions.ServiceException; import com.das.common.result.R; import com.das.common.utils.PageDataInfo; +import com.das.modules.node.domain.dto.BindEquipmentDto; import com.das.modules.node.domain.dto.SysCommunicationLinkDto; +import com.das.modules.node.domain.dto.SysImptabmappingDto; import com.das.modules.node.domain.dto.SysNodeDto; import com.das.modules.node.domain.vo.ProtocolTypeVo; import com.das.modules.node.domain.vo.SysCommunicationLinkVo; +import com.das.modules.node.domain.vo.SysImptabmappingVo; import com.das.modules.node.domain.vo.SysNodeVo; import com.das.modules.node.service.SysNodeService; import org.springframework.beans.factory.annotation.Autowired; @@ -149,5 +152,50 @@ public class SysNodeController { return R.success(typeVoList); } + + /** 获取映射表信息 */ + @PostMapping("/link/getMappingList") + public R getMappingList(@RequestBody SysImptabmappingDto sysImptabmappingDto) { + + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有节点管理权限"); + } + if (sysImptabmappingDto.getLinkId() == null) { + throw new ServiceException("参数缺失"); + } + List list = sysNodeService.getMappingList(sysImptabmappingDto.getLinkId()); + return R.success(list); + } + + /** 获取绑定的设备列表信息 */ + @PostMapping("/link/getBindDeviceTree") + public R getBindDeviceTree(@RequestBody SysImptabmappingDto sysImptabmappingDto) { + + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有节点管理权限"); + } + if (sysImptabmappingDto.getLinkId() == null) { + throw new ServiceException("参数缺失"); + } + List list = sysNodeService.getBindDeviceTree(sysImptabmappingDto.getLinkId()); + return R.success(list); + } + + /** 绑定设备信息 */ + @PostMapping("/link/bindDeviceMeas") + public R bindMeas(@RequestBody BindEquipmentDto bindEquipmentDto) { + + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); +// if(!hasPermission){ +// return R.fail("没有节点管理权限"); +// } + sysNodeService.bindDeviceMeas(bindEquipmentDto.getEquipmentId(), bindEquipmentDto.getLinkId()); + return R.success(); + } } diff --git a/das/src/main/java/com/das/modules/node/disruptor/TerminalMessageEventHandler.java b/das/src/main/java/com/das/modules/node/disruptor/TerminalMessageEventHandler.java index 67e0a2a4..a5663452 100644 --- a/das/src/main/java/com/das/modules/node/disruptor/TerminalMessageEventHandler.java +++ b/das/src/main/java/com/das/modules/node/disruptor/TerminalMessageEventHandler.java @@ -1,5 +1,7 @@ package com.das.modules.node.disruptor; +import com.das.common.utils.SpringUtils; +import com.das.modules.node.command.BaseCommand; import com.das.modules.node.domain.bo.TerminalMessage; import com.das.modules.node.handler.NodeMessageHandler; import com.lmax.disruptor.EventHandler; @@ -23,9 +25,23 @@ public class TerminalMessageEventHandler implements EventHandler equipmentId; + + private Long linkId; +} diff --git a/das/src/main/java/com/das/modules/node/domain/dto/SysImptabmappingDto.java b/das/src/main/java/com/das/modules/node/domain/dto/SysImptabmappingDto.java new file mode 100644 index 00000000..def3733b --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/dto/SysImptabmappingDto.java @@ -0,0 +1,14 @@ +package com.das.modules.node.domain.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SysImptabmappingDto implements Serializable { + + @JsonSerialize(using = ToStringSerializer.class) + private Long linkId; +} diff --git a/das/src/main/java/com/das/modules/node/domain/vo/SysImptabmappingVo.java b/das/src/main/java/com/das/modules/node/domain/vo/SysImptabmappingVo.java new file mode 100644 index 00000000..28795999 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/vo/SysImptabmappingVo.java @@ -0,0 +1,38 @@ +package com.das.modules.node.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + + +/** + * 映射表前端回显 + * + * @author guchengwei + */ +@Data +public class SysImptabmappingVo { + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @JsonSerialize(using = ToStringSerializer.class) + private Long linkId; + + private String linkName; + + @JsonSerialize(using = ToStringSerializer.class) + private Long equipmentId; + + private String equipmentName; + + private String equipmentAttribute; + + private String equipmentService; + + private Integer porder; + + private String params; + + private Integer revision; +} diff --git a/das/src/main/java/com/das/modules/node/entity/SysImptabmapping.java b/das/src/main/java/com/das/modules/node/entity/SysImptabmapping.java new file mode 100644 index 00000000..7266e27c --- /dev/null +++ b/das/src/main/java/com/das/modules/node/entity/SysImptabmapping.java @@ -0,0 +1,72 @@ +package com.das.modules.node.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serial; + + +/** + *

+ * 映射表信息 + *

+ * + * @author chenhaojie + */ +@EqualsAndHashCode(callSuper = true) +@TableName("sys_imptabmapping") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysImptabmapping extends BaseEntity { + @Serial + private static final long serialVersionUID = 1L; + + /** + * 系统节点ID + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 对应链路ID + */ + @TableField("link_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long linkId; + + /** + * 对应设备ID + */ + @TableField("equipment_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long equipmentId; + + /** + * 对应设备属性 + */ + @TableField("equipment_attribute") + private String equipmentAttribute; + + /** + * 对应设备服务 + */ + @TableField("equipmentService") + private String equipmentService; + + @TableField("porder") + private Integer porder; + + @TableField("params") + private String params; +} diff --git a/das/src/main/java/com/das/modules/node/handler/NodeMessageHandler.java b/das/src/main/java/com/das/modules/node/handler/NodeMessageHandler.java index 2948d497..ad9d3e42 100644 --- a/das/src/main/java/com/das/modules/node/handler/NodeMessageHandler.java +++ b/das/src/main/java/com/das/modules/node/handler/NodeMessageHandler.java @@ -51,11 +51,12 @@ public class NodeMessageHandler extends TextWebSocketHandler { protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { TerminalMessage msg = JsonUtils.parseObject(message.getPayload(), TerminalMessage.class); String nodeId = session.getAttributes().get(NodeConstant.NODE_ID).toString(); + String version = session.getAttributes().get(NodeConstant.VERSION).toString(); String cmdId = msg.getCmdId(); String cmd = msg.getCmd(); long time = msg.getTime(); JsonNode data = msg.getData(); - + // 如果version是0,则需要调用一次configUpdate配置更新 log.info("收到 Node:{} 命令: {}", nodeId, cmd); log.debug("内容: {}", data.toString()); if (dataService == null){ diff --git a/das/src/main/java/com/das/modules/node/mapper/SysImptabmappingMapper.java b/das/src/main/java/com/das/modules/node/mapper/SysImptabmappingMapper.java new file mode 100644 index 00000000..0d57fe9c --- /dev/null +++ b/das/src/main/java/com/das/modules/node/mapper/SysImptabmappingMapper.java @@ -0,0 +1,21 @@ +package com.das.modules.node.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.das.modules.node.domain.dto.SysCommunicationLinkDto; +import com.das.modules.node.domain.vo.SysCommunicationLinkVo; +import com.das.modules.node.domain.vo.SysImptabmappingVo; +import com.das.modules.node.entity.SysCommunicationLink; +import com.das.modules.node.entity.SysImptabmapping; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface SysImptabmappingMapper extends BaseMapper { + List getMappingList(Long linkId); + + List getBindDevice(Long linkId); +} diff --git a/das/src/main/java/com/das/modules/node/service/SysNodeService.java b/das/src/main/java/com/das/modules/node/service/SysNodeService.java index df70fe7a..f7a3dd2c 100644 --- a/das/src/main/java/com/das/modules/node/service/SysNodeService.java +++ b/das/src/main/java/com/das/modules/node/service/SysNodeService.java @@ -4,6 +4,7 @@ import com.das.common.utils.PageDataInfo; import com.das.modules.node.domain.dto.SysCommunicationLinkDto; import com.das.modules.node.domain.dto.SysNodeDto; import com.das.modules.node.domain.vo.SysCommunicationLinkVo; +import com.das.modules.node.domain.vo.SysImptabmappingVo; import com.das.modules.node.domain.vo.SysNodeVo; import java.util.List; @@ -25,5 +26,9 @@ public interface SysNodeService { void deleteSysCommunicationLink(Long id); + List getMappingList(Long linkId); + + List getBindDeviceTree(Long linkId); + void bindDeviceMeas(List equipmentId, Long linkId); } diff --git a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java index 6798bf30..8ba7ba15 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/SysNodeServiceImpl.java @@ -13,16 +13,20 @@ import com.das.modules.auth.mapper.SysOrgMapper; import com.das.modules.node.domain.dto.SysCommunicationLinkDto; import com.das.modules.node.domain.dto.SysNodeDto; import com.das.modules.node.domain.vo.SysCommunicationLinkVo; +import com.das.modules.node.domain.vo.SysImptabmappingVo; import com.das.modules.node.domain.vo.SysNodeVo; import com.das.modules.node.entity.SysCommunicationLink; +import com.das.modules.node.entity.SysImptabmapping; import com.das.modules.node.entity.SysNode; import com.das.modules.node.mapper.SysCommunicationLinkMapper; +import com.das.modules.node.mapper.SysImptabmappingMapper; import com.das.modules.node.mapper.SysNodeMapper; import com.das.modules.node.service.SysNodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -40,6 +44,9 @@ public class SysNodeServiceImpl implements SysNodeService { @Autowired private SysOrgMapper sysOrgMapper; + @Autowired + private SysImptabmappingMapper sysImptabmappingMapper; + @Override public List querySysNodeList() { List sysNodeVoList = sysNodeMapper.querySysNodeList(); @@ -147,4 +154,24 @@ public class SysNodeServiceImpl implements SysNodeService { // 判断节点下是否有链路,有就不能删除 sysCommunicationLinkMapper.deleteById(id); } + + @Override + public List getMappingList(Long linkId) { + List list = sysImptabmappingMapper.getMappingList(linkId); + return list; + } + + @Override + public List getBindDeviceTree(Long linkId) { + List bindDeviceList = sysImptabmappingMapper.getBindDevice(linkId); + return bindDeviceList; + } + + @Override + public void bindDeviceMeas(List equipmentId, Long linkId) { + List insertList = new ArrayList<>(); + List deleteList = new ArrayList<>(); + List deleteMeasList = new ArrayList<>(); + //获取已经绑定的设备 + } } diff --git a/das/src/main/resources/mapper/SysImptabmappingMapper.xml b/das/src/main/resources/mapper/SysImptabmappingMapper.xml new file mode 100644 index 00000000..2ad28a7b --- /dev/null +++ b/das/src/main/resources/mapper/SysImptabmappingMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/api/node.md b/docs/api/node.md index 2dc3be14..5e8e8f24 100644 --- a/docs/api/node.md +++ b/docs/api/node.md @@ -17,6 +17,7 @@ | | 1.2.6绑定设备信息 | /api/node/link/bindDeviceMeas | SYS_AUTHORITY_ID_ADMIN | | | 1.2.7导入映射表信息 | /api/node/link/importMappingList | SYS_AUTHORITY_ID_ADMIN | | | 1.2.8导出映射表信息 | /api/node/link/exportMappingList | SYS_AUTHORITY_ID_ADMIN | +| | 1.2.9获取绑定设备树信息 | /api/node/link/getBindDeviceTree | SYS_AUTHORITY_ID_ADMIN | ## 1.1 节点相关接口 @@ -421,4 +422,35 @@ POST 请求接口 "linkId": "73556002258550784" } +``` + +### 1.2.9 获取绑定设备树信息 +POST 请求接口 + +> /api/node/link/getBindDeviceTree + +请求参数 +```json +{ + "linkId": "73556002258550784" +} + +``` + + +返回报文 + +```json +{ + "code": 200, + "success": true, + "data": [ + { + "equipmentId": "73714632985149440", + "equipmentName": "风电场测试", + "porder": 1 + } + ], + "msg": "操作成功" +} ``` \ No newline at end of file