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
@@ -0,0 +1,48 @@
"""采购结果只读核对适配层。
该接口只允许读取订单候选,故意不提供商品选择、提交订单或付款方法。
"""
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import Mapping, Optional
@dataclass(frozen=True)
class PurchaseReconcileQuery:
"""从本地任务与执行记录构造的核对条件。"""
goods_id: str
options: Mapping[str, str]
quantity: int
irreversible_action_at: str
@dataclass(frozen=True)
class PurchaseReconcileObservation:
"""只读核对看到的结果。"""
match_status: str
order_no: Optional[str] = None
ordered_at: Optional[str] = None
diagnostics: Mapping[str, object] = field(default_factory=dict)
def __post_init__(self) -> None:
if self.match_status not in {
"matched", "not_found", "ambiguous", "unknown"
}:
raise ValueError("采购核对结果无效")
class PddPurchaseReconcileAdapter(ABC):
"""已进入不可逆阶段后使用的只读订单核对会话。"""
@abstractmethod
def read_order_match(
self, query: PurchaseReconcileQuery
) -> PurchaseReconcileObservation:
"""读取并核对订单候选;不得点击下单或付款。"""
@abstractmethod
def close(self) -> None:
"""释放读取会话;不得在此方法中产生点击。"""