feat: 完善采购任务安全恢复 (#73)

This commit is contained in:
chengma
2026-08-10 00:27:52 +08:00
parent d6339a810f
commit c86c7482d9
15 changed files with 786 additions and 12 deletions
+23
View File
@@ -18,6 +18,10 @@ from .purchase_task_service import (
PurchaseAdapterFactory,
PurchaseTaskService,
)
from .purchase_reconcile_service import (
PurchaseReconcileFactory,
PurchaseReconcileService,
)
from .task_models import (
NewClaimedTask,
OutboxEventRecord,
@@ -120,6 +124,7 @@ class TaskDispatcher:
*,
collect_service_factory: Optional[CollectServiceFactory] = None,
purchase_adapter_factory: Optional[PurchaseAdapterFactory] = None,
purchase_reconcile_factory: Optional[PurchaseReconcileFactory] = None,
cancelled: Callable[[], bool] = lambda: False,
) -> None:
self._gateway = gateway
@@ -128,6 +133,7 @@ class TaskDispatcher:
self._device_address = str(device_address or "").strip()
self._collect_factory = collect_service_factory
self._purchase_factory = purchase_adapter_factory
self._reconcile_factory = purchase_reconcile_factory
self._cancelled = cancelled
@property
@@ -165,6 +171,23 @@ class TaskDispatcher:
if not self._device_address:
raise ValueError("请先在设置页选择并保存 Android 设备")
reconcile_task = self._repository.next_purchase_reconcile_task()
if reconcile_task is not None:
if self._reconcile_factory is None:
raise RuntimeError(
f"任务 {reconcile_task.remote_task_id} 只允许核对订单,"
"但只读核对执行器未就绪;不会重新下单"
)
outcome = PurchaseReconcileService(
self._repository,
self._device_address,
self._reconcile_factory,
cancelled=self._cancelled,
).execute_selected(reconcile_task.remote_task_id)
return TaskDispatchOutcome(
outcome.kind, outcome.message, outcome.task_id
)
if not self.purchase_ready:
pending_purchase = self._repository.next_purchase_task()
if pending_purchase is not None: