163 lines
10 KiB
Markdown
163 lines
10 KiB
Markdown
---
|
||
name: Free Credits 验收核查
|
||
overview: 「首充前免费余额定格与分档释放」的后端核心链路(定格、分档、首档提现、后续 Claim、充值事件、钱包账务)已在 slot_console / slot_wallet / slot_pay / slot_lib 落地约 70–80%,但尚未达到需求文档 V1.0 全量验收标准;运营后台、客户端 UI、广播、异常风控、部分 API 字段与自动化测试仍缺失或未对齐。
|
||
todos:
|
||
- id: p0-wallet-atomicity
|
||
content: 补齐 Claim+Y1 原子性/回滚;确认是否需要 Deposit Lot
|
||
status: pending
|
||
- id: p0-status-api-fields
|
||
content: status/buildStatus 增加 total_recharge、show_home_status_bar、show_activity_entry
|
||
status: pending
|
||
- id: p0-peak-balance
|
||
content: 首页解锁「曾达到门槛」:增加峰值记录或可靠触发点
|
||
status: pending
|
||
- id: p1-admin-config-stats
|
||
content: slot_admin 增加 type=11 配置页与统计页(对接 innerapi)
|
||
status: pending
|
||
- id: p1-refund-risk
|
||
content: 实现充值退款/拒付暂停未释放档位(文档 20.1)
|
||
status: pending
|
||
- id: p2-frontend-broadcast
|
||
content: 前端仓实现 UI/广播;本仓可增加 broadcast API
|
||
status: pending
|
||
- id: p2-tests
|
||
content: 按文档 22.1/22.2 补充自动化或验收用例
|
||
status: pending
|
||
isProject: false
|
||
---
|
||
|
||
# 首充前免费余额定格与分档释放 — 实现完成度核查
|
||
|
||
**结论:未实现完。** 后端主流程可联调,但对照 [需求文档](file:///Users/ray/Documents/project/www/slot/docs/requirements/首充前免费余额定格与分档释放需求文档.md) 第 22 节验收标准,仍有若干 **P0 账务/规则缺口** 与大量 **前端/运营/统计** 范围未覆盖。
|
||
|
||
---
|
||
|
||
## 实现分布(已落地)
|
||
|
||
```mermaid
|
||
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](file:///Users/ray/Documents/project/www/slot/slot_console/app/api/logic/FreeCreditsLogic.php) | 5.3–5.9 核心规则 |
|
||
| 数据表 | [install.sql](file:///Users/ray/Documents/project/www/slot/slot_console/db/install.sql) L36–86 | 活动池 + 档位 |
|
||
| 活动配置 | [RechargeGiftConfigModel.php](file:///Users/ray/Documents/project/www/slot/slot_console/app/model/common/RechargeGiftConfigModel.php) `TYPE_FREE_CREDITS=11` | 17 配置(读库) |
|
||
| 客户端 API | [FreeCreditsController.php](file:///Users/ray/Documents/project/www/slot/slot_console/app/api/controller/FreeCreditsController.php) | status / claim / firstCashout |
|
||
| 大厅聚合 | [LobbyController.php](file:///Users/ray/Documents/project/www/slot/slot_console/app/napi/controller/LobbyController.php) `free_credits` | 7 状态条数据源(部分) |
|
||
| 充值事件 | [RechargeEvent.php](file:///Users/ray/Documents/project/www/slot/slot_console/app/command/event/RechargeEvent.php) | 5.3 首充定格、5.5 累计充值解锁 |
|
||
| 首页解锁 | [EventBus.php](file:///Users/ray/Documents/project/www/slot/slot_console/app/command/EventBus.php) win/bonus 等 → `syncHomeWithdrawUnlocked` | 5.2 |
|
||
| 钱包原子能力 | [WalletLogic.php](file:///Users/ray/Documents/project/www/slot/slot_wallet/app/api/logic/WalletLogic.php) | 15.2–15.4 |
|
||
| 首档提现 | [WithdrawalOrderEntity.php](file:///Users/ray/Documents/project/www/slot/slot_pay/app/entity/WithdrawalOrderEntity.php) + [EventWithdrawal.php](file:///Users/ray/Documents/project/www/slot/slot_pay/app/command/EventWithdrawal.php) | 5.6、15.3、20.2 |
|
||
| 运营统计 API | [innerapi/FreeCreditsController.php](file:///Users/ray/Documents/project/www/slot/slot_console/app/innerapi/controller/FreeCreditsController.php) | 18.1–18.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` + `handleRecharge`,`frozenAmount = 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=10`;API 未返回 `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.1):`FreeCreditsLogic` 无 refund/chargeback 处理。
|
||
4. **status API 缺累计充值进度**:定格后 UI 需要 `$9.99 / $50`(文档 6.3、7.3),`buildStatus` 未返回 `total_recharge`(内部用 `wallet.r`,未透出)。
|
||
5. **「曾经达到 $50」**:无 `peak_balance` 字段;依赖事件驱动 `syncHomeWithdrawUnlocked`,与 5.2 字面规则不完全一致。
|
||
|
||
### P1(运营与配置)
|
||
|
||
6. **后台配置模块**(文档 17):`backend/slot_admin` / `slot_admin_vue` **无** `TYPE_FREE_CREDITS=11` 的 CRUD 页面;仅能手工维护 `s_recharge_gift_config.ext_config`。
|
||
7. **后台统计页**(文档 18):仅有 [innerapi](file:///Users/ray/Documents/project/www/slot/slot_console/app/innerapi/controller/FreeCreditsController.php) 简化接口;列表缺 **渠道、时间范围、第一档状态、排序项、累计充值、完成进度** 等字段/筛选项。
|
||
8. **可配置 Y1 倍数**(文档 17 `后续档打码倍数`):代码写死 `createTask(0, fee, SOURCE_TYPE_FREE)`,未读 `ext_config`。
|
||
9. **状态机 `STATUS_FROZEN=2`**:模型定义了但 Logic **从未赋值**(定格后直接 `DEPOSIT_PENDING` / `FIRST_CASH_READY`)。
|
||
|
||
### P2(产品体验 / 文档其他章节)
|
||
|
||
10. **客户端 UI**(文档 6–14):`slot_pwa` 等仓库 **零引用** `free_credits`;首页状态条、Free Play to Go、独立提现页、广播模块均未实现(原开发计划也标明前端另仓)。
|
||
11. **广播模块**(文档 13):无最近 10 条提现/领取记录 API。
|
||
12. **注册赠送改 $30**(文档 19):与本活动解耦,**未在本需求代码变更中验证**是否已改配置/落地页。
|
||
13. **自动化测试**:无 FreeCredits 相关单测/集成测试。
|
||
|
||
---
|
||
|
||
## 与现有开发计划的一致性
|
||
|
||
[free_credits_release 计划](file:///Users/ray/.cursor/plans/free_credits_release_902566c9.plan.md) 中 `implement-console-core` 仍为 **pending**,与代码现状(Logic 已较完整)不一致;`test-acceptance` 标 completed 但仓库内 **无测试文件**,建议以文档 22 节手工/自动化用例重新验收。
|
||
|
||
---
|
||
|
||
## 建议验收顺序(若需补齐)
|
||
|
||
1. **手工走通 P0 账务用例**:首充定格幂等、满 $50 解锁、首档提现回调、顺序 Claim、重复 Claim/回调。
|
||
2. **补齐 status 字段**:`total_recharge`、`show_home_status_bar`、`show_activity_entry`、`current_balance`。
|
||
3. **对齐钱包**:Deposit Lot(若钱包规范要求)、Claim+Y1 同事务或补偿回滚。
|
||
4. **运营**:slot_admin 增加 type=11 配置页 + 统计页对接 innerapi。
|
||
5. **前端仓**:按文档 6–14 接 API(本 monorepo 外)。
|
||
6. **补测试**:覆盖 22.1 / 22.2 表格各行。
|
||
|
||
---
|
||
|
||
## 总览评分(仅供沟通)
|
||
|
||
| 范围 | 完成度(估) |
|
||
|------|-------------|
|
||
| 后端核心状态机 + 充值/提现/Claim 链路 | ~75–85% |
|
||
| 钱包账务与文档完全一致 | ~60% |
|
||
| 客户端 API 字段/UI 支撑 | ~50% |
|
||
| 运营后台配置与统计 | ~25% |
|
||
| 前端 UI / 文案 / 广播 | ~0%(本仓库) |
|
||
| 自动化测试 | ~0% |
|
||
|
||
**综合:需求文档 V1.0 不能判定为「已全部实现」;可判定为「后端 MVP 已具备,待补齐账务细节、运营与前端后全量验收」。**
|