feat: 改进设备任务更新服务,集成游戏完成检测,优化状态处理逻辑

This commit is contained in:
zyh
2025-09-09 19:31:52 +08:00
parent 75112674e8
commit 3a09a4469b
14 changed files with 1595 additions and 243 deletions

View File

@@ -0,0 +1,305 @@
# 游戏平台系统优化实施指南
## 📋 概述
本指南详细说明了针对以下三个问题的系统优化方案:
1. **设备10分钟内重复调用问题**
2. **用户刚扫码就显示已打完问题**
3. **同一编号出现两条链接问题**
## 🗄️ 数据库变更
### 1. 执行数据库优化脚本
```bash
# 执行数据库优化脚本
mysql -u your_username -p your_database < database_improvements.sql
```
关键变更:
-`link_task` 表已有 `UNIQUE INDEX uk_code_no` 解决问题3
- 新增 `machine_cooldown`解决问题1
- 新增 `game_completion_log`解决问题2
- 新增相关索引优化
### 2. 验证数据库变更
```sql
-- 检查唯一索引
SHOW INDEX FROM link_task WHERE Key_name = 'uk_code_no';
-- 检查新表是否创建成功
SHOW TABLES LIKE '%cooldown%';
SHOW TABLES LIKE '%completion%';
-- 检查冷却表结构
DESC machine_cooldown;
```
## 🔧 代码部署
### 1. 新增文件列表
需要添加以下新文件到项目中:
```
src/main/java/com/gameplatform/server/model/entity/cooldown/
├── MachineCooldown.java
src/main/java/com/gameplatform/server/model/entity/detection/
├── GameCompletionLog.java
src/main/java/com/gameplatform/server/mapper/cooldown/
├── MachineCooldownMapper.java
src/main/java/com/gameplatform/server/service/detection/
├── GameCompletionDetectionService.java
src/main/resources/mapper/cooldown/
├── MachineCooldownMapper.xml
```
### 2. 修改现有文件
以下文件已被优化,需要更新:
- `src/main/java/com/gameplatform/server/service/cooldown/MachineCooldownService.java`
- `src/main/java/com/gameplatform/server/service/link/LinkGenerationService.java`
- `src/main/java/com/gameplatform/server/service/link/DeviceTaskUpdateService.java`
- `src/main/java/com/gameplatform/server/service/link/LinkStatusService.java`
## ⚙️ 配置调整
### 1. 应用配置
`application.yml` 中添加以下配置:
```yaml
# 游戏完成检测配置
game:
completion:
detection:
login-buffer-seconds: 30 # 登录后缓冲时间(秒)
confirmation-interval: 10 # 完成确认间隔(秒)
confidence-threshold: MEDIUM # 置信度阈值
# 设备冷却配置
machine:
cooldown:
duration-minutes: 10 # 冷却时间(分钟)
cleanup-interval: 30 # 清理间隔(分钟)
cache-enabled: true # 启用内存缓存
# 编号生成配置
code:
generation:
max-retry-attempts: 5 # 最大重试次数
use-timestamp-fallback: true # 启用时间戳后备策略
```
### 2. 日志配置
`logback-spring.xml` 中增加以下日志配置:
```xml
<!-- 冷却服务日志 -->
<logger name="com.gameplatform.server.service.cooldown" level="INFO" />
<!-- 完成检测服务日志 -->
<logger name="com.gameplatform.server.service.detection" level="INFO" />
<!-- 编号生成日志 -->
<logger name="com.gameplatform.server.service.link.LinkGenerationService" level="DEBUG" />
```
## 🔍 功能验证
### 1. 验证冷却机制
```bash
# 测试冷却功能
curl -X POST "http://localhost:8080/api/test/cooldown" \
-H "Content-Type: application/json" \
-d '{"machineId": "test001", "reason": "测试冷却"}'
# 检查冷却状态
curl "http://localhost:8080/api/test/cooldown/test001"
```
### 2. 验证编号唯一性
```sql
-- 检查是否有重复编号
SELECT code_no, COUNT(*) as count
FROM link_task
GROUP BY code_no
HAVING count > 1;
```
### 3. 验证完成检测
监控日志中的以下关键信息:
- 登录缓冲期保护日志
- 完成检测置信度日志
- 状态变更确认日志
## 📊 监控指标
### 1. 数据库监控
```sql
-- 监控冷却记录数量
SELECT
status,
COUNT(*) as count,
MIN(cooldown_end_time) as earliest_end,
MAX(cooldown_end_time) as latest_end
FROM machine_cooldown
GROUP BY status;
-- 监控完成检测日志
SELECT
detection_source,
completion_confidence,
COUNT(*) as count,
AVG(is_confirmed) as confirmation_rate
FROM game_completion_log
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY detection_source, completion_confidence;
```
### 2. 应用监控
关键指标:
- 冷却队列大小:`machineCooldownService.getCooldownQueueSize()`
- 待确认检测数量:`completionDetectionService.getPendingCount()`
- 编号生成重试率:监控日志中的重试次数
## 🚨 故障排除
### 问题1冷却机制不生效
**症状**设备仍在10分钟内重复调用
**排查步骤**
1. 检查数据库连接和表结构
2. 查看冷却服务日志
3. 验证缓存和数据库同步
```sql
-- 检查冷却记录
SELECT * FROM machine_cooldown
WHERE machine_id = '问题设备ID'
ORDER BY created_at DESC LIMIT 5;
```
### 问题2误判完成状态
**症状**:用户刚登录就被标记为完成
**排查步骤**
1. 检查登录缓冲期配置
2. 查看完成检测日志
3. 验证置信度阈值设置
```sql
-- 检查完成检测日志
SELECT * FROM game_completion_log
WHERE machine_id = '问题设备ID'
ORDER BY created_at DESC LIMIT 10;
```
### 问题3编号仍然重复
**症状**:数据库中出现重复编号
**排查步骤**
1. 验证唯一索引是否生效
2. 检查编号生成日志
3. 确认重试机制工作正常
```sql
-- 强制检查唯一约束
ALTER TABLE link_task ADD CONSTRAINT uk_code_no_check UNIQUE (code_no);
```
## 🔄 回滚方案
如果新版本出现问题,可以按以下步骤回滚:
### 1. 代码回滚
```bash
# 恢复原版本代码
git checkout HEAD~1 -- src/main/java/com/gameplatform/server/service/
# 重新部署
mvn clean package -DskipTests
```
### 2. 数据库回滚
```sql
-- 保留数据,只移除新表
DROP TABLE IF EXISTS machine_cooldown;
DROP TABLE IF EXISTS game_completion_log;
DROP TABLE IF EXISTS code_sequence;
DROP TABLE IF EXISTS system_monitor;
-- 移除新增索引
ALTER TABLE link_task DROP INDEX idx_machine_status;
ALTER TABLE link_task DROP INDEX idx_status_updated;
ALTER TABLE link_task DROP INDEX idx_login_time;
```
**注意**`uk_code_no` 唯一索引建议保留,因为它解决了编号重复问题。
## 📈 性能优化建议
### 1. 数据库优化
```sql
-- 定期清理过期数据
DELETE FROM machine_cooldown
WHERE status = 'EXPIRED'
AND updated_at < DATE_SUB(NOW(), INTERVAL 7 DAY);
DELETE FROM game_completion_log
WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
```
### 2. 缓存优化
- 适当调整冷却缓存大小
- 定期清理过期缓存记录
- 监控缓存命中率
### 3. 并发优化
- 考虑使用分布式锁Redis
- 优化数据库连接池配置
- 调整事务隔离级别
## 📋 部署检查清单
- [ ] 数据库脚本执行完成
- [ ] 新文件添加到项目
- [ ] 现有文件更新完成
- [ ] 配置文件更新
- [ ] 日志配置调整
- [ ] 应用重启成功
- [ ] 功能验证通过
- [ ] 监控指标正常
- [ ] 回滚方案准备就绪
## 📞 技术支持
如在实施过程中遇到问题,请:
1. 收集相关日志文件
2. 记录具体错误信息
3. 提供复现步骤
4. 说明当前系统状态
这样可以更快速地定位和解决问题。