paste_recognize.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. """运输计划 - 三方粘贴识别提交 Schema"""
  2. from typing import Literal, Optional
  3. from pydantic import BaseModel, Field
  4. class ConflictAction(BaseModel):
  5. key: Literal["vehicle", "driver", "escort"]
  6. existing_id: str = Field(alias="existingId")
  7. action: Literal["reuse", "overwrite", "cancel"]
  8. model_config = {"populate_by_name": True}
  9. class PastePersonnelIn(BaseModel):
  10. personnel_name: str = Field(alias="personnelName")
  11. phone_no: Optional[str] = Field(default=None, alias="phoneNo")
  12. id_card_no: Optional[str] = Field(default=None, alias="idCardNo")
  13. personnel_type: Literal["driver", "escort"] = Field(alias="personnelType")
  14. model_config = {"populate_by_name": True}
  15. class PasteVehicleIn(BaseModel):
  16. license_plate: str = Field(alias="licensePlate")
  17. trailer_no: Optional[str] = Field(default=None, alias="trailerNo")
  18. load_capacity: Optional[float] = Field(default=None, alias="loadCapacity")
  19. carrier_id: Optional[str] = Field(default=None, alias="carrierId")
  20. carrier_name: Optional[str] = Field(default=None, alias="carrierName")
  21. model_config = {"populate_by_name": True}
  22. class PasteCommitBody(BaseModel):
  23. mode: Literal["vehicle_bundle", "personnel_first"]
  24. create_vehicle: bool = Field(default=True, alias="createVehicle")
  25. vehicle: Optional[PasteVehicleIn] = None
  26. driver: Optional[PastePersonnelIn] = None
  27. escort: Optional[PastePersonnelIn] = None
  28. conflicts: list[ConflictAction] = Field(default_factory=list)
  29. model_config = {"populate_by_name": True}
  30. class PasteCommitResult(BaseModel):
  31. vehicle_id: Optional[str] = Field(default=None, alias="vehicleId")
  32. driver_id: Optional[str] = Field(default=None, alias="driverId")
  33. escort_id: Optional[str] = Field(default=None, alias="escortId")
  34. model_config = {"populate_by_name": True, "by_alias": True}