# 新流量池系统设计文档 > **版本**: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` 字段中,支持嵌套逻辑 **简单规则示例**(全部好友): ```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=微信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 | 联系电话 | | 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 | 是 | - | 公司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` 字段中 ```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. **前端页面开发**:流量池管理界面 --- **请确认以上设计方案,确认后开始开发。**