2 次代碼提交 fa60f45eb9 ... b272cffa89

作者 SHA1 備註 提交日期
  liweimin b272cffa89 1、调试宝设备 MQTT 登录在线注册表使用redis维护 2 周之前
  liweimin ca4af5374a 1、调试宝设备 MQTT 登录在线注册表 2 周之前

+ 5 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java

@@ -41,4 +41,9 @@ public class CacheConstants
      * 登录账户密码错误次数 redis key
      */
     public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+
+    /**
+     * 调试宝设备 MQTT 登录在线 redis key 前缀(完整 key:tsb:device:online:{deviceSn})
+     */
+    public static final String TSB_DEVICE_ONLINE_KEY = "tsb:device:online:";
 }

+ 50 - 0
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/enums/DeviceLineStatusEnum.java

@@ -0,0 +1,50 @@
+package com.ruoyi.device.mqtt.enums;
+
+/**
+ * 设备在线状态枚举
+ *
+ * @author lwm
+ **/
+public enum DeviceLineStatusEnum
+{
+    ON_LINE(1, "在线"),
+    OFF_LINE(0, "离线"),
+    ;
+
+    private final Integer status;
+    private final String message;
+
+    DeviceLineStatusEnum(Integer status, String message)
+    {
+        this.status = status;
+        this.message = message;
+    }
+
+    public Integer getStatus()
+    {
+        return status;
+    }
+
+    public String getMessage()
+    {
+        return message;
+    }
+
+    // 判断是否在线
+    public static boolean isOnLine(Integer status)
+    {
+        if (status == null)
+        {
+            return false;
+        }
+        return DeviceLineStatusEnum.ON_LINE.getStatus().equals(status);
+    }
+
+    // 判断是否离线
+    public static boolean isOffLine(Integer status)
+    {
+        return !isOnLine(status);
+    }
+
+
+}

+ 176 - 0
ruoyi-device/src/main/java/com/ruoyi/device/mqtt/handler/DeviceOnlineManager.java

@@ -0,0 +1,176 @@
+package com.ruoyi.device.mqtt.handler;
+
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.device.mqtt.enums.DeviceLineStatusEnum;
+import com.ruoyi.device.mqtt.vo.DeviceOnlineInfo;
+import jakarta.annotation.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+import java.util.Date;
+
+/**
+ * 调试宝设备 MQTT 登录在线注册表(deviceSn → 设备信息/用户信息,Redis String 维护)
+ *
+ * @author lwm
+ */
+@Component
+public class DeviceOnlineManager
+{
+    private static final Logger log = LoggerFactory.getLogger(DeviceOnlineManager.class);