fix(withdraw): 新人档提现没成功也被判定已用(解绑微信退回后 0.1 永久锁死) #142

Merged
guke merged 1 commits from fix/newbie-tier-restore-on-refund into main 2026-07-17 16:34:58 +08:00

1 Commits

Author SHA1 Message Date
no_gen_mu 1b799a146a fix(withdraw): 新人档提现没成功也被判定已用(解绑微信退回后 0.1 永久锁死)
新人档(0.1/0.3)「一次性」判定原本只看「有没有发起过」、不看提现单最终状态:
withdraw_tier_states 的 used_newbie 查询没有任何 status 过滤。用户解绑微信时,
待审核单经 refund_reviewing_withdraws_on_unbind → _refund_withdraw 退回现金并
置 failed,但记录仍在库里,于是照样被算作「已用」→ 钱退了、资格没退,0.1 档从
档位列表永久消失且重提 400。

判定口径改为只认 reviewing/pending/success(进行中或真拿到钱);failed/rejected
(被拒、微信转账失败、解绑退回,钱都没到手)一律恢复可提。下发(withdraw-info)与
下单校验(create_withdraw)共用 withdraw_tier_states,改一处两处同时生效。复用现有
status 语义,无新字段、无 alembic 迁移;存量受害用户上线后自动恢复,已成功提现的
(success)仍正确锁死。

⚠️行为变更:7-9 定的「新人档发起就算(含被拒/失败)」按本次拍板放宽为「没成功打款
就恢复」。常规档(0.5/10/20)的「当天名额发起就算、被拒不退」规则未动。

⚠️测试按要求不进本 PR。但请注意:既有测试
tests/test_withdraw_tiers.py::test_newbie_tiers_independent_and_once_forever
锁死的正是被本次推翻的旧口径(断言被拒后 0.1 消失、重提 400),本改动会让它失败,
需要同步调整该测试。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 16:09:36 +08:00