Files
game_server/docs/终端用户接口文档.md
zyh 3847250c2b feat: 添加用户端链接状态查询接口及自动刷新逻辑
主要修改:
1. 在LinkController中新增获取用户链接状态的接口,支持通过linkId或codeNo查询。
2. 在LinkStatusService中实现用户链接状态查询逻辑,包含自动刷新和二维码更新功能。
3. 更新LinkTask实体,添加needRefresh、refreshTime、qrCreatedAt和qrExpireAt字段以支持新功能。
4. 在ScriptClient中新增检查空闲设备、选区、刷新、检查上号状态等操作的实现。
5. 更新SecurityConfig,允许用户端获取链接状态接口公开访问。

技术细节:
- 新增UserLinkStatusResponse DTO以支持用户链接状态的返回格式。
- 通过脚本端接口实现链接状态的自动刷新和二维码信息更新。
2025-08-26 18:07:44 +08:00

128 lines
3.9 KiB
Markdown
Raw Permalink 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. 获取链接状态接口
**接口:** `GET /api/link/status?code={code}`
**业务逻辑:**
1. 解密和验证code参数包含linkId、签发时间、过期时间等
2. 检查链接是否过期默认24小时
3. 从数据库查询链接当前状态
4. 如果状态为USING检查二维码是否仍有效
5. 返回链接状态和相关信息
**需要的数据表字段:**
```sql
link_task表需要字段
- id (链接ID)
- code_no (编号,全局唯一)
- status (状态: NEW/USING/LOGGED_IN/REFUNDED/EXPIRED)
- region (选择的区域: Q/V/null)
- need_refresh (是否需要刷新)
- refresh_time (刷新时间,用于10秒等待逻辑)
- qr_created_at (二维码创建时间)
- qr_expire_at (二维码过期时间)
- created_at (链接创建时间)
- expire_at (链接过期时间,默认24小时)
- times (次数)
- quantity (数量)
```
### 2. 选区接口
**接口:** `POST /api/link/select-region`
**请求体:** `{ code: string, region: "Q" | "V" }`
**业务逻辑:**
1. 验证code和region参数
2. 检查链接状态只有NEW状态才能选区
3. 如果need_refresh=true检查是否已等待10秒
4. 调用脚本端分配空闲设备: `GET http://36.138.184.60:1234/yijianwan_netfile/readAllMsg?文件名=判断分数`
5. 调用脚本端选区: `POST http://36.138.184.60:1234/yijianwan_netfile/saveMsg?文件名=判断系统&编号={region}`
6. 等待脚本端生成二维码(轮询检查二维码文件是否存在)
7. 更新数据库状态为USING记录二维码创建和过期时间
8. 返回二维码信息
**数据库操作:**
- 更新link_task状态为USING
- 记录region、qr_created_at、qr_expire_at
- 设置need_refresh=false
### 3. 刷新接口
**接口:** `POST /api/link/refresh`
**请求体:** `{ code: string }`
**业务逻辑:**
1. 验证code参数
2. 调用脚本端刷新: `POST http://36.138.184.60:1234/yijianwan_netfile/saveMsg?文件名=判断刷新&编号=刷新`
3. 设置need_refresh=true记录refresh_time
4. 返回等待时间默认10秒
**数据库操作:**
- 设置need_refresh=true
- 记录refresh_time为当前时间
### 4. 轮询上号接口
**接口:** `GET /api/link/poll-login?code={code}`
**业务逻辑:**
1. 验证code参数
2. 检查链接状态只有USING状态才能轮询
3. 调用脚本端检查上号状态: `GET http://36.138.184.60:1234/yijianwan_netfile/readMsg?文件名=判断上号&对象名={code_no}`
4. 如果返回"已上号"更新状态为LOGGED_IN
5. 返回上号结果和资源信息
**数据库操作:**
- 如果已上号更新status为LOGGED_IN
### 5. 二维码代理接口(可选)
**接口:** `GET /api/link/qr.png?code={code}`
**业务逻辑:**
1. 验证code参数
2. 获取对应的编号
3. 代理请求: `http://36.138.184.60:12345/{编号}/二维码.png`
4. 返回图片数据
### 6. 脚本端适配服务类
需要创建ScriptClient服务来封装与脚本端的交互
**方法包括:**
- `checkAvailableDevice()` - 检查空闲设备
- `selectRegion(codeNo, region)` - 选区
- `refresh(codeNo)` - 刷新
- `checkLoginStatus(codeNo)` - 检查上号状态
- `getQrCodeUrl(codeNo)` - 获取二维码URL
- `getTargetScore(codeNo)` - 获取目标分数
### 7. 需要的配置项
在system_config表中需要配置
- `qr_expire_seconds` - 二维码有效期默认60秒
- `refresh_wait_seconds` - 刷新等待时间默认10秒
- `link_expire_hours` - 链接有效期默认24小时
### 8. 错误处理
- 401/403链接无效或已篡改
- 410链接已过期
- 423需要刷新等待
- 504脚本端超时
### 9. 日志记录
需要记录的操作日志:
- 链接访问
- 选区操作
- 二维码生成
- 上号结果
- 刷新操作
- 错误信息
这个接口设计是否符合你的理解?有什么需要调整的地方吗?确认无误后我就开始实现代码。