Initial commit: 智能项目定价模型
This commit is contained in:
102
后端服务/app/models/project.py
Normal file
102
后端服务/app/models/project.py
Normal file
@@ -0,0 +1,102 @@
|
||||
"""服务项目模型
|
||||
|
||||
管理医美服务项目基础信息
|
||||
"""
|
||||
|
||||
from typing import Optional, List, TYPE_CHECKING
|
||||
|
||||
from sqlalchemy import BigInteger, String, Boolean, Integer, Text, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
from app.models.base import BaseModel
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app.models.category import Category
|
||||
from app.models.user import User
|
||||
from app.models.project_cost_item import ProjectCostItem
|
||||
from app.models.project_labor_cost import ProjectLaborCost
|
||||
from app.models.project_cost_summary import ProjectCostSummary
|
||||
from app.models.pricing_plan import PricingPlan
|
||||
|
||||
|
||||
class Project(BaseModel):
|
||||
"""服务项目表"""
|
||||
|
||||
__tablename__ = "projects"
|
||||
|
||||
project_code: Mapped[str] = mapped_column(
|
||||
String(50),
|
||||
unique=True,
|
||||
nullable=False,
|
||||
index=True,
|
||||
comment="项目编码"
|
||||
)
|
||||
project_name: Mapped[str] = mapped_column(
|
||||
String(100),
|
||||
nullable=False,
|
||||
comment="项目名称"
|
||||
)
|
||||
category_id: Mapped[Optional[int]] = mapped_column(
|
||||
BigInteger,
|
||||
ForeignKey("categories.id"),
|
||||
nullable=True,
|
||||
index=True,
|
||||
comment="项目分类ID"
|
||||
)
|
||||
description: Mapped[Optional[str]] = mapped_column(
|
||||
Text,
|
||||
nullable=True,
|
||||
comment="项目描述"
|
||||
)
|
||||
duration_minutes: Mapped[int] = mapped_column(
|
||||
Integer,
|
||||
nullable=False,
|
||||
default=0,
|
||||
comment="操作时长(分钟)"
|
||||
)
|
||||
is_active: Mapped[bool] = mapped_column(
|
||||
Boolean,
|
||||
nullable=False,
|
||||
default=True,
|
||||
index=True,
|
||||
comment="是否启用"
|
||||
)
|
||||
created_by: Mapped[Optional[int]] = mapped_column(
|
||||
BigInteger,
|
||||
ForeignKey("users.id"),
|
||||
nullable=True,
|
||||
comment="创建人ID"
|
||||
)
|
||||
|
||||
# 关系
|
||||
category: Mapped[Optional["Category"]] = relationship(
|
||||
"Category",
|
||||
back_populates="projects"
|
||||
)
|
||||
creator: Mapped[Optional["User"]] = relationship(
|
||||
"User",
|
||||
back_populates="created_projects"
|
||||
)
|
||||
|
||||
# 成本相关关系
|
||||
cost_items: Mapped[List["ProjectCostItem"]] = relationship(
|
||||
"ProjectCostItem",
|
||||
back_populates="project",
|
||||
cascade="all, delete-orphan"
|
||||
)
|
||||
labor_costs: Mapped[List["ProjectLaborCost"]] = relationship(
|
||||
"ProjectLaborCost",
|
||||
back_populates="project",
|
||||
cascade="all, delete-orphan"
|
||||
)
|
||||
cost_summary: Mapped[Optional["ProjectCostSummary"]] = relationship(
|
||||
"ProjectCostSummary",
|
||||
back_populates="project",
|
||||
uselist=False,
|
||||
cascade="all, delete-orphan"
|
||||
)
|
||||
pricing_plans: Mapped[List["PricingPlan"]] = relationship(
|
||||
"PricingPlan",
|
||||
back_populates="project",
|
||||
cascade="all, delete-orphan"
|
||||
)
|
||||
Reference in New Issue
Block a user