虎牙自动注册持久化成功流水与批次,支持失败续跑与随时导出

将注册批次/条目/成功记录落库,成功一个写入一条流水;服务中断可恢复并续跑失败项,换电脑也能导出 txt。同时修复 pending 被误判为运行中导致页面卡住的问题。
This commit is contained in:
yml2213
2026-07-12 20:05:04 +08:00
parent c3044dbf69
commit e18b2c6e0c
9 changed files with 1423 additions and 96 deletions
+76
View File
@@ -96,6 +96,7 @@ class HuyaAccount(Base):
game_name = Column(String(128), default="")
game_channel = Column(String(64), default="")
game_phone = Column(String(64), default="")
sms_url = Column(Text, default="")
assigned_to = Column(Integer, ForeignKey("users.id"), nullable=True, index=True)
created_at = Column(DateTime, default=_utcnow)
updated_at = Column(DateTime, default=_utcnow, onupdate=_utcnow)
@@ -104,6 +105,81 @@ class HuyaAccount(Base):
tasks = relationship("HuyaTask", back_populates="account")
class HuyaRegisterBatch(Base):
"""虎牙自动注册批次(持久化元数据)"""
__tablename__ = "huya_register_batches"
id = Column(Integer, primary_key=True, autoincrement=True)
batch_id = Column(String(64), unique=True, nullable=False, index=True)
tag = Column(String(64), default="")
created_by = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)
concurrency = Column(Integer, default=1)
wait_seconds = Column(Integer, default=180)
poll_interval = Column(Integer, default=5)
password_prefix = Column(String(16), default="hy")
fixed_password = Column(EncryptedText(), default="")
use_proxy = Column(Boolean, default=False)
status = Column(String(32), default="pending", index=True)
message = Column(String(512), default="")
total = Column(Integer, default=0)
success_count = Column(Integer, default=0)
failed_count = Column(Integer, default=0)
stopped_count = Column(Integer, default=0)
created_at = Column(DateTime, default=_utcnow)
started_at = Column(DateTime, nullable=True)
finished_at = Column(DateTime, nullable=True)
items = relationship("HuyaRegisterItem", back_populates="batch", cascade="all, delete-orphan")
class HuyaRegisterItem(Base):
"""虎牙自动注册批次内单条手机号状态"""
__tablename__ = "huya_register_items"
id = Column(Integer, primary_key=True, autoincrement=True)
batch_db_id = Column(Integer, ForeignKey("huya_register_batches.id"), nullable=False, index=True)
batch_id = Column(String(64), nullable=False, index=True)
line = Column(Integer, nullable=False)
phone = Column(String(64), default="", index=True)
provider = Column(String(32), default="")
sms_url = Column(Text, default="")
status = Column(String(32), default="pending", index=True)
message = Column(String(512), default="")
code = Column(String(32), default="")
change_code = Column(String(32), default="")
attempts = Column(Integer, default=0)
change_attempts = Column(Integer, default=0)
account_id = Column(Integer, ForeignKey("huya_accounts.id"), nullable=True)
username = Column(String(128), default="")
uid = Column(String(32), default="")
password = Column(EncryptedText(), default="")
password_changed = Column(Boolean, default=False)
cookie = Column(EncryptedText(), default="")
started_at = Column(DateTime, nullable=True)
finished_at = Column(DateTime, nullable=True)
batch = relationship("HuyaRegisterBatch", back_populates="items")
class HuyaRegisterSuccessLog(Base):
"""虎牙自动注册成功流水(只追加,供随时导出)"""
__tablename__ = "huya_register_success_logs"
id = Column(Integer, primary_key=True, autoincrement=True)
batch_id = Column(String(64), default="", index=True)
item_id = Column(Integer, nullable=True)
account_id = Column(Integer, ForeignKey("huya_accounts.id"), nullable=True)
phone = Column(String(64), default="", index=True)
username = Column(String(128), default="")
uid = Column(String(32), default="")
password = Column(EncryptedText(), default="")
sms_url = Column(Text, default="")
tag = Column(String(64), default="", index=True)
provider = Column(String(32), default="")
created_by = Column(Integer, ForeignKey("users.id"), nullable=True)
created_at = Column(DateTime, default=_utcnow, index=True)
class HuyaTask(Base):
"""虎牙业务任务"""
__tablename__ = "huya_tasks"