feat(douyu): 精英宝典支持查询开通状态,开通前先校验且不再误判到账
线上两个问题:工作台看不到账号有没有开通精英宝典;点开通时二维码会「闪一下 就变小」——大图弹窗 2~4 秒后自动关闭,只剩列表里 56px 的小二维码。 根因: - getUserInfo 的 manualType/expireTime 才是开通状态的权威口径,但只有兑换 流程用过一次,没有任务类型对外暴露;前端只看积分列,而「开通后积分花完」 和「从未开通」都是 0 分,区分不了(实测 13456 manualType=1/score=0); - 开通前不查状态,且到账判定写成「积分 >= 300」:账上本来就有 680 分的账号 在出码后第一轮轮询就被判成功,前端按 paymentArrived 自动关掉了弹窗。 改动: - 新增任务类型 query_elite_status:查 manualType/manualScore/expireTime 并 落库到 accounts.elite_opened / elite_expire_time(迁移 20261001_0036), 精英工作台加查询按钮与「宝典状态」列(已开通+到期 / 未开通); - create_elite_qr 开通前先查状态:已开通直接判成功、不再生成支付码(方案 A), 既消除二维码闪现,也避免给已开通账号开出真实支付单; - 到账判定改为「积分比开通前增长」,基线用与轮询同源的 credit/balance 取, 取不到基线才退回旧口径; - 支付弹窗不再自动关闭:到账/失败/停止都在弹窗里给结论 + 手动关闭;列表小 二维码在任务进终态后隐藏。 新增 9 条测试覆盖上述行为,回退 runner 时其中 8 条失败。
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
"""accounts 增加精英宝典开通状态字段。
|
||||
|
||||
原来只能靠「积分」列猜有没有开通,但开通后积分花完与从未开通过都是 0 分,
|
||||
根本区分不了(线上实测:某账号 manualType=1/manualScore=0,另一个从未开通的
|
||||
是 manualType=0/manualScore=0)。getUserInfo 的 manualType/expireTime 才是
|
||||
权威口径,这里落库供工作台直接展示。
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
revision: str = "20261001_0036"
|
||||
down_revision: str | None = "20261001_0035"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
columns = {item["name"] for item in sa.inspect(bind).get_columns("accounts")}
|
||||
if "elite_opened" not in columns:
|
||||
op.add_column(
|
||||
"accounts",
|
||||
sa.Column("elite_opened", sa.Boolean(), nullable=True),
|
||||
)
|
||||
if "elite_expire_time" not in columns:
|
||||
op.add_column(
|
||||
"accounts",
|
||||
sa.Column("elite_expire_time", sa.Integer(), nullable=True),
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
columns = {item["name"] for item in sa.inspect(bind).get_columns("accounts")}
|
||||
for name in ("elite_expire_time", "elite_opened"):
|
||||
if name in columns:
|
||||
op.drop_column("accounts", name)
|
||||
Reference in New Issue
Block a user