新增 PUT /api/logistics/tasks/{id}/tracking 接口,业务员可在订单详情页
修改进行中订单的快递单号和快递公司,修改记录写入审计日志。
四端同步:管理后台、司机端、管理小程序下次拉取即自动获取新值。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
129 lines
3.0 KiB
Python
129 lines
3.0 KiB
Python
"""
|
||
物流模块请求模型
|
||
|
||
定义物流任务管理相关的请求体数据模型,供 logistics 路由使用。
|
||
包含物流任务的查询、创建、司机操作以及物流轨迹记录等操作。
|
||
"""
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class LogisticsTaskListQuery(BaseModel):
|
||
"""物流任务列表查询参数模型。被 GET /api/logistics/tasks 路由使用。"""
|
||
|
||
order_id: int | None = None
|
||
"""关联订单 ID 筛选"""
|
||
|
||
task_no: str | None = None
|
||
"""任务编号,模糊匹配"""
|
||
|
||
status: str | None = None
|
||
"""任务状态筛选"""
|
||
|
||
driver_id: int | None = None
|
||
"""司机 ID 筛选"""
|
||
|
||
factory_id: int | None = None
|
||
"""工厂 ID 筛选"""
|
||
|
||
page_no: int = 1
|
||
"""页码,从 1 开始"""
|
||
|
||
page_size: int = 20
|
||
"""每页条数"""
|
||
|
||
|
||
class CreateLogisticsTaskRequest(BaseModel):
|
||
"""创建物流任务请求体。被 POST /api/logistics/tasks 路由使用。"""
|
||
|
||
order_id: int
|
||
"""关联订单 ID"""
|
||
|
||
driver_id: int = Field(gt=0)
|
||
"""司机 ID,必须大于 0"""
|
||
|
||
pickup_address: str
|
||
"""提货地址"""
|
||
|
||
delivery_address: str
|
||
"""送货地址"""
|
||
|
||
pickup_content: str
|
||
"""提货内容描述"""
|
||
|
||
quantity: float = Field(gt=0)
|
||
"""提货数量,必须大于 0"""
|
||
|
||
factory_id: int | None = None
|
||
"""工厂 ID"""
|
||
|
||
tracking_number: str | None = None
|
||
"""物流追踪单号"""
|
||
|
||
express_company: str | None = None
|
||
"""快递公司"""
|
||
|
||
remark: str | None = None
|
||
"""备注"""
|
||
|
||
|
||
class LogisticsFilePayload(BaseModel):
|
||
"""物流文件载荷,用于上传物流过程中的照片或视频附件。"""
|
||
|
||
file_url: str
|
||
"""文件 URL"""
|
||
|
||
file_name: str
|
||
"""文件名称"""
|
||
|
||
file_type: str | None = None
|
||
"""文件类型(如 image / video)"""
|
||
|
||
file_size: int | None = Field(default=None, gt=0)
|
||
"""文件大小(字节)"""
|
||
|
||
|
||
class DriverTaskOperateRequest(BaseModel):
|
||
"""司机任务操作请求体(接单/提货/送达等)。被 POST /api/logistics/tasks/{id}/operate 路由使用。"""
|
||
|
||
photo_files: list[LogisticsFilePayload] = Field(default_factory=list)
|
||
"""操作时上传的照片文件列表"""
|
||
|
||
video_files: list[LogisticsFilePayload] = Field(default_factory=list)
|
||
"""操作时上传的视频文件列表"""
|
||
|
||
remark: str | None = None
|
||
"""备注"""
|
||
|
||
|
||
class CreateLogisticsTraceRequest(BaseModel):
|
||
"""创建物流轨迹请求体。被 POST /api/logistics/traces 路由使用。"""
|
||
|
||
task_id: int = Field(gt=0)
|
||
"""关联物流任务 ID"""
|
||
|
||
node_time: str
|
||
"""节点时间(ISO 格式)"""
|
||
|
||
node_desc: str
|
||
"""节点描述"""
|
||
|
||
node_type: str
|
||
"""节点类型(如揽收、中转、派送等)"""
|
||
|
||
source_platform: str
|
||
"""来源平台"""
|
||
|
||
|
||
class UpdateTrackingRequest(BaseModel):
|
||
"""修改物流单号请求体。被 PUT /api/logistics/tasks/{id}/tracking 路由使用。"""
|
||
|
||
tracking_number: str
|
||
"""新的物流追踪单号"""
|
||
|
||
express_company: str | None = None
|
||
"""快递公司"""
|
||
|
||
remark: str | None = None
|
||
"""修改原因/备注"""
|