2026-05-30 07:23:33 +08:00
|
|
|
|
"""
|
|
|
|
|
|
物流模块请求模型
|
|
|
|
|
|
|
|
|
|
|
|
定义物流任务管理相关的请求体数据模型,供 logistics 路由使用。
|
|
|
|
|
|
包含物流任务的查询、创建、司机操作以及物流轨迹记录等操作。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LogisticsTaskListQuery(BaseModel):
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""物流任务列表查询参数模型。被 GET /api/logistics/tasks 路由使用。"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
order_id: int | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""关联订单 ID 筛选"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
task_no: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""任务编号,模糊匹配"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
status: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""任务状态筛选"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
driver_id: int | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""司机 ID 筛选"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
factory_id: int | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""工厂 ID 筛选"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
page_no: int = 1
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""页码,从 1 开始"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
page_size: int = 20
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""每页条数"""
|
2026-05-14 15:17:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CreateLogisticsTaskRequest(BaseModel):
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""创建物流任务请求体。被 POST /api/logistics/tasks 路由使用。"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
order_id: int
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""关联订单 ID"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
driver_id: int = Field(gt=0)
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""司机 ID,必须大于 0"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
pickup_address: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""提货地址"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
delivery_address: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""送货地址"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
pickup_content: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""提货内容描述"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
quantity: float = Field(gt=0)
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""提货数量,必须大于 0"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
factory_id: int | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""工厂 ID"""
|
|
|
|
|
|
|
2026-05-27 14:43:54 +08:00
|
|
|
|
tracking_number: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""物流追踪单号"""
|
|
|
|
|
|
|
2026-05-27 14:43:54 +08:00
|
|
|
|
express_company: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""快递公司"""
|
|
|
|
|
|
|
2026-05-14 15:17:56 +08:00
|
|
|
|
remark: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""备注"""
|
2026-05-14 15:17:56 +08:00
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
|
|
|
|
|
|
class LogisticsFilePayload(BaseModel):
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""物流文件载荷,用于上传物流过程中的照片或视频附件。"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
file_url: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""文件 URL"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
file_name: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""文件名称"""
|
|
|
|
|
|
|
2026-05-15 14:13:28 +08:00
|
|
|
|
file_type: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""文件类型(如 image / video)"""
|
|
|
|
|
|
|
2026-05-15 14:13:28 +08:00
|
|
|
|
file_size: int | None = Field(default=None, gt=0)
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""文件大小(字节)"""
|
2026-05-14 16:12:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DriverTaskOperateRequest(BaseModel):
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""司机任务操作请求体(接单/提货/送达等)。被 POST /api/logistics/tasks/{id}/operate 路由使用。"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
photo_files: list[LogisticsFilePayload] = Field(default_factory=list)
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""操作时上传的照片文件列表"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
video_files: list[LogisticsFilePayload] = Field(default_factory=list)
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""操作时上传的视频文件列表"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
remark: str | None = None
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""备注"""
|
2026-05-14 16:12:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CreateLogisticsTraceRequest(BaseModel):
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""创建物流轨迹请求体。被 POST /api/logistics/traces 路由使用。"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
task_id: int = Field(gt=0)
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""关联物流任务 ID"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
node_time: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""节点时间(ISO 格式)"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
node_desc: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""节点描述"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
node_type: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""节点类型(如揽收、中转、派送等)"""
|
|
|
|
|
|
|
2026-05-14 16:12:25 +08:00
|
|
|
|
source_platform: str
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""来源平台"""
|
2026-05-30 16:13:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UpdateTrackingRequest(BaseModel):
|
|
|
|
|
|
"""修改物流单号请求体。被 PUT /api/logistics/tasks/{id}/tracking 路由使用。"""
|
|
|
|
|
|
|
|
|
|
|
|
tracking_number: str
|
|
|
|
|
|
"""新的物流追踪单号"""
|
|
|
|
|
|
|
|
|
|
|
|
express_company: str | None = None
|
|
|
|
|
|
"""快递公司"""
|
|
|
|
|
|
|
|
|
|
|
|
remark: str | None = None
|
|
|
|
|
|
"""修改原因/备注"""
|