From 05039238cca0d097566e6e9835405be0b4be6643 Mon Sep 17 00:00:00 2001 From: xce Date: Mon, 19 Jan 2026 00:51:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=B3=E4=B8=8A=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agri/framework/interceptor/MqttMessageHandler.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java b/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java index 07f91ed..9b45551 100644 --- a/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java +++ b/agri-framework/src/main/java/com/agri/framework/interceptor/MqttMessageHandler.java @@ -561,6 +561,15 @@ public class MqttMessageHandler implements SmartLifecycle { } if (current != null && current == 1) { + // 新增:自动关也走分布式锁(避免与前端并发控制同一功能导致乱序/互相覆盖) + String lockKey = "lock:" + deviceId + ":" + funcType; + Boolean lockSuccess = stringRedisTemplate.opsForValue().setIfAbsent( + lockKey, "autooff", 15, TimeUnit.SECONDS + ); + if (lockSuccess == null || !lockSuccess) { + log.info("【自动关任务】{}功能忙(锁占用),跳过自动关闭:deviceId={}, funcType={}", funcType, deviceId, funcType); + return; + } JSONObject down = new JSONObject(); down.put(funcType, 0);