From f6bf679a774ccdc34bc4342955dff1b78c4f79bb Mon Sep 17 00:00:00 2001 From: lld <15027638633@163.com> Date: Sun, 1 Feb 2026 00:18:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=8E=A7=E5=88=B6=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/domain/entity/SysUser.java | 14 ++++++++++ .../interceptor/FrontendControlHandler.java | 26 ++++++++++++------- .../manager/MqttSubscriptionManager.java | 16 +++++++++++- .../resources/mapper/system/SysUserMapper.xml | 18 ++++++++++--- 4 files changed, 60 insertions(+), 14 deletions(-) diff --git a/agri-common/src/main/java/com/agri/common/core/domain/entity/SysUser.java b/agri-common/src/main/java/com/agri/common/core/domain/entity/SysUser.java index 0115c14..d8b8558 100644 --- a/agri-common/src/main/java/com/agri/common/core/domain/entity/SysUser.java +++ b/agri-common/src/main/java/com/agri/common/core/domain/entity/SysUser.java @@ -42,6 +42,10 @@ public class SysUser extends BaseEntity @Excel(name = "部门编号", type = Type.IMPORT) private Long deptId; + /** 用户账号 */ + @Excel(name = "clientId") + private String clientId; + /** 用户账号 */ @Excel(name = "登录名称") private String userName; @@ -115,6 +119,15 @@ public class SysUser extends BaseEntity } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + public SysUser(Long userId) { this.userId = userId; @@ -334,6 +347,7 @@ public class SysUser extends BaseEntity return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("userId", getUserId()) .append("deptId", getDeptId()) + .append("clientId", getClientId()) .append("userName", getUserName()) .append("nickName", getNickName()) .append("email", getEmail()) diff --git a/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java b/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java index 8a80a26..45d7d1d 100644 --- a/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java +++ b/agri-framework/src/main/java/com/agri/framework/interceptor/FrontendControlHandler.java @@ -1,13 +1,16 @@ package com.agri.framework.interceptor; +import com.agri.common.core.domain.entity.SysUser; import com.agri.framework.config.MqttConfig; import com.agri.framework.manager.MqttAutoOffManager; import com.agri.system.domain.SysAgriInfo; import com.agri.system.domain.SysAgriLimit; import com.agri.system.domain.SysDevOperLog; +import com.agri.system.mapper.SysUserMapper; import com.agri.system.service.ISysAgriInfoService; import com.agri.system.service.ISysAgriLimitService; import com.agri.system.service.ISysDevOperLogService; +import com.agri.system.service.ISysUserService; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; @@ -67,6 +70,8 @@ public class FrontendControlHandler { @Autowired private ISysDevOperLogService sysDevOperLogService; + @Autowired + private ISysUserService sysUserService; @Value("${spring.mqtt.dtu-ctl-lock-ttl}") private int dtuCtlLockTTL; @@ -144,7 +149,7 @@ public class FrontendControlHandler { ); if (lockSuccess == null || !lockSuccess) { String errorTopic = "frontend/" + clientId + "/dtu/" + deviceId + "/listener"; - mqttMessageSender.publish(errorTopic, "{\"msg\":\"设备" + funcType + "功能忙,请稍后重试\"}"); + mqttMessageSender.publish(errorTopic, "{\"msg\":\"设备" + funcType + "功能忙,请稍后重试\",\"clientId\":"+clientId+"}"); log.warn("【分布式锁】前端{}操作设备{}的{}功能失败;可能其他用户正在操作此功能", clientId, deviceId, funcType); return; } @@ -152,11 +157,13 @@ public class FrontendControlHandler { // 3. 记录日志 log.info("【指令处理】前端{}于{}控制设备{}的{}功能,指令:{}", clientId, LocalDateTime.now(), deviceId, funcType, payload); - - - //todo - mqttMessageSender.publish(deviceTopic, payload); - + SysUser sysUser = sysUserService.lambdaQuery() + .eq(SysUser::getClientId, clientId) + .one(); + String operator = "手动控制"; + if (sysUser!=null) { + operator = sysUser.getUserName(); + } SysAgriInfo agriInfo = sysAgriInfoService.lambdaQuery() .eq(SysAgriInfo::getImei, deviceId) .one(); @@ -170,9 +177,10 @@ public class FrontendControlHandler { logDto.setPayload(payload); logDto.setLockAcquired(1); logDto.setLockHolder(clientId); - logDto.setExecResult(1); - logDto.setCreateBy("手动控制"); - boolean save = sysDevOperLogService.save(logDto); + logDto.setCreateBy(operator); + sysDevOperLogService.save(logDto); + //todo + mqttMessageSender.publish(deviceTopic, payload); // if (save) { // testAutoOffTask(deviceId,funcCodeMap); // } diff --git a/agri-framework/src/main/java/com/agri/framework/manager/MqttSubscriptionManager.java b/agri-framework/src/main/java/com/agri/framework/manager/MqttSubscriptionManager.java index bd26987..977d489 100644 --- a/agri-framework/src/main/java/com/agri/framework/manager/MqttSubscriptionManager.java +++ b/agri-framework/src/main/java/com/agri/framework/manager/MqttSubscriptionManager.java @@ -1,11 +1,14 @@ package com.agri.framework.manager; +import com.agri.common.core.domain.entity.SysUser; import com.agri.common.utils.SecurityUtils; import com.agri.system.domain.SysAgriInfo; import com.agri.system.service.ISysAgriInfoService; +import com.agri.system.service.ISysUserService; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; @@ -45,6 +48,9 @@ public class MqttSubscriptionManager { @Resource private StringRedisTemplate stringRedisTemplate; + @Autowired + private ISysUserService sysUserService; + /** * 农业信息服务,查询用户名下设备 */ @@ -171,6 +177,14 @@ public class MqttSubscriptionManager { return 0; } Long userId = SecurityUtils.getLoginUser().getUserId(); + boolean update = sysUserService.lambdaUpdate() + .eq(SysUser::getUserId, userId) + .set(SysUser::getClientId, clientId) + .update(); + if (update) { + log.info("【全量订阅】用户端mqtt客户端绑定成功!"); + } + // 3. 查询该用户名下的所有设备ID(替换为你的实际设备查询逻辑) List deviceIds = new ArrayList<>(queryImeiByUserId(userId)); if (userId == 1) { @@ -308,7 +322,7 @@ public class MqttSubscriptionManager { // 比如:return deviceService.listDeviceIdsByUserId(userId); SysAgriInfo sysAgriInfo = new SysAgriInfo(); if (!SecurityUtils.isAdmin()) { - sysAgriInfo.setUserId(SecurityUtils.getUserId()); + sysAgriInfo.setUserId(userId); } List agriInfos = agriInfoService.findAgriByUser(sysAgriInfo); if (CollectionUtils.isEmpty(agriInfos)) { diff --git a/agri-system/src/main/resources/mapper/system/SysUserMapper.xml b/agri-system/src/main/resources/mapper/system/SysUserMapper.xml index 49958aa..2d7920b 100644 --- a/agri-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/agri-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -48,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.remark, + select u.user_id, u.dept_id, u.client_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u @@ -58,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"