73 lines
1.8 KiB
Python
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"
|
|
)
|