feat: 安全领取并分派采购任务 (#72)

This commit is contained in:
chengma
2026-08-10 00:05:40 +08:00
parent 460619392f
commit f201bcc4bf
12 changed files with 789 additions and 76 deletions
+26
View File
@@ -224,6 +224,32 @@ class TaskRepository:
connection.close()
return self._to_detail(row) if row is not None else None
def next_runnable_task(
self, *, include_purchase: bool
) -> Optional[TaskDetail]:
"""按领取顺序返回当前执行器能够处理的最早本地任务。"""
if include_purchase:
where = (
"((task_type = 'collect'"
" AND status IN ('claimed', 'retry_wait'))"
" OR (task_type = 'purchase' AND status = 'claimed'))"
)
else:
where = (
"task_type = 'collect'"
" AND status IN ('claimed', 'retry_wait')"
)
connection = open_database(self._db_path)
try:
row = connection.execute(
f"SELECT * FROM pdd_tasks WHERE {where}"
" ORDER BY received_at ASC, id ASC LIMIT 1"
).fetchone()
finally:
connection.close()
return self._to_detail(row) if row is not None else None
def validate_collect_rerun(self, remote_task_id: str) -> TaskDetail:
"""校验任务能否重新采集,成功时返回任务详情。"""