from pydantic import BaseModel from datetime import datetime from typing import Optional class ProjectBase(BaseModel): """项目基础模型""" project_code: Optional[str] = None # 项目编号 name: str # 项目名称 project_type: Optional[str] = None # 工程类别 description: Optional[str] = None # 项目描述 department: str # 所属部门 contract_amount: Optional[float] = None # 合同金额(万元) project_manager: Optional[str] = None # 项目负责人 client_company: Optional[str] = None # 建设单位 client_contact: Optional[str] = None # 建设单位联系人 contract_date: Optional[datetime] = None # 合同签订日期 budget: Optional[int] = None # 预算 start_date: Optional[datetime] = None # 开始日期 planned_end_date: Optional[datetime] = None # 计划结束日期 actual_end_date: Optional[datetime] = None # 实际结束日期 progress: Optional[float] = 0.0 # 累计进度(%) actual_received_amount: Optional[float] = 0.0 # 实际收款金额(万元) payment_completion_rate: Optional[float] = 0.0 # 回款完成率(%) payment_terms: Optional[str] = None # 付款方式 status: Optional[str] = "pending" # 状态 class ProjectCreate(ProjectBase): """创建项目模型""" pass class ProjectUpdate(BaseModel): """更新项目模型""" project_code: Optional[str] = None name: Optional[str] = None project_type: Optional[str] = None description: Optional[str] = None department: Optional[str] = None contract_amount: Optional[float] = None project_manager: Optional[str] = None client_company: Optional[str] = None client_contact: Optional[str] = None contract_date: Optional[datetime] = None budget: Optional[int] = None start_date: Optional[datetime] = None planned_end_date: Optional[datetime] = None actual_end_date: Optional[datetime] = None progress: Optional[float] = None actual_received_amount: Optional[float] = None payment_completion_rate: Optional[float] = None payment_terms: Optional[str] = None status: Optional[str] = None class ProjectResponse(ProjectBase): """项目响应模型""" id: int created_by: int created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True