feat(T-002): 建立核心数据模型与状态枚举

- src/core/status.py: TaskStatus 六态枚举,英文成员 + display_name/from_display
  中英映射(单一事实源),对齐 04-architecture.md §3.4。
- src/core/models.py: OrderTask dataclass,字段集合/类型对齐 §3.3;支付模式不挂模型。
- tests/test_models.py: 枚举完整性/双向映射/未知值报错/默认值/实例独立性。
- 文档同步:04 §3.4 约定补 from_display;tasks/progress/current-state 更新。

验证:compileall OK;unittest Ran 10 tests, OK。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
chengma
2026-06-24 17:17:52 +08:00
co-authored by Claude Opus 4.8
parent 2863bf2750
commit c41f37a27d
8 changed files with 205 additions and 11 deletions
+47
View File
@@ -0,0 +1,47 @@
"""核心数据模型。
OrderTask 对齐 docs/04-architecture.md §3.3 的内部任务模型字段集合与类型。
字段顺序因 dataclass「无默认值字段须在有默认值字段之前」的约束做了分组调整,
字段集合、类型与语义与文档一致。支付模式不挂在本模型上(见 §3.3 说明与 §4.4 PaymentConfig)。
"""
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from decimal import Decimal
from src.core.status import TaskStatus
@dataclass
class OrderTask:
"""一条已审核的拼多多下单任务。
必填字段(来自 Excel 必填列)在前,其余可选字段与执行期回填字段带默认值。
本模型只承载数据,不做业务校验;表头/数量等校验在 Excel 导入模块(T-201)。
"""
# 必填:来自 Excel 的核心任务信息
task_id: str
row_index: int
product_url: str
sku_text: str
quantity: int
# 可选:来自 Excel 的辅助信息
sku_items: dict[str, str] = field(default_factory=dict)
product_name: str | None = None
receiver: str | None = None
phone: str | None = None
address: str | None = None
note: str | None = None
expected_amount: Decimal | None = None
max_pay_amount: Decimal | None = None
# 执行期回填
status: TaskStatus = TaskStatus.PENDING
order_no: str | None = None
fail_reason: str | None = None
screenshot_path: str | None = None
started_at: datetime | None = None
finished_at: datetime | None = None