Files
CKB-Interface/docs/traffic_pool_design.md
2026-02-04 11:02:33 +08:00

1104 lines
68 KiB
Markdown
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.

# 新流量池系统设计文档
> **版本**V1.0
> **日期**2026-01-29
> **状态**:已确认
---
## 功能概述
**流量池系统是一套统一管理客户资源的系统,通过对微信好友、群成员等多渠道流量进行归集、分类、打标、分配和行为追踪,实现客户资源的精细化运营和价值最大化。**
---
## 一、需求概述
### 1.1 项目背景
基于现有数据库中 `s2_` 开头的表(触客宝系统),设计一套全新的流量池管理系统,实现流量的统一管理、分类、追踪和分析。
### 1.2 核心需求
| 序号 | 需求 | 说明 |
|------|------|------|
| 1 | 流量池总表 | 全局唯一,按 identifier微信ID优先去重 |
| 2 | 公司子表 | 包含 companyId支持多租户数据隔离 |
| 3 | 流量池分组 | 支持自定义流量池分组(如:高价值客户池、潜在客户池等) |
| 4 | 来源追溯 | 完整记录流量的获取渠道和路径 |
| 5 | 行为记录 | 记录所有消息互动和关键行为 |
| 6 | 标签同步 | 同步微信好友标签到流量池 |
### 1.3 设计原则
- **全局唯一**:流量池总表按 identifier 全局唯一优先使用微信ID
- **多租户隔离**:子表通过 companyId 实现数据隔离
- **灵活分组**:支持系统默认分组和自定义分组
- **来源可追溯**:完整记录流量的获取渠道和路径
- **行为可分析**:记录用户行为,支持 RFM 分析
---
## 二、系统架构
### 2.1 整体系统架构图
```
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│ 流量池系统整体架构 │
├─────────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 【数据采集层】 │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ 微信好友 │ │ 群成员 │ │ 海报获客 │ │ 电话获客 │ │ API导入 │ ... │ │
│ │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │
│ └────────┼──────────────┼──────────────┼──────────────┼──────────────┼───────────────┘ │
│ └──────────────┴──────────────┼──────────────┴──────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 【流量入池引擎】 │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ 1.提取identifier │ ──▶ │ 2.查重/创建总表 │ ──▶ │ 3.创建公司记录 │ │ │
│ │ │ (微信ID优先) │ │ ck_traffic_pool │ │ ck_traffic_pool │ │ │
│ │ └─────────────────┘ └─────────────────┘ │ _company │ │ │
│ │ └────────┬────────┘ │ │
│ └────────────────────────────────────────────────────────────────┼─────────────────────┘ │
│ │ │
│ ┌───────────────────────────────────────────────────────┼───────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌────────────┐│
│ │【来源追溯系统】 │ │ 【标签系统】 │ │【分配系统】││
│ │ │ │ │ │ ││
│ │ck_traffic_pool_ │ │ ┌───────────┐ │ │ck_traffic_ ││
│ │ source │ │ │ 标签类目 │ │ │ pool_allot ││
│ │ │ │ │ tag_ │ │ │ _record ││
│ │ · 来源类型 │ │ │ category │ │ │ ││
│ │ · 来源渠道 │ │ └─────┬─────┘ │ │ · 分配规则 ││
│ │ · 关联任务 │ │ │ │ │ · 归属客服 ││
│ │ · 首次来源标记 │ │ ▼ │ │ · 有效期 ││
│ └─────────────────┘ │ ┌───────────┐ │ └────────────┘│
│ │ │ 标签定义 │ │ │
│ │ │ tag_ │ │ │
│ │ │ define │ │ │
│ │ └─────┬─────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌───────────┐ │ │
│ │ │ 标签关联 │ │ │
│ │ │ tag │ │ │
│ │ └───────────┘ │ │
│ └────────┬────────┘ │
│ │ │
│ ┌───────────────────────────────────────────────────────────────┼─────────────────────┐ │
│ │ 【行为追踪系统】 │ │ │
│ │ ▼ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │
│ │ │ 消息互动 │ │ 朋友圈互动 │ │ 订单行为 │ │ 行为记录表 │ │ │
│ │ │ s2_wechat_ │ ──▶ │ s2_wechat_ │ ──▶ │ 订单系统 │──▶│ck_traffic_ │ │ │
│ │ │ message │ │ moments │ │ │ │ pool_behavior │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └───────┬───────┘ │ │
│ │ │ │ │
│ │ 记录行为后更新 RFM 指标 │ │ │
│ │ ┌─────────────────────────────────────┘ │ │
│ │ ▼ │ │
│ │ ┌───────────────────┐ │ │
│ │ │ 更新用户画像 │ │ │
│ │ │ · lastInteractTime│ │ │
│ │ │ · rfmF (频次) │ │ │
│ │ │ · rfmM (金额) │ │ │
│ │ │ · totalMsgCount │ │ │
│ │ └───────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 【流量池分组与查询】 │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ ck_traffic_pool_group分组表 │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │ 全部好友池 │ │ 高价值客户 │ │ 潜在客户池 │ │ 高互动客户 │ 自定义 │ │ │
│ │ │ │ (系统默认) │ │ (系统默认) │ │ (系统默认) │ │ (系统默认) │ 分组... │ │ │
│ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │
│ │ └─────────┼────────────────┼────────────────┼────────────────┼────────────────┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ ruleConfigJSON规则配置 │ │ │
│ │ │ │ │ │
│ │ │ friendStatus=2 rfmM>=1000 OR intentionLevel>=2 totalMsgCount │ │ │
│ │ │ level=VIP AND orderCount=0 >=50 │ │ │
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ 动态查询 ck_traffic_pool_company 匹配规则的用户 │ │ │
│ │ │ 或查询 ck_traffic_pool_group_member 手动成员 │ │ │
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 【工作台集成】 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ 流量分发 │ │ 联系人导入 │ │ 自动建群 │ │ 群消息推送 │ ... │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ pools: [1,2]│ │ pools: [3] │ │poolGroups: │ │trafficPools:│ │ │
│ │ │ │ │ │ │ [1,2,3] │ │ [4,5] │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
│ │ │ │ │ │ │ │
│ │ └────────────────┴────────────────┴────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ 根据分组ID获取目标用户列表 │ │ │
│ │ │ 执行工作台任务 │ │ │
│ │ └─────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────┘
```
### 2.2 标签与用户画像体系流程图
```
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│ 标签与用户画像体系 │
├─────────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 【标签来源】 【标签存储】 【标签应用】 │
│ │
│ ┌─────────────────┐ │
│ │ 微信同步 │ │
│ │ s2_wechat_friend│──┐ │
│ │ .labels │ │ ┌─────────────────────────────────────────┐ │
│ └─────────────────┘ │ │ ck_traffic_pool_tag_category │ │
│ │ │ (标签类目表) │ │
│ ┌─────────────────┐ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ 手动打标 │ │ │ │微信标签 │ │站内标签 │ │ AI标签 │ │ │
│ │ 用户操作 │──┤ │ │tagType=1│ │tagType=2│ │tagType=3│ │ │
│ └─────────────────┘ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │
│ │ └───────┼──────────┼──────────┼─────────┘ │
│ ┌─────────────────┐ │ │ │ │ │
│ │ 规则自动打标 │ │ ▼ ▼ ▼ │
│ │ 定时任务触发 │──┤ ┌─────────────────────────────────────────┐ │
│ └─────────────────┘ │ │ ck_traffic_pool_tag_define │ │
│ │──────────▶│ (标签定义表) │ │
│ ┌─────────────────┐ │ │ │ │
│ │ AI 智能打标 │ │ │ 示例标签定义: │ │
│ │ GPT分析生成 │──┤ │ · 高价值客户 (站内/客户等级) │ │
│ └─────────────────┘ │ │ · 活跃用户 (站内/行为标签) │ │
│ │ │ · 潜在流失 (AI/预测标签) │ │
│ ┌─────────────────┐ │ │ · VIP (微信/同步标签) │ │
│ │ 行为触发打标 │ │ └─────────────────┬───────────────────────┘ │
│ │ 订单/消息等 │──┘ │ │
│ └─────────────────┘ ▼ │
│ ┌─────────────────────────────────────────┐ │
│ │ ck_traffic_pool_tag │ │
│ │ (标签关联表) │ │
│ │ │ │
│ │ poolCompanyId ──▶ 用户 │ │
│ │ tagDefineId ──▶ 标签 │ │
│ │ source ──▶ 打标来源 │ │
│ │ score ──▶ AI置信度 │ │
│ └─────────────────┬───────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────┼──────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌───────────────┐ │
│ │ 用户画像展示 │ │ 分组规则匹配 │ │ 精准营销 │ │
│ │ │ │ │ │ │ │
│ │ · 基础信息 │ │ ruleConfig 中 │ │ · 定向推送 │ │
│ │ · 标签云 │ │ 支持标签条件: │ │ · 个性推荐 │ │
│ │ · RFM 雷达图 │ │ │ │ · 智能客服 │ │
│ │ · 行为轨迹 │ │ "type": "tag" │ │ │ │
│ │ · 来源追溯 │ │ "field": "tags" │ │ │ │
│ │ │ │ "operator": │ │ │ │
│ │ │ │ "contains" │ │ │ │
│ │ │ │ "value": │ │ │ │
│ │ │ │ ["VIP","重点"] │ │ │ │
│ └─────────────────────┘ └─────────────────────┘ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────┘
【用户画像数据来源】
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ ck_traffic_pool_company用户画像核心数据表
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 【基础属性】 【客户价值】 【行为统计】 │ │
│ │ ├─ realName ├─ level (等级) ├─ totalMsgCount │ │
│ │ ├─ phone ├─ intentionLevel ├─ lastMsgTime │ │
│ │ ├─ email ├─ lifecycle ├─ totalOrderCount │ │
│ │ ├─ birthday │ ├─ totalOrderAmount │ │
│ │ ├─ address │ ├─ lastOrderTime │ │
│ │ └─ customFields (JSON) │ │ │ │
│ │ │ │ │ │
│ │ 【RFM模型】 【归属信息】 【状态管理】 │ │
│ │ ├─ lastInteractTime (R) ├─ ownerWechatId ├─ friendStatus │ │
│ │ ├─ rfmF (频次) ├─ ownerAccountId ├─ allocateStatus │ │
│ │ ├─ rfmM (金额) ├─ ownerUserId ├─ status │ │
│ │ ├─ rfmScore (综合) │ │ │ │
│ │ └─ rfmType (客户类型) │ │ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ 用户画像视图整合 │ │
│ │ │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ 基础信息 │ │ 标签信息 │ │ 行为轨迹 │ │ 来源信息 │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ traffic_ │ + │ traffic_ │ + │ traffic_ │ + │ traffic_ │ │ │
│ │ │ pool_ │ │ pool_tag │ │ pool_ │ │ pool_ │ │ │
│ │ │ company │ │ │ │ behavior │ │ source │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
│ │ │ │ │ │ │ │
│ │ └────────────────┴────────────────┴────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────┐ │ │
│ │ │ 完整用户画像 │ │ │
│ │ │ (前端展示用) │ │ │
│ │ └──────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────┘
```
### 2.3 表结构关系图
```
┌─────────────────────────────────────────────────────────────────────┐
│ ck_traffic_pool总表
│ 全局唯一的流量标识 │
└─────────────────────────────────────────────────────────────────────┘
│ 1:N
┌─────────────────────────────────────────────────────────────────────┐
│ ck_traffic_pool_company公司子表
│ 每个公司独立的流量详情含companyId
└─────────────────────────────────────────────────────────────────────┘
│ │ │ │ │
│ N:1 │ 1:N │ 1:N │ 1:N │ 1:N
▼ ▼ ▼ ▼ ▼
┌──────────┐ ┌────────────┐ ┌────────────┐ ┌─────────────┐ ┌─────────────┐
│ 流量池 │ │ 来源记录 │ │ 标签记录 │ │ 行为记录 │ │ 分配记录 │
│ 分组 │ │ │ │ │ │ │ │ │
└──────────┘ └────────────┘ └────────────┘ └─────────────┘ └─────────────┘
```
### 2.2 表清单
| 序号 | 表名 | 说明 |
|------|------|------|
| 1 | `ck_traffic_pool` | 流量池总表(全局唯一) |
| 2 | `ck_traffic_pool_company` | 公司流量详情表(多租户) |
| 3 | `ck_traffic_pool_group` | 流量池分组表规则使用JSON存储 |
| 4 | `ck_traffic_pool_group_member` | 流量池分组成员表(手动添加) |
| 5 | `ck_traffic_pool_source` | 流量来源记录表 |
| 6 | `ck_traffic_pool_tag_category` | 标签类目表 |
| 7 | `ck_traffic_pool_tag_define` | 标签定义表 |
| 8 | `ck_traffic_pool_tag` | 流量标签关联表 |
| 9 | `ck_traffic_pool_behavior` | 流量行为记录表 |
| 10 | `ck_traffic_pool_allot_record` | 流量分配记录表 |
> ⚠️ **优化说明**:废弃独立的 `ck_traffic_pool_group_rule` 表,规则改为存储在 `ck_traffic_pool_group.ruleConfig` 字段中JSON格式支持嵌套逻辑表达。
---
## 三、流量池分组设计
### 3.1 系统默认分组
| 分组名称 | 分组编码 | 说明 | 规则 |
|----------|----------|------|------|
| 全部好友流量池 | `all_friends` | 所有已添加的好友 | friendStatus = 2 |
| 高价值客户池 | `high_value` | 消费金额高的客户 | rfmM >= 阈值 或 level = 2(VIP) |
| 潜在客户池 | `potential` | 有意向但未成交 | intentionLevel >= 2 且 totalOrderCount = 0 |
| 高互动客户池 | `high_interact` | 互动频繁的客户 | rfmF >= 阈值 或 totalMsgCount >= 阈值 |
### 3.2 分组特性说明
> ⚠️ **重要**:一个流量可以同时属于多个分组
例如:某客户既消费金额高,又互动频繁,则该客户会同时出现在:
- 全部好友流量池
- 高价值客户池
- 高互动客户池
分组之间是**非互斥**关系,前端展示时需注意去重统计。
### 3.3 自定义分组
用户可以基于以下条件创建自定义分组:
- **标签条件**:包含/不包含特定标签
- **属性条件**:性别、地区、等级等
- **行为条件**:消息数、订单数、最后互动时间等
- **RFM条件**R/F/M 值范围
- **来源条件**:特定来源渠道
### 3.4 分组规则配置JSON结构
> ⚠️ 规则直接存储在 `ck_traffic_pool_group.ruleConfig` 字段中,支持嵌套逻辑
**简单规则示例**(全部好友):
```json
{
"logic": "AND",
"conditions": [
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" }
]
}
```
**复杂规则示例**(高价值客户:已通过好友 AND (消费>=1000 OR 等级=VIP)
```json
{
"logic": "AND",
"conditions": [
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" },
{
"type": "group",
"logic": "OR",
"conditions": [
{ "type": "field", "field": "rfmM", "operator": ">=", "value": 1000, "valueType": "number" },
{ "type": "field", "field": "level", "operator": "=", "value": 2, "valueType": "number" }
]
}
]
}
```
**标签规则示例**
```json
{
"logic": "AND",
"conditions": [
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" },
{ "type": "tag", "field": "tags", "operator": "contains", "value": ["重点客户", "已成交"], "valueType": "array" }
]
}
```
**规则字段说明**
| 字段 | 说明 |
|------|------|
| type | 条件类型:`field`=字段条件,`group`=嵌套分组,`tag`=标签条件 |
| logic | 逻辑运算符:`AND``OR` |
| field | 字段名 |
| operator | 操作符:`=`, `!=`, `>`, `<`, `>=`, `<=`, `in`, `not_in`, `contains`, `not_contains`, `between` |
| value | 条件值 |
| valueType | 值类型:`string`, `number`, `array`, `date` |
---
## 四、详细表结构
### 4.1 流量池总表 `ck_traffic_pool`
> **用途**:存储全局唯一的流量标识,不区分公司
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| identifier | varchar(64) | 是 | - | 流量唯一标识微信ID优先 |
| identifierType | tinyint(2) | 是 | 1 | 标识类型1=微信ID2=微信号3=手机号 |
| wechatId | varchar(64) | 否 | NULL | 微信ID |
| wechatAlias | varchar(64) | 否 | NULL | 微信号 |
| mobile | varchar(20) | 否 | NULL | 手机号 |
| nickname | varchar(100) | 否 | NULL | 昵称 |
| avatar | varchar(500) | 否 | NULL | 头像URL |
| gender | tinyint(1) | 否 | 0 | 性别0=未知1=男2=女 |
| region | varchar(100) | 否 | NULL | 地区 |
| country | varchar(50) | 否 | NULL | 国家 |
| province | varchar(50) | 否 | NULL | 省份 |
| city | varchar(50) | 否 | NULL | 城市 |
| signature | varchar(500) | 否 | NULL | 个性签名 |
| firstSeenTime | int(11) | 否 | NULL | 首次出现时间 |
| lastSeenTime | int(11) | 否 | NULL | 最后活跃时间 |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_identifier (identifier)`
- 普通索引:`idx_wechatId (wechatId)``idx_wechatAlias (wechatAlias)``idx_mobile (mobile)`
---
### 4.2 公司流量详情表 `ck_traffic_pool_company`
> **用途**:存储流量在各公司的详细信息,支持多租户
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| poolId | int(11) UNSIGNED | 是 | - | 流量池总表ID |
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
| **归属信息** |
| ownerWechatId | varchar(64) | 否 | NULL | 归属客服微信ID |
| ownerAccountId | int(11) | 否 | NULL | 归属客服账号IDs2_wechat_account.id |
| ownerUserId | int(11) | 否 | NULL | 归属操盘手ID |
| **好友关联** |
| wechatFriendId | int(11) | 否 | NULL | 微信好友IDs2_wechat_friend.id |
| friendStatus | tinyint(2) | 否 | 0 | 好友状态0=未加1=待通过2=已通过3=已删除4=被删除 |
| friendPassTime | int(11) | 否 | NULL | 好友通过时间 |
| **客户属性** |
| realName | varchar(50) | 否 | NULL | 真实姓名 |
| idCard | varchar(18) | 否 | NULL | 身份证号 |
| phone | varchar(20) | 否 | NULL | 联系电话 |
| email | varchar(100) | 否 | NULL | 邮箱 |
| birthday | date | 否 | NULL | 生日 |
| address | varchar(255) | 否 | NULL | 地址 |
| company | varchar(100) | 否 | NULL | 所在公司 |
| position | varchar(50) | 否 | NULL | 职位 |
| remark | varchar(500) | 否 | NULL | 备注 |
| customFields | json | 否 | NULL | 自定义字段 |
| **客户等级** |
| level | tinyint(2) | 否 | 0 | 客户等级0=普通1=重要2=VIP |
| intentionLevel | tinyint(2) | 否 | 0 | 意向度0=未知1=低2=中3=高 |
| **RFM模型** |
| lastInteractTime | int(11) | 否 | NULL | 最后互动时间戳R值动态计算DATEDIFF(NOW(), FROM_UNIXTIME(lastInteractTime)) |
| rfmF | int(11) | 否 | 0 | F值-互动频次 |
| rfmM | decimal(12,2) | 否 | 0.00 | M值-消费金额 |
| rfmScore | int(11) | 否 | 0 | RFM综合评分 |
| rfmType | varchar(20) | 否 | NULL | RFM客户类型 |
| **统计信息** |
| totalOrderCount | int(11) | 否 | 0 | 累计订单数 |
| totalOrderAmount | decimal(12,2) | 否 | 0.00 | 累计订单金额 |
| lastOrderTime | int(11) | 否 | NULL | 最后下单时间 |
| totalMsgCount | int(11) | 否 | 0 | 累计消息数 |
| lastMsgTime | int(11) | 否 | NULL | 最后消息时间 |
| **来源追溯** |
| firstSourceType | tinyint(2) | 否 | NULL | 首次来源类型 |
| firstSourceTime | int(11) | 否 | NULL | 首次来源时间 |
| **生命周期** |
| lifecycle | tinyint(2) | 否 | 1 | 生命周期1=新流量2=跟进中3=已成交4=沉默5=流失 |
| **状态管理** |
| status | tinyint(2) | 否 | 1 | 状态0=禁用1=正常2=黑名单 |
| allocateStatus | tinyint(2) | 否 | 0 | 分配状态0=未分配1=已分配2=已回收 |
| allocateTime | int(11) | 否 | NULL | 分配时间 |
| expireTime | int(11) | 否 | NULL | 到期时间 |
| **时间戳** |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
| deleteTime | int(11) | 否 | NULL | 删除时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_identifier_company (identifier, companyId)`
- 普通索引:`idx_poolId``idx_companyId``idx_ownerWechatId``idx_wechatFriendId``idx_friendStatus``idx_status``idx_level``idx_allocateStatus``idx_lifecycle`
> 💡 **优化说明**:删除重复的 `uk_pool_company` 唯一索引,因为 `poolId` 与 `identifier` 一一对应,保留更常用的 `uk_identifier_company`
---
### 4.3 流量池分组表 `ck_traffic_pool_group`
> **用途**:管理流量池分组(如:高价值客户池、潜在客户池等)
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID0=系统默认) |
| groupCode | varchar(50) | 是 | - | 分组编码(唯一标识) |
| groupName | varchar(50) | 是 | - | 分组名称 |
| groupIcon | varchar(255) | 否 | NULL | 分组图标 |
| groupColor | varchar(20) | 否 | NULL | 分组颜色 |
| description | varchar(255) | 否 | NULL | 分组描述 |
| isSystem | tinyint(1) | 否 | 0 | 是否系统默认0=否1=是 |
| isDefault | tinyint(1) | 否 | 0 | 是否默认展示0=否1=是 |
| ruleType | tinyint(2) | 否 | 1 | 规则类型1=动态规则2=手动添加 |
| ruleConfig | json | 否 | NULL | 规则配置JSON |
| memberCount | int(11) | 否 | 0 | 成员数量(缓存) |
| sort | int(11) | 否 | 0 | 排序(数值越小越靠前) |
| status | tinyint(1) | 否 | 1 | 状态0=禁用1=启用 |
| userId | int(11) | 否 | NULL | 创建用户ID |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
| deleteTime | int(11) | 否 | NULL | 删除时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_company_code (companyId, groupCode)`
- 普通索引:`idx_companyId``idx_isSystem``idx_status``idx_sort`
---
### 4.4 流量池分组成员表 `ck_traffic_pool_group_member`
> **用途**手动添加到分组的成员ruleType=2时使用
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| groupId | int(11) UNSIGNED | 是 | - | 分组ID |
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
| addType | tinyint(2) | 否 | 1 | 添加方式1=手动2=批量导入 |
| operatorId | int(11) | 否 | NULL | 操作人ID |
| createTime | int(11) | 是 | - | 创建时间 |
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
| deleteTime | int(11) | 否 | NULL | 删除时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_group_pool (groupId, poolCompanyId)`
- 普通索引:`idx_companyId``idx_identifier`
---
### 4.5 流量来源表 `ck_traffic_pool_source`
> **用途**:记录流量的获取渠道和来源路径
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
| **来源类型** |
| sourceType | tinyint(2) | 是 | - | 来源类型(见下表) |
| sourceSubType | varchar(50) | 否 | NULL | 来源子类型 |
| **来源详情** |
| sourceId | varchar(100) | 否 | NULL | 来源ID |
| sourceName | varchar(255) | 否 | NULL | 来源名称 |
| sourceWechatId | varchar(64) | 否 | NULL | 来源微信ID |
| sourceChatroomId | varchar(64) | 否 | NULL | 来源群ID |
| sourceSceneId | int(11) | 否 | NULL | 来源场景ID |
| sourceChannelId | int(11) | 否 | NULL | 来源渠道ID |
| **关联任务** |
| friendTaskId | int(11) | 否 | NULL | 加好友任务ID |
| taskCustomerId | int(11) | 否 | NULL | 获客任务客户ID |
| **状态** |
| sourceStatus | tinyint(2) | 否 | 1 | 来源状态1=待处理2=处理中3=已通过4=已拒绝5=已过期 |
| isFirstSource | tinyint(1) | 否 | 0 | 是否首次来源0=否1=是 |
| extra | json | 否 | NULL | 额外信息 |
| remark | varchar(255) | 否 | NULL | 备注 |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
**来源类型枚举**
| 值 | 说明 |
|----|------|
| 1 | 好友添加 |
| 2 | 群成员 |
| 3 | 海报获客 |
| 4 | 电话获客 |
| 5 | 订单获客 |
| 6 | API导入 |
| 7 | 手动导入 |
| 8 | 裂变活动 |
---
## 五、标签系统设计
### 5.1 标签系统架构
```
┌─────────────────────────────────────────────────────────────────────┐
│ 标签类型tagType
│ 1=微信标签 2=站内标签 3=AI标签 │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│ ck_traffic_pool_tag_category标签类目表
│ 每种标签类型下可以有多个类目 │
└─────────────────────────────────────────────────────────────────────┘
│ 1:N
┌─────────────────────────────────────────────────────────────────────┐
│ ck_traffic_pool_tag_define标签定义表
│ 每个类目下可以定义多个具体标签 │
└─────────────────────────────────────────────────────────────────────┘
│ N:M
┌─────────────────────────────────────────────────────────────────────┐
│ ck_traffic_pool_tag流量标签关联表
│ 流量与标签的多对多关联 │
└─────────────────────────────────────────────────────────────────────┘
```
### 5.2 标签类型说明
| 标签类型 | tagType | 说明 | 数据来源 |
|----------|---------|------|----------|
| 微信标签 | 1 | 从微信同步过来的好友标签 | s2_wechat_friend.labels 同步 |
| 站内标签 | 2 | 系统内部定义的业务标签 | 用户手动打标/规则自动打标 |
| AI标签 | 3 | AI根据用户画像自动生成 | AI分析自动生成 |
### 5.3 标签类目表 `ck_traffic_pool_tag_category`
> **用途**:管理标签的类目/分组,支持多级分类
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID0=系统默认) |
| parentId | int(11) UNSIGNED | 否 | 0 | 父类目ID0=顶级类目) |
| tagType | tinyint(2) | 是 | - | 标签类型1=微信标签2=站内标签3=AI标签 |
| categoryCode | varchar(50) | 是 | - | 类目编码 |
| categoryName | varchar(50) | 是 | - | 类目名称 |
| categoryIcon | varchar(255) | 否 | NULL | 类目图标 |
| categoryColor | varchar(20) | 否 | NULL | 类目颜色 |
| description | varchar(255) | 否 | NULL | 类目描述 |
| isSystem | tinyint(1) | 否 | 0 | 是否系统默认0=否1=是 |
| sort | int(11) | 否 | 0 | 排序 |
| status | tinyint(1) | 否 | 1 | 状态0=禁用1=启用 |
| userId | int(11) | 否 | NULL | 创建用户ID |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
| deleteTime | int(11) | 否 | NULL | 删除时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_company_code (companyId, categoryCode)`
- 普通索引:`idx_companyId``idx_parentId``idx_tagType``idx_status`
---
### 5.4 标签定义表 `ck_traffic_pool_tag_define`
> **用途**:定义具体的标签
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID0=系统默认) |
| categoryId | int(11) UNSIGNED | 否 | 0 | 所属类目ID |
| tagType | tinyint(2) | 是 | - | 标签类型1=微信标签2=站内标签3=AI标签 |
| tagCode | varchar(50) | 是 | - | 标签编码 |
| tagName | varchar(50) | 是 | - | 标签名称 |
| tagIcon | varchar(255) | 否 | NULL | 标签图标 |
| tagColor | varchar(20) | 否 | NULL | 标签颜色 |
| description | varchar(255) | 否 | NULL | 标签描述 |
| isSystem | tinyint(1) | 否 | 0 | 是否系统默认0=否1=是 |
| isExclusive | tinyint(1) | 否 | 0 | 是否互斥标签0=否1=是(同类目下只能选一个) |
| sort | int(11) | 否 | 0 | 排序 |
| status | tinyint(1) | 否 | 1 | 状态0=禁用1=启用 |
| useCount | int(11) | 否 | 0 | 使用次数(缓存) |
| syncFromWechat | tinyint(1) | 否 | 0 | 是否来自微信同步0=否1=是 |
| userId | int(11) | 否 | NULL | 创建用户ID |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
| deleteTime | int(11) | 否 | NULL | 删除时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_company_code (companyId, tagCode)`
- 普通索引:`idx_companyId``idx_categoryId``idx_tagType``idx_tagName``idx_status`
---
### 5.5 流量标签关联表 `ck_traffic_pool_tag`
> **用途**:记录流量与标签的关联关系
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
| **标签信息** |
| tagDefineId | int(11) UNSIGNED | 是 | - | 标签定义ID |
| tagType | tinyint(2) | 是 | - | 标签类型1=微信标签2=站内标签3=AI标签 |
| categoryId | int(11) UNSIGNED | 否 | 0 | 类目ID冗余 |
| tagName | varchar(50) | 是 | - | 标签名称(冗余,方便查询) |
| tagValue | varchar(255) | 否 | NULL | 标签值(部分标签需要值,如:消费金额=1000 |
| **来源信息** |
| source | tinyint(2) | 否 | 1 | 打标来源1=手动2=规则自动3=AI自动4=微信同步 |
| sourceId | varchar(100) | 否 | NULL | 来源ID规则ID/AI任务ID等 |
| sourceRemark | varchar(255) | 否 | NULL | 来源备注 |
| **操作信息** |
| operatorId | int(11) | 否 | NULL | 操作人ID |
| score | decimal(5,2) | 否 | NULL | AI标签置信度0-100仅AI标签使用 |
| expireTime | int(11) | 否 | NULL | 过期时间(部分标签有时效性) |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
| isDel | tinyint(1) | 否 | 0 | 是否删除 |
| deleteTime | int(11) | 否 | NULL | 删除时间 |
**索引设计**
- 主键:`id`
- 唯一索引:`uk_pool_tag (poolCompanyId, tagDefineId)`
- 普通索引:`idx_identifier_company``idx_tagDefineId``idx_tagType``idx_categoryId``idx_tagName`
---
### 5.6 系统默认标签类目
系统初始化时需要插入以下默认类目:
**微信标签类目**tagType=1
| 类目编码 | 类目名称 | 说明 |
|----------|----------|------|
| wechat_default | 微信默认标签 | 从微信同步的标签 |
**站内标签类目**tagType=2
| 类目编码 | 类目名称 | 说明 |
|----------|----------|------|
| customer_level | 客户等级 | 普通/重要/VIP |
| customer_intention | 客户意向 | 低意向/中意向/高意向 |
| customer_stage | 客户阶段 | 新客户/跟进中/已成交/已流失 |
| customer_source | 客户来源 | 海报/电话/群聊/好友推荐等 |
| customer_industry | 所属行业 | 行业分类标签 |
| customer_preference | 客户偏好 | 产品偏好/服务偏好等 |
**AI标签类目**tagType=3
| 类目编码 | 类目名称 | 说明 |
|----------|----------|------|
| ai_portrait | AI画像标签 | AI分析的用户画像 |
| ai_behavior | AI行为标签 | AI分析的行为特征 |
| ai_prediction | AI预测标签 | AI预测的标签高转化潜力 |
---
### 5.7 流量行为表 `ck_traffic_pool_behavior`
> **用途**:记录流量的各种行为(包括所有消息互动)
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | bigint(20) UNSIGNED | 是 | AUTO | 主键ID |
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
| **行为信息** |
| behaviorType | tinyint(2) | 是 | - | 行为类型(见下表) |
| behaviorSubType | varchar(50) | 否 | NULL | 行为子类型 |
| behaviorName | varchar(100) | 否 | NULL | 行为名称 |
| **行为详情** |
| targetType | varchar(50) | 否 | NULL | 目标类型 |
| targetId | varchar(100) | 否 | NULL | 目标ID |
| targetName | varchar(255) | 否 | NULL | 目标名称 |
| amount | decimal(12,2) | 否 | 0.00 | 金额 |
| **关联信息**只记录ID通过ID关联查询详情 |
| wechatAccountId | int(11) | 否 | NULL | 客服微信账号ID |
| messageId | bigint(20) | 否 | NULL | 消息ID关联s2_wechat_message.id |
| momentsId | int(11) | 否 | NULL | 朋友圈ID关联s2_wechat_moments.id |
| orderId | varchar(50) | 否 | NULL | 订单号 |
| extra | json | 否 | NULL | 额外信息 |
| remark | varchar(255) | 否 | NULL | 备注 |
| behaviorTime | int(11) | 是 | - | 行为时间 |
| createTime | int(11) | 是 | - | 创建时间 |
**行为类型枚举**
| 值 | 说明 |
|----|------|
| 1 | 发送消息 |
| 2 | 接收消息 |
| 3 | 浏览 |
| 4 | 点击 |
| 5 | 咨询 |
| 6 | 下单 |
| 7 | 支付 |
| 8 | 退款 |
| 9 | 点赞朋友圈 |
| 10 | 评论朋友圈 |
---
### 5.8 流量分配记录表 `ck_traffic_pool_allot_record`
> **用途**:记录流量的分配历史
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int(11) UNSIGNED | 是 | AUTO | 主键ID |
| poolCompanyId | int(11) UNSIGNED | 是 | - | 公司流量详情表ID |
| identifier | varchar(64) | 是 | - | 流量标识(冗余) |
| companyId | int(11) UNSIGNED | 是 | - | 公司ID |
| **分配信息** |
| allotType | tinyint(2) | 否 | 1 | 分配类型1=首次分配2=重新分配3=回收后分配 |
| allotRuleId | int(11) | 否 | NULL | 分配规则ID |
| **分配前** |
| fromWechatId | varchar(64) | 否 | NULL | 原归属客服微信ID |
| fromAccountId | int(11) | 否 | NULL | 原归属账号ID |
| fromUserId | int(11) | 否 | NULL | 原归属操盘手ID |
| **分配后** |
| toWechatId | varchar(64) | 是 | - | 新归属客服微信ID |
| toAccountId | int(11) | 否 | NULL | 新归属账号ID |
| toUserId | int(11) | 否 | NULL | 新归属操盘手ID |
| **有效期** |
| expireDays | int(11) | 否 | 30 | 有效期(天) |
| expireTime | int(11) | 否 | NULL | 到期时间 |
| status | tinyint(2) | 否 | 1 | 状态1=生效中2=已过期3=已回收 |
| operatorId | int(11) | 否 | NULL | 操作人ID |
| remark | varchar(255) | 否 | NULL | 备注 |
| createTime | int(11) | 是 | - | 创建时间 |
| updateTime | int(11) | 否 | NULL | 更新时间 |
---
## 六、系统默认数据
### 6.1 默认流量池分组(含规则)
> ⚠️ 规则使用 JSON 格式存储在 `ruleConfig` 字段中
```sql
INSERT INTO `ck_traffic_pool_group`
(`companyId`, `groupCode`, `groupName`, `description`, `isSystem`, `isDefault`, `ruleType`, `ruleConfig`, `sort`, `status`)
VALUES
-- 全部好友流量池
(0, 'all_friends', '全部好友流量池', '所有已添加的好友', 1, 1, 1,
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"}]}',
1, 1),
-- 高价值客户池:已通过好友 AND (消费>=1000 OR 等级=VIP)
(0, 'high_value', '高价值客户池', '消费金额高的客户', 1, 0, 1,
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"},{"type":"group","logic":"OR","conditions":[{"type":"field","field":"rfmM","operator":">=","value":1000,"valueType":"number"},{"type":"field","field":"level","operator":"=","value":2,"valueType":"number"}]}]}',
2, 1),
-- 潜在客户池:已通过好友 AND 意向度>=中 AND 订单数=0
(0, 'potential', '潜在客户池', '有意向但未成交的客户', 1, 0, 1,
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"},{"type":"field","field":"intentionLevel","operator":">=","value":2,"valueType":"number"},{"type":"field","field":"totalOrderCount","operator":"=","value":0,"valueType":"number"}]}',
3, 1),
-- 高互动客户池:已通过好友 AND 消息数>=50
(0, 'high_interact', '高互动客户池', '互动频繁的客户', 1, 0, 1,
'{"logic":"AND","conditions":[{"type":"field","field":"friendStatus","operator":"=","value":2,"valueType":"number"},{"type":"field","field":"totalMsgCount","operator":">=","value":50,"valueType":"number"}]}',
4, 1);
```
---
## 七、与现有表的关联关系
### 7.1 关联图
```
┌─────────────────────┐ ┌─────────────────────┐
│ s2_wechat_account │◄────────│ ck_traffic_pool_ │
│ (微信客服号) │ │ company │
└─────────────────────┘ │ (ownerWechatId) │
│ └─────────────────────┘
│ │
▼ │
┌─────────────────────┐ │
│ s2_wechat_friend │◄─────────────────┘
│ (微信好友) │ (wechatFriendId)
└─────────────────────┘
│ wechatId
┌─────────────────────┐
│ ck_traffic_pool │
│ (流量池总表) │
│ (identifier) │
└─────────────────────┘
```
### 7.2 关联字段映射
| 新表字段 | 关联表 | 关联字段 | 说明 |
|----------|--------|----------|------|
| `ck_traffic_pool.identifier` | `s2_wechat_friend` | `wechatId` | 微信ID匹配 |
| `ck_traffic_pool_company.wechatFriendId` | `s2_wechat_friend` | `id` | 好友ID关联 |
| `ck_traffic_pool_company.ownerWechatId` | `s2_wechat_account` | `wechatId` | 客服微信ID |
| `ck_traffic_pool_company.ownerAccountId` | `s2_wechat_account` | `id` | 客服账号ID |
| `ck_traffic_pool_source.friendTaskId` | `s2_friend_task` | `id` | 加好友任务ID |
| `ck_traffic_pool_behavior.messageId` | `s2_wechat_message` | `id` | 消息ID |
---
## 八、核心业务流程
### 8.1 流量入池流程
```
1. 新流量进入(好友添加/群成员/获客等)
2. 提取 identifier优先微信ID
3. 查询 ck_traffic_pool 是否存在
├── 不存在 → 创建总表记录
└── 存在 → 获取 poolId
4. 查询 ck_traffic_pool_company 是否存在该公司记录
├── 不存在 → 创建公司记录
└── 存在 → 更新公司记录
5. 创建 ck_traffic_pool_source 来源记录
6. 同步标签到 ck_traffic_pool_tag
7. 根据分配规则执行分配 → ck_traffic_pool_allot_record
```
### 8.2 好友通过同步流程
```
1. s2_wechat_friend 新增好友通过记录
2. 根据 wechatId 匹配 ck_traffic_pool
3. 更新 ck_traffic_pool_company:
- wechatFriendId = 好友ID
- friendStatus = 2
- friendPassTime = 当前时间
4. 同步好友标签到 ck_traffic_pool_tag
5. 更新总表基础信息(昵称、头像等)
```
### 8.3 消息互动记录流程
```
1. s2_wechat_message 新增消息记录
2. 根据 wechatFriendId 找到对应流量
3. 创建 ck_traffic_pool_behavior 行为记录
4. 更新 ck_traffic_pool_company:
- totalMsgCount += 1
- lastMsgTime = 当前时间
- rfmR = 0重置为今天
- rfmF += 1
```
### 8.4 流量池分组查询流程
```
1. 获取分组配置
2. 解析规则配置 ruleConfig
3. 动态构建 SQL 查询条件
4. 查询 ck_traffic_pool_company
5. 返回分组成员列表
```
---
## 九、确认事项
> ✅ 以下事项已全部确认
| 事项 | 确认结果 |
|------|----------|
| identifier 优先级 | ✅ 微信ID优先 |
| 表名前缀 | ✅ ck_ 开头 |
| 行为记录 | ✅ 需要记录所有消息互动只记录消息ID通过ID关联查询详情 |
| 标签同步 | ✅ 需要同步微信好友标签 |
| 流量池分组 | ✅ 支持系统默认和自定义分组,一个流量可属于多个分组 |
| 身份证字段 | ✅ 新增身份证号字段 |
| 标签分类 | ✅ 分为微信标签、站内标签、AI标签支持类目扩展 |
---
## 十、开发注意事项
### 10.1 统计字段并发更新规范
> ⚠️ `totalMsgCount`、`totalOrderCount` 等统计字段在高并发场景下需使用原子操作
**错误示例**
```php
// ❌ 可能导致数据丢失
$record = Model::find($id);
$record->totalMsgCount = $record->totalMsgCount + 1;
$record->save();
```
**正确示例**
```php
// ✅ 使用原子操作
Db::table('ck_traffic_pool_company')
->where('id', $id)
->inc('totalMsgCount', 1)
->update();
// ✅ 或使用 SQL
UPDATE ck_traffic_pool_company
SET totalMsgCount = totalMsgCount + 1,
lastMsgTime = UNIX_TIMESTAMP(),
lastInteractTime = UNIX_TIMESTAMP()
WHERE id = ?;
```
### 10.2 RFM R值计算方式
R值不存储天数而是存储 `lastInteractTime` 时间戳,查询时动态计算:
```sql
SELECT
*,
DATEDIFF(NOW(), FROM_UNIXTIME(lastInteractTime)) AS rfmR
FROM ck_traffic_pool_company
WHERE companyId = ?;
```
### 10.3 首次来源标记
流量入池时,需判断是否为首次来源:
```php
// 检查是否已有来源记录
$existSource = Db::table('ck_traffic_pool_source')
->where('poolCompanyId', $poolCompanyId)
->find();
$isFirstSource = $existSource ? 0 : 1;
// 如果是首次来源,同时更新 company 表的首次来源字段
if ($isFirstSource) {
Db::table('ck_traffic_pool_company')
->where('id', $poolCompanyId)
->update([
'firstSourceType' => $sourceType,
'firstSourceTime' => time()
]);
}
```
---
## 十一、下一步计划
确认本文档后,将进行以下开发工作:
1. **创建 SQL 文件**:生成所有表的建表语句
2. **数据迁移脚本**:(如需要)从旧表迁移数据
3. **Model 层开发**:创建对应的 PHP Model 类
4. **Service 层开发**:实现核心业务逻辑
5. **Controller 层开发**:实现 API 接口
6. **前端页面开发**:流量池管理界面
---
**请确认以上设计方案,确认后开始开发。**