dingdanquanliucheng/backend/app/schemas/logistics.py

129 lines
3.0 KiB
Python
Raw Normal View History

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