Skip to Content
系统设计文档业务架构概念模型与实体关系

概念模型与实体关系

为了准确支撑业务逻辑,本系统不采用简单的“CRM(客户管理)”模型,而是采用 “以品牌为锚点的三方协作模型”。本主要阐述核心实体的关联关系及数据边界。

1. 实体关系图

下图展示了系统核心对象之间的逻辑关联。

2. 核心模型逻辑解析

(1) “铁三角”归属模型

这是本系统区别于普通 CRM 的核心设计。系统不记录 “BD 拥有达人”,而是记录 “BD 在某个品牌下拥有达人”

  • 实体对象Cooperation (合作关系)
  • 唯一性约束
    • 数据库级别必须保证 (brand_id, creator_id) 的唯一性。
    • 业务含义:在同一个品牌下,达人只能被一个 BD 认领。
  • 多品牌并行
    • 达人 Tony 可以同时存在两条 Cooperation 记录:
      1. 品牌 A (Anker) + 达人 Tony + BD 张三
      2. 品牌 B (Shein) + 达人 Tony + BD 李四
    • 结论:达人的状态(已合作/公海)是相对于品牌而言的,而不是全局的。

(2) 品牌与店铺的分离 (Brand vs. Store)

为了适应 TikTok 复杂的电商生态,我们将“营销维度”和“交易维度”解耦。

维度实体职责关联逻辑
营销维度品牌 (Brand)承载达人关系、排他性规则、跨商家合作。达人归属于品牌。
交易维度店铺 (Store)承载商品库存、订单交易、资金结算。视频产生的GMV来自店铺。
  • 场景举例:BD 在推广品牌 “X”,寄送样品时,系统会列出该商家下所有绑定了品牌 “X” 商品的店铺(Store 1, Store 2),供 BD 选择从哪里发货。

(3) 跨商家合作模型 (Cross-Merchant Collaboration)

该模型解决了“货主”与“渠道”的数据共享与隔离问题。

  • 实体BrandCollaboration
  • 逻辑流转
    1. 授权:商家 A(货主)创建记录 BrandCollaboration,将自己的 Brand X 授权给 商家 B(渠道)。
    2. 穿透:商家 B 的 BD 登录系统后,在品牌列表中能看到 Brand X(标记为“外部”)。
    3. 操作:商家 B 的 BD 发起建联,创建 Cooperation 记录:
      • creator_id: 达人Tony
      • bd_id: 商家B的员工
      • brand_id: 商家A的 Brand X (关键点:数据直接写入甲方的品牌下)
    4. 隔离:虽然数据在甲方品牌下,但系统根据 bd_id 所属的商家,决定达人私密字段(Email/WhatsApp)对谁可见。

(4) 动态保护期计算模型

系统不再使用单一的倒计时,而是基于 Cooperation 表中的 protection_stage 字段动态计算 release_deadline

计算公式: release_deadline = last_action_time + GetProtectionDays(team_id, protection_stage)

阶段映射逻辑:

  1. CONTACT (建联/维护)

    • 场景Status=MANAGED 且无活跃寄样单。
    • 对应规则
      • “已建联合作未寄样”
      • “达人历史已有发布视频未再次寄样/未履约新视频”
    • 默认天数:15天。
  2. SAMPLING (寄样中)

    • 场景:存在状态为 SHIPPEDDELIVERED 但尚未关联视频的寄样单。
    • 对应规则
      • “已寄样未履约”
      • “达人历史已有样品未履约”
    • 默认天数:35天。
  3. FULFILLED (刚履约)

    • 场景:最近一次动作是 Video_Linked
    • 对应规则
      • “履约后未重新寄样或二次履约视频”
    • 默认天数:35天。

(5) 保护期配置 (Protection Configuration)

为了满足“不同商家设置不同保护期”的需求,需要引入配置表。

  • 实体TeamConfig
  • 字段
    • days_contact_stage: 建联期天数 (默认15)
    • days_sampling_stage: 寄样期天数 (默认35)
    • days_fulfilled_stage: 履约后保护天数 (默认35)

(6) 状态流转动作 (Action Triggers)

动作更新字段逻辑说明
BD认领stage = CONTACT
time = Now
初始获得15天保护。
寄样发货stage = SAMPLING
time = Now
保护期延长至35天。
视频回填stage = FULFILLED
time = Now
获得35天奖励保护期。若35天内无新动作,则释放。
每日扫描status = POOLNow > release_deadline,触发释放。

3. 关键数据结构建议

达人表 (Creator)

需拆分为两部分存储以满足隔离需求:

  1. Creator_Public (公共档案)

    • 来源:TikTok API
    • 字段:tiktok_id, handle, follower_count, category
    • 可见性:全平台共享,单例模式。
  2. Creator_Private (私有档案)

    • 来源:BD 手工录入
    • 字段:email, whatsapp, notes, real_name
    • 可见性:严格按 (Merchant + Creator) 维度隔离。即便是跨商家合作,乙方填写的 Email,甲方也不可见,反之亦然。

业绩归因表 (VideoPerformance)

用于计算提成的核心表。

  • video_id: TikTok 视频唯一ID
  • cooperation_id: 关键外键。通过此ID,可追溯到该视频发布时,达人归属于哪个 BD、哪个品牌。
  • product_ids: 视频挂车的商品列表。
  • gmv_7d / gmv_28d: 销售额数据。

4. 状态机映射简表

为了开发便利,统一实体的生命周期枚举:

Cooperation Status (合作状态)

系统不再维护复杂的中间状态,而是基于**“归属权 (Ownership)”** 二元状态进行管理。

  • 实体Cooperation
  • 状态字段status
状态值业务含义权限逻辑
1: MANAGED我的达人独占读写。该 BD 拥有对该达人(在该品牌下)的独家开发权,能查看私密信息、创建寄样单。
0: POOL潜在达人 (公海)公共只读。无归属 BD。任何 BD 均可查看基础画像,并可发起“认领”动作将其转为 MANAGED。

(2) 状态流转状态机 (State Machine)

Sample Order Status (寄样状态)

  • 0: DRAFT (草稿)
  • 10: PENDING_APPROVAL (待审核 - 可选)
  • 20: TO_SHIP (待发货)
  • 30: SHIPPED (已发货)
  • 40: DELIVERED (已签收)
  • 99: CANCELLED (已取消)
Last updated on