server/docs/goldMiner-PRD.md
2026-09-24 17:59:52 +08:00

231 lines
16 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.

# 黄金矿工 PRD
版本:V1.1
日期:2026-09-18
状态:产品规则已通过需求问答对齐;首期商业数值待配置,工程方案待实现验证。
配套文档:[黄金矿工后端整体设计](goldMiner-backend-design.md)
本次修订:进度去重与玩家每期数据合并,不建设进度恢复机制;金币继续由前端发放、后端保存,暂不调整通用金币协议。因此离线补发改为后台保留待发清单,玩家下次上线自动发货并保存,替代 V1.0 的后台离线直接入账。
## 1. 产品目标与交付范围
黄金矿工是每周开放四天的付费闯关奖励活动。符合资格的玩家在活动期间完成主线或无尽关卡,累计推进同一条任务奖励链;单次购买解锁当期全部任务的领奖资格,玩家按任务顺序领取已达标奖励。
本次交付为 PRD 和后端整体设计,不实施客户端、后端代码或线上配置变更。文档中的接口、集合与后台任务均为拟建设内容。客户端展示状态与后续接入要求属于需求说明,不代表本次修改前端。
核心目标:提高活动期内通关参与和付费转化;允许先积累、后购买;保留已付款玩家的已达标奖励,支持后续领取和常见请求重试去重。跨设备与异常中断的到账限制见第 6 节。
## 2. 已确认规则
| 项目 | 确认口径 |
| --- | --- |
| 购买范围 | 一次付费仅解锁一期;下一期正常需要重新购买,延迟支付顺延资格除外 |
| 活动周期 | 北京时间每周四 00:00:00 至周日 23:59:59;全服统一截止 |
| 资格门槛 | 通过主线第 41 关后获得资格;第 41 关本身不累计活动进度 |
| 自动参与 | 达到资格后无需打开活动页面、报名或付费,活动期间即可累计 |
| 有效玩法 | 主线与无尽关卡均可累计;一次有效成功结算增加 1 |
| 任务进度 | 全部任务共享当期累计通关数,领取顺序不阻止后续任务累计 |
| 未购买 | 可以累计并展示已达标奖励,不能领取 |
| 领取顺序 | 必须先领前一任务,才能领取下一任务 |
| 奖励类型 | 首期仅金币;数量可配置,结构保留其他道具扩展能力 |
| 配置项 | 任务数、各档目标、金币数量、单期价格可配置,首期数值待定 |
| 配置生效 | 开期时冻结全期配置;修改下一期生效 |
| 到期处理 | 已购买且达标未领取的奖励自动补发;未达标失效;未购买不能过期新购 |
| 离线处理 | 后台固定待发奖励,下次上线由前端自动发放并保存到后端,离线不直接加金币 |
| 发货方式 | 前端发货、后端保存;本期不改造通用金币协议 |
| 进度去重 | 合并在玩家每期记录中,与计数同时更新;不建设后台进度恢复机制 |
| 数据留存 | 每个玩家每期独立保存活动数据,并冗余当期配置和奖励快照 |
## 3. 周期与参与资格
### 3.1 时间定义
服务端统一使用北京时间(Asia/Shanghai,UTC+8)计算活动周期,持久化时间使用 UTC 毫秒时间戳。
程序判断采用半开区间:`startsAt <= serverAcceptedAt < endsAt`。`endsAt` 为紧接周日之后的周一 00:00:00,避免漏掉周日最后一秒内的毫秒。
示例:2026-09-17 周四 00:00 开始,2026-09-21 周一 00:00 截止;下一期 2026-09-24 周四 00:00 开始。周一至周三不累计活动进度、不新建活动购买订单。
- 周六才达到资格的玩家,仍在本周日结束,没有个人额外四天。
- 活动开始前开局、活动期间有效提交成功结算,可以计入。
- 活动结束后才提交成功结算,不补记到原期;也不能把旧局重试转记到下一期。
- 客户端时钟、客户端声称的完成时间不能延长活动时间。
- 活动内已成功保存的计数,重复请求不再增加。只收到请求但活动进度写入失败时,不视为计数成功;可以在活动内重试,结束后不恢复或补记失败进度。
### 3.2 门槛与起点
门槛为已通过第 41 关,即现有后端 `users.levelAmount >= 41` 的语义。
- 活动内刚通过第 41 关:获得资格,活动进度为 0。
- 随后有效通过第 42 关:活动进度为 1。
- 活动开放前已通过第 41 关:开放后第一笔有效通关开始累计,不追溯历史通关。
- 通过 41 关本身发生在周一至周三:只获得后续参与资格,不产生本期累计。
- 正常失败、退出或复活不增加、不扣减已有进度;复活后最终胜利只算一次成功。
## 4. 任务与奖励
### 4.1 共享累计进度
设当期有效累计通关数为 `P`,任务 i 的目标为 `T[i]`:
```text
任务 i 达标 = P >= T[i]
任务 i 展示进度 = min(P, T[i]) / T[i]
任务 i 可领取 = 本期已购买 AND 活动未结束 AND 任务达标
AND 任务未领取 AND 全部前置任务已领取
```
示例仅解释规则:目标为 3、5、10 时,累计通关 10 次即全部达标,不需要累计 18 次。玩家尚未领取第一档时,后两档仍可达到 100%,但不能跳领。
任务数量不固定为 5;目标必须是正整数、按任务顺序严格递增。首期只配置正整数金币奖励。最后一档达标后活动展示进度封顶,不产生额外奖励;一般关卡统计不受影响。
### 4.2 主线与无尽
活动累计是“当期有效成功次数”,不能用主线等级差代替。无尽模式达到主线上限后,主线等级不再增长,仍须每次成功增加 1。
无尽中再次抽到同一关卡模板是正常的新一局,可以累计;同一局的重复结算、重试上报、重复回包只能累计一次。去重依据应为局/结算标识,不能使用关卡模板 ID。
当前成功结果仍由客户端上报,后端负责资格、活动时间、数据格式、连续性及去重校验。本活动不宣称实现了服务端模拟对局或完整反作弊。
### 4.3 任务展示状态
后端同时返回进度、购买状态、领取状态和不可领取原因,不能只返回一个百分比。
| 场景 | 状态/展示要求 |
| --- | --- |
| 未达标 | 显示进度,不能领取 |
| 达标但未购买 | 显示已达标、购买后可领取 |
| 已购买且达标,但前置任务未领 | 显示 100%,提示需先领取前一档 |
| 已购买、达标且前置已领 | 可领取 |
| 已获领取授权、前端保存尚未确认 | 发货处理中,重试原凭证,下一档暂不可领取 |
| 已领取 | 显示已领取,不可重复领取 |
| 到期已达标未领 | 待自动补发、发货处理中或已补发,不能重新生成一份普通领取奖励 |
| 到期未达标 | 已失效 |
首期按单档领取设计,不新增玩家“一键领取全部”功能。后台到期结算生成有序待发清单;玩家在线时由前端逐档发放、保存和确认,保留每档明细,可以汇总展示结果。
## 5. 购买与延迟支付
### 5.1 正常购买
- 已有资格、活动开放、尚未购买且无顺延权益时,允许购买。
- 所有任务均达标但尚未购买的玩家,在活动截止前仍可购买。
- 服务端按当期冻结配置定价;客户端不得决定商品价格或奖励。
- 以服务端支付确认和权益落库为准,客户端支付成功提示不能自行解锁。
- 购买成功只解锁领奖资格,不自动发放全部奖励。活动内由玩家按顺序领取。
- 同一期已解锁后隐藏购买按钮,后端同时禁止重复购买。
- 首期价格尚未确定,不将示例价格作为上线值。
### 5.2 延迟支付的业务口径
适用前提:订单在原期活动内合法创建,但活动结束后服务端才完成有效支付确认及权益处理。无论实际付款发生在截止前还是截止后,均按下述规则处理。活动结束后不能创建新订单。
| 原期截止时的情况 | 处理 |
| --- | --- |
| 存在已达标、尚未领取的奖励 | 解锁并固定原期这些待发奖励,由前端在线时补发保存;未达标部分失效,不再顺延 |
| 没有已达标、尚未领取的奖励 | 不结算原期奖励,将该订单权益预绑定到紧接的下一期 |
注意:正常在活动内完成权益解锁的玩家,即使最后一档都未完成,也不适用延迟支付顺延规则。已经决定并执行原期结算的订单,即便重复回调时已无剩余奖励,也不能改成顺延。
### 5.3 下一期自动解锁
- “下一期”是原期之后紧接的下一个周四开始的活动期,不是从补偿时间起重新计四天。
- 顺延资格在间隔的周一至周三登记为待生效;这一时段不开放下一期购买。
- 到下一期开期时立即生效:玩家状态为已购买,不显示购买按钮;服务端购买接口也必须检查并拒绝重复购买。
- 下一期进度从 0 开始,采用下一期冻结的完整任务与奖励配置,不补收或退还期与期之间的价格差。资格按“解锁一整期”解释,不作为现金余额。
- 顺延资格仅使用一次。顺延期结束后按普通已购买规则结算,即使未达标,也不再向第三期顺延。
- 不引入可囤积、可选期使用或自动寻找更远活动期的通用兑换券。
工程异常:需通过开期前查单、开期权益检查降低支付确认跨越三天间隔的风险。若异常订单直至目标期已购买或结束后才确认,保留订单并告警,进入人工核对;不静默丢单、不重复解锁、不擅自转移到第三期。正常产品流程不提供此类选择界面。
## 6. 到期结算与补发
到期即停止进度累计、新购和新的普通领取授权。服务端以当期记录中已成功保存的进度冻结结果,不等待或重放独立通关事件。活动内已经固定的领取凭证可以在到期后完成前端保存和确认。
1. 已购买:找出达标但未完成领取的任务,按顺序生成待发清单;已在发货中的任务复用原领取凭证。
2. 未购买:不发奖励;保留截止进度以处理已有订单的延迟确认。
3. 未达标任务失效,不因补发、回调或登录继续累计。
4. 前端按稳定领取凭证去重发货,再将发放后的余额保存至后端;保存成功后确认该档已领取。保存失败只重试保存,不重新加币;确认失败只重试确认。
5. 玩家离线时金币余额不变,后台保留待发奖励;下次登录自动执行前端发货、后端保存并展示明细。关闭展示弹窗不能代替发货确认。
6. 原期补发明细与下一期活动同时存在,旧期通知不能覆盖或阻止新期累计。
领取授权、前端发货、余额保存和领取确认需区分状态,不能在仅生成待发清单时显示已到账。正常同设备重试应保证不重复加币。
本期沿用前端发货与余额整值保存,暂不解决通用金币同步。清除本地记录、跨设备并发或发货后异常中断时,仍可能出现重复发放、漏保存或余额覆盖,不能承诺跨设备严格一次到账;须保留领取凭证和处理状态供核对。该限制不通过后台再次直接加币处理。
## 7. 页面与接口层面的产品要求
本节描述将来的客户端接入行为,本次不实现页面和前端代码。
- 未达到门槛:不提供购买和领取操作。
- 活动开放:展示周期倒计时、任务链、各档金币和累计进度。
- 未购买:展示服务端价格;已购买或顺延自动解锁:不展示购买按钮。
- 间隔期:不购买下一期、不累计下一期;允许查询旧期补发结果。
- 前端取得后端固定的领取凭证及奖励后,按凭证去重增加本地金币,保存余额成功再确认领取;重复响应不再次增加金币。
- 请求超时后查询或重试同一请求,不能以超时判断“未购买/未领取”。
- 活动倒计时以 `serverTime` 和 `endsAt` 校准;倒计时归零后刷新状态。
首页入口美术、动效、自动弹窗频率和具体文案不在本次定稿范围;不以这些尚未设计的表现阻塞后端规则设计。
## 8. 配置与运营
| 配置 | 要求 |
| --- | --- |
| 活动开关 | 支持停止新增购买;不得删除已付款权益和历史结算数据 |
| 门槛 | 首期为已通过 41 关;若支持配置修改,同样从后续期生效 |
| 时区/周期 | 首期固定北京时间、周四至周日 |
| 任务数组 | 数量可配置,序号连续,目标严格递增 |
| 奖励数组 | 首期每档金币数量独立配置;统一 `items[]` 保留道具扩展 |
| 商品/价格 | 服务端商品映射与正整数分金额,首期待定 |
| 配置版本 | 每期固定一份版本和完整内容,不能引用会原地修改的配置 |
数值未确定或配置校验失败时不得开放销售。运营查看应能区分未购买、购买、顺延、手动领取、自动补发和异常订单。
## 9. 玩家每期数据冗余
每名实际参与的玩家,每期有独立记录;未购买但累计过进度的玩家也要记录,不能只保存付费玩家。
至少包含:玩家标识、期标识、起止时间、资格获得时间、配置版本及完整任务奖励快照、累计进度及去重信息、截止进度、每档领取授权/发货确认状态、金额/时间/渠道、购买状态、订单引用、资格来源、原期与顺延期关联、待发清单与通知状态。
记录须能够独立回答“玩家参加哪一期、当时承诺什么奖励、付了哪笔款、达标多少、领了什么、是否顺延”。不得在下一期开启时复用一条记录清空覆盖;不得仅保留配置 ID 后依赖当前配置还原历史。
## 10. 统计与验收
建议事件:活动曝光、首次累计、下单、支付确认、权益解锁、任务达标、手动领取、自动补发、资格顺延、顺延生效、结算失败。携带 `periodId`、`configVersion`、订单/任务标识和资格来源;支付回调、事件重试需去重。
统计口径应区分当期新购收入与前期订单顺延权益,不将顺延生效再次算作一笔支付。
| 验收场景 | 预期 |
| --- | --- |
| 活动中通过第 41 关 | 获得资格,进度为 0 |
| 再通过一关主线或一关无尽 | 进度增加 1 |
| 未打开活动、未购买时成功通关 | 同样累计 |
| 无尽两次新局抽到同一模板 | 累计 2;重复提交其中一局不再增加 |
| 目标 3/5/10,累计 10 | 三档全部达标,第一档未领时不能领取第二档 |
| 未购买但全达标,截止前购买 | 可依次领取全部 |
| 活动前开局、活动内提交胜利 | 计入 |
| 活动内完成、结束后首次提交 | 不计入 |
| 活动进度写入失败 | 普通关卡存档不受阻断;活动内可重试,结束后不补记失败进度 |
| 周一普通通关 | 不增加原期或下一期活动进度 |
| 周日截止时已购、达标未领且离线 | 后台保留待发清单,余额不变;下次上线前端按顺序发放并保存 |
| 同时手动领取与到期补发 | 共用同一档领取凭证,正常同设备处理只发一次 |
| 延迟支付、原期有达标奖励 | 结算原期,无顺延 |
| 延迟支付、原期零可领奖励 | 预绑定紧接的下一期,开期自动已购且无购买按钮 |
| 正常支付但整期无达标奖励 | 本期结束,不顺延 |
| 顺延期结束仍无达标奖励 | 结束,不延至第三期 |
| 原期结算后重复支付回调 | 返回既有处理结果,不能再顺延 |
| 下一期开期与玩家下单并发 | 已有顺延资格先生效,下单被拒绝 |
| 配置中途调整 | 原期目标/奖励/价格不变,下期使用新配置 |
| 新期开启后查询历史 | 旧期完整快照、待发清单和领取凭证仍可追溯 |
| 前端发货后的余额保存失败 | 保留本地待保存状态,重试保存,不再次加币 |
| 余额保存成功后确认领取超时 | 重试原凭证确认,不重复发货;异常跨设备场景保留记录核对 |
## 11. 尚未确定的上线输入
首期任务数量、目标序列、每档金币、价格、正式商品 ID、首次启用日期需运营提供。它们是配置输入,不改变本 PRD 已确认的规则。
发布前还需验证玩家期记录的条件更新、支付对账、调度运行环境,以及客户端通关去重和前端发货保存流程。通用金币协议改造、后台直接入账和进度恢复队列不属于本期上线条件。仅部署活动后端仍不代表完整客户端接入已完成。