feat: 更新数据库结构和链接任务逻辑
主要修改: 1. 更新`game.sql`文件,添加`system_config`表并调整多个表的`ENGINE`和`AUTO_INCREMENT`设置。 2. 在`LinkTask`实体中新增`completedPoints`字段,更新状态字段以包含`COMPLETED`状态。 3. 在`LinkTaskMapper`中新增根据设备ID和状态查询链接任务的方法。 4. 在`LinkStatusService`中更新状态描述映射,增加对`COMPLETED`状态的处理。 5. 在`DeviceStatusService`和`ScriptClient`中新增解析设备状态的方法,支持检查设备是否完成游戏。 技术细节: - 通过数据库结构的更新,增强了系统的配置管理和链接任务的状态处理能力。 - 新增的功能支持更灵活的设备状态监控和任务管理。
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.gameplatform.server.task;
|
||||
|
||||
import com.gameplatform.server.model.dto.device.DeviceStatusResponse;
|
||||
import com.gameplatform.server.service.device.DeviceStatusCheckService;
|
||||
import com.gameplatform.server.service.external.ScriptClient;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 设备状态检查定时任务
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class DeviceStatusCheckTask {
|
||||
|
||||
private final ScriptClient scriptClient;
|
||||
private final DeviceStatusCheckService deviceStatusCheckService;
|
||||
|
||||
public DeviceStatusCheckTask(ScriptClient scriptClient, DeviceStatusCheckService deviceStatusCheckService) {
|
||||
this.scriptClient = scriptClient;
|
||||
this.deviceStatusCheckService = deviceStatusCheckService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每分钟检查一次空闲设备,并更新相关链接任务状态
|
||||
*/
|
||||
@Scheduled(fixedRate = 60000) // 每60秒执行一次
|
||||
public void checkIdleDevicesAndUpdateTasks() {
|
||||
log.debug("=== 开始定时检查空闲设备 ===");
|
||||
|
||||
try {
|
||||
// 1. 获取所有设备状态
|
||||
DeviceStatusResponse deviceStatus = scriptClient.checkAvailableDeviceStatus().block();
|
||||
|
||||
if (deviceStatus == null) {
|
||||
log.warn("获取设备状态失败,跳过本次检查");
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> availableDevices = deviceStatus.getAvailableDevices();
|
||||
if (availableDevices.isEmpty()) {
|
||||
log.debug("当前没有空闲设备");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("发现 {} 个空闲设备: {}", availableDevices.size(), availableDevices);
|
||||
|
||||
// 2. 对每个空闲设备检查是否有相关的LOGGED_IN状态链接任务
|
||||
for (String deviceId : availableDevices) {
|
||||
try {
|
||||
deviceStatusCheckService.checkDeviceStatusAndUpdateTasks(deviceId, "定时检查");
|
||||
} catch (Exception e) {
|
||||
log.error("检查设备 {} 状态时发生异常", deviceId, e);
|
||||
// 继续检查下一个设备,不因为一个设备出错而中断整个流程
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("定时检查空闲设备时发生异常", e);
|
||||
}
|
||||
|
||||
log.debug("=== 定时检查空闲设备完成 ===");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user