优化电竞手册换绑时间展示

This commit is contained in:
yml2213
2026-07-28 17:27:35 +08:00
parent d7a8666fe4
commit 624198bca4
8 changed files with 98 additions and 8 deletions
@@ -0,0 +1,31 @@
"""新增电竞手册可换绑时间
Revision ID: 20260728_0012
Revises: 20260728_0011
Create Date: 2026-07-28
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
revision: str = "20260728_0012"
down_revision: Union[str, None] = "20260728_0011"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
bind = op.get_bind()
columns = {column["name"] for column in sa.inspect(bind).get_columns("accounts")}
if "esports_can_change_time" not in columns:
op.add_column("accounts", sa.Column("esports_can_change_time", sa.Integer(), nullable=True))
def downgrade() -> None:
bind = op.get_bind()
columns = {column["name"] for column in sa.inspect(bind).get_columns("accounts")}
if "esports_can_change_time" in columns:
op.drop_column("accounts", "esports_can_change_time")
+1
View File
@@ -69,6 +69,7 @@ class Account(Base):
esports_game_channel = Column(String(128), default="")
esports_bind_status = Column(String(32), default="")
esports_change_role_wait_time = Column(Integer, nullable=True)
esports_can_change_time = Column(Integer, nullable=True)
created_at = Column(DateTime, default=_utcnow)
updated_at = Column(DateTime, default=_utcnow, onupdate=_utcnow)
+1
View File
@@ -112,6 +112,7 @@ def _account_out(account: Account) -> DouyuTaskAccountOut:
esports_game_channel=account.esports_game_channel or "",
esports_bind_status=account.esports_bind_status or "",
esports_change_role_wait_time=account.esports_change_role_wait_time,
esports_can_change_time=account.esports_can_change_time,
assigned_to=account.assigned_to,
assigned_username=account.assigned_user.username if account.assigned_user else None,
)
+1
View File
@@ -671,6 +671,7 @@ class DouyuTaskAccountOut(BaseModel):
esports_game_channel: str = ""
esports_bind_status: str = ""
esports_change_role_wait_time: Optional[int] = None
esports_can_change_time: Optional[int] = None
assigned_to: Optional[int] = None
assigned_username: Optional[str] = None
+7
View File
@@ -174,6 +174,10 @@ class DouyuBatchRunner:
"""综合 can_change_role 与换绑倒计时判断是否允许换绑。"""
if not bind_info:
return True
if str(bind_info.get("api_version") or "") == "esports":
can_change_time = cls._to_int(bind_info.get("can_change_time"))
if can_change_time is not None:
return can_change_time <= int(datetime.now(timezone.utc).timestamp())
wait_time = cls._to_int(bind_info.get("change_role_wait_time"))
if wait_time is not None and wait_time > 0:
return False
@@ -247,6 +251,7 @@ class DouyuBatchRunner:
"need_bind_act": self._is_truthy_flag(info.get("need_bind_act")),
"need_bind_role": self._is_truthy_flag(info.get("need_bind_role")),
"change_role_wait_time": self._to_int(info.get("change_role_wait_time")),
"can_change_time": self._to_int(info.get("can_change_time")),
"can_change_role": self._can_change_role(info),
"bind_info": info,
}
@@ -266,6 +271,7 @@ class DouyuBatchRunner:
f" need_act={1 if snap['need_bind_act'] else 0}"
f" need_role={1 if snap['need_bind_role'] else 0}"
f" wait={snap['change_role_wait_time'] if snap['change_role_wait_time'] is not None else '-'}"
f" can_change_time={snap['can_change_time'] if snap['can_change_time'] is not None else '-'}"
f"{pending_text}"
)
@@ -283,6 +289,7 @@ class DouyuBatchRunner:
account.esports_game_name = role_name or account.esports_game_name
account.esports_game_channel = self._role_channel(bind_info) or account.esports_game_channel
account.esports_change_role_wait_time = self._to_int(bind_info.get("change_role_wait_time"))
account.esports_can_change_time = self._to_int(bind_info.get("can_change_time"))
account.esports_bind_status = status
account.updated_at = datetime.now(timezone.utc)