Files
smart-project-pricing/后端服务/app/models/project_cost_summary.py
2026-01-31 21:33:06 +08:00

73 lines
1.8 KiB
Python

"""项目成本汇总模型
存储项目的成本计算结果
"""
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"
)