feat(huya): 协作台账店铺字典·新建强校验·同买家多单 + uid 放开(迁移 0057/0058)
- 店铺字典(迁移 0057):大按钮点选 + 「新店」自定义自动登记;重命名可级联、 停用/备注;列表行内改、详情、筛选条共用同一个 picker - 新建强校验:订单编号/店铺/CK/礼包名/主页截图必填;贴 CK 即探针预览, 读不到绑定角色禁止提交;礼包用工作台配置的活动 SID 现拉(浏览器缓存 + 强制刷新) - 图片:绑定图停用、「绑定斗鱼号」下线(绑定关系改由探针读 bind_game_*), 主页截图改为新建必填(弹窗内先传 OSS 再随表单落库) - 同买家多单软识别:按「绑定账号 + 绑定角色」整批一次查询,列表「同买家」列 + 详情分组,点单号直接切单 - uid 放开唯一性(迁移 0058):同一份 CK 可服务多单,原 409 冲突改为提示 + 审计 - 列表体验:序号列、搜索扩到 11 个字段、CK 状态列截断、新建弹窗放大并去滚动条 - 验证:pytest 932 passed / 6 skipped;接口冒烟 56 项全绿;tsc+eslint+build 通过
This commit is contained in:
+43
-5
@@ -1033,6 +1033,45 @@ class FileAsset(Base):
|
||||
)
|
||||
|
||||
|
||||
class HuyaCollabShop(Base):
|
||||
"""协作台账的**店铺字典**(新建协作单时点一下选,不用手打)。
|
||||
|
||||
几个取舍,改之前先看:
|
||||
|
||||
1. **订单里存的是店铺名字符串,不是 id**(`huya_external_orders.shop`)——
|
||||
历史 Excel 数据就是文本,改成外键要动所有读写与导入。代价:改名要么级联
|
||||
(`update_shop(..., rename_orders=True)`,默认开),要么只影响以后的单子;
|
||||
2. **订单里出现过的店铺名会自动登记**(新建/编辑/粘贴导入都走
|
||||
`ensure_shops_registered`),所以字典永远覆盖已有数据,筛选下拉不会漏;
|
||||
3. **停用(`is_active=0`)≠ 删除**:只是不再出现在新建的选择里,历史订单与筛选照旧;
|
||||
4. **不加乐观锁 version**:字典是十几行的低频维度,改名冲突靠审计看,不值得为它
|
||||
再加一套版本号(台账订单行才需要,见 `HuyaExternalOrder`)。
|
||||
"""
|
||||
|
||||
__tablename__ = "huya_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 HuyaExternalOrder(Base):
|
||||
"""虎牙外部 CK 协作台账(替代 Excel 多人协同表)。
|
||||
|
||||
@@ -1067,11 +1106,10 @@ class HuyaExternalOrder(Base):
|
||||
)
|
||||
|
||||
# ---- 外部 CK 本体(独立于 huya_accounts)----
|
||||
# uid 唯一但可空:MySQL 唯一索引允许多个 NULL,于是「先建单、后贴 CK」与
|
||||
# 「一个虎牙号只能挂一单」同时成立。
|
||||
uid: Mapped[str | None] = mapped_column(
|
||||
String(32), unique=True, nullable=True, index=True
|
||||
)
|
||||
# uid 可空、**不再唯一**(2026-10-16 用户拍板):同一个买家买两件常常继续用同一份 CK,
|
||||
# 唯一索引会让第二单直接插不进去(迁移 0058 把唯一索引降成普通索引)。
|
||||
# 「这个虎牙号还挂在哪些单上」只作为提示与审计信息,不做约束(见设计文档 §5.6)。
|
||||
uid: Mapped[str | None] = mapped_column(String(32), nullable=True, index=True)
|
||||
yyuid: Mapped[str] = mapped_column(String(32), default="", server_default="")
|
||||
hy_username: Mapped[str] = mapped_column(String(128), default="", server_default="")
|
||||
nickname: Mapped[str] = mapped_column(String(128), default="", server_default="")
|
||||
|
||||
Reference in New Issue
Block a user