73 lines
1.8 KiB
Python
73 lines
1.8 KiB
Python
"""标杆价格模型
|
||
|
||
维护行业标杆机构的价格参考
|
||
"""
|
||
|
||
from typing import Optional, TYPE_CHECKING
|
||
from decimal import Decimal
|
||
from datetime import date
|
||
|
||
from sqlalchemy import BigInteger, String, Date, DECIMAL, ForeignKey
|
||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||
|
||
from app.models.base import BaseModel
|
||
|
||
if TYPE_CHECKING:
|
||
from app.models.category import Category
|
||
|
||
|
||
class BenchmarkPrice(BaseModel):
|
||
"""标杆价格表"""
|
||
|
||
__tablename__ = "benchmark_prices"
|
||
|
||
benchmark_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"
|
||
)
|
||
min_price: Mapped[Decimal] = mapped_column(
|
||
DECIMAL(12, 2),
|
||
nullable=False,
|
||
comment="最低价"
|
||
)
|
||
max_price: Mapped[Decimal] = mapped_column(
|
||
DECIMAL(12, 2),
|
||
nullable=False,
|
||
comment="最高价"
|
||
)
|
||
avg_price: Mapped[Decimal] = mapped_column(
|
||
DECIMAL(12, 2),
|
||
nullable=False,
|
||
comment="均价"
|
||
)
|
||
price_tier: Mapped[str] = mapped_column(
|
||
String(20),
|
||
nullable=False,
|
||
default="medium",
|
||
comment="价格带:low-低端, medium-中端, high-高端, premium-奢华"
|
||
)
|
||
effective_date: Mapped[date] = mapped_column(
|
||
Date,
|
||
nullable=False,
|
||
index=True,
|
||
comment="生效日期"
|
||
)
|
||
remark: Mapped[Optional[str]] = mapped_column(
|
||
String(200),
|
||
nullable=True,
|
||
comment="备注"
|
||
)
|
||
|
||
# 关系
|
||
category: Mapped[Optional["Category"]] = relationship(
|
||
"Category"
|
||
)
|