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);