fix: keep one douyu cookie per account
This commit is contained in:
@@ -300,8 +300,17 @@ class LoginBatchRunner:
|
||||
task.ck_checked_at = None
|
||||
_append_task_info(task, acc)
|
||||
else:
|
||||
seen_account_ids = set()
|
||||
for aid in self.account_ids:
|
||||
acc = self.db.query(AccountModel).filter(AccountModel.id == aid).first()
|
||||
if aid in seen_account_ids:
|
||||
continue
|
||||
seen_account_ids.add(aid)
|
||||
acc = (
|
||||
self.db.query(AccountModel)
|
||||
.filter(AccountModel.id == aid)
|
||||
.with_for_update()
|
||||
.first()
|
||||
)
|
||||
if not acc:
|
||||
continue
|
||||
# 权限检查:客服只能跑分配给自己的
|
||||
@@ -310,24 +319,45 @@ class LoginBatchRunner:
|
||||
self._push_log("warning", f"跳过无权账号: {acc.username}")
|
||||
continue
|
||||
|
||||
# 复用该账号最近一条失败任务记录,避免重复产生多条
|
||||
existing_task = (
|
||||
# 一个斗鱼账号只保留一条成功 CK:再次普通登录时更新最新成功记录。
|
||||
latest_success_task = (
|
||||
self.db.query(LoginTask)
|
||||
.filter(LoginTask.account_id == aid, LoginTask.status.in_(["failed", "error"]))
|
||||
.order_by(LoginTask.id.desc())
|
||||
.filter(LoginTask.account_id == aid, LoginTask.status == "success")
|
||||
.order_by(LoginTask.finished_at.desc(), LoginTask.id.desc())
|
||||
.first()
|
||||
)
|
||||
if existing_task:
|
||||
existing_task.cookie = ""
|
||||
task = existing_task
|
||||
else:
|
||||
task = LoginTask(
|
||||
batch_id=batch_id,
|
||||
account_id=aid,
|
||||
status="pending",
|
||||
created_by=self.created_by,
|
||||
if latest_success_task:
|
||||
duplicate_success_tasks = (
|
||||
self.db.query(LoginTask)
|
||||
.filter(
|
||||
LoginTask.account_id == aid,
|
||||
LoginTask.status == "success",
|
||||
LoginTask.id != latest_success_task.id,
|
||||
)
|
||||
.all()
|
||||
)
|
||||
self.db.add(task)
|
||||
for duplicate_task in duplicate_success_tasks:
|
||||
self.db.delete(duplicate_task)
|
||||
task = latest_success_task
|
||||
else:
|
||||
# 复用该账号最近一条失败任务记录,避免重复产生多条失败历史。
|
||||
existing_task = (
|
||||
self.db.query(LoginTask)
|
||||
.filter(LoginTask.account_id == aid, LoginTask.status.in_(["failed", "error"]))
|
||||
.order_by(LoginTask.id.desc())
|
||||
.first()
|
||||
)
|
||||
if existing_task:
|
||||
existing_task.cookie = ""
|
||||
task = existing_task
|
||||
else:
|
||||
task = LoginTask(
|
||||
batch_id=batch_id,
|
||||
account_id=aid,
|
||||
status="pending",
|
||||
created_by=self.created_by,
|
||||
)
|
||||
self.db.add(task)
|
||||
|
||||
_append_task_info(task, acc)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user