Files
shanxia2.0/backend/app/schemas/pl/vehicle_maintenance.py
T
2026-06-29 11:15:39 +08:00

154 lines
6.4 KiB
Python

"""车辆维保 Schema"""
from datetime import date, datetime
from decimal import Decimal
from typing import Optional
from pydantic import BaseModel, Field, field_validator
class VehicleMaintenanceApplyCreate(BaseModel):
license_plate: str = Field(..., alias="licensePlate")
applicant_id: Optional[str] = Field(default=None, alias="applicantId")
apply_date: date = Field(..., alias="applyDate")
maintenance_type: str = Field(..., alias="maintenanceType")
start_date: date = Field(..., alias="startDate")
expected_pickup_date: Optional[date] = Field(default=None, alias="expectedPickupDate")
maintenance_content: Optional[str] = Field(default=None, alias="maintenanceContent")
shop_address: Optional[str] = Field(default=None, alias="shopAddress")
attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
remark: Optional[str] = None
model_config = {"populate_by_name": True}
class VehicleMaintenanceApplyUpdate(VehicleMaintenanceApplyCreate):
pass
class VehicleMaintenanceApplyRead(BaseModel):
id: str
apply_no: str = Field(..., alias="applyNo")
license_plate: str = Field(..., alias="licensePlate")
applicant_id: str = Field(..., alias="applicantId")
applicant_name: Optional[str] = Field(default=None, alias="applicantName")
apply_date: date = Field(..., alias="applyDate")
maintenance_type: str = Field(..., alias="maintenanceType")
start_date: date = Field(..., alias="startDate")
expected_pickup_date: Optional[date] = Field(default=None, alias="expectedPickupDate")
maintenance_content: Optional[str] = Field(default=None, alias="maintenanceContent")
shop_address: Optional[str] = Field(default=None, alias="shopAddress")
attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
status: str
remark: Optional[str] = None
create_time: Optional[datetime] = Field(default=None, alias="createTime")
update_time: Optional[datetime] = Field(default=None, alias="updateTime")
model_config = {"populate_by_name": True}
class VehicleMaintenanceApplyListResponse(BaseModel):
items: list[VehicleMaintenanceApplyRead]
total: int
page: int
page_size: int = Field(..., alias="pageSize")
model_config = {"populate_by_name": True}
class VehicleMaintenanceApplyReminder(BaseModel):
id: str
apply_no: str = Field(..., alias="applyNo")
license_plate: str = Field(..., alias="licensePlate")
maintenance_type: str = Field(..., alias="maintenanceType")
apply_date: date = Field(..., alias="applyDate")
start_date: date = Field(..., alias="startDate")
expected_pickup_date: Optional[date] = Field(default=None, alias="expectedPickupDate")
maintenance_content: Optional[str] = Field(default=None, alias="maintenanceContent")
shop_address: Optional[str] = Field(default=None, alias="shopAddress")
model_config = {"populate_by_name": True}
class VehicleMaintenanceProcessCreate(BaseModel):
apply_id: Optional[str] = Field(default=None, alias="applyId")
license_plate: Optional[str] = Field(default=None, alias="licensePlate")
amount: Optional[Decimal] = None
handler_id: Optional[str] = Field(default=None, alias="handlerId")
process_date: date = Field(..., alias="processDate")
attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
remark: Optional[str] = None
model_config = {"populate_by_name": True}
@field_validator("amount")
@classmethod
def validate_amount(cls, v: Optional[Decimal]) -> Optional[Decimal]:
if v is not None and v <= 0:
raise ValueError("金额须大于 0")
return v
class VehicleMaintenanceProcessUpdate(VehicleMaintenanceProcessCreate):
pass
class VehicleMaintenanceProcessRead(BaseModel):
id: str
process_no: str = Field(..., alias="processNo")
apply_id: Optional[str] = Field(default=None, alias="applyId")
apply_no: Optional[str] = Field(default=None, alias="applyNo")
license_plate: Optional[str] = Field(default=None, alias="licensePlate")
amount: Optional[Decimal] = None
handler_id: str = Field(..., alias="handlerId")
handler_name: Optional[str] = Field(default=None, alias="handlerName")
process_date: date = Field(..., alias="processDate")
attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
remark: Optional[str] = None
create_by: Optional[str] = Field(default=None, alias="createBy")
create_by_name: Optional[str] = Field(default=None, alias="createByName")
create_time: Optional[datetime] = Field(default=None, alias="createTime")
update_time: Optional[datetime] = Field(default=None, alias="updateTime")
model_config = {"populate_by_name": True}
class VehicleMaintenanceProcessListResponse(BaseModel):
items: list[VehicleMaintenanceProcessRead]
total: int
page: int
page_size: int = Field(..., alias="pageSize")
model_config = {"populate_by_name": True}
class VehicleMaintenanceProcessBoardItem(BaseModel):
apply_id: str = Field(..., alias="applyId")
apply_no: str = Field(..., alias="applyNo")
license_plate: str = Field(..., alias="licensePlate")
maintenance_type: str = Field(..., alias="maintenanceType")
apply_date: date = Field(..., alias="applyDate")
start_date: date = Field(..., alias="startDate")
expected_pickup_date: Optional[date] = Field(default=None, alias="expectedPickupDate")
maintenance_content: Optional[str] = Field(default=None, alias="maintenanceContent")
shop_address: Optional[str] = Field(default=None, alias="shopAddress")
applicant_name: Optional[str] = Field(default=None, alias="applicantName")
apply_status: str = Field(..., alias="applyStatus")
apply_remark: Optional[str] = Field(default=None, alias="applyRemark")
process_id: Optional[str] = Field(default=None, alias="processId")
process_no: Optional[str] = Field(default=None, alias="processNo")
process_date: Optional[date] = Field(default=None, alias="processDate")
amount: Optional[Decimal] = None
handler_name: Optional[str] = Field(default=None, alias="handlerName")
process_remark: Optional[str] = Field(default=None, alias="processRemark")
model_config = {"populate_by_name": True}
class VehicleMaintenanceProcessBoardListResponse(BaseModel):
items: list[VehicleMaintenanceProcessBoardItem]
total: int
page: int
page_size: int = Field(..., alias="pageSize")
model_config = {"populate_by_name": True}