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

3.9 KiB
Raw Permalink Blame History

根据需求文档分析,我理解的后端需要实现以下接口和业务逻辑:

后端接口设计文档

1. 获取链接状态接口

接口: GET /api/link/status?code={code}

业务逻辑:

  1. 解密和验证code参数包含linkId、签发时间、过期时间等
  2. 检查链接是否过期默认24小时
  3. 从数据库查询链接当前状态
  4. 如果状态为USING检查二维码是否仍有效
  5. 返回链接状态和相关信息

需要的数据表字段:

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. 日志记录

需要记录的操作日志:

  • 链接访问
  • 选区操作
  • 二维码生成
  • 上号结果
  • 刷新操作
  • 错误信息

这个接口设计是否符合你的理解?有什么需要调整的地方吗?确认无误后我就开始实现代码。