vehicle_urea.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. """车辆尿素 Schema"""
  2. from datetime import date, datetime
  3. from decimal import Decimal
  4. from typing import Optional
  5. from pydantic import BaseModel, Field, field_validator
  6. class VehicleUreaApplyCreate(BaseModel):
  7. license_plate: str = Field(..., alias="licensePlate")
  8. applicant_id: Optional[str] = Field(default=None, alias="applicantId")
  9. apply_date: date = Field(..., alias="applyDate")
  10. warehouse_in_date: date = Field(..., alias="warehouseInDate")
  11. unit: str = Field(default="吨桶")
  12. quantity: Decimal
  13. apply_amount: Decimal = Field(..., alias="applyAmount")
  14. attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
  15. remark: Optional[str] = None
  16. model_config = {"populate_by_name": True}
  17. @field_validator("quantity")
  18. @classmethod
  19. def validate_quantity(cls, v: Decimal) -> Decimal:
  20. if v is None or v <= 0:
  21. raise ValueError("入库数须大于 0")
  22. return v
  23. @field_validator("apply_amount")
  24. @classmethod
  25. def validate_apply_amount(cls, v: Decimal) -> Decimal:
  26. if v is None or v <= 0:
  27. raise ValueError("申请金额须大于 0")
  28. return v
  29. class VehicleUreaApplyUpdate(VehicleUreaApplyCreate):
  30. pass
  31. class VehicleUreaApplyRead(BaseModel):
  32. id: str
  33. apply_no: str = Field(..., alias="applyNo")
  34. license_plate: str = Field(..., alias="licensePlate")
  35. applicant_id: str = Field(..., alias="applicantId")
  36. applicant_name: Optional[str] = Field(default=None, alias="applicantName")
  37. apply_date: date = Field(..., alias="applyDate")
  38. warehouse_in_date: date = Field(..., alias="warehouseInDate")
  39. unit: str
  40. quantity: Decimal
  41. apply_amount: Decimal = Field(..., alias="applyAmount")
  42. attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
  43. status: str
  44. cancel_reason: Optional[str] = Field(default=None, alias="cancelReason")
  45. cancel_time: Optional[datetime] = Field(default=None, alias="cancelTime")
  46. cancel_by: Optional[str] = Field(default=None, alias="cancelBy")
  47. remark: Optional[str] = None
  48. create_time: Optional[datetime] = Field(default=None, alias="createTime")
  49. update_time: Optional[datetime] = Field(default=None, alias="updateTime")
  50. model_config = {"populate_by_name": True}
  51. class VehicleUreaApplyListResponse(BaseModel):
  52. items: list[VehicleUreaApplyRead]
  53. total: int
  54. page: int
  55. page_size: int = Field(..., alias="pageSize")
  56. model_config = {"populate_by_name": True}
  57. class VehicleUreaDisburseCreate(BaseModel):
  58. apply_id: Optional[str] = Field(default=None, alias="applyId")
  59. license_plate: Optional[str] = Field(default=None, alias="licensePlate")
  60. amount: Decimal
  61. handler_id: Optional[str] = Field(default=None, alias="handlerId")
  62. disburse_date: date = Field(..., alias="disburseDate")
  63. attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
  64. remark: Optional[str] = None
  65. model_config = {"populate_by_name": True}
  66. @field_validator("amount")
  67. @classmethod
  68. def validate_amount(cls, v: Decimal) -> Decimal:
  69. if v is None or v <= 0:
  70. raise ValueError("发放金额须大于 0")
  71. return v
  72. class VehicleUreaDisburseUpdate(VehicleUreaDisburseCreate):
  73. pass
  74. class VehicleUreaDisburseRead(BaseModel):
  75. id: str
  76. disburse_no: str = Field(..., alias="disburseNo")
  77. apply_id: Optional[str] = Field(default=None, alias="applyId")
  78. apply_no: Optional[str] = Field(default=None, alias="applyNo")
  79. license_plate: Optional[str] = Field(default=None, alias="licensePlate")
  80. amount: Decimal
  81. handler_id: str = Field(..., alias="handlerId")
  82. handler_name: Optional[str] = Field(default=None, alias="handlerName")
  83. disburse_date: date = Field(..., alias="disburseDate")
  84. attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
  85. remark: Optional[str] = None
  86. create_by: Optional[str] = Field(default=None, alias="createBy")
  87. create_by_name: Optional[str] = Field(default=None, alias="createByName")
  88. create_time: Optional[datetime] = Field(default=None, alias="createTime")
  89. update_time: Optional[datetime] = Field(default=None, alias="updateTime")
  90. model_config = {"populate_by_name": True}
  91. class VehicleUreaDisburseListResponse(BaseModel):
  92. items: list[VehicleUreaDisburseRead]
  93. total: int
  94. page: int
  95. page_size: int = Field(..., alias="pageSize")
  96. model_config = {"populate_by_name": True}
  97. class VehicleUreaDisburseBoardItem(BaseModel):
  98. apply_id: str = Field(..., alias="applyId")
  99. apply_no: str = Field(..., alias="applyNo")
  100. license_plate: str = Field(..., alias="licensePlate")
  101. apply_date: date = Field(..., alias="applyDate")
  102. warehouse_in_date: date = Field(..., alias="warehouseInDate")
  103. unit: str
  104. quantity: Decimal
  105. apply_amount: Decimal = Field(..., alias="applyAmount")
  106. applicant_name: Optional[str] = Field(default=None, alias="applicantName")
  107. apply_status: str = Field(..., alias="applyStatus")
  108. apply_remark: Optional[str] = Field(default=None, alias="applyRemark")
  109. disburse_id: Optional[str] = Field(default=None, alias="disburseId")
  110. disburse_no: Optional[str] = Field(default=None, alias="disburseNo")
  111. disburse_date: Optional[date] = Field(default=None, alias="disburseDate")
  112. amount: Optional[Decimal] = None
  113. handler_name: Optional[str] = Field(default=None, alias="handlerName")
  114. disburse_remark: Optional[str] = Field(default=None, alias="disburseRemark")
  115. model_config = {"populate_by_name": True}
  116. class VehicleUreaDisburseBoardListResponse(BaseModel):
  117. items: list[VehicleUreaDisburseBoardItem]
  118. total: int
  119. page: int
  120. page_size: int = Field(..., alias="pageSize")
  121. model_config = {"populate_by_name": True}