feat(提现): 新增 100 元档并向客户端下发每档每日次数上限 #218

Merged
guke merged 3 commits from fix-zcy0803 into main 2026-08-05 13:47:24 +08:00
Member
No description provided.
zuochenyong added 3 commits 2026-08-04 21:38:27 +08:00
- WITHDRAW_TIERS_COIN_CASH 新增 100 元档(10000 分, 日 1 次), 常规档由三档变四档;
  「每日只能选一个常规档」的互斥口径不变, 选定后其余三档当天 other_tier_selected。
- withdraw_tier_states / WithdrawTierOut 增加 daily_limit 字段: 客户端只拿 remaining_today
  分不出「0.5 元档日 3 次、今天已提 2 次剩 1」和「10 元档日 1 次、一次没提剩 1」, 角标画不对。
  下发 daily_limit 后, 客户端按 daily_limit>1 且 remaining_today<daily_limit 才展示
  「今日还可提 N 次」。
- 新人档(0.1 / 0.3)同样带上 daily_limit, 保持返回结构一致。
- 配套客户端: shaguabijia-app-android 同名分支 WithdrawTierDto.dailyLimit。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
原文案「今日已比价超过100次,请明天再试」把内部阈值直接抛给用户, 且与客户端各入口
自己写的提示不一致。抽出 COMPARE_DAILY_LIMIT_MESSAGE 常量作为 429 的唯一 detail,
客户端 COMPARE_DAILY_LIMIT_MESSAGE 与之对齐。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Member

🤖 review-pr 深审结论

🟢 可合并 — 新增 100 元提现档 + 下发每档 daily_limit,改动正确、风控复用完整;实跑 13 项相关断言通过(唯一失败经验证为既有、与本 PR 无关)。置信度 0.88。

核对要点

  • 100 元档WithdrawTier(10000, "100", None, 1, False)(金额 10000 分=100 元正确,日限 1,非新人)。下单 create_withdrawwithdraw_tier_states(动态基于 WITHDRAW_TIERS_COIN_CASH) 按 amount_cents 匹配——新档自动被下单校验认可,无需改下单逻辑;复用既有全套风控:档位闸(服务端权威防刷)、金额上下限、原子扣款防并发超额、建单 reviewing 人工审核后才打款、常规档互斥 + 每日计次。
  • daily_limit 契约WithdrawTierOut.daily_limit(默认 1,向后兼容) + wallet.py 各档下发;客户端据此区分「本档可提多次」角标(daily_limit>1 且 remaining_today<daily_limit)。
  • 顺带:比价超限 429 detail 统一为 COMPARE_DAILY_LIMIT_MESSAGE「今日比价额度用完啦…」,与前端 #385/#387 的 ErrorPrompts 文案一致。

构建/测试(已实跑, .venv py3.12.7)

合并最新 main(Already up-to-date)后 pytest tests/test_withdraw_tiers.py tests/test_compare_daily_limit.py13 passed, 1 failed

  • 本 PR 新增/改动的断言全过:6 档下发(含 100)、daily_limit=[1,1,3,1,1,1]、100 档纳入常规档互斥、429 新文案。
  • ⚠️ 唯一失败 test_newbie_tiers_independent_and_once_forever(断言 assert 10 not in amounts,期望新人档 0.1 被拒后消失)——经在 origin/main 上跑同一用例验证:base 同样失败,属既有失败、与本 PR 无关。根因:该测试期望「新人档被拒也算用过→消失」,但代码 used_newbie(wallet.py L748) 只把「进行中/成功」算占用、被拒恢复可提,二者矛盾;本 PR 未改动该逻辑。

建议

  • 本 PR 可合。另行核对 test_newbie_tiers_independent_and_once_foreverused_newbie 口径矛盾(是测试过期、还是「新人档被拒占用」逻辑回归),与本 PR 解耦处理。

🤖 自动深审 · 结论仅供参考,请以人工判断为准

## 🤖 review-pr 深审结论 🟢 **可合并** — 新增 100 元提现档 + 下发每档 `daily_limit`,改动正确、风控复用完整;实跑 13 项相关断言通过(唯一失败经验证为既有、与本 PR 无关)。置信度 0.88。 ### 核对要点 - **100 元档**:`WithdrawTier(10000, "100", None, 1, False)`(金额 10000 分=100 元正确,日限 1,非新人)。下单 `create_withdraw` 从 `withdraw_tier_states`(动态基于 `WITHDRAW_TIERS_COIN_CASH`) 按 `amount_cents` 匹配——**新档自动被下单校验认可,无需改下单逻辑**;复用既有全套风控:档位闸(服务端权威防刷)、金额上下限、原子扣款防并发超额、建单 reviewing 人工审核后才打款、常规档互斥 + 每日计次。 - **daily_limit 契约**:`WithdrawTierOut.daily_limit`(默认 1,向后兼容) + `wallet.py` 各档下发;客户端据此区分「本档可提多次」角标(daily_limit>1 且 remaining_today<daily_limit)。 - **顺带**:比价超限 429 detail 统一为 `COMPARE_DAILY_LIMIT_MESSAGE`「今日比价额度用完啦…」,与前端 #385/#387 的 `ErrorPrompts` 文案一致。 ### 构建/测试(已实跑, .venv py3.12.7) 合并最新 `main`(Already up-to-date)后 `pytest tests/test_withdraw_tiers.py tests/test_compare_daily_limit.py` → **13 passed, 1 failed**。 - ✅ 本 PR 新增/改动的断言全过:6 档下发(含 100)、`daily_limit=[1,1,3,1,1,1]`、100 档纳入常规档互斥、429 新文案。 - ⚠️ 唯一失败 `test_newbie_tiers_independent_and_once_forever`(断言 `assert 10 not in amounts`,期望新人档 0.1 被拒后消失)——**经在 `origin/main` 上跑同一用例验证:base 同样失败**,属**既有失败、与本 PR 无关**。根因:该测试期望「新人档被拒也算用过→消失」,但代码 `used_newbie`(wallet.py L748) 只把「进行中/成功」算占用、**被拒恢复可提**,二者矛盾;本 PR 未改动该逻辑。 ### 建议 - 本 PR 可合。**另行**核对 `test_newbie_tiers_independent_and_once_forever` 与 `used_newbie` 口径矛盾(是测试过期、还是「新人档被拒占用」逻辑回归),与本 PR 解耦处理。 <sub>🤖 自动深审 · 结论仅供参考,请以人工判断为准</sub>
guke merged commit b39d918cda into main 2026-08-05 13:47:23 +08:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-app-server#218