68 KiB
新流量池系统设计文档
版本: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(分组表) │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │ 全部好友池 │ │ 高价值客户 │ │ 潜在客户池 │ │ 高互动客户 │ 自定义 │ │ │
│ │ │ │ (系统默认) │ │ (系统默认) │ │ (系统默认) │ │ (系统默认) │ 分组... │ │ │
│ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │
│ │ └─────────┼────────────────┼────────────────┼────────────────┼────────────────┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ ruleConfig(JSON规则配置) │ │ │
│ │ │ │ │ │
│ │ │ 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字段中,支持嵌套逻辑
简单规则示例(全部好友):
{
"logic": "AND",
"conditions": [
{ "type": "field", "field": "friendStatus", "operator": "=", "value": 2, "valueType": "number" }
]
}
复杂规则示例(高价值客户:已通过好友 AND (消费>=1000 OR 等级=VIP)):
{
"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" }
]
}
]
}
标签规则示例:
{
"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=微信ID,2=微信号,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 | 归属客服账号ID(s2_wechat_account.id) |
| ownerUserId | int(11) | 否 | NULL | 归属操盘手ID |
| 好友关联 | ||||
| wechatFriendId | int(11) | 否 | NULL | 微信好友ID(s2_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 | 联系电话 |
| 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 | 是 | - | 公司ID(0=系统默认) |
| 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 | 是 | - | 公司ID(0=系统默认) |
| parentId | int(11) UNSIGNED | 否 | 0 | 父类目ID(0=顶级类目) |
| 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 | 是 | - | 公司ID(0=系统默认) |
| 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字段中
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等统计字段在高并发场景下需使用原子操作
错误示例:
// ❌ 可能导致数据丢失
$record = Model::find($id);
$record->totalMsgCount = $record->totalMsgCount + 1;
$record->save();
正确示例:
// ✅ 使用原子操作
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 时间戳,查询时动态计算:
SELECT
*,
DATEDIFF(NOW(), FROM_UNIXTIME(lastInteractTime)) AS rfmR
FROM ck_traffic_pool_company
WHERE companyId = ?;
10.3 首次来源标记
流量入池时,需判断是否为首次来源:
// 检查是否已有来源记录
$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()
]);
}
十一、下一步计划
确认本文档后,将进行以下开发工作:
- 创建 SQL 文件:生成所有表的建表语句
- 数据迁移脚本:(如需要)从旧表迁移数据
- Model 层开发:创建对应的 PHP Model 类
- Service 层开发:实现核心业务逻辑
- Controller 层开发:实现 API 接口
- 前端页面开发:流量池管理界面
请确认以上设计方案,确认后开始开发。