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:
zyh
2025-08-27 16:00:43 +08:00
parent bb4136b4ab
commit c6e8953960
16 changed files with 620 additions and 55 deletions

View File

@@ -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("=== 定时检查空闲设备完成 ===");
}
}