package com.tmzn.devicelinkykc.taskQueue; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.tmzn.devicelinkykc.constant.Constant; import com.tmzn.devicelinkykc.constant.DeviceOnlineStatus; import com.tmzn.devicelinkykc.constant.RedisConstant; import com.tmzn.devicelinkykc.entity.Device; import com.tmzn.devicelinkykc.entity.DeviceStatus; import com.tmzn.devicelinkykc.entity.param.TransCheck; import com.tmzn.devicelinkykc.frameMsg.frameType.HeartFrameSend; import com.tmzn.devicelinkykc.frameMsg.frameType.LoginFrame; import com.tmzn.devicelinkykc.redis.RedisCache; import com.tmzn.devicelinkykc.service.DeviceService; import com.tmzn.devicelinkykc.service.DeviceStatusService; import com.tmzn.devicelinkykc.socket.DeviceConnectionMsg; import com.tmzn.devicelinkykc.socket.SocketHandle; import com.tmzn.devicelinkykc.taskQueue.queue.MsgHeartQueue; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.*; /** * @author xp * @date 2024/3/15 * @explain " 心跳定时任务 " */ @Component @Slf4j public class HeartTask { @Autowired private SocketHandle socketHandle; @Autowired private DeviceStatusService deviceStatusService; @Autowired private MsgHeartQueue msgHeartQueue; //理解:云快充的心跳30s未收到设备需要重新登录,这里直接拿连接socket的设备上报消息 public void start(){ ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1); Runnable task = new Runnable() { @Override public void run() { Map deviceConnectionMsgMap = socketHandle.getDeviceConnectionMsgMap(); msgHeartQueue.add(deviceConnectionMsgMap); } }; scheduler.scheduleAtFixedRate(task,0,13*1000, TimeUnit.MILLISECONDS); } }