"""客户获取计划模型。 AI 客户增长引擎 — LP 资源匹配 + 客户获取方案。 """ import uuid from datetime import datetime, timezone from sqlalchemy import DateTime, ForeignKey, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base from app.core.types import JSONBType class CustomerAcquisitionPlan(Base): """客户获取计划。""" __tablename__ = "customer_acquisition_plans" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) company_id: Mapped[str] = mapped_column(String(36), ForeignKey("companies.id"), nullable=False, index=True) target_customer: Mapped[str | None] = mapped_column(Text, nullable=True, comment="目标客户画像") entry_angle: Mapped[str | None] = mapped_column(Text, nullable=True, comment="切入角度") decision_chain: Mapped[dict | None] = mapped_column(JSONBType, nullable=True, comment="决策链分析") pricing_strategy: Mapped[str | None] = mapped_column(Text, nullable=True, comment="定价策略") competitive_analysis: Mapped[dict | None] = mapped_column(JSONBType, nullable=True, comment="竞争分析") lp_resources: Mapped[dict | None] = mapped_column(JSONBType, nullable=True, comment="可利用 LP 资源") execution_status: Mapped[str] = mapped_column(String(20), nullable=False, default="planned", comment="planned/executing/completed/failed") result: Mapped[dict | None] = mapped_column(JSONBType, nullable=True, comment="执行结果") created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc), )