| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- """Pydantic schemas - 配送任务管理"""
- from pydantic import BaseModel, Field
- from typing import Optional, List
- from datetime import datetime
- from decimal import Decimal
- class DeliveryTaskItemResponse(BaseModel):
- """配送任务明细响应"""
- id: str
- taskId: str
- orderId: Optional[str] = None
- orderItemId: Optional[str] = None
- productId: Optional[str] = None
- productName: Optional[str] = None
- clientId: Optional[str] = None
- deliveryAddress: Optional[str] = None
- contactPerson: Optional[str] = None
- contactPhone: Optional[str] = None
- quantity: Decimal
- deliveredQuantity: Optional[Decimal] = None
- status: str
- deliveryTime: Optional[datetime] = None
- class Config:
- from_attributes = True
- class DeliveryTaskResponse(BaseModel):
- """配送任务响应"""
- id: str
- taskNo: str
- orderId: Optional[str] = None
- regionId: Optional[str] = None
- regionName: Optional[str] = None
- supplierId: Optional[str] = None
- supplierName: Optional[str] = None
- deliverId: Optional[str] = None
- deliverName: Optional[str] = None
- status: str
- effectiveTime: Optional[datetime] = None
- pickupTime: Optional[datetime] = None
- pickupRemark: Optional[str] = None
- pickupImageUrl: Optional[str] = None
- deliveryTime: Optional[datetime] = None
- deliveryRemark: Optional[str] = None
- deliveryImageUrl: Optional[str] = None
- createAt: Optional[datetime] = None
- class Config:
- from_attributes = True
- class DeliveryTaskDetailResponse(DeliveryTaskResponse):
- """配送任务详情响应"""
- items: List[DeliveryTaskItemResponse] = []
- order: Optional[dict] = None
- deliver: Optional[dict] = None
- class DeliveryTaskListResponse(BaseModel):
- """配送任务列表响应"""
- items: List[DeliveryTaskResponse]
- total: int
- page: int
- pageSize: int
- totalPages: int
- class DeliveryTaskCreateRequest(BaseModel):
- """创建配送任务请求"""
- orderId: str = Field(..., description="订单ID")
- regionId: str = Field(..., description="区域ID")
- supplierId: str = Field(..., description="供应商ID")
- deliverId: Optional[str] = Field(None, description="配送员ID")
- effectiveTime: Optional[datetime] = Field(None, description="配送截止时间")
- class DeliveryTaskAssignRequest(BaseModel):
- """分配配送员请求"""
- deliverId: str = Field(..., description="配送员ID")
- class DeliveryTaskPickupRequest(BaseModel):
- """确认取货请求"""
- pickupRemark: Optional[str] = Field(None, description="取货备注")
- pickupImageUrl: Optional[str] = Field(None, description="取货图片URL")
- class DeliveryTaskDeliverRequest(BaseModel):
- """确认送达请求"""
- deliveryRemark: Optional[str] = Field(None, description="送达备注")
- deliveryImageUrl: Optional[str] = Field(None, description="送达图片URL")
- class DeliveryTaskCancelRequest(BaseModel):
- """取消配送任务请求"""
- reason: str = Field(..., description="取消原因")
- class DeliveryTaskStatusUpdateRequest(BaseModel):
- """更新配送任务状态请求"""
- status: str = Field(..., description="新状态")
- remark: Optional[str] = Field(None, description="备注")
- # ============ 供应商端配送任务 Schema ============
- class SupplierTaskResponse(BaseModel):
- """供应商配送任务响应"""
- id: str
- taskNo: str
- orderId: Optional[str] = None
- regionId: Optional[str] = None
- regionName: Optional[str] = None
- clientName: Optional[str] = None
- supplierId: Optional[str] = None
- deliverId: Optional[str] = None
- deliverName: Optional[str] = None
- status: str
- effectiveTime: Optional[datetime] = None
- pickupTime: Optional[datetime] = None
- pickupRemark: Optional[str] = None
- deliveryTime: Optional[datetime] = None
- totalItems: int = 0
- deliveredItems: int = 0
- createAt: Optional[datetime] = None
- class Config:
- from_attributes = True
- class SupplierTaskListResponse(BaseModel):
- """供应商配送任务列表响应"""
- items: List[SupplierTaskResponse]
- total: int
- page: int
- pageSize: int
- totalPages: int
- class SupplierConfirmPickupRequest(BaseModel):
- """供应商确认取货请求"""
- pickupRemark: Optional[str] = Field(None, description="取货备注")
- class SupplierConfirmPreparedRequest(BaseModel):
- """供应商确认备货完成请求"""
- preparedRemark: Optional[str] = Field(None, description="备货备注")
- # ============ 配送统计 Schema ============
- class DeliveryStatisticsResponse(BaseModel):
- """配送统计响应"""
- totalTasks: int
- pendingTasks: int
- inProgressTasks: int
- completedTasks: int
- cancelledTasks: int
- averageDeliveryTime: Optional[float] = None
- onTimeRate: Optional[float] = None
- class DeliveryWarningItem(BaseModel):
- """配送预警项"""
- taskId: str
- taskNo: str
- urgencyLevel: str
- remainingMinutes: int
- orderId: Optional[str] = None
- clientName: Optional[str] = None
- deliverName: Optional[str] = None
- class DeliveryWarningListResponse(BaseModel):
- """配送预警列表响应"""
- items: List[DeliveryWarningItem] = []
- total: int
- page: int
- pageSize: int
- totalPages: int
- # ============ 运营端配送任务 Schema (兼容旧命名) ============
- class DeliveryAssignRequest(BaseModel):
- """分配配送员请求"""
- deliverId: str = Field(..., description="配送员ID")
- class DeliveryAssignBatchRequest(BaseModel):
- """批量分配配送员请求"""
- taskIds: List[str] = Field(..., description="配送任务ID列表")
- deliverId: str = Field(..., description="配送员ID")
- class DeliveryPickupRequest(BaseModel):
- """配送员取货确认请求"""
- taskId: str = Field(..., description="配送任务ID")
- pickupRemark: Optional[str] = Field(None, description="取货备注")
- pickupImageUrl: Optional[str] = Field(None, description="取货图片")
- class DeliveryDeliverItem(BaseModel):
- """送达明细"""
- taskItemId: str = Field(..., description="配送任务明细ID")
- deliveredQuantity: Decimal = Field(..., description="送达数量")
- class DeliveryDeliverRequest(BaseModel):
- """确认送达请求"""
- taskId: str = Field(..., description="配送任务ID")
- items: List[DeliveryDeliverItem] = Field(default_factory=list, description="送达明细列表")
- deliveryRemark: Optional[str] = Field(None, description="送达备注")
- deliveryImageUrl: Optional[str] = Field(None, description="送达图片")
- class DeliveryCancelRequest(BaseModel):
- """取消配送任务请求"""
- taskId: str = Field(..., description="配送任务ID")
- reason: str = Field(..., description="取消原因")
- class DeliveryReassignRequest(BaseModel):
- """重新分配配送员请求"""
- taskId: str = Field(..., description="配送任务ID")
- newDeliverId: str = Field(..., description="新配送员ID")
- reason: Optional[str] = Field(None, description="重新分配原因")
- class DeliveryStatusResponse(BaseModel):
- """配送状态更新响应"""
- id: str
- status: str
- message: str = "操作成功"
- class DeliveryTaskStatistics(BaseModel):
- """配送任务统计"""
- total: int = 0
- pending: int = 0
- picking: int = 0
- delivering: int = 0
- completed: int = 0
- cancelled: int = 0
- class DeliveryAttachmentResponse(BaseModel):
- """配送附件响应"""
- id: str
- taskId: str
- type: str
- url: str
- createAt: datetime
- class Config:
- from_attributes = True
- # 兼容别名
- DeliveryCompleteRequest = DeliveryTaskDeliverRequest
|