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

84 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""竞品价格模型
记录竞品机构的项目价格信息
"""
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.competitor import Competitor
from app.models.project import Project
class CompetitorPrice(BaseModel):
"""竞品价格表"""
__tablename__ = "competitor_prices"
competitor_id: Mapped[int] = mapped_column(
BigInteger,
ForeignKey("competitors.id", ondelete="CASCADE"),
nullable=False,
index=True,
comment="竞品机构ID"
)
project_id: Mapped[Optional[int]] = mapped_column(
BigInteger,
ForeignKey("projects.id", ondelete="SET NULL"),
nullable=True,
index=True,
comment="关联本店项目ID"
)
project_name: Mapped[str] = mapped_column(
String(100),
nullable=False,
comment="竞品项目名称"
)
original_price: Mapped[Decimal] = mapped_column(
DECIMAL(12, 2),
nullable=False,
comment="原价"
)
promo_price: Mapped[Optional[Decimal]] = mapped_column(
DECIMAL(12, 2),
nullable=True,
comment="促销价"
)
member_price: Mapped[Optional[Decimal]] = mapped_column(
DECIMAL(12, 2),
nullable=True,
comment="会员价"
)
price_source: Mapped[str] = mapped_column(
String(20),
nullable=False,
comment="来源official-官网, meituan-美团, dianping-大众点评, survey-实地调研"
)
collected_at: Mapped[date] = mapped_column(
Date,
nullable=False,
index=True,
comment="采集日期"
)
remark: Mapped[Optional[str]] = mapped_column(
String(200),
nullable=True,
comment="备注"
)
# 关系
competitor: Mapped["Competitor"] = relationship(
"Competitor",
back_populates="prices"
)
project: Mapped[Optional["Project"]] = relationship(
"Project"
)