Files
rakuten-api/app/trading/worker/verify.py
T
q792602257andClaude Opus 4.6 07107094a7 实现下单任务网关与本地 worker
按 docs/order-gateway.md 落地:第三个部署单元 app.gateway(:31109)承担任务队列
+ 状态镜像;本地 worker 在 app.trading.worker 内,按 RAKUTEN_ORDER_GATEWAY_URL
决定是否启动。规格 §5 最关键约束已守:租约过期绝不自动重投,恢复只能 reclaim,
worker 收到 lease_count>1 时先核对站点订单。

站点交互(加购/下单/付款/订单列表反查)按规格 §10 留接口缝,site_interact.py
全部 NotImplementedError,verify.py 恒返回 unknown——等真实账号实测后再填,
不写猜测的提交逻辑。

310 个测试全绿,覆盖规格 §9 验收清单 12 条;架构测试守住三方互不 import。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-27 16:25:20 +08:00

47 lines
1.8 KiB
Python

"""恢复核对:lease_count > 1 时,worker 必须先查站点订单列表确认是否已下单
规格 §5:租约过期 → stale → reclaim 后 worker 领回的任务 lease_count 必然 > 1。
此时 worker 不能盲目重新提交(可能上次已经下单成功,只是回报断网),必须先查
站点订单列表比对。
订单列表反查的实现需要实测(规格 §10 第 3 条:订单列表页能否按商品 + 时间窗口
可靠地反查出「这单下没下」)。当前为桩:恒返回 `unknown`,让 runner 走
needs_human 分支。**绝不**默认按「没下单」处理——那是猜,可能变成重复下单。
"""
from __future__ import annotations
from dataclasses import dataclass
from enum import StrEnum
from app.trading.worker.models import LeaseTask
class VerifyVerdict(StrEnum):
"""核对结论"""
ALREADY_ORDERED = "already_ordered" # 确认已下单,补报状态即可
NOT_ORDERED = "not_ordered" # 确认未下单,可重新执行
UNKNOWN = "unknown" # 核对不出结论,交人工
@dataclass(slots=True)
class VerifyResult:
verdict: VerifyVerdict
site_order_id: str | None = None
detail: str = ""
async def verify_on_site(task: LeaseTask) -> VerifyResult:
"""核对一笔任务是否已在站点上下过单
桩实现:永远返回 UNKNOWN。**绝不返回 NOT_ORDERED**——除非真实订单列表反查
能可靠证明这一点,否则视为「无法判断」交人工,宁可卡住等人看一眼。
实现方需要补的实测:用 intent 里的商品 + 时间窗口(created_at 到 stale 之间)
比对订单列表,能拿到 site_order_id 最好。
"""
return VerifyResult(
verdict=VerifyVerdict.UNKNOWN,
detail="订单列表反查未实现:见 docs/order-gateway.md §10 第 3 条",
)