6.7 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 移除 RELEASING 状态 | 移除 Free Credits 玩家主状态 `STATUS_RELEASING(7)`,并同步实现「跨档领取 + 解锁不等待上一档 claim」:后续档进度仅由 package 表表达,玩家主状态停留在第一档生命周期(4/5/6)直至全部完成(10)。 |
|
false |
移除 STATUS_RELEASING 并支持跨档领取
结论
是的,应去掉 FreeCreditsLogic.php 第 709 行的 $player->save(['status' => STATUS_RELEASING])。
是的,后台展示要改:slot_admin_vue 的 PLAYER_STATUS_MAP 需删除 7: '后续档释放中'。
slot_admin PHP 无需改:FreeCreditsStatsController.php 仅透传 slot_console innerapi,不做 status 映射。
背景:为何 status=7 已无意义
原设计里,玩家主状态在「第一档生命周期」之后还有一个独立阶段 releasing(7):
stateDiagram-v2
direction LR
firstCashReady: 4 第一档可提现
firstCashProcessing: 5 第一档处理中
firstCashDone: 6 第一档已提现
releasing: 7 后续档释放中
completed: 10 全部完成
firstCashReady --> firstCashProcessing
firstCashProcessing --> firstCashDone
firstCashDone --> releasing: 解锁后续档时写入7
releasing --> completed
跨档领取后:
- 后续档是否可领、已领多少 → 由
free_credits_package.status表达(后台已有progress_done/total、claimed_amount_qf) - 玩家主状态 → 只描述「第一档相关阶段」,全部档位完成时由现有
refreshPlayerCompletion()置为10
STATUS_RELEASING 在全仓库仅写入、从未被读取做分支判断,C 端 buildStatus() 原样透出 player.status,去掉后不影响 package 列表展示。
代码改动(slot_console)
1. 删除 RELEASING 常量与写入
- 删除
const STATUS_RELEASING = 7及注释
文件:FreeCreditsLogic.php advanceByRecharge()
- 删除循环内
$player->save(['status' => STATUS_RELEASING]) - 解锁 release 档时不再改玩家主状态(保持 4/5/6 等既有值)
2. 跨档领取:去掉顺序限制
claim() — 删除顺序校验块(约 295–298 行):
$nextReady = FreeCreditsPackageModel::nextReadyReleasePackage($player->id);
if (is_null($nextReady) || intval($nextReady->id) !== intval($package->id)) {
throw new BusinessException('Please claim credits in order');
}
保留:package_type=release、归属 uid、status=ready、幂等 biz_id、失败回滚 ready。
advanceByRecharge() — 去掉「存在 ready 后续档则不再解锁」门槛(约 695 行):
// 改前
if ($rechargeAmount < $minRecharge || !is_null(FreeCreditsPackageModel::nextReadyReleasePackage($player->id))) {
return;
}
// 改后:仅校验单笔充值下限
if ($rechargeAmount < $minRecharge) {
return;
}
nextReadyReleasePackage() 方法可保留(暂无其它引用,后续若 C 端需要「推荐下一档」可复用)。
3. 文档注释同步
FreeCreditsLogic::claim()PHPDoc:去掉「须按 package_no 顺序」FreeCreditsController::claim()PHPDoc:去掉「须为当前可领的下一档 / claim in order」install.sqlfree_credits_player.status字段 comment:删除7后续释放中
4. 历史数据修正(建议一次性 SQL)
线上若已有 status=7 的记录,应按第一档 package 还原为主状态,避免后台筛选项去掉 7 后显示裸数字:
UPDATE s_common.free_credits_player p
INNER JOIN s_common.free_credits_package fp
ON fp.player_id = p.id AND fp.package_no = 1
SET p.status = CASE fp.status
WHEN 2 THEN 5 -- 第一档处理中
WHEN 3 THEN 6 -- 第一档已完成
WHEN 1 THEN 4 -- 第一档可提现
ELSE 6
END
WHERE p.status = 7;
(若首档 package 不存在,默认 6 或按业务确认。)
后台展示改动(slot_admin_vue)
- 从
PLAYER_STATUS_MAP删除7: '后续档释放中' playerStatusOptions自动随之更新(由 map 生成)- 可选兼容:保留只读展示
7: '第一档已提现(历史)'不加入筛选项,避免迁移前偶发裸数字;迁移 SQL 执行后可删
列表「当前状态」列继续读 record.status;后续档进度看已有的「完成进度」「已领取金额」「待释放金额」,不再依赖 releasing 主状态。
测试
在 slot_console/tests 补充/调整:
| 场景 | 预期 |
|---|---|
| 两档均为 ready,claim 较高 package_no | 成功,不再抛 Please claim credits in order |
| 上一档 ready 未 claim,满足充值条件 | advanceByRecharge 仍可解锁下一 locked 档 |
| 解锁 release 档后 | player.status 不变(如仍为 STATUS_FIRST_CASH_DONE) |
| 全部 package completed | player.status → 10 |
不在本次范围
docs/requirements/首充前免费余额定格与分档释放需求文档.md§16/§20.3 仍写顺序领取与 releasing — 若需文档对齐可另开任务- C 端前端(slot_pwa 等)若曾按
status===7做 UI 分支需自查;当前仓库内无引用