45 lines
2.2 KiB
Markdown
45 lines
2.2 KiB
Markdown
---
|
||
name: win返回余额叠加pending
|
||
overview: 仅在 win 派奖流程中,对返回给第三方的余额叠加本局 pending 派奖,解决连续派奖期间玩家看到余额不增长的问题;不改其他接口。
|
||
todos:
|
||
- id: win-response-overlay
|
||
content: 仅在 win is_end=0 返回值叠加 pendingRoundAmount 到 w/withdraw
|
||
status: completed
|
||
- id: idempotent-display-check
|
||
content: 确认 dedupe 命中时返回余额不重复增长
|
||
status: completed
|
||
- id: final-settlement-regression
|
||
content: 确认 is_end=1 结算与 pending 清理行为不受影响
|
||
status: completed
|
||
isProject: false
|
||
---
|
||
|
||
# win 派奖返回余额叠加 pending(仅 win 场景)
|
||
|
||
## 目标
|
||
在不改变真实账务入账时机(仍以 `is_end=1` Final Settlement 为准)的前提下,让第三方在连续派奖时拿到“可展示余额”:
|
||
- `is_end=0`:返回余额包含本局 pending
|
||
- 其他场景:不改
|
||
|
||
## 当前问题定位
|
||
在 [app/api/logic/WalletLogic.php](app/api/logic/WalletLogic.php) 的 `win()` 中:
|
||
- `is_end=0` 已做 pending 累计
|
||
- 但返回值仍是 DB 真实余额(未叠加 pending),导致第三方展示不变
|
||
|
||
## 最小改动方案
|
||
仅修改 [app/api/logic/WalletLogic.php](app/api/logic/WalletLogic.php) 的 `win()`:
|
||
1. 在 `is_end=0` 分支中,累计完成后读取 `pendingRoundAmount = getPendingWinByRound()`。
|
||
2. 返回给第三方时,将 `withdraw`/`w` 做展示叠加:
|
||
- `w = wallet.withdraw_balance + pendingRoundAmount`
|
||
- `withdraw = wallet.withdraw_balance + pendingRoundAmount`
|
||
3. `deposit` / `bonus` 保持真实值(不动)。
|
||
4. `is_end=1` 维持现有逻辑:合并 pending 后走真实结算并清理 pending。
|
||
|
||
## 兼容与风险
|
||
- 仅影响 `type=win` 的返回体,不影响 DB、Lot、流水、下注规则。
|
||
- 若第三方把 `w` 当“可立即下注余额”,会产生语义差异(展示值 > 真实可用);但你当前业务前提是第三方只负责展示。
|
||
|
||
## 验收点
|
||
- 连续 `is_end=0`:返回 `w/withdraw` 逐次增长(包含 pending)
|
||
- 重复 `biz_id` 的 `is_end=0`:返回值不重复增长
|
||
- `is_end=1` 后:返回值与真实结算后余额一致,pending 被清理 |