Files
cursor/plans/移除_releasing_状态_fd4423e0.plan.md
ray zhou f71a5c59af ok
2026-05-29 11:21:40 +08:00

6.7 KiB
Raw Blame History

name, overview, todos, isProject
name overview todos isProject
移除 RELEASING 状态 移除 Free Credits 玩家主状态 `STATUS_RELEASING(7)`,并同步实现「跨档领取 + 解锁不等待上一档 claim」后续档进度仅由 package 表表达玩家主状态停留在第一档生命周期4/5/6直至全部完成10
id content status
remove-releasing-status FreeCreditsPlayerModel 删除 STATUS_RELEASINGadvanceByRecharge 去掉写入 status=7 completed
id content status
cross-claim-logic claim() 去掉顺序校验advanceByRecharge 去掉 nextReadyReleasePackage 解锁门槛 completed
id content status
update-docs-comments 同步 FreeCreditsLogic/Controller PHPDoc 与 install.sql status 注释 completed
id content status
admin-vue-status-map slot_admin_vue freeCreditsStats 删除 status=7 映射与筛选项 completed
id content status
migrate-legacy-7 提供/执行 status=7 历史数据 SQL 修正 completed
id content status
add-tests 补充跨档 claim 与解锁不等待 claim 的单测/集成测 completed
false

移除 STATUS_RELEASING 并支持跨档领取

结论

是的,应去掉 FreeCreditsLogic.php 第 709 行的 $player->save(['status' => STATUS_RELEASING])

是的,后台展示要改slot_admin_vuePLAYER_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/totalclaimed_amount_qf
  • 玩家主状态 → 只描述「第一档相关阶段」,全部档位完成时由现有 refreshPlayerCompletion() 置为 10

STATUS_RELEASING 在全仓库仅写入、从未被读取做分支判断C 端 buildStatus() 原样透出 player.status,去掉后不影响 package 列表展示。

代码改动slot_console

1. 删除 RELEASING 常量与写入

文件:FreeCreditsPlayerModel.php

  • 删除 const STATUS_RELEASING = 7 及注释

文件:FreeCreditsLogic.php advanceByRecharge()

  • 删除循环内 $player->save(['status' => STATUS_RELEASING])
  • 解锁 release 档时不再改玩家主状态(保持 4/5/6 等既有值)

2. 跨档领取:去掉顺序限制

文件:FreeCreditsLogic.php

claim() — 删除顺序校验块(约 295298 行):

$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. 文档注释同步

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

文件:freeCreditsStats/index.vue

  • PLAYER_STATUS_MAP 删除 7: '后续档释放中'
  • playerStatusOptions 自动随之更新(由 map 生成)
  • 可选兼容:保留只读展示 7: '第一档已提现(历史)' 不加入筛选项,避免迁移前偶发裸数字;迁移 SQL 执行后可删

列表「当前状态」列继续读 record.status;后续档进度看已有的「完成进度」「已领取金额」「待释放金额」,不再依赖 releasing 主状态。

测试

slot_console/tests 补充/调整:

场景 预期
两档均为 readyclaim 较高 package_no 成功,不再抛 Please claim credits in order
上一档 ready 未 claim满足充值条件 advanceByRecharge 仍可解锁下一 locked 档
解锁 release 档后 player.status 不变(如仍为 STATUS_FIRST_CASH_DONE
全部 package completed player.status10

不在本次范围