""" 物料管理相关数据模型 定义物料价格历史和物料供应商关联的数据结构 """ from pydantic import BaseModel, ConfigDict, Field from datetime import datetime from typing import Optional, List, Dict class MaterialPriceHistoryCreate(BaseModel): """创建物料价格历史的请求模型""" price: float = Field(..., gt=0, description="物料价格") supplier_id: Optional[int] = Field(None, description="供应商ID") remark: Optional[str] = Field(None, description="备注") class MaterialPriceHistoryResponse(BaseModel): """物料价格历史的响应模型""" id: int product_id: int product_sku: str product_name: str price: float effective_date: datetime supplier_id: Optional[int] supplier_name: Optional[str] remark: Optional[str] created_at: datetime model_config = ConfigDict(from_attributes=True) class MaterialSupplierCreate(BaseModel): """创建物料供应商关联的请求模型""" supplier_id: int = Field(..., description="供应商ID") is_primary: bool = Field(False, description="是否为主要供应商") contact_person: Optional[str] = Field(None, description="联系人") contact_phone: Optional[str] = Field(None, description="联系电话") lead_time: Optional[int] = Field(None, ge=1, description="交货周期(天)") min_order_quantity: Optional[int] = Field(None, ge=1, description="最小订购量") class MaterialSupplierResponse(BaseModel): """物料供应商关联的响应模型""" id: int product_id: int product_sku: str product_name: str supplier_id: int supplier_name: str is_primary: bool contact_person: Optional[str] contact_phone: Optional[str] lead_time: Optional[int] min_order_quantity: Optional[int] created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True) class PriceHistoryItem(BaseModel): """价格历史项""" date: datetime price: float supplier_name: Optional[str] class MaterialPriceTrendResponse(BaseModel): """物料价格趋势的响应模型""" product_id: int product_sku: str product_name: str current_price: float price_change: float price_change_percent: float price_history: List[PriceHistoryItem]