feat(weibo): 增加外部单协作台账

This commit is contained in:
yml2213
2026-11-08 11:41:54 +08:00
parent a0afa430ec
commit 79cfd4a634
16 changed files with 5217 additions and 4 deletions
+193
View File
@@ -961,6 +961,199 @@ class WeiboAccount(Base):
)
class WeiboCollabShop(Base):
"""微博外部单协作的店铺字典。"""
__tablename__ = "weibo_collab_shops"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(
String(64), unique=True, nullable=False, index=True
)
sort_order: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
is_active: Mapped[bool] = mapped_column(
Boolean, default=True, server_default="1", index=True
)
remark: Mapped[str] = mapped_column(String(255), default="", server_default="")
created_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
updated_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
created_at: Mapped[datetime] = mapped_column(UTCDateTime, default=_utcnow)
updated_at: Mapped[datetime] = mapped_column(
UTCDateTime, default=_utcnow, onupdate=_utcnow
)
class WeiboCollabGoods(Base):
"""微博外部单协作的商品字典,微豆价格仅作下单快照兜底。"""
__tablename__ = "weibo_collab_goods"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(
String(128), unique=True, nullable=False, index=True
)
price: Mapped[int] = mapped_column(
Integer, default=0, server_default="0", nullable=False
)
goods_id: Mapped[int | None] = mapped_column(Integer, nullable=True)
goods_image: Mapped[str] = mapped_column(String(512), default="", server_default="")
sort_order: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
is_active: Mapped[bool] = mapped_column(
Boolean, default=True, server_default="1", index=True
)
remark: Mapped[str] = mapped_column(String(255), default="", server_default="")
created_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
updated_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
created_at: Mapped[datetime] = mapped_column(UTCDateTime, default=_utcnow)
updated_at: Mapped[datetime] = mapped_column(
UTCDateTime, default=_utcnow, onupdate=_utcnow
)
class WeiboExternalOrder(Base):
"""微博外部单协作台账:一行 = 一单,引用现有微博账号池。"""
__tablename__ = "weibo_external_orders"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
order_no: Mapped[str] = mapped_column(
String(64), unique=True, nullable=False, index=True
)
shop: Mapped[str] = mapped_column(
String(64), default="", server_default="", index=True
)
owner_id: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True, index=True
)
account_id: Mapped[int | None] = mapped_column(
ForeignKey("weibo_accounts.id", ondelete="SET NULL"),
nullable=True,
index=True,
)
account_uid: Mapped[str] = mapped_column(
String(32), default="", server_default="", index=True
)
account_nickname: Mapped[str] = mapped_column(
String(128), default="", server_default=""
)
game_role_name: Mapped[str] = mapped_column(
String(128), default="", server_default=""
)
bind_snapshot_at: Mapped[datetime | None] = mapped_column(
UTCDateTime, nullable=True
)
goods_id: Mapped[int | None] = mapped_column(Integer, nullable=True)
goods_name: Mapped[str] = mapped_column(String(128), default="", server_default="")
goods_image: Mapped[str] = mapped_column(String(512), default="", server_default="")
required_weidou: Mapped[int | None] = mapped_column(Integer, nullable=True)
home_images: Mapped[list | None] = mapped_column(JSON, nullable=True)
remark: Mapped[str] = mapped_column(String(512), default="", server_default="")
status: Mapped[str] = mapped_column(
String(20), default="incomplete", server_default="incomplete", index=True
)
recharged_at: Mapped[datetime | None] = mapped_column(UTCDateTime, nullable=True)
exchange_started_at: Mapped[datetime | None] = mapped_column(
UTCDateTime, nullable=True
)
done_at: Mapped[datetime | None] = mapped_column(UTCDateTime, nullable=True)
void_reason: Mapped[str] = mapped_column(String(256), default="", server_default="")
weidou_balance: Mapped[int | None] = mapped_column(Integer, nullable=True)
weidou_required_total: Mapped[int | None] = mapped_column(Integer, nullable=True)
weidou_surplus: Mapped[int | None] = mapped_column(Integer, nullable=True)
weidou_threshold: Mapped[int | None] = mapped_column(Integer, nullable=True)
weidou_checked_at: Mapped[datetime | None] = mapped_column(
UTCDateTime, nullable=True
)
weidou_check_reason: Mapped[str] = mapped_column(
String(16), default="", server_default=""
)
weidou_check_message: Mapped[str] = mapped_column(
String(512), default="", server_default=""
)
weidou_check_detail: Mapped[dict | None] = mapped_column(JSON, nullable=True)
exchange_checked_at: Mapped[datetime | None] = mapped_column(
UTCDateTime, nullable=True
)
exchange_record_key: Mapped[str] = mapped_column(
String(128), default="", server_default=""
)
exchange_record_snapshot: Mapped[dict | None] = mapped_column(JSON, nullable=True)
exchange_verdict: Mapped[str] = mapped_column(
String(16), default="", server_default="", index=True
)
exchange_message: Mapped[str] = mapped_column(
String(512), default="", server_default=""
)
archived_at: Mapped[datetime | None] = mapped_column(
UTCDateTime, nullable=True, index=True
)
archived_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
archive_reason: Mapped[str] = mapped_column(
String(256), default="", server_default=""
)
created_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True, index=True
)
updated_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
version: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
created_at: Mapped[datetime] = mapped_column(UTCDateTime, default=_utcnow)
updated_at: Mapped[datetime] = mapped_column(
UTCDateTime, default=_utcnow, onupdate=_utcnow, index=True
)
class WeiboExternalOrderMetric(Base):
"""微博协作单的核账与兑换记录快照,只追加,不保存 CK。"""
__tablename__ = "weibo_external_order_metrics"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
order_id: Mapped[int] = mapped_column(
ForeignKey("weibo_external_orders.id", ondelete="CASCADE"), index=True
)
order_no: Mapped[str] = mapped_column(String(64), default="", server_default="")
account_id: Mapped[int | None] = mapped_column(Integer, nullable=True, index=True)
account_uid: Mapped[str] = mapped_column(String(32), default="", server_default="")
weidou_balance: Mapped[int | None] = mapped_column(Integer, nullable=True)
weidou_required_total: Mapped[int | None] = mapped_column(Integer, nullable=True)
weidou_surplus: Mapped[int | None] = mapped_column(Integer, nullable=True)
records_total: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
records_matched: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
verdict: Mapped[str] = mapped_column(
String(16), default="unknown", server_default="unknown", index=True
)
message: Mapped[str] = mapped_column(String(512), default="", server_default="")
source: Mapped[str] = mapped_column(
String(24), default="manual", server_default="manual"
)
raw: Mapped[dict | None] = mapped_column(JSON, nullable=True)
created_by: Mapped[int | None] = mapped_column(
ForeignKey("users.id"), nullable=True
)
created_at: Mapped[datetime] = mapped_column(
UTCDateTime, default=_utcnow, index=True
)
class HuyaRegisterBatch(Base):
"""虎牙自动注册批次(持久化元数据)"""