Files
game_server/COMPLETION_IMAGE_ALL_TRIGGERS.md

179 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 完成图片保存 - 所有触发点总结
## ✅ 已完成
现在系统中所有任务完成的场景都会自动保存图片!
## 📍 任务完成的所有触发点
### 1. GameCompletionDetectionService游戏完成检测服务
**位置**: `src/main/java/com/gameplatform/server/service/detection/GameCompletionDetectionService.java`
**触发条件**:
- 设备状态为"已打完"(高置信度)→ 立即完成
- 设备状态为"空闲"(中等置信度)→ 二次确认后完成
- 登录超过30秒后才检测避免误判
**触发来源**:
- `EVENT_LISTENER`: 设备状态更新事件
- `REGION_SELECT`: 选区请求时主动检查
- `MANUAL`: 手动触发
**图片保存**: ✅ 已集成第232行
---
### 2. DeviceStats设备统计服务
**位置**: `src/main/java/com/gameplatform/server/device/DeviceStats.java`
**触发条件**:
- 设备状态为"空闲"
- 存在 LOGGED_IN 任务
- 任务登录时间超过 3 分钟
**触发频率**: 每30秒定时任务
**完成原因**: `AUTO_COMPLETE_IDLE_3M`
**图片保存**: ✅ 已集成第381行
**日志示例**:
```
自动完成任务codeNo=FYLAYKEA device=rr0 loginAt=2025-11-03T19:48:29.062 超过3分钟
```
---
### 3. DeviceAllocationService设备分配服务
**位置**: `src/main/java/com/gameplatform/server/service/link/DeviceAllocationService.java`
**触发条件**:
- 任务状态为 LOGGED_IN
- 距离上次更新时间超过 30 分钟
**触发时机**: 尝试分配新设备前检查
**完成原因**: `LOGGED_IN超过30分钟自动完成`
**图片保存**: ✅ 已集成第173行
**日志示例**:
```
自动完成LOGGED_IN链接codeNo=ABC123, device=f1, updatedAt=2025-11-03T19:00:00, 超过30分钟
```
---
### 4. DeviceStatusCheckService设备状态检查服务
**位置**: `src/main/java/com/gameplatform/server/service/device/DeviceStatusCheckService.java`
**触发条件**:
- 设备状态为"空闲"
- 完成检测服务未触发(兜底机制)
- 存在 LOGGED_IN 任务
**完成原因**: `状态已完成空闲兜底触发原因xxx`
**图片保存**: ✅ 已集成第102行
**特点**: 批量完成所有设备上的 LOGGED_IN 任务
---
## 🎯 完整流程图
```mermaid
graph TD
A[任务变为 COMPLETED] --> B{触发来源}
B -->|检测服务| C[GameCompletionDetectionService]
B -->|设备统计| D[DeviceStats]
B -->|设备分配| E[DeviceAllocationService]
B -->|状态检查| F[DeviceStatusCheckService]
C --> G[异步保存4张图片]
D --> G
E --> G
F --> G
G --> H[并发下载图片]
H --> I[保存到本地文件系统]
I --> J[更新数据库记录]
J --> K[24小时后自动清理]
```
## 📊 完成场景对比
| 触发服务 | 完成条件 | 检测频率 | 置信度 | 缓冲期 |
|---------|----------|----------|--------|--------|
| GameCompletionDetectionService | "已打完"或"空闲" | 实时 | 高/中 | 30秒 |
| DeviceStats | 空闲且登录>3分钟 | 30秒 | 高 | 无 |
| DeviceAllocationService | LOGGED_IN>30分钟 | 按需 | 高 | 无 |
| DeviceStatusCheckService | 空闲兜底 | 按需 | 中 | 无 |
## 🔍 验证方法
### 查看日志
```bash
# 查看所有完成相关日志
tail -f logs/server.log | grep -E "自动完成|完成图片"
# 查看特定链接的图片保存
tail -f logs/server.log | grep "codeNo=FYLAYKEA"
```
### 查询数据库
```sql
-- 查看最近完成且保存了图片的任务
SELECT
code_no,
status,
reason,
completed_points,
completion_images_saved_at,
JSON_EXTRACT(completion_images, '$.totalCount') as image_count
FROM link_task
WHERE status = 'COMPLETED'
AND completion_images_saved_at IS NOT NULL
ORDER BY completion_images_saved_at DESC
LIMIT 10;
```
### 检查文件系统
```bash
# 查看今天保存的所有图片
ls -lh completion-images/$(date +%Y%m%d)/
# 查看特定任务的图片
find completion-images -name "*FYLAYKEA*" -type d
ls -lh completion-images/*/FYLAYKEA/
```
## 📝 日志关键字
-**成功保存**: `完成图片保存成功`
- ⚠️ **保存失败**: `完成图片保存失败`
- 📸 **开始保存**: `开始异步保存完成图片`
- 🔍 **任务完成**:
- `任务.*已标记完成`
- `自动完成任务`
- `自动完成LOGGED_IN链接`
- `空闲兜底`
## 🎉 总结
**所有4个触发点都已集成图片保存功能**
不管任务是通过哪种方式完成的(智能检测、超时自动完成、兜底机制等),系统都会:
1. ✅ 自动保存4张完成图片
2. ✅ 更新数据库记录
3. ✅ 24小时后自动清理
4. ✅ 异步执行不阻塞主流程
---
**更新时间**: 2025-11-03
**版本**: v1.1.0 (完整覆盖所有触发点)