outbound_release_material.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from decimal import Decimal
  2. from typing import List, Optional
  3. from pydantic import BaseModel, ConfigDict, Field, field_validator
  4. class OutboundReleaseCellItem(BaseModel):
  5. model_config = ConfigDict(populate_by_name=True)
  6. cellProductId: str = Field(..., min_length=1)
  7. remark: Optional[str] = None
  8. class OutboundReleaseQcMaterialItem(BaseModel):
  9. model_config = ConfigDict(populate_by_name=True)
  10. materialId: str = Field(..., min_length=1)
  11. qty: Decimal = Field(..., gt=0)
  12. remark: Optional[str] = None
  13. @field_validator("qty", mode="before")
  14. @classmethod
  15. def _coerce_qty(cls, v):
  16. if v is None or v == "":
  17. raise ValueError("用量必须大于0")
  18. return v
  19. class OutboundReleasePaperItem(BaseModel):
  20. model_config = ConfigDict(populate_by_name=True)
  21. paperName: str = Field(..., min_length=1)
  22. copies: int = Field(..., ge=1)
  23. attachmentUrl: str = Field(..., min_length=1)
  24. remark: Optional[str] = None
  25. class OutboundReleaseMaterialSaveBody(BaseModel):
  26. model_config = ConfigDict(populate_by_name=True)
  27. paperAttachments: Optional[str] = None
  28. paperMaterials: List[OutboundReleasePaperItem] = Field(default_factory=list)
  29. remark: Optional[str] = None
  30. cells: List[OutboundReleaseCellItem] = Field(default_factory=list)
  31. qcMaterials: List[OutboundReleaseQcMaterialItem] = Field(default_factory=list)