一些检测仍在等待运行
Docs Build / build-and-deploy (push) Waiting to run
- 移除 ConfigManager 配置管理器类 - 移除 GameManager 全局单例管理器类 - 移除 NetworkManager 网络连接管理器类 - 移除 CharacterData 和 ItemData 数据模型类 - 移除 BagScene、BattleScene、LobbyScene 等场景脚本 - 移除 EncounterBubble 和 EventFeedPanel UI组件脚本 - 更新代理邀请文档中的服务器连接方式 - 更新同步状态表格中的代理任务分配信息 - 添加 MiMo 任务完成总结和审查修复记录
791 行
36 KiB
Markdown
791 行
36 KiB
Markdown
# TDD-08 GM与运营后台设计
|
||
|
||
> 文档类型:技术设计文档(Technical Design Document)
|
||
> 版本:1.0
|
||
> 日期:2026-07-02
|
||
> 关联文档:TDD-04《数据库表结构设计》、TDD-05《API接口设计》、TDD-07《反作弊与安全设计》、PRD-03《热更新与活动系统需求文档》、GDD-06《经济系统设计》、GDD-21《数值平衡与联调参数总表》
|
||
|
||
---
|
||
|
||
## 1. 文档信息
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 目标 | 为《洪荒大陆》挂机手游定义 GM/运营后台的技术设计方案,覆盖 GM 指令系统、经济监控仪表盘、活动配置后台、客服工单系统、数据报表、权限管理六大模块。 |
|
||
| 读者 | 运营策划、客服、后端开发、运维 |
|
||
| 技术栈 | 前端 Vue3 + Element Plus;后端 Gin(独立服务,不走 Nakama);数据源 PostgreSQL 16 / Valkey / Nacos 2.x / Prometheus |
|
||
| 核心约束 | 无任务系统、无赛季重置、概率/机遇驱动;GM 操作不得破坏经济平衡;所有 GM 操作必须审计 |
|
||
|
||
---
|
||
|
||
## 2. 系统总览
|
||
|
||
### 2.1 架构分层
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ GM/运营后台(Vue3 SPA) │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐│
|
||
│ │ GM指令台 │ │ 经济监控 │ │ 活动配置 │ │ 客服工单 │ │数据报表││
|
||
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └───┬────┘│
|
||
└───────┼────────────┼────────────┼────────────┼────────────┼─────┘
|
||
│ │ │ │ │
|
||
┌───────┼────────────┼────────────┼────────────┼────────────┼─────┐
|
||
│ ▼ ▼ ▼ ▼ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ GM API 网关(Gin,独立端口 :8090) │ │
|
||
│ │ - JWT 认证 + RBAC 权限校验 │ │
|
||
│ │ - 操作审计中间件 │ │
|
||
│ │ - 敏感操作二次确认拦截 │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │ │ │ │ │ │
|
||
│ ┌────▼────┐ ┌─────▼────┐ ┌────▼────┐ ┌─────▼────┐ ┌─────▼───┐│
|
||
│ │Nakama │ │Prometheus│ │ Nacos │ │PostgreSQL│ │ Valkey ││
|
||
│ │Go Plugin│ │ + Grafana│ │ 2.x │ │ 16 │ │ ││
|
||
│ └─────────┘ └──────────┘ └─────────┘ └──────────┘ └─────────┘│
|
||
│ 服务端集群 │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 设计原则
|
||
|
||
| 原则 | 说明 |
|
||
|------|------|
|
||
| **审计优先** | 所有 GM 操作写入 `gm_audit_logs`,不可删除、不可篡改 |
|
||
| **最小权限** | GM 角色分级,操作权限逐项授权,非必要不给写权限 |
|
||
| **经济安全** | GM 发放/回收物品、调整货币必须写入 `economy_audit_logs`(TDD-04 §5.4),纳入经济监控 |
|
||
| **服务端权威** | GM 指令最终由 Nakama Go Plugin 或 Gin 后端执行,前端仅提交意图(TDD-07 §2.1) |
|
||
| **配置热更** | 活动/数值参数通过 Nacos 热更,不走 GM 直接改库(PRD-03 §3.2) |
|
||
| **双人确认** | 敏感操作(批量发放、经济调整、配置发布)需双人审批(PRD-03 §3.2) |
|
||
|
||
### 2.3 数据库新增表
|
||
|
||
#### gm_users
|
||
|
||
GM 后台用户表。
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | uuid | PK | |
|
||
| username | varchar(64) | UQ | 登录名 |
|
||
| display_name | varchar(64) | | 显示名 |
|
||
| password_hash | varchar(256) | | bcrypt 哈希 |
|
||
| role | varchar(32) | IX | super_gm / gm / cs / observer |
|
||
| permissions | jsonb | | 细粒度权限列表 |
|
||
| is_active | boolean | | 是否启用 |
|
||
| last_login_at | timestamptz | | |
|
||
| created_at | timestamptz | | |
|
||
| created_by | uuid | FK → gm_users.id | |
|
||
|
||
#### gm_audit_logs
|
||
|
||
GM 操作审计日志(按 `created_at` 月分区,保留 24 个月)。
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | bigint | PK | 雪花 ID |
|
||
| operator_id | uuid | FK → gm_users.id, IX | 操作人 |
|
||
| operator_role | varchar(32) | | 操作时角色 |
|
||
| action | varchar(64) | IX | 操作类型枚举(见 §3.8) |
|
||
| target_type | varchar(32) | | player / character / guild / item / config / event |
|
||
| target_id | varchar(128) | IX | 目标 ID |
|
||
| params | jsonb | | 请求参数快照 |
|
||
| before_snapshot | jsonb | | 操作前状态快照 |
|
||
| after_snapshot | jsonb | | 操作后状态快照 |
|
||
| approval_id | uuid | nullable | 关联审批单(敏感操作) |
|
||
| ip_address | inet | | 操作者 IP |
|
||
| user_agent | varchar(256) | | |
|
||
| result | varchar(16) | | success / failed / rejected |
|
||
| error_message | text | | 失败原因 |
|
||
| created_at | timestamptz | IX | |
|
||
|
||
#### gm_tickets
|
||
|
||
客服工单表。
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | uuid | PK | |
|
||
| ticket_no | varchar(32) | UQ | 工单编号(如 T20260702-0001) |
|
||
| category | varchar(32) | IX | bug / econ_dispute / account / report / suggestion |
|
||
| sub_category | varchar(32) | | 细分类别 |
|
||
| title | varchar(256) | | 标题 |
|
||
| description | text | | 详情 |
|
||
| reporter_player_id | uuid | FK → players.id, IX | 提交玩家 |
|
||
| reporter_character_id | uuid | FK → characters.id | 关联角色 |
|
||
| assigned_to | uuid | FK → gm_users.id, nullable, IX | 分配客服 |
|
||
| priority | smallint | | 1=紧急 2=高 3=中 4=低 |
|
||
| status | varchar(16) | IX | open / assigned / processing / resolved / closed |
|
||
| resolution | text | | 处理结果 |
|
||
| related_battle_id | uuid | nullable | 关联战报(BUG/纠纷) |
|
||
| related_order_id | uuid | nullable | 关联交易订单 |
|
||
| attachments | jsonb | | 截图/附件 URL 列表 |
|
||
| created_at | timestamptz | IX | |
|
||
| assigned_at | timestamptz | | |
|
||
| resolved_at | timestamptz | | |
|
||
| closed_at | timestamptz | | |
|
||
|
||
#### gm_ticket_messages
|
||
|
||
工单对话记录。
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | bigint | PK | |
|
||
| ticket_id | uuid | FK → gm_tickets.id, IX | |
|
||
| sender_type | varchar(16) | | player / gm / system |
|
||
| sender_id | varchar(128) | | 发送者 ID |
|
||
| message | text | | 内容 |
|
||
| attachments | jsonb | | 附件 |
|
||
| created_at | timestamptz | | |
|
||
|
||
#### gm_approvals
|
||
|
||
敏感操作审批单。
|
||
|
||
| 字段 | 类型 | 约束 | 说明 |
|
||
|------|------|------|------|
|
||
| id | uuid | PK | |
|
||
| action | varchar(64) | IX | 审批的操作类型 |
|
||
| target_type | varchar(32) | | |
|
||
| target_id | varchar(128) | | |
|
||
| params | jsonb | | 操作参数 |
|
||
| requested_by | uuid | FK → gm_users.id | 申请人 |
|
||
| approved_by | uuid | FK → gm_users.id, nullable | 审批人 |
|
||
| status | varchar(16) | IX | pending / approved / rejected / expired |
|
||
| reject_reason | text | | 拒绝原因 |
|
||
| created_at | timestamptz | | |
|
||
| decided_at | timestamptz | | |
|
||
| expires_at | timestamptz | | 超时自动过期(默认 24h) |
|
||
|
||
---
|
||
|
||
## 3. GM 指令系统
|
||
|
||
### 3.1 玩家管理
|
||
|
||
#### 3.1.1 玩家查询
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `GET /api/gm/v1/players?q={keyword}` |
|
||
| 权限 | `player.read`(所有 GM 角色) |
|
||
| 查询维度 | 角色名 / 角色 ID / 玩家 ID / 设备 ID / IP 地址 |
|
||
| 返回字段 | 玩家基础信息、角色列表、当前在线状态、封禁状态、最后登录时间、所在世界层级、境界、货币余额概览 |
|
||
|
||
#### 3.1.2 封禁 / 解封
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/players/{player_id}/ban` / `POST .../unban` |
|
||
| 权限 | `player.ban`(GM 以上) |
|
||
| 参数 | `ban_type`(temporary / permanent)、`duration_hours`、`reason`、`evidence` |
|
||
| 执行逻辑 | 更新 `players.status = 'banned'`;强制断开 WebSocket 连接;Valkey 写入 ban 标记,登录时拦截 |
|
||
| 审计 | 写入 `gm_audit_logs`,action = `player.ban` / `player.unban` |
|
||
|
||
#### 3.1.3 禁言
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/mute` |
|
||
| 权限 | `player.mute`(CS 以上) |
|
||
| 参数 | `duration_hours`、`reason`、`channels`(world / region / guild / private) |
|
||
| 执行逻辑 | Valkey 写入 `mute:{character_id}` 哈希,包含到期时间和频道列表;聊天服务发送前校验 |
|
||
|
||
#### 3.1.4 强制下线
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/kick` |
|
||
| 权限 | `player.kick`(GM 以上) |
|
||
| 执行逻辑 | Nakama 断开指定 session;客户端重连时检测 kick 标记并提示原因 |
|
||
|
||
### 3.2 物品管理
|
||
|
||
#### 3.2.1 发放物品
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/items/grant` |
|
||
| 权限 | `item.grant`(GM 以上,需审批) |
|
||
| 参数 | `item_id`、`quantity`、`reason`、`source_tag`(固定 `GM_GRANT`) |
|
||
| 执行逻辑 | 调用 Nakama Go Plugin 的发放接口;写入 `inventories`,`source_tag = 'GM_GRANT'`;写入 `economy_audit_logs`,`reason_code = 'admin_compensation'` |
|
||
| 审批 | 单次发放价值超过阈值(由 Nacos 配置 `gm.item_grant.approval_threshold` 控制)需双人审批 |
|
||
|
||
#### 3.2.2 回收物品
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/items/revoke` |
|
||
| 权限 | `item.revoke`(GM 以上) |
|
||
| 参数 | `inventory_id`、`quantity`、`reason` |
|
||
| 执行逻辑 | 从 `inventories` 扣除物品;写入 `economy_audit_logs`,`reason_code = 'admin_revoke'` |
|
||
|
||
#### 3.2.3 物品日志查询
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `GET /api/gm/v1/characters/{character_id}/items/logs` |
|
||
| 权限 | `item.read`(CS 以上) |
|
||
| 查询维度 | 时间范围、物品 ID、来源类型(GM / 战斗掉落 / 交易 / 拍卖 / 弟子) |
|
||
| 数据源 | `economy_audit_logs` + `inventories` 联查 |
|
||
|
||
### 3.3 角色管理
|
||
|
||
#### 3.3.1 属性修改
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `PUT /api/gm/v1/characters/{character_id}/stats` |
|
||
| 权限 | `character.modify`(超级 GM) |
|
||
| 参数 | `base_stats`(JSON,可部分更新)、`reason` |
|
||
| 执行逻辑 | 更新 `characters.base_stats`;同步更新 `characters.battle_stats`;写入 `gm_audit_logs`,保留 before/after 快照 |
|
||
| 审批 | 必须双人审批(`gm.approvals` 表) |
|
||
|
||
#### 3.3.2 境界调整
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/realm/adjust` |
|
||
| 权限 | `character.realm`(超级 GM) |
|
||
| 参数 | `target_realm_tier`、`target_minor_realm`、`reason` |
|
||
| 执行逻辑 | 更新 `characters.realm_tier` / `minor_realm` / `world_tier`;写入 `character_realms` 和 `realm_breakthrough_records`(标记来源为 GM) |
|
||
| 审批 | 必须双人审批 |
|
||
|
||
#### 3.3.3 传送
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/teleport` |
|
||
| 权限 | `character.teleport`(GM 以上) |
|
||
| 参数 | `target_region_id` 或 `target_world_tier` |
|
||
| 执行逻辑 | 更新 `characters.world_tier`;写入 `gm_audit_logs` |
|
||
|
||
#### 3.3.4 复活
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/resurrect` |
|
||
| 权限 | `character.resurrect`(GM 以上) |
|
||
| 参数 | `restore_realm`(是否恢复掉境)、`reason` |
|
||
| 执行逻辑 | 更新 `characters.status = 'active'`;根据参数决定是否恢复境界;写入 `gm_audit_logs` + `economy_audit_logs`(若涉及经济恢复) |
|
||
|
||
### 3.4 经济管理
|
||
|
||
#### 3.4.1 货币调整
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/characters/{character_id}/currencies/adjust` |
|
||
| 权限 | `economy.adjust`(超级 GM) |
|
||
| 参数 | `currency_code`、`amount`(正数发放/负数扣除)、`reason` |
|
||
| 执行逻辑 | 原子更新 `currency_balances`;写入 `economy_audit_logs`,`reason_code = 'admin_compensation'` 或 `'admin_revoke'` |
|
||
| 审批 | 金额绝对值超过阈值需双人审批 |
|
||
|
||
#### 3.4.2 交易回滚
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/trades/{trade_id}/rollback` |
|
||
| 权限 | `economy.rollback`(超级 GM) |
|
||
| 参数 | `reason` |
|
||
| 执行逻辑 | 回滚 `market_orders` / `auctions` 成交;恢复双方物品与货币;写入 `economy_audit_logs`,`reason_code = 'admin_rollback'` |
|
||
| 审批 | 必须双人审批 |
|
||
| 约束 | 仅支持 72 小时内的交易回滚 |
|
||
|
||
#### 3.4.3 经济快照
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/economy/snapshot` |
|
||
| 权限 | `economy.snapshot`(GM 以上) |
|
||
| 执行逻辑 | 按世界层级/种族/货币类型汇总全服货币持有量、产出/消耗速率、基尼系数;结果存储到 `economy_snapshots` 表(新增),供仪表盘展示 |
|
||
|
||
### 3.5 世界管理
|
||
|
||
#### 3.5.1 事件触发
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/world/events/trigger` |
|
||
| 权限 | `world.event`(GM 以上) |
|
||
| 参数 | `event_template_id`、`world_tier`、`region_id`(可选)、`duration_minutes` |
|
||
| 执行逻辑 | 调用世界事件调度器,立即生成指定事件实例并广播(PRD-03 §4.2) |
|
||
|
||
#### 3.5.2 Boss 刷新
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/world/boss/spawn` |
|
||
| 权限 | `world.boss`(GM 以上) |
|
||
| 参数 | `boss_template_id`、`region_id`、`difficulty_modifier` |
|
||
| 执行逻辑 | 在指定区域生成 Boss 实例;区域广播通知 |
|
||
|
||
#### 3.5.3 活动开关
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/world/events/{event_id}/toggle` |
|
||
| 权限 | `world.event`(GM 以上) |
|
||
| 参数 | `enabled`(true/false)、`reason` |
|
||
| 执行逻辑 | 更新 Nacos 配置中的活动开关;服务端监听变更后即时生效(PRD-03 §3.2) |
|
||
| 审批 | 关闭全服活动需双人审批 |
|
||
|
||
### 3.6 全服公告
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/broadcast` |
|
||
| 权限 | `broadcast.send`(GM 以上) |
|
||
| 参数 | `content`、`channels`(world / region / all)、`duration_minutes`、`priority`(normal / urgent) |
|
||
| 执行逻辑 | 通过 Nakama 实时推送写入目标频道;紧急公告全服弹窗 |
|
||
|
||
### 3.7 GM 指令快捷操作台
|
||
|
||
运营后台提供命令行风格的快捷操作台,支持以下 GM 指令语法:
|
||
|
||
```
|
||
/query player <keyword> # 查询玩家
|
||
/ban <player_id> <duration> <reason> # 封禁
|
||
/unban <player_id> # 解封
|
||
/mute <char_id> <duration> <reason> # 禁言
|
||
/kick <char_id> # 踢下线
|
||
/grant <char_id> <item_id> <qty> <reason> # 发放物品
|
||
/revoke <char_id> <inv_id> <qty> <reason> # 回收物品
|
||
/adjust <char_id> <currency> <amount> # 调整货币
|
||
/teleport <char_id> <region_id> # 传送
|
||
/resurrect <char_id> [restore_realm] # 复活
|
||
/trigger <event_id> [region_id] # 触发事件
|
||
/broadcast <channels> <message> # 全服公告
|
||
/snapshot # 经济快照
|
||
```
|
||
|
||
所有指令执行前在操作台展示预览(影响范围、目标信息),确认后执行。
|
||
|
||
### 3.8 操作审计
|
||
|
||
GM 操作类型枚举(`gm_audit_logs.action`):
|
||
|
||
| 分类 | action 值 | 说明 |
|
||
|------|-----------|------|
|
||
| 玩家管理 | `player.query` / `player.ban` / `player.unban` / `player.mute` / `player.kick` | |
|
||
| 物品管理 | `item.grant` / `item.revoke` | |
|
||
| 角色管理 | `character.modify_stats` / `character.adjust_realm` / `character.teleport` / `character.resurrect` | |
|
||
| 经济管理 | `economy.adjust_currency` / `economy.rollback_trade` / `economy.snapshot` | |
|
||
| 世界管理 | `world.trigger_event` / `world.spawn_boss` / `world.toggle_event` | |
|
||
| 公告 | `broadcast.send` | |
|
||
| 配置 | `config.publish` / `config.rollback` / `config.approve` | |
|
||
| 审批 | `approval.create` / `approval.approve` / `approval.reject` | |
|
||
| 工单 | `ticket.create` / `ticket.assign` / `ticket.resolve` / `ticket.close` | |
|
||
|
||
---
|
||
|
||
## 4. 经济监控仪表盘
|
||
|
||
### 4.1 实时指标
|
||
|
||
仪表盘从以下数据源采集实时指标:
|
||
|
||
| 指标 | 数据源 | 刷新频率 | 说明 |
|
||
|------|--------|---------|------|
|
||
| 各货币日净产出/消耗比 | `economy_audit_logs` 按 `flow_type` + `currency_code` 聚合 | 5 分钟 | `faucet_sum / sink_sum`,健康区间 0.8~1.2(GDD-06 §14.1) |
|
||
| 交易行均价 | `market_orders` 按 `item_id` + `status='sold'` 聚合 | 15 分钟 | 最近 24h 成交均价,按世界层级分组 |
|
||
| 死亡修复 sink / 总 faucet | `economy_audit_logs` 中 `reason_code = 'death_penalty'` | 1 小时 | 验证高惩罚经济回收是否生效(GDD-06 ✅5) |
|
||
| 鸿蒙紫气净增发/充值额 | `economy_audit_logs` 中 `currency_code` 含紫气相关 | 1 小时 | 监控偷渡补贴(GDD-06 ✅C02) |
|
||
| 在线人数 | Valkey `online:{world_tier}` 计数器 | 实时 | 按世界层级分组 |
|
||
| DAU / 新增 | `players.last_login_at` + `players.created_at` | 每日 08:00 结算 | |
|
||
|
||
### 4.2 异常告警
|
||
|
||
| 告警项 | 检测逻辑 | 阈值(Nacos 可配) | 告警级别 |
|
||
|--------|---------|-------------------|---------|
|
||
| 产出速率异常 | 单货币 faucet 日产量 > 过去 7 日均值 × 系数 | ×2.0 | P1 |
|
||
| 价格操纵 | 单物品 1h 内成交价偏离 24h 均价 | ±50% | P2 |
|
||
| 刷金检测 | 单角色 1h 内 faucet 累计 > 阈值 | 按世界层级配置 | P1 |
|
||
| 异常交易 | 单角色 1h 内 market_orders 成交笔数 > 阈值 | 50 笔 | P2 |
|
||
| 垄断检测 | 单角色持有某物品占全服该物品活跃挂单量 | >30% | P3 |
|
||
| 经济健康度下降 | 综合评分低于阈值 | <60 分 | P1 |
|
||
|
||
告警推送渠道:后台弹窗 + 钉钉/飞书 Webhook + 短信(P1 级别)。
|
||
|
||
### 4.3 经济健康度评分
|
||
|
||
综合评分模型(满分 100):
|
||
|
||
| 维度 | 权重 | 计算方式 |
|
||
|------|------|---------|
|
||
| 货币通胀率 | 30% | 各货币 faucet/sink 比偏离 1.0 的加权平均;偏离越大扣分越多 |
|
||
| 交易活跃度 | 20% | 24h 交易行成交量 / 7 日均值;过低或过高扣分 |
|
||
| 货币基尼系数 | 20% | 各层级货币持有分布的基尼系数;>0.7 扣分 |
|
||
| 死亡修复回收率 | 15% | death_penalty sink / 总 faucet;低于 10% 扣分 |
|
||
| 紫气渗透率 | 15% | 紫气兑换产出 / 总 faucet;超过 5% 扣分 |
|
||
|
||
评分等级:>=80 健康(绿)/ 60~79 关注(黄)/ <60 告警(红)。
|
||
|
||
### 4.4 趋势图表
|
||
|
||
| 图表 | 维度 | 时间范围 |
|
||
|------|------|---------|
|
||
| 货币供需趋势 | 各货币 faucet/sink 每日净额折线图 | 最近 7/14/30 天 |
|
||
| 交易行热力图 | 物品分类 × 世界层级的成交量热力图 | 最近 7 天 |
|
||
| 死亡修复趋势 | 死亡惩罚 sink 占比趋势 | 最近 30 天 |
|
||
| 紫气流向 | 充值 → 兑换 → 消耗漏斗 | 最近 30 天 |
|
||
| 种族货币分布 | 各种族独属货币持有量饼图 | 实时快照 |
|
||
|
||
支持导出 CSV / Excel 报表。
|
||
|
||
---
|
||
|
||
## 5. 活动配置后台
|
||
|
||
### 5.1 Nacos 配置可视化编辑
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `GET /api/gm/v1/configs` / `PUT /api/gm/v1/configs` |
|
||
| 权限 | `config.read` / `config.write` |
|
||
| 功能 | 以树形结构展示 Nacos 中的配置项(PRD-03 §3.1 四大分类:economy / combat / event / map);支持 JSON 编辑器在线修改;修改前展示 diff 对比 |
|
||
| 校验 | 提交时经 JSON Schema + 数值范围校验(PRD-03 §3.4);非法值拒绝提交 |
|
||
| 审批 | 发布到 Nacos 需双人审批(PRD-03 §3.2);审批通过后调用 Nacos Open API 发布 |
|
||
| 回滚 | 展示历史版本列表,支持一键回滚到指定版本(PRD-03 §3.4) |
|
||
|
||
配置分类与关键参数映射:
|
||
|
||
| 分类 | 示例配置键 | 来源 |
|
||
|------|-----------|------|
|
||
| economy | `economy.faucet.afk.output_rate`、`economy.tax.trade_rate`、`economy.sink.repair.cost_rate` | GDD-06 §14.3 |
|
||
| combat | `combat.atb.tick_ms`、`combat.damage.formula.*`、`combat.cap.crit` | GDD-03 / GDD-21 |
|
||
| event | `event.world.trigger_interval`、`event.world.weights.*`、`event.player_initiated.costs.*` | GDD-18 / GDD-22 |
|
||
| map | `map.cross_layer.cost_rate`、`map.降维护佑.damage_cap`、`map.realm_tier.pvp_rule` | GDD-08 / PRD-02 |
|
||
|
||
### 5.2 活动日历管理
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `GET /api/gm/v1/events/calendar` / `POST ...` / `PUT .../{id}` |
|
||
| 权限 | `event.manage`(GM 以上) |
|
||
| 功能 | 接入 PRD-03 §5.3 活动日历服务;以日历视图展示固定副本排程、世界事件预告、玩家发起事件、天启分红 |
|
||
| 操作 | 新增/编辑/删除活动排程;调整活动权重与参数;设置活动预告文案 |
|
||
|
||
活动日历条目结构:
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| event_id | 活动模板 ID |
|
||
| event_type | fixed_dungeon / world_event / player_event / dividend |
|
||
| title | 活动标题 |
|
||
| start_at / end_at | 生效时间范围 |
|
||
| world_tiers | 适用世界层级 |
|
||
| params | 活动参数(掉落倍率、参与人数上限等) |
|
||
| status | scheduled / active / ended / cancelled |
|
||
|
||
### 5.3 灰度发布控制面板
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 接口 | `POST /api/gm/v1/gray-release` / `PUT .../{id}` |
|
||
| 权限 | `config.gray`(GM 以上) |
|
||
| 功能 | 管理 Nacos 灰度配置(PRD-03 §2.4);支持按百分比、分组、渠道、地区多维度灰度 |
|
||
|
||
灰度计划管理:
|
||
|
||
| 操作 | 说明 |
|
||
|------|------|
|
||
| 创建灰度计划 | 指定目标版本、灰度维度(百分比/分组/渠道/地区)、监控阈值 |
|
||
| 灰度推进 | 5% → 20% → 50% → 100%,每步需手动确认 |
|
||
| 自动暂停 | 崩溃率 > 5%、热更失败率 > 5%、启动失败率 > 3% 时自动暂停(PRD-03 §2.4) |
|
||
| 回滚 | 一键回滚到上一稳定版本 |
|
||
|
||
### 5.4 配置变更审批流
|
||
|
||
审批流程(PRD-03 §3.2):
|
||
|
||
```
|
||
运营A编辑配置 → 提交审批单 → 审批队列展示
|
||
→ 运营B(或超级GM)审核 diff → 批准/拒绝
|
||
→ 批准后自动发布到 Nacos
|
||
→ 写入 gm_audit_logs + dynamic_configs(TDD-04 §5.13)
|
||
→ 推送配置版本号到在线客户端
|
||
```
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 审批超时 | 24 小时内未审批自动过期,需重新提交 |
|
||
| 紧急通道 | 超级 GM 可跳过审批直接发布(需二次确认 + 审计日志标记 `emergency`) |
|
||
| 审批队列 | 按优先级排序:P0 经济参数 > P1 战斗参数 > P2 活动配置 > P3 地图配置 |
|
||
|
||
---
|
||
|
||
## 6. 客服工单系统
|
||
|
||
### 6.1 工单分类
|
||
|
||
| 分类 | sub_category 示例 | 优先级 | 说明 |
|
||
|------|-------------------|--------|------|
|
||
| BUG 反馈 | 战斗异常 / 界面错误 / 功能失效 / 数据丢失 | 2~3 | 关联战报 ID / 截图 |
|
||
| 经济纠纷 | 交易异常 / 物品丢失 / 货币异常 / 拍卖纠纷 | 2 | 关联交易订单 / economy_audit_logs |
|
||
| 账号问题 | 封号申诉 / 找回账号 / 角色异常 / 被盗 | 1~2 | |
|
||
| 举报 | 外挂 / 刷金 / 恶意 PK / 辱骂 / 违规昵称 | 2~3 | 关联被举报角色 ID |
|
||
| 建议 | 玩法建议 / 平衡建议 / UI 建议 | 4 | |
|
||
|
||
### 6.2 工单流转
|
||
|
||
状态机:
|
||
|
||
```
|
||
open → assigned → processing → resolved → closed
|
||
│ │
|
||
│ └──→ reopened(玩家不满意)→ processing
|
||
│
|
||
└──→ closed(玩家撤回)
|
||
```
|
||
|
||
| 节点 | 触发 | 说明 |
|
||
|------|------|------|
|
||
| 创建 | 玩家提交 / GM 代建 | 自动生成 ticket_no;按分类自动分配队列 |
|
||
| 分配 | 手动 / 自动轮询 | 按分类分配给对应客服;支持负载均衡 |
|
||
| 处理 | 客服操作 | 客服可查看玩家角色信息、战报、交易记录、审计日志;可在工单内直接执行 GM 指令(受限权限) |
|
||
| 解决 | 客服标记 | 填写 resolution;若涉及补偿则调用物品/货币发放接口 |
|
||
| 关闭 | 玩家确认 / 超时自动关闭 | 解决后 7 天无回复自动关闭 |
|
||
| 重开 | 玩家不满意 | 重开次数上限 3 次 |
|
||
|
||
### 6.3 客服专用操作
|
||
|
||
客服角色可执行的受限 GM 指令:
|
||
|
||
| 指令 | 权限 | 说明 |
|
||
|------|------|------|
|
||
| 查询玩家信息 | `player.read` | 包含角色详情、背包、战报、交易记录 |
|
||
| 发放补偿物品 | `item.grant`(受限) | 仅限预设补偿模板,单次价值不超阈值 |
|
||
| 解封 | `player.unban` | 仅限封禁到期前 24h 内的操作 |
|
||
| 查看经济日志 | `economy.read` | 只读,不可修改 |
|
||
|
||
### 6.4 玩家自助查询
|
||
|
||
玩家在游戏内可自助查询以下信息,减少工单量:
|
||
|
||
| 查询项 | 说明 | 接口 |
|
||
|--------|------|------|
|
||
| 封号原因 | 展示封禁类型、原因、到期时间 | `GET /api/v1/players/me/ban-info` |
|
||
| 交易记录 | 最近 30 天交易行/拍卖成交记录 | `GET /api/v1/characters/{id}/trades` |
|
||
| 战报回看 | 最近 100 场战报列表与详情 | `GET /api/v1/combats?character_id={id}` |
|
||
| 经济流水 | 最近 7 天货币收支明细 | `GET /api/v1/characters/{id}/economy-logs` |
|
||
| 工单状态 | 我的工单列表与进度 | `GET /api/v1/tickets/me` |
|
||
|
||
---
|
||
|
||
## 7. 数据报表
|
||
|
||
### 7.1 核心指标
|
||
|
||
| 指标 | 计算方式 | 刷新频率 |
|
||
|------|---------|---------|
|
||
| DAU | 当日 `last_online_at` 去重 `player_id` 数 | 每日 08:00 |
|
||
| 次日留存 | D0 新增玩家中 D1 有登录的比例 | 每日 |
|
||
| 7 日留存 | D0 新增玩家中 D7 有登录的比例 | 每日 |
|
||
| 30 日留存 | D0 新增玩家中 D30 有登录的比例 | 每日 |
|
||
| LTV | 累计充值额 / 累计新增玩家数 | 每日 |
|
||
| ARPU | 累计充值额 / DAU | 每日 |
|
||
| 付费率 | 有充值记录的玩家数 / DAU | 每日 |
|
||
| 平均在线时长 | 会话时长均值 | 每日 |
|
||
|
||
### 7.2 系统参与度
|
||
|
||
| 系统 | 指标 | 数据源 |
|
||
|------|------|--------|
|
||
| 副本 | 各副本进入人次 / 完成率 / 平均通关时间 | `instance_runs` |
|
||
| 拍卖 | 活跃拍卖数 / 成交率 / 均价 | `auctions` + `auction_bids` |
|
||
| 佣兵 | 发布委托数 / 接取率 / 完成率 | `contracts` |
|
||
| 社交 | 新增关系数 / 活跃关系数 / 帮派创建数 | `social_relations` + `guilds` |
|
||
| 游历 | 游历时长分布 / 事件触发率 / 遭遇完成率 | 离线结算日志 |
|
||
| 渡劫 | 渡劫人次 / 成功率 / 境界分布 | `tribulation_records` |
|
||
| 交易行 | 活跃挂单数 / 成交率 / 税收额 | `market_orders` |
|
||
| 天机阁 | 情报发布数 / 购买率 / 平均价格 | `intelligence_orders` |
|
||
|
||
### 7.3 种族 / 职业 / 境界分布
|
||
|
||
| 维度 | 展示方式 | 数据源 |
|
||
|------|---------|--------|
|
||
| 种族分布 | 饼图,按创建数 / 活跃数 | `characters.race_id` |
|
||
| 职业分布 | 饼图 | `characters` 关联职业数据 |
|
||
| 境界分布 | 柱状图,按 `realm_tier` 分组 | `characters.realm_tier` |
|
||
| 世界层级分布 | 柱状图 | `characters.world_tier` |
|
||
| 种族×境界交叉 | 热力图 | `characters` 聚合 |
|
||
|
||
### 7.4 付费转化漏斗
|
||
|
||
```
|
||
新增注册 → 首次登录 → 完成新手引导 → 首次充值 → 复充 → 大R(累计>阈值)
|
||
```
|
||
|
||
| 阶段 | 转化率计算 |
|
||
|------|-----------|
|
||
| 注册→登录 | 登录玩家数 / 注册玩家数 |
|
||
| 登录→新手完成 | 完成引导数 / 登录数 |
|
||
| 新手→首充 | 首充玩家数 / 完成引导数 |
|
||
| 首充→复充 | 复充玩家数 / 首充玩家数 |
|
||
| 复充→大R | 大R 数 / 复充数 |
|
||
|
||
### 7.5 报表导出
|
||
|
||
| 格式 | 说明 |
|
||
|------|------|
|
||
| CSV | 原始数据导出 |
|
||
| Excel | 含图表的格式化报表 |
|
||
| PDF | 定期运营报告模板 |
|
||
| API | `GET /api/gm/v1/reports/{report_type}?date_range=...`,供外部 BI 工具对接 |
|
||
|
||
---
|
||
|
||
## 8. 权限管理
|
||
|
||
### 8.1 GM 角色分级
|
||
|
||
| 角色 | 角色标识 | 说明 |
|
||
|------|---------|------|
|
||
| 超级 GM | `super_gm` | 全部权限;可审批敏感操作;可跳过审批紧急发布 |
|
||
| 普通 GM | `gm` | 玩家管理/物品管理/世界管理/公告;敏感操作需审批 |
|
||
| 客服 | `cs` | 工单管理;受限物品发放;玩家信息查询 |
|
||
| 角色观察员 | `observer` | 只读权限;查看仪表盘/报表/日志;不可执行任何写操作 |
|
||
|
||
### 8.2 权限矩阵
|
||
|
||
| 权限项 | super_gm | gm | cs | observer |
|
||
|--------|----------|----|----|----------|
|
||
| `player.read` | Y | Y | Y | Y |
|
||
| `player.ban` | Y | Y | N | N |
|
||
| `player.unban` | Y | Y | Y | N |
|
||
| `player.mute` | Y | Y | Y | N |
|
||
| `player.kick` | Y | Y | N | N |
|
||
| `item.read` | Y | Y | Y | Y |
|
||
| `item.grant` | Y | Y(审批) | Y(受限模板) | N |
|
||
| `item.revoke` | Y | Y(审批) | N | N |
|
||
| `character.modify` | Y | N | N | N |
|
||
| `character.realm` | Y | N | N | N |
|
||
| `character.teleport` | Y | Y | N | N |
|
||
| `character.resurrect` | Y | Y | N | N |
|
||
| `economy.read` | Y | Y | Y | Y |
|
||
| `economy.adjust` | Y | N | N | N |
|
||
| `economy.rollback` | Y | N | N | N |
|
||
| `economy.snapshot` | Y | Y | N | Y |
|
||
| `world.event` | Y | Y | N | N |
|
||
| `world.boss` | Y | Y | N | N |
|
||
| `broadcast.send` | Y | Y | N | N |
|
||
| `config.read` | Y | Y | N | Y |
|
||
| `config.write` | Y | Y(审批) | N | N |
|
||
| `config.gray` | Y | Y | N | N |
|
||
| `ticket.read` | Y | Y | Y | Y |
|
||
| `ticket.manage` | Y | Y | Y | N |
|
||
| `report.read` | Y | Y | Y | Y |
|
||
|
||
### 8.3 敏感操作二次确认
|
||
|
||
以下操作执行前必须弹出二次确认对话框,要求输入确认文本(如输入 "CONFIRM"):
|
||
|
||
| 操作 | 确认内容 |
|
||
|------|---------|
|
||
| 永久封禁 | 展示封禁原因、影响范围,输入 "CONFIRM_BAN" |
|
||
| 批量发放(>10 件) | 展示物品清单、总价值,输入 "CONFIRM_GRANT" |
|
||
| 货币调整(>阈值) | 展示金额、目标角色,输入 "CONFIRM_ADJUST" |
|
||
| 交易回滚 | 展示交易详情、影响双方,输入 "CONFIRM_ROLLBACK" |
|
||
| 境界调整 | 展示前后境界、影响,输入 "CONFIRM_REALM" |
|
||
| 配置紧急发布 | 展示变更 diff,输入 "CONFIRM_PUBLISH" |
|
||
|
||
### 8.4 操作审计日志
|
||
|
||
所有 GM 操作(含查询)均写入 `gm_audit_logs`(§2.3),审计日志:
|
||
|
||
- 不可删除、不可修改(数据库层面禁止 DELETE/UPDATE)
|
||
- 按月分区,保留 24 个月
|
||
- 支持按操作人、操作类型、目标、时间范围检索
|
||
- 超级 GM 可导出审计日志用于合规审查
|
||
|
||
---
|
||
|
||
## 9. API 接口清单
|
||
|
||
### 9.1 认证
|
||
|
||
| 接口 | 方法 | 说明 |
|
||
|------|------|------|
|
||
| `/api/gm/v1/auth/login` | POST | GM 用户登录,返回 JWT |
|
||
| `/api/gm/v1/auth/refresh` | POST | 刷新 JWT |
|
||
| `/api/gm/v1/auth/logout` | POST | 登出 |
|
||
|
||
JWT 有效期 4 小时,refresh token 有效期 7 天。JWT payload 包含 `user_id`、`role`、`permissions`。
|
||
|
||
### 9.2 接口总览
|
||
|
||
| 模块 | 接口数 | 前缀 |
|
||
|------|--------|------|
|
||
| 玩家管理 | 5 | `/api/gm/v1/players` |
|
||
| 物品管理 | 3 | `/api/gm/v1/characters/{id}/items` |
|
||
| 角色管理 | 4 | `/api/gm/v1/characters/{id}` |
|
||
| 经济管理 | 3 | `/api/gm/v1/economy` + `/api/gm/v1/trades` |
|
||
| 世界管理 | 3 | `/api/gm/v1/world` |
|
||
| 公告 | 1 | `/api/gm/v1/broadcast` |
|
||
| 配置管理 | 4 | `/api/gm/v1/configs` |
|
||
| 灰度管理 | 3 | `/api/gm/v1/gray-release` |
|
||
| 工单管理 | 6 | `/api/gm/v1/tickets` |
|
||
| 报表 | 5 | `/api/gm/v1/reports` |
|
||
| 审计日志 | 2 | `/api/gm/v1/audit-logs` |
|
||
| 审批 | 3 | `/api/gm/v1/approvals` |
|
||
|
||
### 9.3 限流
|
||
|
||
| 接口类型 | 速率 | Burst |
|
||
|---------|------|-------|
|
||
| 查询接口 | 120 次/分钟 | 20 |
|
||
| 写操作接口 | 30 次/分钟 | 5 |
|
||
| 敏感操作接口 | 10 次/分钟 | 3 |
|
||
|
||
---
|
||
|
||
## 10. 已确认决策记录表
|
||
|
||
| # | 决策 | 来源 |
|
||
|---|------|------|
|
||
| TDD08-✅1 | GM 后台为独立 Gin 服务(端口 8090),不走 Nakama,避免 GM 操作影响游戏服务稳定性 | 本文档 §2.1 |
|
||
| TDD08-✅2 | GM 操作审计日志按月分区保留 24 个月,数据库层面禁止 DELETE/UPDATE | 本文档 §2.3 / §8.4 |
|
||
| TDD08-✅3 | 敏感操作(批量发放、经济调整、境界调整、配置发布、交易回滚)必须双人审批 | PRD-03 §3.2 / 本文档 §3.8 |
|
||
| TDD08-✅4 | GM 发放/回收物品和货币统一写入 `economy_audit_logs`,纳入经济监控 | TDD-04 §5.4 / 本文档 §3.2 |
|
||
| TDD08-✅5 | 经济健康度评分模型由五维度加权组成,阈值通过 Nacos 可配 | 本文档 §4.3 |
|
||
| TDD08-✅6 | 配置变更审批超时 24 小时自动过期;超级 GM 可紧急通道跳过审批(需审计标记) | 本文档 §5.4 |
|
||
| TDD08-✅7 | 客服角色仅限预设补偿模板发放,单次价值受 Nacos 阈值控制 | 本文档 §6.3 |
|
||
| TDD08-✅8 | 玩家自助查询覆盖封号原因、交易记录、战报回看、经济流水、工单状态五类 | 本文档 §6.4 |
|
||
| TDD08-✅9 | 灰度发布支持百分比、分组、渠道、地区四维度;崩溃率 >5% 自动暂停 | PRD-03 §2.4 / 本文档 §5.3 |
|
||
| TDD08-✅10 | GM 角色分四级(超级GM/普通GM/客服/观察员),权限逐项授权 | 本文档 §8.1 |
|
||
|
||
---
|
||
|
||
## 11. 验收标准
|
||
|
||
| # | 验收条目 | 测试方法 |
|
||
|---|----------|----------|
|
||
| 1 | 使用无效 JWT 或过期 token 访问任何 GM 接口时返回 401 | 使用过期/篡改 token 调用接口 |
|
||
| 2 | observer 角色尝试执行封禁/发放/修改等写操作时返回 403 | 用 observer token 调用写接口 |
|
||
| 3 | 所有 GM 操作(含查询)均在 `gm_audit_logs` 中有对应记录,且记录不可被 DELETE/UPDATE | 执行操作后查审计日志;尝试直接 SQL 删除/更新验证约束 |
|
||
| 4 | 敏感操作(境界调整、批量发放超阈值、配置发布)触发审批流,单人操作被拦截,双人审批后才执行 | 提交敏感操作,验证需审批;另一人审批后验证执行 |
|
||
| 5 | GM 发放物品后,`economy_audit_logs` 中有对应 `admin_compensation` 记录,经济监控仪表盘实时反映 | 发放物品后查审计日志和仪表盘 |
|
||
| 6 | 经济监控仪表盘能在 5 分钟内反映最新的货币产出/消耗变化 | 执行货币调整后观察仪表盘刷新 |
|
||
| 7 | 经济异常告警(产出速率 >2 倍均值)在发生后 15 分钟内触发通知 | 模拟异常产出,验证告警触发 |
|
||
| 8 | Nacos 配置修改经审批发布后,所有 Nakama/Gin 实例在 10 秒内生效 | 修改配置发布后,查询各实例配置版本 |
|
||
| 9 | 灰度发布崩溃率超过 5% 阈值时自动暂停灰度 | 模拟崩溃样本,验证自动暂停 |
|
||
| 10 | 客服工单从创建到关闭的完整流转(创建→分配→处理→解决→关闭)可正常执行 | 创建工单并走完全流程 |
|
||
| 11 | 玩家自助查询(封号原因/交易记录/战报回看)返回正确数据 | 用对应状态的玩家账号调用自助查询接口 |
|
||
| 12 | 数据报表 DAU/留存/LTV 计算结果与手动 SQL 查询一致 | 手动 SQL 验证报表数据 |
|
||
| 13 | GM 指令快捷操作台执行 `/ban`、`/grant`、`/adjust` 等指令后,对应数据库状态正确变更 | 执行指令后验证数据库 |
|
||
| 14 | 配置紧急发布通道需输入确认文本 + 审计日志标记 `emergency` | 使用紧急发布后查审计日志 |
|
||
|
||
---
|
||
|
||
## 12. 版本记录
|
||
|
||
| 版本 | 日期 | 修订内容 | 作者 |
|
||
|------|------|----------|------|
|
||
| v1.0 | 2026-07-02 | 初始版本:GM指令系统(6大类)、经济监控仪表盘、活动配置后台(Nacos可视化/活动日历/灰度/审批流)、客服工单系统、数据报表、权限管理(四级角色)、10条决策记录、14条验收标准 | Claude Code |
|
||
|
||
---
|
||
|
||
*本文档数值/阈值均引用 GDD-21《数值平衡与联调参数总表》与 Nacos 动态配置,服务端实现时以运行时配置为准,不硬编码。*
|