Files
cursor/plans/free_credits_验收核查_c1eade6d.plan.md
ray zhou f71a5c59af ok
2026-05-29 11:21:40 +08:00

10 KiB
Raw Blame History

name, overview, todos, isProject
name overview todos isProject
Free Credits 验收核查 「首充前免费余额定格与分档释放」的后端核心链路(定格、分档、首档提现、后续 Claim、充值事件、钱包账务已在 slot_console / slot_wallet / slot_pay / slot_lib 落地约 7080%,但尚未达到需求文档 V1.0 全量验收标准;运营后台、客户端 UI、广播、异常风控、部分 API 字段与自动化测试仍缺失或未对齐。
id content status
p0-wallet-atomicity 补齐 Claim+Y1 原子性/回滚;确认是否需要 Deposit Lot pending
id content status
p0-status-api-fields status/buildStatus 增加 total_recharge、show_home_status_bar、show_activity_entry pending
id content status
p0-peak-balance 首页解锁「曾达到门槛」:增加峰值记录或可靠触发点 pending
id content status
p1-admin-config-stats slot_admin 增加 type=11 配置页与统计页(对接 innerapi pending
id content status
p1-refund-risk 实现充值退款/拒付暂停未释放档位(文档 20.1 pending
id content status
p2-frontend-broadcast 前端仓实现 UI/广播;本仓可增加 broadcast API pending
id content status
p2-tests 按文档 22.1/22.2 补充自动化或验收用例 pending
false

首充前免费余额定格与分档释放 — 实现完成度核查

结论:未实现完。 后端主流程可联调,但对照 需求文档 第 22 节验收标准,仍有若干 P0 账务/规则缺口 与大量 前端/运营/统计 范围未覆盖。


实现分布(已落地)

flowchart TB
  subgraph console [slot_console]
    RechargeEvent --> FreeCreditsLogic
    EventBus --> FreeCreditsLogic
    FreeCreditsLogic --> DB[(free_credits_player/package)]
    ApiCtrl[FreeCreditsController] --> FreeCreditsLogic
    Lobby[LobbyController.frontData] --> FreeCreditsLogic
    Inner[innerapi FreeCreditsController] --> DB
  end
  subgraph wallet [slot_wallet]
    FreeCreditsLogic --> WalletLogic
    WalletLogic --> freeze[freeCreditsFreeze]
    WalletLogic --> claim[freeCreditsClaim]
    claim --> Y1[createTask SOURCE_TYPE_FREE]
  end
  subgraph pay [slot_pay]
    firstCashout[firstCashout API] --> WithdrawalOrder
    WithdrawalOrder --> MQ[FreeCreditsFirstCashout*]
    MQ --> EventBus
  end
模块 关键文件 覆盖的需求章节
领域与状态机 FreeCreditsLogic.php 5.35.9 核心规则
数据表 install.sql L3686 活动池 + 档位
活动配置 RechargeGiftConfigModel.php TYPE_FREE_CREDITS=11 17 配置(读库)
客户端 API FreeCreditsController.php status / claim / firstCashout
大厅聚合 LobbyController.php free_credits 7 状态条数据源(部分)
充值事件 RechargeEvent.php 5.3 首充定格、5.5 累计充值解锁
首页解锁 EventBus.php win/bonus 等 → syncHomeWithdrawUnlocked 5.2
钱包原子能力 WalletLogic.php 15.215.4
首档提现 WithdrawalOrderEntity.php + EventWithdrawal.php 5.6、15.3、20.2
运营统计 API innerapi/FreeCreditsController.php 18.118.2(简化版)

按需求章节对照22.1 核心规则)

验收项(文档 22.1 实现情况 说明
未达 $50 点 Withdraw 提示 前端 后端 status 返回 win_threshold / home_withdraw_unlocked,无专用提示 API
曾达 $50 后输回仍解锁 部分 已解锁用户靠 home_withdraw_unlocked=1 保持;未持久化历史峰值,仅在 MQ 事件时若 balance >= threshold 才写库,存在漏解锁边界(例如达峰后无 win/bonus 类事件即输掉)
任意入口首充定格 RechargeEvent + handleRechargefrozenAmount = balance_after - wallet_amount
首充失败不定格 仅充值成功 MQ 触发
定格后余额扣除、活动展示 freeCreditsFreeze + player/package 记录
累计未满 $50 第一档不可提现 首包 STATUS_LOCKED 直至 wallet.r >= recharge_unlock_amount
累计满 $50 第一档可提现 advanceByRecharge 解锁 package_no=1
定格 < $20 时第一档=定格额 min(frozen, first_cash_amount)
第一档提现成功后关首页状态条 后端未显式字段 STATUS_FIRST_CASH_DONE,但 buildStatus 未返回 show_home_status_bar 等 UI 开关,需前端自行推断
后续充值只解锁下一档 max_unlock_per_recharge + nextLockedReleasePackage
Claim 入 Deposit + Y1 部分 入 deposit_balance + createTask(SOURCE_TYPE_FREE)无 Deposit Lot(文档 15.4、22.2
全部完成关活动入口 部分 STATUS_COMPLETED=10API 未返回 show_activity_entry 布尔字段

按需求章节对照22.2 账务)

验收项 实现情况 风险
定格有钱包流水 BIZ_TYPE_FREE_CREDITS_FREEZE
定格前后余额正确 addLog 记录
第一档不进普通钱包 独立 free_credit_first_cashout,跳过 withdrawFrozen
Claim 创建 Deposit Lot 全仓库无 DepositLot/deposit_lot 实现
Claim 创建 Y1 createTask 在钱包事务 commit 之后;失败仅打日志,不满足 文档 20.3「流水任务失败整体回滚」
重复回调不重复定格 frozen_amount_qf > 0 跳过
重复 Claim 不重复入账 部分 package 状态 + claim_biz_id 唯一;钱包层 未见 biz_id 幂等查重

明确未实现 / 未对齐项

P0影响验收或资金一致性

  1. Deposit Lot:文档 15.4 / 22.2 要求 Claim 后创建;当前仅 inc deposit + Y1 task。
  2. Claim 与 Y1 原子性freeCreditsClaim 先 commit 入账,再 createTask;与 20.3 冲突。
  3. 充值退款/拒付暂停档位(文档 20.1FreeCreditsLogic 无 refund/chargeback 处理。
  4. status API 缺累计充值进度:定格后 UI 需要 $9.99 / $50(文档 6.3、7.3buildStatus 未返回 total_recharge(内部用 wallet.r,未透出)。
  5. 「曾经达到 $50」:无 peak_balance 字段;依赖事件驱动 syncHomeWithdrawUnlocked,与 5.2 字面规则不完全一致。

P1运营与配置

  1. 后台配置模块(文档 17backend/slot_admin / slot_admin_vue TYPE_FREE_CREDITS=11 的 CRUD 页面;仅能手工维护 s_recharge_gift_config.ext_config
  2. 后台统计页(文档 18仅有 innerapi 简化接口;列表缺 渠道、时间范围、第一档状态、排序项、累计充值、完成进度 等字段/筛选项。
  3. 可配置 Y1 倍数(文档 17 后续档打码倍数):代码写死 createTask(0, fee, SOURCE_TYPE_FREE),未读 ext_config
  4. 状态机 STATUS_FROZEN=2:模型定义了但 Logic 从未赋值(定格后直接 DEPOSIT_PENDING / FIRST_CASH_READY)。

P2产品体验 / 文档其他章节)

  1. 客户端 UI(文档 614slot_pwa 等仓库 零引用 free_credits首页状态条、Free Play to Go、独立提现页、广播模块均未实现原开发计划也标明前端另仓
  2. 广播模块(文档 13无最近 10 条提现/领取记录 API。
  3. 注册赠送改 $30(文档 19与本活动解耦未在本需求代码变更中验证是否已改配置/落地页。
  4. 自动化测试:无 FreeCredits 相关单测/集成测试。

与现有开发计划的一致性

free_credits_release 计划implement-console-core 仍为 pending与代码现状Logic 已较完整)不一致;test-acceptance 标 completed 但仓库内 无测试文件,建议以文档 22 节手工/自动化用例重新验收。


建议验收顺序(若需补齐)

  1. 手工走通 P0 账务用例:首充定格幂等、满 $50 解锁、首档提现回调、顺序 Claim、重复 Claim/回调。
  2. 补齐 status 字段total_rechargeshow_home_status_barshow_activity_entrycurrent_balance
  3. 对齐钱包Deposit Lot若钱包规范要求、Claim+Y1 同事务或补偿回滚。
  4. 运营slot_admin 增加 type=11 配置页 + 统计页对接 innerapi。
  5. 前端仓:按文档 614 接 API本 monorepo 外)。
  6. 补测试:覆盖 22.1 / 22.2 表格各行。

总览评分(仅供沟通)

范围 完成度(估)
后端核心状态机 + 充值/提现/Claim 链路 ~7585%
钱包账务与文档完全一致 ~60%
客户端 API 字段/UI 支撑 ~50%
运营后台配置与统计 ~25%
前端 UI / 文案 / 广播 ~0%(本仓库)
自动化测试 ~0%

综合:需求文档 V1.0 不能判定为「已全部实现」;可判定为「后端 MVP 已具备,待补齐账务细节、运营与前端后全量验收」。