# 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 # 查询玩家 /ban # 封禁 /unban # 解封 /mute # 禁言 /kick # 踢下线 /grant # 发放物品 /revoke # 回收物品 /adjust # 调整货币 /teleport # 传送 /resurrect [restore_realm] # 复活 /trigger [region_id] # 触发事件 /broadcast # 全服公告 /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 动态配置,服务端实现时以运行时配置为准,不硬编码。*