feat: 添加根据状态查询所有链接任务的接口
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package com.gameplatform.server.task;
|
||||
|
||||
import com.gameplatform.server.mapper.agent.LinkTaskMapper;
|
||||
import com.gameplatform.server.model.entity.agent.LinkTask;
|
||||
import com.gameplatform.server.service.link.LinkStatusService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* USING状态链接检查定时任务
|
||||
* 每30秒检测状态为USING的链接,调用checkAndHandleLoginStatus函数
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class UsingLinkCheckTask {
|
||||
|
||||
private final LinkTaskMapper linkTaskMapper;
|
||||
private final LinkStatusService linkStatusService;
|
||||
|
||||
public UsingLinkCheckTask(LinkTaskMapper linkTaskMapper, LinkStatusService linkStatusService) {
|
||||
this.linkTaskMapper = linkTaskMapper;
|
||||
this.linkStatusService = linkStatusService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每30秒检测一次USING状态的链接
|
||||
*/
|
||||
@Scheduled(fixedRate = 30000) // 每30秒执行一次
|
||||
public void checkUsingLinksAndHandleLoginStatus() {
|
||||
log.debug("开始定时检查USING状态的链接");
|
||||
|
||||
try {
|
||||
// 1. 查询所有USING状态的链接任务
|
||||
List<LinkTask> usingTasks = linkTaskMapper.findByStatus("USING");
|
||||
|
||||
if (usingTasks.isEmpty()) {
|
||||
log.debug("当前没有USING状态的链接");
|
||||
return;
|
||||
}
|
||||
|
||||
log.debug("发现 {} 个USING状态的链接", usingTasks.size());
|
||||
|
||||
// 2. 对每个USING状态的链接调用checkAndHandleLoginStatus
|
||||
for (LinkTask linkTask : usingTasks) {
|
||||
try {
|
||||
log.debug("检查链接 {} (设备: {}) 的登录状态", linkTask.getCodeNo(), linkTask.getMachineId());
|
||||
|
||||
// 调用checkAndHandleLoginStatus函数 - 这里需要使用私有方法的逻辑
|
||||
if (linkTask.getMachineId() != null) {
|
||||
checkAndHandleLoginStatus(linkTask);
|
||||
} else {
|
||||
log.warn("链接 {} 没有关联设备,跳过检查", linkTask.getCodeNo());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("检查链接 {} 登录状态时发生异常: {}", linkTask.getCodeNo(), e.getMessage());
|
||||
// 继续检查下一个链接,不因为一个链接出错而中断整个流程
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("定时检查USING状态链接时发生异常", e);
|
||||
}
|
||||
|
||||
log.debug("定时检查USING状态链接完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查并处理登录状态
|
||||
* 复制LinkStatusService中checkAndHandleLoginStatus的逻辑
|
||||
*/
|
||||
private void checkAndHandleLoginStatus(LinkTask linkTask) {
|
||||
try {
|
||||
String deviceId = linkTask.getMachineId();
|
||||
if (deviceId == null) {
|
||||
log.warn("无法获取设备编号: codeNo={}", linkTask.getCodeNo());
|
||||
return;
|
||||
}
|
||||
|
||||
log.debug("调用轮询上号接口检查链接 {} 的登录状态", linkTask.getCodeNo());
|
||||
|
||||
// 调用LinkStatusService的pollLogin方法来处理登录状态检查
|
||||
linkStatusService.pollLogin(linkTask.getCodeNo())
|
||||
.subscribe(
|
||||
response -> {
|
||||
if (response.isSuccess()) {
|
||||
log.info("定时检查发现链接 {} 已成功登录,状态已更新", linkTask.getCodeNo());
|
||||
} else {
|
||||
log.debug("链接 {} 尚未登录,状态: {}", linkTask.getCodeNo(), response.getStatus());
|
||||
}
|
||||
},
|
||||
error -> {
|
||||
log.warn("检查链接 {} 登录状态失败: {}", linkTask.getCodeNo(), error.getMessage());
|
||||
}
|
||||
);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("处理链接 {} 登录状态检查时发生异常: {}", linkTask.getCodeNo(), e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user