From 5b4fa38dbd975209f5ece38f90a83e9c8c1a7ee2 Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Fri, 10 Oct 2025 15:46:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fuyuanshen/DromaraApplication.java | 2 + .../global/mqtt/rule/bjq/BjqAlarmRule.java | 7 ++- .../global/queue/OnlineStatusTask.java | 43 +++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 fys-admin/src/main/java/com/fuyuanshen/global/queue/OnlineStatusTask.java diff --git a/fys-admin/src/main/java/com/fuyuanshen/DromaraApplication.java b/fys-admin/src/main/java/com/fuyuanshen/DromaraApplication.java index 4f755e3..ca41060 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/DromaraApplication.java +++ b/fys-admin/src/main/java/com/fuyuanshen/DromaraApplication.java @@ -3,6 +3,7 @@ package com.fuyuanshen; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 启动程序 @@ -10,6 +11,7 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt * @author Lion Li */ @SpringBootApplication +@EnableScheduling public class DromaraApplication { public static void main(String[] args) { diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java index 1e52bea..ff0a04c 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java +++ b/fys-admin/src/main/java/com/fuyuanshen/global/mqtt/rule/bjq/BjqAlarmRule.java @@ -57,13 +57,12 @@ public class BjqAlarmRule implements MqttMessageRule { if (StringUtils.isNotBlank(convertValue)) { // 将设备状态信息存储到Redis中 String deviceRedisKey = GlobalConstants.GLOBAL_REDIS_KEY + DeviceRedisKeyConstants.DEVICE_KEY_PREFIX + context.getDeviceImei() + DEVICE_ALARM_KEY_PREFIX; - // 存储到Redis - RedisUtils.setCacheObject(deviceRedisKey, convertValue); + String sendMessageIng = GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + context.getDeviceImei() + ":messageSending"; if ("1".equals(convertValue)) { - String sendMessageIng = GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + context.getDeviceImei() + ":messageSending"; RedisUtils.setCacheObject(sendMessageIng, "1", Duration.ofDays(1)); + // 存储到Redis + RedisUtils.setCacheObject(deviceRedisKey, "1"); }else if ("0".equals(convertValue)){ - String sendMessageIng = GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + context.getDeviceImei() + ":messageSending"; RedisUtils.deleteObject(sendMessageIng); RedisUtils.deleteObject(deviceRedisKey); } diff --git a/fys-admin/src/main/java/com/fuyuanshen/global/queue/OnlineStatusTask.java b/fys-admin/src/main/java/com/fuyuanshen/global/queue/OnlineStatusTask.java new file mode 100644 index 0000000..d552b17 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/global/queue/OnlineStatusTask.java @@ -0,0 +1,43 @@ +package com.fuyuanshen.global.queue;// ScheduledTasks.java + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.fuyuanshen.common.core.utils.StringUtils; +import com.fuyuanshen.common.redis.utils.RedisUtils; +import com.fuyuanshen.equipment.domain.Device; +import com.fuyuanshen.equipment.mapper.DeviceMapper; +import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static com.fuyuanshen.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY; +import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX; + +@Component +public class OnlineStatusTask { + + @Autowired + private DeviceMapper deviceMapper; + // 使用cron表达式,每分钟的第0秒执行 + @Scheduled(cron = "0 */3 * * * ?") + public void cronTask() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + List devices = deviceMapper.selectList(queryWrapper); + devices.forEach(item -> { + String onlineStatusKey = GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX; + String status = RedisUtils.getCacheObject(onlineStatusKey); + String onlineStatus = item.getOnlineStatus()==null?"0" : item.getOnlineStatus().toString(); + if("1".equals(onlineStatus) || "2".equals(onlineStatus)){ + if(StringUtils.isBlank(status) || "0".equals(status)){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", item.getId()); + updateWrapper.set("online_status", 0); + deviceMapper.update(updateWrapper); + } + } + }); + } +}