51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
"""运输计划 - 三方粘贴识别提交 Schema"""
|
|
from typing import Literal, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ConflictAction(BaseModel):
|
|
key: Literal["vehicle", "driver", "escort"]
|
|
existing_id: str = Field(alias="existingId")
|
|
action: Literal["reuse", "overwrite", "cancel"]
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class PastePersonnelIn(BaseModel):
|
|
personnel_name: str = Field(alias="personnelName")
|
|
phone_no: Optional[str] = Field(default=None, alias="phoneNo")
|
|
id_card_no: Optional[str] = Field(default=None, alias="idCardNo")
|
|
personnel_type: Literal["driver", "escort"] = Field(alias="personnelType")
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class PasteVehicleIn(BaseModel):
|
|
license_plate: str = Field(alias="licensePlate")
|
|
trailer_no: str = Field(..., min_length=1, max_length=20, alias="trailerNo")
|
|
load_capacity: Optional[float] = Field(default=None, alias="loadCapacity")
|
|
carrier_id: Optional[str] = Field(default=None, alias="carrierId")
|
|
carrier_name: Optional[str] = Field(default=None, alias="carrierName")
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class PasteCommitBody(BaseModel):
|
|
mode: Literal["vehicle_bundle", "personnel_first"]
|
|
create_vehicle: bool = Field(default=True, alias="createVehicle")
|
|
vehicle: Optional[PasteVehicleIn] = None
|
|
driver: Optional[PastePersonnelIn] = None
|
|
escort: Optional[PastePersonnelIn] = None
|
|
conflicts: list[ConflictAction] = Field(default_factory=list)
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class PasteCommitResult(BaseModel):
|
|
vehicle_id: Optional[str] = Field(default=None, alias="vehicleId")
|
|
driver_id: Optional[str] = Field(default=None, alias="driverId")
|
|
escort_id: Optional[str] = Field(default=None, alias="escortId")
|
|
|
|
model_config = {"populate_by_name": True, "by_alias": True}
|