Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b395648b7c |
@@ -34,6 +34,10 @@ _WX_STATE_SUCCESS = "SUCCESS"
|
|||||||
_WX_STATE_FAILED = {"FAIL", "CANCELLED", "CLOSED"}
|
_WX_STATE_FAILED = {"FAIL", "CANCELLED", "CLOSED"}
|
||||||
_WX_STATE_WAIT_CONFIRM = "WAIT_USER_CONFIRM" # 用户还没在微信确认页确认
|
_WX_STATE_WAIT_CONFIRM = "WAIT_USER_CONFIRM" # 用户还没在微信确认页确认
|
||||||
_WITHDRAW_ACTIVE_STATUSES = {"reviewing", "pending"}
|
_WITHDRAW_ACTIVE_STATUSES = {"reviewing", "pending"}
|
||||||
|
# 占用新人档「一次性」资格的提现状态:进行中(reviewing/pending)或成功打款(success)。
|
||||||
|
# 被拒/转账失败/解绑退回(rejected/failed,均已退款、钱没到手)不在此列 → 新人档恢复可提
|
||||||
|
# (2026-07-16 修正:此前判定不看状态,解绑微信退回后 0.1 被误判已用、资格永久锁死)。
|
||||||
|
_NEWBIE_TIER_HELD_STATUSES = {"reviewing", "pending", "success"}
|
||||||
# 免确认收款授权状态
|
# 免确认收款授权状态
|
||||||
_WX_AUTH_ACTIVE = "TAKING_EFFECT" # 已生效,可免确认转账
|
_WX_AUTH_ACTIVE = "TAKING_EFFECT" # 已生效,可免确认转账
|
||||||
_WX_AUTH_CLOSED = "CLOSED" # 已关闭(用户/商户/风控),需重新开启
|
_WX_AUTH_CLOSED = "CLOSED" # 已关闭(用户/商户/风控),需重新开启
|
||||||
@@ -622,9 +626,10 @@ def _beijing_today_start_utc() -> datetime:
|
|||||||
def withdraw_tier_states(db: Session, user_id: int, source: str = "coin_cash") -> list[dict]:
|
def withdraw_tier_states(db: Session, user_id: int, source: str = "coin_cash") -> list[dict]:
|
||||||
"""福利页(coin_cash)提现档位的可提现状态。withdraw-info 下发与 create_withdraw 校验共用此口径。
|
"""福利页(coin_cash)提现档位的可提现状态。withdraw-info 下发与 create_withdraw 校验共用此口径。
|
||||||
|
|
||||||
规则(2026-07-09 拍板,7-9提现ui对齐):
|
规则(2026-07-09 拍板,7-9提现ui对齐;新人档判定 2026-07-16 修正):
|
||||||
- 新人档(0.1/0.3):账号历史一次性——只要发起过(**任意状态**,含被拒/失败,"发起就算")
|
- 新人档(0.1/0.3):账号历史一次性——进行中(reviewing/pending)或成功打款(success)即视为
|
||||||
即视为已用,直接**从返回列表消失**;两档各自独立互不影响,不参与"每日选一个额度"互斥。
|
已用,直接**从返回列表消失**;被拒/转账失败/解绑退回(均已退款、钱没到手)则恢复可提,不永久
|
||||||
|
占用资格。两档各自独立互不影响,不参与"每日选一个额度"互斥。
|
||||||
- 常规档(0.5×3 / 10×1 / 20×1):按北京日计次,"发起就算占用"(当天创建的单不论最终状态
|
- 常规档(0.5×3 / 10×1 / 20×1):按北京日计次,"发起就算占用"(当天创建的单不论最终状态
|
||||||
都计入,被拒/失败不退当天名额);三档每天只能选一个,选定后其余两档当天 other_tier_selected。
|
都计入,被拒/失败不退当天名额);三档每天只能选一个,选定后其余两档当天 other_tier_selected。
|
||||||
- invite_cash 本轮无档位概念 → 返回空列表(邀请页客户端仍用本地写死档位,行为不变)。
|
- invite_cash 本轮无档位概念 → 返回空列表(邀请页客户端仍用本地写死档位,行为不变)。
|
||||||
@@ -635,7 +640,7 @@ def withdraw_tier_states(db: Session, user_id: int, source: str = "coin_cash") -
|
|||||||
tiers = rewards.WITHDRAW_TIERS_COIN_CASH
|
tiers = rewards.WITHDRAW_TIERS_COIN_CASH
|
||||||
amounts = [t.amount_cents for t in tiers]
|
amounts = [t.amount_cents for t in tiers]
|
||||||
newbie_amounts = [t.amount_cents for t in tiers if t.is_newbie]
|
newbie_amounts = [t.amount_cents for t in tiers if t.is_newbie]
|
||||||
# 新人档历史是否用过:任意时间、任意状态("发起就算")
|
# 新人档历史是否用过:进行中或已成功打款的单占用资格;被拒/失败/解绑退回(已退款)不算(恢复可提)
|
||||||
used_newbie: set[int] = set(
|
used_newbie: set[int] = set(
|
||||||
db.execute(
|
db.execute(
|
||||||
select(WithdrawOrder.amount_cents)
|
select(WithdrawOrder.amount_cents)
|
||||||
@@ -644,6 +649,7 @@ def withdraw_tier_states(db: Session, user_id: int, source: str = "coin_cash") -
|
|||||||
WithdrawOrder.user_id == user_id,
|
WithdrawOrder.user_id == user_id,
|
||||||
WithdrawOrder.source == "coin_cash",
|
WithdrawOrder.source == "coin_cash",
|
||||||
WithdrawOrder.amount_cents.in_(newbie_amounts),
|
WithdrawOrder.amount_cents.in_(newbie_amounts),
|
||||||
|
WithdrawOrder.status.in_(_NEWBIE_TIER_HELD_STATUSES),
|
||||||
)
|
)
|
||||||
).scalars()
|
).scalars()
|
||||||
) if newbie_amounts else set()
|
) if newbie_amounts else set()
|
||||||
|
|||||||
Reference in New Issue
Block a user