From 62aac9e519da0f2050ede988140bec76edd69f16 Mon Sep 17 00:00:00 2001 From: chenhaojie Date: Thu, 1 Aug 2024 16:12:33 +0800 Subject: [PATCH] =?UTF-8?q?das=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../equipment/mapper/SysEquipmentMapper.java | 2 + .../node/command/AnalogDataCommand.java | 18 +++++ .../node/command/HeartbeatCommand.java | 27 +++++++ .../node/command/HistoryStateDataCommand.java | 2 +- .../node/command/StateDataCommand.java | 19 ++++- .../node/controller/SysNodeController.java | 25 +++--- .../node/domain/dto/BindEquipmentDto.java | 5 +- .../node/domain/dto/BindEquipmentInfoDto.java | 16 ++++ .../node/domain/dto/ImptabmappingDto.java | 21 +++++ .../node/domain/dto/SysImptabmappingDto.java | 2 + .../node/domain/vo/ConfigUpdateVo.java | 28 +++++++ .../modules/node/domain/vo/EquipmentVo.java | 21 +++++ .../node/domain/vo/ImptabmappingVo.java | 25 ++++++ .../modules/node/domain/vo/IotModelVo.java | 22 +++++ .../das/modules/node/domain/vo/LinkVo.java | 20 +++++ .../domain/vo/SysCommunicationLinkVo.java | 2 +- .../modules/node/entity/SysImptabmapping.java | 2 +- .../node/handler/NodeMessageHandler.java | 18 ++++- .../mapper/SysCommunicationLinkMapper.java | 4 + .../node/mapper/SysImptabmappingMapper.java | 18 ++++- .../das/modules/node/service/DataService.java | 3 + .../modules/node/service/SysNodeService.java | 9 ++- .../node/service/impl/DataServiceImpl.java | 80 +++++++++++++++++++ .../node/service/impl/SysNodeServiceImpl.java | 70 +++++++++++++--- .../mapper/SysCommunicationLinkMapper.xml | 4 +- .../resources/mapper/SysEquipmentMapper.xml | 4 + .../mapper/SysImptabmappingMapper.xml | 63 ++++++++++++++- 27 files changed, 495 insertions(+), 35 deletions(-) create mode 100644 das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentInfoDto.java create mode 100644 das/src/main/java/com/das/modules/node/domain/dto/ImptabmappingDto.java create mode 100644 das/src/main/java/com/das/modules/node/domain/vo/ConfigUpdateVo.java create mode 100644 das/src/main/java/com/das/modules/node/domain/vo/EquipmentVo.java create mode 100644 das/src/main/java/com/das/modules/node/domain/vo/ImptabmappingVo.java create mode 100644 das/src/main/java/com/das/modules/node/domain/vo/IotModelVo.java create mode 100644 das/src/main/java/com/das/modules/node/domain/vo/LinkVo.java diff --git a/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentMapper.java b/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentMapper.java index 48cd8614..465c05d5 100644 --- a/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentMapper.java +++ b/das/src/main/java/com/das/modules/equipment/mapper/SysEquipmentMapper.java @@ -23,5 +23,7 @@ public interface SysEquipmentMapper extends BaseMapperPlus values = Map.of( + "deviceId", jsonNode.get("deviceId").asLong(), + "dataTime", data.getTime(), + "values", ListUtil.toList(jsonNode.get("value").asText()) + ); + adminRedisTemplate.set(YC_KEY_NAME, values); + // 存入td库 } } 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 index 7d94cf0c..2ba1a760 100644 --- a/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java +++ b/das/src/main/java/com/das/modules/node/command/HeartbeatCommand.java @@ -1,10 +1,37 @@ package com.das.modules.node.command; +import com.das.common.utils.AdminRedisTemplate; +import com.das.common.utils.StringUtils; import com.das.modules.node.domain.bo.TerminalMessage; +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.beans.factory.annotation.Autowired; public class HeartbeatCommand implements BaseCommand{ + + @Autowired + AdminRedisTemplate adminRedisTemplate; @Override public void doCommand(TerminalMessage data) { + JsonNode dataInfo = data.getData(); + if (!dataInfo.isEmpty()) { + JsonNode linkNode = data.getData().get("links"); + if (linkNode != null && linkNode.isArray()) { + for (JsonNode fruitNode : linkNode) { + String linkId = fruitNode.get("linkId").asText(); + String online = fruitNode.get("online").asText(); + if (StringUtils.isEmpty(online)) { + adminRedisTemplate.set(linkId, 0); + } else { + if ("true".equals(online)) { + adminRedisTemplate.set(linkId, 1); + } else { + adminRedisTemplate.set(linkId, 0); + } + } + adminRedisTemplate.expire(linkId, 300L); + } + } + } } } 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 index e22718e2..f058e1f3 100644 --- a/das/src/main/java/com/das/modules/node/command/HistoryStateDataCommand.java +++ b/das/src/main/java/com/das/modules/node/command/HistoryStateDataCommand.java @@ -5,6 +5,6 @@ import com.das.modules.node.domain.bo.TerminalMessage; public class HistoryStateDataCommand implements BaseCommand{ @Override public void doCommand(TerminalMessage data) { - + // 更新td数据库 } } 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 index 406c97c5..e83b2a20 100644 --- a/das/src/main/java/com/das/modules/node/command/StateDataCommand.java +++ b/das/src/main/java/com/das/modules/node/command/StateDataCommand.java @@ -1,10 +1,27 @@ package com.das.modules.node.command; +import cn.hutool.core.collection.ListUtil; +import com.das.common.utils.AdminRedisTemplate; import com.das.modules.node.domain.bo.TerminalMessage; +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Map; public class StateDataCommand implements BaseCommand{ + + public static final String YM_KEY_NAME = "RDB:YM:VALUES"; + + @Autowired + AdminRedisTemplate adminRedisTemplate; @Override public void doCommand(TerminalMessage data) { - + JsonNode jsonNode = data.getData(); + Map values = Map.of( + "deviceId", jsonNode.get("deviceId").asLong(), + "dataTime", data.getTime(), + "values", ListUtil.toList(jsonNode.get("value").asText()) + ); + adminRedisTemplate.set(YM_KEY_NAME, values); } } 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 446b4622..555791ac 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,14 +6,8 @@ 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.domain.dto.*; +import com.das.modules.node.domain.vo.*; import com.das.modules.node.service.SysNodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -165,7 +159,7 @@ public class SysNodeController { if (sysImptabmappingDto.getLinkId() == null) { throw new ServiceException("参数缺失"); } - List list = sysNodeService.getMappingList(sysImptabmappingDto.getLinkId()); + List list = sysNodeService.getMappingList(sysImptabmappingDto); return R.success(list); } @@ -197,5 +191,18 @@ public class SysNodeController { sysNodeService.bindDeviceMeas(bindEquipmentDto.getEquipmentId(), bindEquipmentDto.getLinkId()); return R.success(); } + + /** 保存测点信息 */ + @PostMapping("/link/saveMappingList") + public R saveMappingList(@RequestBody List impList) { + + //判断是否有权限 + boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR.toString()); + if(!hasPermission){ + return R.fail("没有节点管理权限"); + } + sysNodeService.saveMappingList(impList); + return R.success(); + } } diff --git a/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentDto.java b/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentDto.java index 0140b9c0..98ddc169 100644 --- a/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentDto.java +++ b/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentDto.java @@ -1,5 +1,7 @@ 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.util.List; @@ -7,7 +9,8 @@ import java.util.List; @Data public class BindEquipmentDto { - private List equipmentId; + private List equipmentId; + @JsonSerialize(using = ToStringSerializer.class) private Long linkId; } diff --git a/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentInfoDto.java b/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentInfoDto.java new file mode 100644 index 00000000..81d5f52f --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/dto/BindEquipmentInfoDto.java @@ -0,0 +1,16 @@ +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.util.List; + +@Data +public class BindEquipmentInfoDto { + + @JsonSerialize(using = ToStringSerializer.class) + private Long equipmentId; + + private String iotAddr; +} diff --git a/das/src/main/java/com/das/modules/node/domain/dto/ImptabmappingDto.java b/das/src/main/java/com/das/modules/node/domain/dto/ImptabmappingDto.java new file mode 100644 index 00000000..51536e38 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/dto/ImptabmappingDto.java @@ -0,0 +1,21 @@ +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 ImptabmappingDto implements Serializable { + + @JsonSerialize(using = ToStringSerializer.class) + private Long linkId; + + @JsonSerialize(using = ToStringSerializer.class) + private Long equipmentId; + + private Integer type; + + private Object params; +} 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 index def3733b..6e6ef65e 100644 --- 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 @@ -11,4 +11,6 @@ public class SysImptabmappingDto implements Serializable { @JsonSerialize(using = ToStringSerializer.class) private Long linkId; + + private Integer type; } diff --git a/das/src/main/java/com/das/modules/node/domain/vo/ConfigUpdateVo.java b/das/src/main/java/com/das/modules/node/domain/vo/ConfigUpdateVo.java new file mode 100644 index 00000000..ac8e33e2 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/vo/ConfigUpdateVo.java @@ -0,0 +1,28 @@ +package com.das.modules.node.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class ConfigUpdateVo { + + public Integer version; + + private Long createTime; + + private String nodeId; + + private List links; + + private List equipments; + + public ConfigUpdateVo() { + + } + +} diff --git a/das/src/main/java/com/das/modules/node/domain/vo/EquipmentVo.java b/das/src/main/java/com/das/modules/node/domain/vo/EquipmentVo.java new file mode 100644 index 00000000..7ac8a76c --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/vo/EquipmentVo.java @@ -0,0 +1,21 @@ +package com.das.modules.node.domain.vo; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentVo { + + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + private String addr; + + private List attrs; + + private List services; +} diff --git a/das/src/main/java/com/das/modules/node/domain/vo/ImptabmappingVo.java b/das/src/main/java/com/das/modules/node/domain/vo/ImptabmappingVo.java new file mode 100644 index 00000000..80b2af98 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/vo/ImptabmappingVo.java @@ -0,0 +1,25 @@ +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 ImptabmappingVo { + + private String name; + + @JsonSerialize(using = ToStringSerializer.class) + private Long equipmentId; + + private String equipmentName; + private Integer porder; + + private String params; +} diff --git a/das/src/main/java/com/das/modules/node/domain/vo/IotModelVo.java b/das/src/main/java/com/das/modules/node/domain/vo/IotModelVo.java new file mode 100644 index 00000000..4fffaa35 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/vo/IotModelVo.java @@ -0,0 +1,22 @@ +package com.das.modules.node.domain.vo; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + + +/** + * 映射表前端回显 + * + * @author guchengwei + */ +@Data +public class IotModelVo { + + private String name; + + private String type; + + private Object params; +} diff --git a/das/src/main/java/com/das/modules/node/domain/vo/LinkVo.java b/das/src/main/java/com/das/modules/node/domain/vo/LinkVo.java new file mode 100644 index 00000000..8ed59a27 --- /dev/null +++ b/das/src/main/java/com/das/modules/node/domain/vo/LinkVo.java @@ -0,0 +1,20 @@ +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; + +@Data +public class LinkVo { + + @JsonSerialize(using = ToStringSerializer.class) + private Long linkId; + + private String linkName; + //协议号 + private Integer protocol; + //协议参数 + private Object params; + + private String[] devices; +} diff --git a/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java b/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java index 71eb226d..eba34c4e 100644 --- a/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java +++ b/das/src/main/java/com/das/modules/node/domain/vo/SysCommunicationLinkVo.java @@ -30,7 +30,7 @@ public class SysCommunicationLinkVo { /** * 协议参数 */ - private String params; + private Object params; /** * 所属系统节点 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 index 7266e27c..7e7bca82 100644 --- a/das/src/main/java/com/das/modules/node/entity/SysImptabmapping.java +++ b/das/src/main/java/com/das/modules/node/entity/SysImptabmapping.java @@ -61,7 +61,7 @@ public class SysImptabmapping extends BaseEntity { /** * 对应设备服务 */ - @TableField("equipmentService") + @TableField("equipment_service") private String equipmentService; @TableField("porder") 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 ad9d3e42..67e02fad 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 @@ -32,6 +32,7 @@ public class NodeMessageHandler extends TextWebSocketHandler { String remoteIp = (String) session.getAttributes().getOrDefault(NodeConstant.REMOTE_IP, ""); Long nodeId = (Long)session.getAttributes().get(NodeConstant.NODE_ID); Long version = (Long)session.getAttributes().get(NodeConstant.VERSION); + long time = System.currentTimeMillis(); log.debug("IP: {} 请求连接. sessionId: {}", remoteIp, session.getId()); if (onlineSessions.containsKey(nodeId)){ //如果终端节点已在线,则拒绝新的终端连接 @@ -51,12 +52,11 @@ 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(); + Long version = (Long)session.getAttributes().get(NodeConstant.VERSION); 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){ @@ -65,6 +65,17 @@ public class NodeMessageHandler extends TextWebSocketHandler { if (dataService != null){ dataService.pushMessage(msg); } + // 如果version是0,则需要调用一次configUpdate配置更新 + if (version == 0){ + JsonNode configUpdateData = dataService.getConfigUpdateInfo(Long.valueOf(nodeId)); + TerminalMessage configUpdate = TerminalMessage.builder() + .cmd("configUpdate") + .cmdId(nodeId) + .time(time) + .data(configUpdateData) + .build(); + sendActionMessage(Long.valueOf(nodeId), configUpdate); + } } @Override @@ -136,7 +147,8 @@ public class NodeMessageHandler extends TextWebSocketHandler { WebSocketSession session = onlineSessions.get(nodeId); if (session != null){ try { - session.sendMessage(new TextMessage(message.toString())); + session.sendMessage(new TextMessage(message.toJsonString())); + log.info("发送的消息为:{}", message.toJsonString()); } catch (Exception exception){ log.error(String.format("发送消息失败: NodeId: %s", nodeId), exception); diff --git a/das/src/main/java/com/das/modules/node/mapper/SysCommunicationLinkMapper.java b/das/src/main/java/com/das/modules/node/mapper/SysCommunicationLinkMapper.java index 5b08629b..f5b677cb 100644 --- a/das/src/main/java/com/das/modules/node/mapper/SysCommunicationLinkMapper.java +++ b/das/src/main/java/com/das/modules/node/mapper/SysCommunicationLinkMapper.java @@ -9,10 +9,14 @@ import com.das.modules.node.entity.SysCommunicationLink; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + @Mapper public interface SysCommunicationLinkMapper extends BaseMapper { IPage querySysCommunicationLinkList(IPage page, @Param("info") SysCommunicationLinkDto sysCommunicationLinkDto); Long querySysCommunicationLinkCount(@Param("nodeId") Long nodeId); + List querySysCommunicationLink(@Param("nodeId") Long nodeId); + } 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 index 92305312..ca99d443 100644 --- a/das/src/main/java/com/das/modules/node/mapper/SysImptabmappingMapper.java +++ b/das/src/main/java/com/das/modules/node/mapper/SysImptabmappingMapper.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.modules.auth.mapper.BaseMapperPlus; import com.das.modules.node.domain.dto.SysCommunicationLinkDto; +import com.das.modules.node.domain.vo.ImptabmappingVo; +import com.das.modules.node.domain.vo.IotModelVo; import com.das.modules.node.domain.vo.SysCommunicationLinkVo; import com.das.modules.node.domain.vo.SysImptabmappingVo; import com.das.modules.node.entity.SysCommunicationLink; @@ -16,9 +18,23 @@ import java.util.List; @Mapper public interface SysImptabmappingMapper extends BaseMapperPlus { - List getMappingList(Long linkId); + List getMappingList(Long linkId, Integer type); + + List getMappingControlList(Long linkId, Integer type); List getBindDevice(Long linkId); void deleteBindDevice(Long linkId); + + List getEquipmentId(Long linkId); + + List getIotModelFieldByEquipmentId(Long equipmentId); + + List getIotModelServiceByEquipmentId(Long equipmentId); + + String getIotAddrByEquipmentId(Long equipmentId); + + String getAttributeCode(Long equipmentId, Integer type); + + String getServiceCode(Long equipmentId, Integer type); } diff --git a/das/src/main/java/com/das/modules/node/service/DataService.java b/das/src/main/java/com/das/modules/node/service/DataService.java index ee55d8d3..39316c58 100644 --- a/das/src/main/java/com/das/modules/node/service/DataService.java +++ b/das/src/main/java/com/das/modules/node/service/DataService.java @@ -1,8 +1,11 @@ package com.das.modules.node.service; import com.das.modules.node.domain.bo.TerminalMessage; +import com.fasterxml.jackson.databind.JsonNode; public interface DataService { void pushMessage(TerminalMessage msg); + + JsonNode getConfigUpdateInfo(Long nodeId); } 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 f7a3dd2c..d1c412ee 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 @@ -1,8 +1,8 @@ package com.das.modules.node.service; 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.dto.*; +import com.das.modules.node.domain.vo.ImptabmappingVo; import com.das.modules.node.domain.vo.SysCommunicationLinkVo; import com.das.modules.node.domain.vo.SysImptabmappingVo; import com.das.modules.node.domain.vo.SysNodeVo; @@ -26,9 +26,10 @@ public interface SysNodeService { void deleteSysCommunicationLink(Long id); - List getMappingList(Long linkId); + List getMappingList(SysImptabmappingDto sysImptabmappingDto); List getBindDeviceTree(Long linkId); - void bindDeviceMeas(List equipmentId, Long linkId); + void bindDeviceMeas(List equipmentId, Long linkId); + void saveMappingList(List impList); } diff --git a/das/src/main/java/com/das/modules/node/service/impl/DataServiceImpl.java b/das/src/main/java/com/das/modules/node/service/impl/DataServiceImpl.java index 16784c12..de1daeb5 100644 --- a/das/src/main/java/com/das/modules/node/service/impl/DataServiceImpl.java +++ b/das/src/main/java/com/das/modules/node/service/impl/DataServiceImpl.java @@ -3,7 +3,12 @@ package com.das.modules.node.service.impl; import com.das.modules.node.disruptor.MessageEventFactory; import com.das.modules.node.disruptor.TerminalMessageEventHandler; import com.das.modules.node.domain.bo.TerminalMessage; +import com.das.modules.node.domain.vo.*; +import com.das.modules.node.mapper.SysCommunicationLinkMapper; +import com.das.modules.node.mapper.SysImptabmappingMapper; import com.das.modules.node.service.DataService; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.lmax.disruptor.RingBuffer; import com.lmax.disruptor.dsl.Disruptor; import jakarta.annotation.PostConstruct; @@ -11,7 +16,11 @@ import jakarta.annotation.PreDestroy; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -25,6 +34,12 @@ public class DataServiceImpl implements DataService { @Resource TerminalMessageEventHandler terminalMessageEventHandler; + @Resource + SysCommunicationLinkMapper sysCommunicationLinkMapper; + + @Resource + SysImptabmappingMapper sysImptabmappingMapper; + @PostConstruct public void init() { //初始化高性能队列 @@ -66,4 +81,69 @@ public class DataServiceImpl implements DataService { } } + + @Override + public JsonNode getConfigUpdateInfo(Long nodeId) { + ConfigUpdateVo configUpdateVo = new ConfigUpdateVo(); + List links = new ArrayList<>(); + List equipments = new ArrayList<>(); + List equipmentList = new ArrayList<>(); + // 获取所有的链路信息 + List sysCommunicationLinkVoList = sysCommunicationLinkMapper.querySysCommunicationLink(nodeId); + for (SysCommunicationLinkVo sysCommunicationLinkVo : sysCommunicationLinkVoList) { + LinkVo linkVo = new LinkVo(); + linkVo.setLinkId(sysCommunicationLinkVo.getId()); + linkVo.setLinkName(sysCommunicationLinkVo.getLinkName()); + linkVo.setParams(sysCommunicationLinkVo.getParams()); + linkVo.setProtocol(sysCommunicationLinkVo.getProtocol()); + List stringList = new ArrayList<>(); + // 获取关联的设备Id + equipmentList = sysImptabmappingMapper.getEquipmentId(sysCommunicationLinkVo.getId()); + for (Long equipmentId : equipmentList) { + stringList.add(String.valueOf(equipmentId)); + } + String[] stringArray = stringList.toArray(new String[0]); + linkVo.setDevices(stringArray); + links.add(linkVo); + } + for (Long equipmentId : equipmentList) { + List newIotModelFieldList = new ArrayList<>(); + List newIotModelServiceList = new ArrayList<>(); + // 获取设备IOT地址 + String iotAddr = sysImptabmappingMapper.getIotAddrByEquipmentId(equipmentId); + // 根据设备Id获取对应的物模型属性和动作 + List iotModelFieldList = sysImptabmappingMapper.getIotModelFieldByEquipmentId(equipmentId); + if (!CollectionUtils.isEmpty(iotModelFieldList)) { + for (IotModelVo info : iotModelFieldList) { + if(info.getParams() != null){ +// info.setParams(); + } + newIotModelFieldList.add(info); + } + } + List iotModelServiceList = sysImptabmappingMapper.getIotModelServiceByEquipmentId(equipmentId); + if (!CollectionUtils.isEmpty(iotModelServiceList)) { + for (IotModelVo info : iotModelServiceList) { +// if(!StringUtils.hasText(info.getParams())){ +// info.setParams("{}"); +// } + newIotModelServiceList.add(info); + } + } + EquipmentVo equipment = new EquipmentVo(); + equipment.setAddr(iotAddr); + equipment.setId(equipmentId); + equipment.setAttrs(newIotModelFieldList); + equipment.setServices(newIotModelServiceList); + equipments.add(equipment); + } + configUpdateVo.setCreateTime(System.currentTimeMillis()); + configUpdateVo.setNodeId(String.valueOf(nodeId)); + configUpdateVo.setVersion(1); + configUpdateVo.setLinks(links); + configUpdateVo.setEquipments(equipments); + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.valueToTree(configUpdateVo); + return jsonNode; + } } 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 d80748cd..ea75d518 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 @@ -10,8 +10,9 @@ import com.das.common.utils.SequenceUtils; import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.entity.SysOrg; 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.equipment.mapper.SysEquipmentMapper; +import com.das.modules.node.domain.dto.*; +import com.das.modules.node.domain.vo.ImptabmappingVo; import com.das.modules.node.domain.vo.SysCommunicationLinkVo; import com.das.modules.node.domain.vo.SysImptabmappingVo; import com.das.modules.node.domain.vo.SysNodeVo; @@ -48,6 +49,9 @@ public class SysNodeServiceImpl implements SysNodeService { @Autowired private SysImptabmappingMapper sysImptabmappingMapper; + @Autowired + private SysEquipmentMapper sysEquipmentMapper; + @Override public List querySysNodeList() { List sysNodeVoList = sysNodeMapper.querySysNodeList(); @@ -157,8 +161,16 @@ public class SysNodeServiceImpl implements SysNodeService { } @Override - public List getMappingList(Long linkId) { - List list = sysImptabmappingMapper.getMappingList(linkId); + public List getMappingList(SysImptabmappingDto sysImptabmappingDto) { + // 138模拟量 139累积量 140离散量 146遥调 147遥控 + Integer type = sysImptabmappingDto.getType(); + List list = new ArrayList<>(); + if (type == 138 || type == 139 || type == 140) { + list = sysImptabmappingMapper.getMappingList(sysImptabmappingDto.getLinkId(), type); + }else if (type == 146 || type == 147) { + list = sysImptabmappingMapper.getMappingControlList(sysImptabmappingDto.getLinkId(), type); + } + return list; } @@ -169,7 +181,7 @@ public class SysNodeServiceImpl implements SysNodeService { } @Override - public void bindDeviceMeas(List equipmentId, Long linkId) { + public void bindDeviceMeas(List equipmentId, Long linkId) { List addList = new ArrayList<>(); //获取已经绑定的设备 List bindDeviceList = sysImptabmappingMapper.getBindDevice(linkId); @@ -187,10 +199,48 @@ public class SysNodeServiceImpl implements SysNodeService { } - private static void addSysImptabmapping(List equipmentId, Long linkId, SysUserVo sysUserVo, List addList) { - for (int i = 0; i< equipmentId.size(); i++) { + @Override + public void saveMappingList(List impList) { + if (!CollectionUtils.isEmpty(impList)) { + List list = new ArrayList<>(); + int index = 0; + SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); + for (ImptabmappingDto imp : impList) { + SysImptabmapping sysImptabmapping = new SysImptabmapping(); + if (imp.getType() == 138 || imp.getType() == 139 || imp.getType() == 140) { + // 获取属性编码 + String code = sysImptabmappingMapper.getAttributeCode(imp.getEquipmentId(), imp.getType()); + sysImptabmapping.setEquipmentAttribute(code); + }else if (imp.getType() == 146 || imp.getType() == 147) { + // 获取动作编码 + String code = sysImptabmappingMapper.getServiceCode(imp.getEquipmentId(), imp.getType()); + sysImptabmapping.setEquipmentService(code); + } + index++; + sysImptabmapping.setCreatedTime(new Date()); + sysImptabmapping.setUpdatedTime(new Date()); + sysImptabmapping.setCreatedBy(sysUserVo.getAccount()); + sysImptabmapping.setUpdatedBy(sysUserVo.getAccount()); + sysImptabmapping.setLinkId(imp.getLinkId()); + sysImptabmapping.setEquipmentId(imp.getEquipmentId()); + sysImptabmapping.setId(SequenceUtils.generateId()); + sysImptabmapping.setPorder(index); + sysImptabmapping.setParams(String.valueOf(imp.getParams())); + sysImptabmapping.setRevision(1); + list.add(sysImptabmapping); + } + if (!CollectionUtils.isEmpty(list)){ + sysImptabmappingMapper.insertBatch(list); + } + } + } + + private void addSysImptabmapping(List equipmentId, Long linkId, SysUserVo sysUserVo, List addList) { + int index = 0; + for (BindEquipmentInfoDto info : equipmentId) { + index++; SysImptabmapping sysImptabmapping = new SysImptabmapping(); - sysImptabmapping.setEquipmentId(equipmentId.get(i)); + sysImptabmapping.setEquipmentId(info.getEquipmentId()); sysImptabmapping.setLinkId(linkId); sysImptabmapping.setId(SequenceUtils.generateId()); sysImptabmapping.setCreatedTime(new Date()); @@ -198,8 +248,10 @@ public class SysNodeServiceImpl implements SysNodeService { sysImptabmapping.setCreatedBy(sysUserVo.getAccount()); sysImptabmapping.setUpdatedBy(sysUserVo.getAccount()); sysImptabmapping.setRevision(1); - sysImptabmapping.setPorder(i + 1); + sysImptabmapping.setPorder(index); addList.add(sysImptabmapping); + // 更新设备表里面的设备地址 + sysEquipmentMapper.updateIotAddr(info.getEquipmentId(), info.getIotAddr()); } } } diff --git a/das/src/main/resources/mapper/SysCommunicationLinkMapper.xml b/das/src/main/resources/mapper/SysCommunicationLinkMapper.xml index a7a9d813..facc13b1 100644 --- a/das/src/main/resources/mapper/SysCommunicationLinkMapper.xml +++ b/das/src/main/resources/mapper/SysCommunicationLinkMapper.xml @@ -29,6 +29,8 @@ select count(1) from sys_communicationlink sc where sc.node_id = #{nodeId} - + diff --git a/das/src/main/resources/mapper/SysEquipmentMapper.xml b/das/src/main/resources/mapper/SysEquipmentMapper.xml index 01b80782..5aee78af 100644 --- a/das/src/main/resources/mapper/SysEquipmentMapper.xml +++ b/das/src/main/resources/mapper/SysEquipmentMapper.xml @@ -111,5 +111,9 @@ select count(1) from sys_equipment where parent_equipment_id = #{id} + + update sys_equipment set iot_addr = #{iotAddr} where id = #{id} + + diff --git a/das/src/main/resources/mapper/SysImptabmappingMapper.xml b/das/src/main/resources/mapper/SysImptabmappingMapper.xml index 2b9abde5..8a907289 100644 --- a/das/src/main/resources/mapper/SysImptabmappingMapper.xml +++ b/das/src/main/resources/mapper/SysImptabmappingMapper.xml @@ -15,9 +15,32 @@ - + select se."name" as equipmentName, simf.attribute_name as name,si.params,se.id as equipment_id from sys_imptabmapping si + left join sys_equipment se on si.equipment_id = se.id + left join sys_iot_model_field simf on se.iot_model_id = simf.iot_model_id + where si.link_id = #{linkId} and simf.attribute_type = #{type} + order by si.porder + + + @@ -33,7 +56,41 @@ + + + + + + + + + +