feat: 增加批量重新采集和安全重新采购 (#138 #139)

This commit is contained in:
chengma
2026-08-11 10:42:51 +08:00
parent 7aa49c0e29
commit 598c808093
12 changed files with 420 additions and 60 deletions
+44 -2
View File
@@ -429,8 +429,10 @@ class TaskRepositoryTests(unittest.TestCase):
self.repository.validate_collect_rerun("PURCHASE-RERUN")
self.repository.add_claimed_task(self._task("ACTIVE-RERUN"))
with self.assertRaisesRegex(CollectRerunError, "待执行"):
self.repository.validate_collect_rerun("ACTIVE-RERUN")
self.assertEqual(
self.repository.validate_collect_rerun("ACTIVE-RERUN").status,
TaskStatus.CLAIMED,
)
self.repository.add_claimed_task(self._task("UNSENT-RERUN"))
started = self.repository.start_collect_run("UNSENT-RERUN", "USB-001")
@@ -449,6 +451,46 @@ class TaskRepositoryTests(unittest.TestCase):
with self.assertRaisesRegex(CollectRerunError, "未发送"):
self.repository.validate_collect_rerun("UNSENT-RERUN")
def test_batch_rerun_plan_filters_other_task_type(self):
self.repository.add_claimed_task(self._task("COLLECT-PLAN"))
self.repository.add_claimed_task(
self._task("PURCHASE-PLAN", TaskType.PURCHASE)
)
plan = self.repository.plan_rerun_batch(
("COLLECT-PLAN", "PURCHASE-PLAN"), TaskType.COLLECT
)
self.assertEqual(plan.eligible_task_ids, ("COLLECT-PLAN",))
self.assertEqual(plan.filtered_task_ids, ("PURCHASE-PLAN",))
self.assertEqual(plan.blocked, ())
def test_purchase_rerun_permanently_rejects_irreversible_history(self):
self.repository.add_claimed_task(
self._task("PURCHASE-SAFE", TaskType.PURCHASE)
)
started = self.repository.start_purchase_run("PURCHASE-SAFE", "USB-001")
connection = open_database(self.db_path)
try:
with connection:
connection.execute(
"UPDATE task_runs SET irreversible_action_at = ? WHERE attempt_id = ?",
("2026-08-11T00:00:00Z", started.attempt_id),
)
connection.execute(
"UPDATE pdd_tasks SET status = 'manual_review' WHERE remote_task_id = ?",
("PURCHASE-SAFE",),
)
finally:
connection.close()
plan = self.repository.plan_rerun_batch(
("PURCHASE-SAFE",), TaskType.PURCHASE
)
self.assertEqual(plan.eligible_task_ids, ())
self.assertIn("只准核对订单", plan.blocked[0][1])
def test_retry_wait_can_rerun_only_after_failure_outbox_is_sent(self):
self.repository.add_claimed_task(self._task("RETRY-RERUN"))
first = self.repository.start_collect_run("RETRY-RERUN", "USB-001")