"""项目成本汇总模型 存储项目的成本计算结果 """ from datetime import datetime from decimal import Decimal from typing import TYPE_CHECKING from sqlalchemy import BigInteger, DateTime, DECIMAL, ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import BaseModel if TYPE_CHECKING: from app.models.project import Project class ProjectCostSummary(BaseModel): """项目成本汇总表""" __tablename__ = "project_cost_summaries" project_id: Mapped[int] = mapped_column( BigInteger, ForeignKey("projects.id", ondelete="CASCADE"), nullable=False, unique=True, index=True, comment="项目ID" ) material_cost: Mapped[Decimal] = mapped_column( DECIMAL(12, 2), nullable=False, default=0, comment="耗材成本" ) equipment_cost: Mapped[Decimal] = mapped_column( DECIMAL(12, 2), nullable=False, default=0, comment="设备折旧成本" ) labor_cost: Mapped[Decimal] = mapped_column( DECIMAL(12, 2), nullable=False, default=0, comment="人工成本" ) fixed_cost_allocation: Mapped[Decimal] = mapped_column( DECIMAL(12, 2), nullable=False, default=0, comment="固定成本分摊" ) total_cost: Mapped[Decimal] = mapped_column( DECIMAL(12, 2), nullable=False, default=0, comment="总成本(最低成本线)" ) calculated_at: Mapped[datetime] = mapped_column( DateTime, nullable=False, comment="计算时间" ) # 关系 project: Mapped["Project"] = relationship( "Project", back_populates="cost_summary" )