主题
CRM 客户管理 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - CRM 客户管理 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-24 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
通俗理解:把 CRM 想象成一个"智能客户管家"。就像一家餐厅有一个超级厉害的经理——他记得每位客人的名字、口味偏好、上次来吃了什么、什么时候该打电话邀请客人再来。CRM 就是给销售团队用的这样的"管家系统":它帮你记住每一个客户是谁、聊了什么、谈到哪一步了、签了多少钱的合同、还欠多少款没收回,让销售不再靠脑子记、靠 Excel 管。
CRM 客户管理模块是 PMForge 企业应用层的核心模块,覆盖从客户获取、商机跟进、合同签订到回款闭环的完整销售链路。模块通过公海池机制确保客户资源不被浪费,通过多维度统计帮助管理层做出数据驱动的决策。
使用频率预估:
| 功能 | 预计使用频率 | 典型用户 |
|---|---|---|
| 客户管理(增删改查) | 每日高频 | 销售人员 |
| 商机跟进与阶段推进 | 每日高频 | 销售人员 |
| 合同管理 | 每周中频 | 销售人员、销售经理 |
| 回款管理 | 每周中频 | 销售人员、财务 |
| 公海池管理 | 每日中频 | 销售经理、销售人员 |
| 统计分析 | 每周低频 | 管理层、销售经理 |
1.2 目标用户
| 用户类型 | 使用场景 | 核心诉求 |
|---|---|---|
| 销售人员 | 客户录入、商机跟进、合同签订、回款跟踪 | 高效管理客户,不漏跟进,快速成交 |
| 销售经理 | 团队客户分配、业绩监控、公海管理 | 掌控团队业绩,合理分配资源 |
| 客服人员 | 查询客户信息、了解合作历史 | 快速响应客户服务需求 |
| 管理层 | 销售漏斗分析、业绩排名、趋势判断 | 数据驱动决策,发现业务瓶颈 |
| 系统管理员 | 系统配置、权限管理、数据备份 | 系统稳定运行,数据安全可控 |
1.3 业务价值
| 价值维度 | 具体收益 | 衡量指标 |
|---|---|---|
| 提升销售效率 | 自动化跟进提醒,减少遗忘 | 客户跟进遗漏率降低 80% |
| 优化资源利用 | 公海池机制防止客户资源闲置 | 客户资源利用率提升 30% |
| 精准数据决策 | 多维度统计报表,漏斗分析 | 商机转化率可量化追踪 |
| 规范销售流程 | 标准化阶段推进,流程可复制 | 新人上手周期缩短 50% |
| 增强团队协作 | 客户信息共享,避免撞单 | 客户冲突事件降为 0 |
1.4 功能范围
| 功能分类 | 后台管理端 | 前台用户端 |
|---|---|---|
| 客户管理(CRUD、导入导出、转移、锁定) | ✅ | ✅(仅本人) |
| 联系人管理 | ✅ | ✅(仅本人) |
| 商机管理(阶段推进、赢单/输单) | ✅ | ✅(仅本人) |
| 合同管理(审批、归档) | ✅ | ✅(仅本人) |
| 回款管理(计划、记录、审批) | ✅ | ✅(仅本人) |
| 跟进记录 | ✅ | ✅ |
| 公海池管理(规则、领取、回收) | ✅ | ✅(领取) |
| CRM 统计分析 | ✅ | ❌ |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 核心诉求 |
|---|---|---|
| 销售人员小赵 | 一线业务员,每天跟进 20+ 客户 | 不忘跟进、快速找到客户信息、高效推进商机 |
| 销售经理老李 | 管理 8 人销售团队 | 监控团队进度、合理分配客户、及时发现问题 |
| 客服专员小周 | 处理客户售后问题 | 快速查到客户背景和历史合作情况 |
| 销售总监王总 | 统管全公司销售业务 | 看全局数据、做战略决策、发现增长机会 |
2.2 使用场景
场景1:销售人员小赵录入新客户并开始跟进
前置条件:小赵在展会上收集了一批潜在客户名片
操作流程:
- 小赵登录系统 → 进入"客户管理" → 点击"新建客户"
- 填写客户基本信息:公司名称"杭州星辰科技有限公司"、联系人"张总"、手机、邮箱
- 选择客户来源为"展会"、行业为"互联网"
- 保存后系统自动生成客户编号 CUS20260924001
- 小赵在客户详情中点击"新建跟进" → 记录初次电话沟通内容
- 设置下次跟进时间为 3 天后
- 发现客户有采购意向 → 点击"创建商机" → 关联该客户
期望结果:客户信息完整录入、跟进提醒准时触发、商机与客户自动关联
验收标准(AC):
- 客户编号按 CUS + 年月日 + 4位序号 格式自动生成,全局唯一
- 客户名称在同一租户内不可重复,重复时提示"该客户名称已存在"
- 保存后客户默认状态为"正常",负责人为当前操作人
- 跟进记录保存后自动更新客户的"最后跟进时间"和"跟进状态"
- 下次跟进时间到达时,系统在消息中心推送提醒给负责人
场景2:销售人员小赵推进商机阶段直到赢单
前置条件:小赵有一个进行中的商机"星辰科技ERP采购项目"
操作流程:
- 小赵进入商机详情 → 查看当前阶段"需求分析"和跟进历史
- 完成需求调研后 → 点击"推进阶段" → 选择"方案报价"
- 填写推进说明,上传方案文档附件
- 更新预计成交金额为 50 万、预计成交日期为 2026-11-30
- 经过多轮谈判 → 推进到"商务谈判"阶段
- 客户确认合作 → 点击"赢单" → 填写实际成交金额 48 万
- 系统提示"是否创建合同" → 小赵确认 → 自动创建合同草稿
期望结果:商机阶段清晰推进、赢单后自动生成合同、历史推进记录完整可追溯
验收标准(AC):
- 商机阶段按"初步接触→需求分析→方案报价→商务谈判→赢单/输单"顺序流转,不可跳级
- 每次阶段推进记录操作人、操作时间、推进说明,形成完整时间线
- 赢单后商机状态变为"已赢单",不可再推进阶段
- 赢单后创建合同草稿时,自动带入客户信息、商机名称、成交金额
- 商机从创建到赢单的总天数自动统计,用于后续分析
场景3:销售经理老李管理公海池
前置条件:公海规则配置为"超过 30 天未跟进自动回收"
操作流程:
- 老李进入"客户公海"页面 → 查看公海中可领取的客户列表
- 发现有 15 个客户在公海中 → 将其中 3 个分配给团队成员小赵
- 系统提示小赵"您有 3 个新分配的客户"
- 小赵一周内未跟进某客户 → 系统发出"即将回收"预警
- 超过 30 天仍未跟进 → 系统自动将该客户回收到公海
- 另一位销售人员小王在公海中看到该客户 → 点击"领取"
- 系统校验小王的持有客户数未达上限 → 领取成功
期望结果:公海流转顺畅、客户资源不浪费、规则自动执行
验收标准(AC):
- 公海回收任务每日凌晨自动执行,按规则匹配超时客户
- 回收前 3 天向负责人发送预警消息:"您的客户 XX 将在 3 天后被回收到公海"
- 每位销售人员持有客户数上限为 200(可配置),达到上限时无法领取
- 同一客户被回收后 15 天内不可被同一人重复领取
- 公海客户列表按进入公海时间排序,支持按行业、地区筛选
场景4:合同签订与回款跟踪
前置条件:商机"星辰科技ERP采购项目"已赢单
操作流程:
- 小赵创建合同 → 填写合同名称、金额 48 万、签约日期、服务期限
- 关联客户和商机 → 添加合同产品明细(3 项产品)
- 设置回款计划:首付 30%(14.4万)签约后 7 天、中期 50%(24万)交付后 30 天、尾款 20%(9.6万)验收后 15 天
- 提交合同审批 → 销售经理审批通过 → 财务审批通过 → 合同归档
- 首付款到期前 7 天 → 系统推送回款提醒给小赵
- 客户支付首付 → 小赵创建回款记录 → 关联回款计划 → 提交审批
- 财务确认回款 → 审批通过 → 回款计划状态更新为"部分回款"
期望结果:合同审批流程清晰、回款计划自动提醒、回款进度实时可查
验收标准(AC):
- 合同编号按 CON + 年月日 + 4位序号 格式自动生成
- 回款计划总金额必须等于合同金额,否则无法保存
- 回款计划到期前 7 天自动推送提醒给负责人
- 回款记录审批通过后,自动累加到对应计划的"已回款金额"
- 当已回款金额 ≥ 计划金额时,计划状态自动变为"已回款"
场景5:销售总监王总查看统计报表
前置条件:系统中已有 3 个月的销售数据
操作流程:
- 王总进入"CRM 统计"页面 → 查看概览面板
- 本月新增客户 45 个、新增商机 28 个、签约合同 12 个、合同金额 320 万、回款 180 万
- 查看"客户漏斗" → 初步接触 100 → 需求分析 60 → 方案报价 35 → 商务谈判 20 → 赢单 12
- 查看"商机转化分析" → 整体赢单率 12%、平均成交周期 45 天
- 查看"销售排名" → 小赵本月签约 80 万排第一
- 查看"回款统计" → 回款完成率 56%、逾期金额 50 万
期望结果:数据准确、图表直观、支持钻取到明细
验收标准(AC):
- 统计数据延迟不超过 5 分钟
- 漏斗各阶段数据可点击钻取,查看该阶段的客户/商机列表
- 销售排名支持按签约金额、回款金额、新增客户数排序
- 回款统计中逾期金额标红显示,可点击查看逾期明细
- 支持按时间范围(本周/本月/本季/本年)和部门维度筛选
三、功能需求
3.1 客户管理
功能描述
提供客户全生命周期管理能力,包括客户信息的创建、编辑、删除、查询、导入导出、转移、锁定、放入公海等操作。客户是 CRM 的核心实体,所有商机、合同、回款都围绕客户展开。
页面原型


业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 客户名称唯一 | 同一租户内客户名称不可重复 | 避免同一客户被重复录入导致撞单 |
| 编号自动生成 | 格式:CUS + 年月日 + 4位序号 | 统一编号规范,便于识别和检索 |
| 客户状态三态 | 正常 / 锁定 / 公海 | 区分客户资源归属状态 |
| 编辑权限限制 | 仅负责人和上级管理者可编辑 | 保护客户数据安全,防止误操作 |
| 转移需记录历史 | 转移操作写入转移日志 | 客户归属变更可追溯 |
| 放入公海清权限 | 原负责人失去该客户的所有权限 | 确保客户资源彻底释放 |
| 锁定防修改 | 锁定后除管理员外无人可编辑 | 争议客户或特殊客户的保护机制 |
| 逻辑删除 | 删除后数据保留 30 天可恢复 | 防止误删造成不可挽回的损失 |
状态机

接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询客户分页列表 | GET | /admin-api/crm/customer/list | 支持名称、类型、行业、状态、负责人筛选 |
| 查询客户详情 | GET | /admin-api/crm/customer/ | 获取客户完整信息及关联统计 |
| 创建客户 | POST | /admin-api/crm/customer/create | 创建新客户 |
| 修改客户 | PUT | /admin-api/crm/customer/update | 更新客户信息 |
| 删除客户 | DELETE | /admin-api/crm/customer/delete/ | 逻辑删除 |
| 批量删除 | DELETE | /admin-api/crm/customer/batch-delete | 批量逻辑删除 |
| 导入客户 | POST | /admin-api/crm/customer/import | Excel 导入 |
| 导出客户 | GET | /admin-api/crm/customer/export | 导出 Excel |
| 下载导入模板 | GET | /admin-api/crm/customer/import-template | 下载标准模板 |
| 转移客户 | POST | /admin-api/crm/customer/transfer | 转移负责人 |
| 锁定客户 | PUT | /admin-api/crm/customer/lock/ | 锁定客户 |
| 解锁客户 | PUT | /admin-api/crm/customer/unlock/ | 解锁客户 |
| 放入公海 | POST | /admin-api/crm/customer/pool/ | 将客户放入公海 |
| 获取客户下拉 | GET | /admin-api/crm/customer/options | 用于其他模块下拉选择 |
3.2 联系人管理
功能描述
管理客户关联的联系人信息。一个客户可以有多个联系人,其中一个是主联系人。联系人是与客户沟通的具体对象。
业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 必须关联客户 | 联系人不可独立存在 | 联系人是客户的附属实体 |
| 至少一种联系方式 | 电话和邮箱至少填一项 | 确保后续能联系到人 |
| 主联系人唯一 | 每个客户只能设一个主联系人 | 明确首要沟通对象 |
| 逻辑删除 | 删除后保留 30 天 | 防止误删丢失沟通记录 |
接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询联系人列表 | GET | /admin-api/crm/contact/list | 按客户 ID 筛选 |
| 查询联系人详情 | GET | /admin-api/crm/contact/ | 获取联系人完整信息 |
| 创建联系人 | POST | /admin-api/crm/contact/create | 创建新联系人 |
| 修改联系人 | PUT | /admin-api/crm/contact/update | 更新联系人信息 |
| 删除联系人 | DELETE | /admin-api/crm/contact/delete/ | 逻辑删除 |
| 设置主联系人 | PUT | /admin-api/crm/contact/primary/ | 标记为主联系人 |
3.3 商机管理
功能描述
管理销售商机全生命周期,从初步接触到赢单/输单的完整流程。商机是销售漏斗的核心指标,直接反映团队的成交能力。
页面原型

业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 必须关联客户 | 商机不可独立存在 | 商机必须依附于具体客户 |
| 阶段顺序流转 | 按固定阶段顺序推进,不可跳级 | 确保销售流程规范,不遗漏关键环节 |
| 编号自动生成 | 格式:BUS + 年月日 + 4位序号 | 统一编号规范 |
| 赢单可创建合同 | 赢单后提示创建合同,自动带入信息 | 减少重复录入,衔接合同流程 |
| 输单需填原因 | 标记输时必须填写输单原因 | 为后续分析提供数据支撑 |
| 阶段停留上限 | 每阶段可配置最大停留天数 | 超时预警,防止商机长期停滞 |
状态机

接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询商机分页列表 | GET | /admin-api/crm/business/list | 支持阶段、客户、负责人筛选 |
| 查询商机详情 | GET | /admin-api/crm/business/ | 获取商机完整信息 |
| 创建商机 | POST | /admin-api/crm/business/create | 创建新商机 |
| 修改商机 | PUT | /admin-api/crm/business/update | 更新商机信息 |
| 删除商机 | DELETE | /admin-api/crm/business/delete/ | 逻辑删除 |
| 推进阶段 | POST | /admin-api/crm/business/stage/ | 推进到下一阶段 |
| 标记赢单 | POST | /admin-api/crm/business/won/ | 标记为赢单 |
| 标记输单 | POST | /admin-api/crm/business/lost/ | 标记为输单 |
| 放弃商机 | POST | /admin-api/crm/business/abandon/ | 放弃商机 |
| 创建合同 | POST | /admin-api/crm/business/create-contract/ | 赢单后创建合同 |
3.4 合同管理
功能描述
管理销售合同的创建、审批、归档全流程。合同是商业成交的法律凭证,需要严格的审批流程控制。合同审批集成工作流模块(03-01)。
页面原型

业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 必须关联客户 | 合同不可无客户 | 合同必须有明确的甲方 |
| 可关联商机 | 合同可选关联来源商机 | 追踪商机的最终转化结果 |
| 编号自动生成 | 格式:CON + 年月日 + 4位序号 | 统一编号规范 |
| 审批流程可配 | 审批节点和流程通过工作流配置 | 不同企业审批要求不同 |
| 金额自动计算 | 合同金额 = 产品明细总价 | 避免手工计算出错 |
| 归档后不可编辑 | 已归档合同信息锁定 | 保证合同数据的法律效力 |
状态机

接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询合同分页列表 | GET | /admin-api/crm/contract/list | 支持状态、客户、负责人筛选 |
| 查询合同详情 | GET | /admin-api/crm/contract/ | 获取合同完整信息 |
| 创建合同 | POST | /admin-api/crm/contract/create | 创建新合同 |
| 修改合同 | PUT | /admin-api/crm/contract/update | 更新合同信息 |
| 删除合同 | DELETE | /admin-api/crm/contract/delete/ | 逻辑删除(仅草稿状态) |
| 提交审批 | POST | /admin-api/crm/contract/approve/submit/ | 提交合同审批流程 |
| 归档合同 | POST | /admin-api/crm/contract/archive/ | 归档已审批合同 |
| 作废合同 | POST | /admin-api/crm/contract/void/ | 作废已归档合同 |
3.5 回款管理
功能描述
管理合同回款的计划和实际回款记录。回款计划定义"什么时候该收多少钱",回款记录记录"实际收了多少钱"。回款是销售闭环的最后一公里。
业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 计划总额 = 合同金额 | 回款计划总金额必须等于合同金额 | 确保合同金额被完全分解到各期 |
| 到期前 7 天提醒 | 自动推送回款提醒 | 防止遗忘导致逾期 |
| 回款累加计算 | 每次回款累加到已回款金额 | 支持分期多次回款 |
| 状态自动流转 | 已回款 ≥ 计划金额时自动变为"已回款" | 减少人工操作 |
| 回款记录不可删除 | 只能作废,不能物理删除 | 财务数据审计要求 |
| 大额回款需审批 | 超过阈值(如 10 万)需审批 | 财务风控要求 |
状态机 - 回款计划

接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询回款计划列表 | GET | /admin-api/crm/receivable/plan/list | 按合同 ID 筛选 |
| 创建回款计划 | POST | /admin-api/crm/receivable/plan/create | 创建回款计划 |
| 修改回款计划 | PUT | /admin-api/crm/receivable/plan/update | 更新计划信息 |
| 删除回款计划 | DELETE | /admin-api/crm/receivable/plan/delete/ | 逻辑删除 |
| 查询回款记录列表 | GET | /admin-api/crm/receivable/list | 按计划/合同/客户筛选 |
| 创建回款记录 | POST | /admin-api/crm/receivable/create | 记录实际回款 |
| 作废回款记录 | POST | /admin-api/crm/receivable/void/ | 作废错误回款记录 |
| 提交回款审批 | POST | /admin-api/crm/receivable/approve/submit/ | 提交审批 |
3.6 跟进记录管理
功能描述
记录对客户、商机、合同的所有跟进活动,支持电话、邮件、拜访、微信等多种跟进方式。跟进记录以时间线形式展示,形成完整的客户沟通历史。
业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 可关联多种实体 | 跟进记录可关联客户、商机、合同 | 同一沟通可能涉及多个维度 |
| 自动更新客户 | 创建跟进后自动更新客户最后跟进时间 | 减少手工操作,保证数据实时性 |
| 记录不可删除 | 跟进记录一旦创建不可删除 | 保证沟通历史的完整性和可追溯性 |
| 支持附件 | 每条跟进可附带文件 | 保存沟通中产生的方案、纪要等文档 |
接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询跟进记录列表 | GET | /admin-api/crm/followup/list | 按客户/商机/合同筛选 |
| 创建跟进记录 | POST | /admin-api/crm/followup/create | 创建跟进记录 |
| 修改跟进记录 | PUT | /admin-api/crm/followup/update/ | 更新跟进内容(限当日) |
3.7 公海池管理
功能描述
管理客户公海池,实现客户资源的自动分配和回收。公海池是 CRM 中确保客户资源不被浪费的核心机制——"占着茅坑不拉屎"的客户会被自动释放给更有精力跟进的人。
页面原型

业务规则
| 规则 | 说明 | 设计原因 |
|---|---|---|
| 回收规则可配 | 支持按跟进超时、成交超时等条件配置 | 不同业务节奏不同 |
| 自动回收定时执行 | 每日凌晨自动扫描并回收超时客户 | 减少人工干预 |
| 领取数量上限 | 每人最多持有 200 个客户(可配) | 防止囤积客户不跟进 |
| 回收预警 | 超时前 3 天向负责人预警 | 给负责人最后的跟进机会 |
| 防重复领取 | 同一客户被回收后 15 天内不可被同一人领取 | 防止"抢了又放"的恶性循环 |
| 支持部门公海 | 除全局公海外可设部门级公海 | 大团队需要分层管理 |
接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 查询公海客户列表 | GET | /admin-api/crm/pool/list | 查看公海中可领取的客户 |
| 领取客户 | POST | /admin-api/crm/pool/claim/ | 从公海领取客户 |
| 批量领取 | POST | /admin-api/crm/pool/batch-claim | 批量领取客户 |
| 分配客户 | POST | /admin-api/crm/pool/assign | 管理员手动分配 |
| 手动回收 | POST | /admin-api/crm/pool/reclaim/ | 手动回收客户到公海 |
| 查询公海规则列表 | GET | /admin-api/crm/pool/rule/list | 获取回收规则 |
| 创建公海规则 | POST | /admin-api/crm/pool/rule/create | 新增回收规则 |
| 修改公海规则 | PUT | /admin-api/crm/pool/rule/update | 更新规则配置 |
| 删除公海规则 | DELETE | /admin-api/crm/pool/rule/delete/ | 删除规则 |
3.8 CRM 统计分析
功能描述
提供多维度的 CRM 数据统计和分析报表,帮助管理层洞察销售状况、发现业务瓶颈。
页面原型

接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取概览数据 | GET | /admin-api/crm/statistics/overview | 今日/本周/本月概览 |
| 客户漏斗统计 | GET | /admin-api/crm/statistics/funnel | 各阶段转化数据 |
| 商机转化统计 | GET | /admin-api/crm/statistics/conversion | 赢单率、平均周期 |
| 合同金额统计 | GET | /admin-api/crm/statistics/contract-amount | 金额趋势、排名 |
| 回款统计 | GET | /admin-api/crm/statistics/receivable | 完成率、逾期分析 |
| 销售排名 | GET | /admin-api/crm/statistics/ranking | 业绩排行榜 |
3.9 用户前台功能
功能描述
为普通用户提供个人 CRM 工作台,管理自己负责的客户和业务,支持移动端使用。
接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 我的客户列表 | GET | /app-api/crm/my/customer/list | 我负责的客户 |
| 我的商机列表 | GET | /app-api/crm/my/business/list | 我的商机 |
| 我的合同列表 | GET | /app-api/crm/my/contract/list | 我的合同 |
| 我的跟进记录 | GET | /app-api/crm/my/followup/list | 我的跟进 |
| 我的日程提醒 | GET | /app-api/crm/my/reminder/list | 跟进/回款提醒 |
| 创建跟进记录 | POST | /app-api/crm/my/followup/create | 快捷创建跟进 |
| 领取公海客户 | POST | /app-api/crm/my/pool/claim/ | 从公海领取 |
四、非功能需求
4.1 性能需求
| 指标 | 要求 | 实现策略 |
|---|---|---|
| 客户列表查询 | ≤ 500ms | 合理索引 + 分页查询 + 数据权限 SQL 优化 |
| 客户详情加载 | ≤ 300ms | 关联数据按需加载,避免 N+1 查询 |
| 导入 1000 条客户 | ≤ 30s | 异步导入 + 批量插入 + 进度反馈 |
| 导出 10000 条 | ≤ 60s | 异步导出 + 流式写入 + 完成后通知 |
| 统计报表生成 | ≤ 2s | 预计算 + 缓存 + 定时汇总 |
| 公海回收任务 | 5 分钟内完成 | 批量处理 + 分批提交 + 事务控制 |
| 并发支持 | ≥ 500 用户 | 读写分离 + 连接池优化 |
4.2 安全需求
| 安全项 | 要求 | 实现方式 |
|---|---|---|
| 数据权限 | 用户只能看自己的客户 | 基于 MyBatis Plus 数据权限插件,按负责人/部门/全部三级控制 |
| 字段权限 | 敏感字段可限制查看 | 合同金额、客户联系方式等字段可按角色控制可见性 |
| 操作审计 | 所有增删改记录日志 | 集成日志审计模块(01-08),记录操作人、时间、变更内容 |
| 防重复提交 | 表单不可重复提交 | 前端防抖 + 后端幂等 Token |
| 导入安全 | 文件上传校验 | 格式白名单(xlsx/xls)、大小限制(10MB)、内容安全扫描 |
| 数据备份 | 每日自动备份 | 定时任务 + 增量备份 + 异地存储 |
4.3 可用性需求
| 场景 | 处理方式 |
|---|---|
| 并发领取同一公海客户 | 乐观锁控制,仅一人成功,其他人提示"该客户已被领取" |
| 导入数据部分失败 | 成功部分入库,失败部分生成错误报告供下载 |
| 审批流程异常 | 审批节点超时自动提醒,支持管理员干预流转 |
4.4 错误码定义
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| CRM_CUST_001 | 客户名称已存在 | 提示用户检查是否重复录入 |
| CRM_CUST_002 | 客户已被锁定 | 提示联系管理员解锁 |
| CRM_CUST_003 | 客户已在公海中 | 提示该客户无当前负责人 |
| CRM_POOL_001 | 持有客户数已达上限 | 提示先跟进或释放现有客户 |
| CRM_POOL_002 | 15天内不可重复领取 | 提示冷却期剩余天数 |
| CRM_BIZ_001 | 商机阶段不可回退 | 提示阶段只能顺序推进 |
| CRM_BIZ_002 | 商机已终结 | 提示赢单/输单/放弃后不可再操作 |
| CRM_CON_001 | 回款计划总额不等于合同金额 | 提示调整各期金额使总额匹配 |
| CRM_CON_002 | 合同已归档不可编辑 | 提示需先取消归档才能修改 |
五、数据设计
5.1 数据表概览
| 表名 | 说明 | 预估记录数 |
|---|---|---|
| crm_customer | 客户表 | 10 万+ |
| crm_contact | 联系人表 | 50 万+ |
| crm_business | 商机表 | 20 万+ |
| crm_business_product | 商机产品表 | 50 万+ |
| crm_contract | 合同表 | 10 万+ |
| crm_contract_product | 合同产品表 | 30 万+ |
| crm_receivable_plan | 回款计划表 | 30 万+ |
| crm_receivable | 回款记录表 | 50 万+ |
| crm_follow_up_record | 跟进记录表 | 100 万+ |
| crm_customer_pool | 客户公海表 | 5 万+ |
| crm_customer_pool_rule | 公海规则表 | 100+ |
| crm_customer_transfer_log | 客户转移日志表 | 20 万+ |
5.2 表关系

5.3 缓存策略
| 缓存 Key | 缓存内容 | 过期时间 | 更新策略 |
|---|---|---|---|
| crm:pool:count | 公海客户总数 | 10 分钟 | 领取/回收时主动失效 |
| crm:statistics:overview: | 统计概览数据 | 5 分钟 | 定时刷新 |
| crm:pool:rule:list | 公海规则列表 | 30 分钟 | 规则变更时主动失效 |
| crm:customer:options: | 客户下拉列表 | 5 分钟 | 客户变更时主动失效 |
| crm:follow:reminder: | 用户跟进提醒列表 | 1 分钟 | 创建跟进时主动失效 |
5.4 核心表结构
crm_customer 客户表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| customer_no | VARCHAR(32) | 是 | 客户编号(唯一索引) |
| customer_name | VARCHAR(200) | 是 | 客户名称 |
| customer_type | TINYINT | 否 | 客户类型:1企业 2个人 |
| industry | VARCHAR(50) | 否 | 所属行业 |
| region | VARCHAR(100) | 否 | 所在地区 |
| address | VARCHAR(500) | 否 | 详细地址 |
| phone | VARCHAR(20) | 否 | 联系电话 |
| VARCHAR(100) | 否 | 邮箱地址 | |
| website | VARCHAR(200) | 否 | 公司网站 |
| credit_level | TINYINT | 否 | 信用等级 1-5 |
| source | TINYINT | 否 | 客户来源:1展会 2网络 3推荐 4广告 5其他 |
| status | TINYINT | 是 | 状态:1正常 2锁定 3公海 |
| owner_user_id | BIGINT | 否 | 负责人用户 ID |
| department_id | BIGINT | 否 | 所属部门 ID |
| follow_up_status | TINYINT | 否 | 跟进状态:1已跟进 2未跟进 3已成交 |
| last_follow_time | DATETIME | 否 | 最后跟进时间 |
| next_follow_time | DATETIME | 否 | 下次跟进时间 |
| lock_time | DATETIME | 否 | 锁定时间 |
| lock_user_id | BIGINT | 否 | 锁定操作人 ID |
| pool_enter_time | DATETIME | 否 | 进入公海时间 |
| remark | TEXT | 否 | 备注 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_business 商机表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| business_no | VARCHAR(32) | 是 | 商机编号(唯一索引) |
| business_name | VARCHAR(200) | 是 | 商机名称 |
| customer_id | BIGINT | 是 | 关联客户 ID |
| customer_name | VARCHAR(200) | 是 | 客户名称(冗余) |
| stage | TINYINT | 是 | 阶段:1初步接触 2需求分析 3方案报价 4商务谈判 5赢单 6输单 |
| status | TINYINT | 是 | 状态:1进行中 2已赢单 3已输单 4已放弃 |
| expected_amount | DECIMAL(15,2) | 否 | 预计成交金额 |
| actual_amount | DECIMAL(15,2) | 否 | 实际成交金额(赢单时填写) |
| expected_date | DATE | 否 | 预计成交日期 |
| owner_user_id | BIGINT | 是 | 负责人 ID |
| department_id | BIGINT | 否 | 所属部门 ID |
| source | TINYINT | 否 | 商机来源 |
| priority | TINYINT | 否 | 优先级:1低 2中 3高 4紧急 |
| win_rate | INT | 否 | 赢单概率(%) |
| lost_reason | TEXT | 否 | 输单原因 |
| contract_id | BIGINT | 否 | 关联合同 ID(赢单后创建) |
| stage_enter_time | DATETIME | 否 | 进入当前阶段时间 |
| stage_days_limit | INT | 否 | 当前阶段最大停留天数 |
| remark | TEXT | 否 | 备注 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_contract 合同表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| contract_no | VARCHAR(32) | 是 | 合同编号(唯一索引) |
| contract_name | VARCHAR(200) | 是 | 合同名称 |
| customer_id | BIGINT | 是 | 关联客户 ID |
| business_id | BIGINT | 否 | 关联商机 ID |
| contract_amount | DECIMAL(15,2) | 是 | 合同金额 |
| received_amount | DECIMAL(15,2) | 否 | 已回款金额(冗余汇总) |
| sign_date | DATE | 否 | 签约日期 |
| start_date | DATE | 否 | 合同开始日期 |
| end_date | DATE | 否 | 合同结束日期 |
| status | TINYINT | 是 | 状态:1草稿 2审批中 3已审批 4已归档 5已作废 |
| owner_user_id | BIGINT | 是 | 负责人 ID |
| department_id | BIGINT | 否 | 所属部门 ID |
| approve_user_id | BIGINT | 否 | 审批人 ID |
| approve_time | DATETIME | 否 | 审批时间 |
| process_instance_id | VARCHAR(64) | 否 | 工作流实例 ID |
| remark | TEXT | 否 | 备注 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_receivable_plan 回款计划表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| contract_id | BIGINT | 是 | 关联合同 ID |
| plan_no | VARCHAR(32) | 是 | 计划编号 |
| plan_amount | DECIMAL(15,2) | 是 | 计划金额 |
| plan_date | DATE | 是 | 计划回款日期 |
| return_method | TINYINT | 否 | 回款方式:1现金 2转账 3支票 |
| received_amount | DECIMAL(15,2) | 否 | 已回款金额,默认 0 |
| status | TINYINT | 是 | 状态:1未回款 2部分回款 3已回款 |
| remark | TEXT | 否 | 备注 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_receivable 回款记录表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| receivable_no | VARCHAR(32) | 是 | 回款编号 |
| plan_id | BIGINT | 是 | 关联回款计划 ID |
| contract_id | BIGINT | 是 | 关联合同 ID |
| customer_id | BIGINT | 是 | 关联客户 ID |
| return_amount | DECIMAL(15,2) | 是 | 回款金额 |
| return_date | DATE | 是 | 实际回款日期 |
| return_method | TINYINT | 否 | 回款方式:1现金 2转账 3支票 |
| status | TINYINT | 是 | 状态:1待审批 2已审批 3已驳回 4已作废 |
| approve_user_id | BIGINT | 否 | 审批人 ID |
| approve_time | DATETIME | 否 | 审批时间 |
| remark | TEXT | 否 | 备注 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_follow_up_record 跟进记录表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| customer_id | BIGINT | 否 | 关联客户 ID |
| business_id | BIGINT | 否 | 关联商机 ID |
| contract_id | BIGINT | 否 | 关联合同 ID |
| follow_type | TINYINT | 是 | 跟进方式:1电话 2邮件 3拜访 4微信 5其他 |
| follow_content | TEXT | 是 | 跟进内容 |
| follow_time | DATETIME | 是 | 跟进时间 |
| next_follow_time | DATETIME | 否 | 下次跟进时间 |
| attachment | VARCHAR(500) | 否 | 附件 URL |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_customer_pool 客户公海表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| customer_id | BIGINT | 是 | 客户 ID(唯一索引) |
| pool_type | TINYINT | 是 | 公海类型:1全局公海 2部门公海 |
| department_id | BIGINT | 否 | 部门 ID(部门公海时使用) |
| enter_time | DATETIME | 是 | 进入公海时间 |
| reason | TINYINT | 否 | 进入原因:1主动放入 2自动回收 3手动回收 |
| status | TINYINT | 是 | 状态:1在公海 2已领取 |
| claim_user_id | BIGINT | 否 | 领取人 ID |
| claim_time | DATETIME | 否 | 领取时间 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_customer_pool_rule 公海规则表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| rule_name | VARCHAR(100) | 是 | 规则名称 |
| rule_type | TINYINT | 是 | 规则类型:1跟进超时 2成交超时 3自定义 |
| days_limit | INT | 是 | 天数限制 |
| scope_type | TINYINT | 是 | 适用范围:1全部 2指定部门 |
| department_ids | VARCHAR(500) | 否 | 部门 ID 列表(逗号分隔) |
| status | TINYINT | 是 | 状态:1启用 2禁用 |
| creator | VARCHAR(64) | 否 | 创建者 |
| create_time | DATETIME | 否 | 创建时间 |
| updater | VARCHAR(64) | 否 | 更新者 |
| update_time | DATETIME | 否 | 更新时间 |
| deleted | BIT | 否 | 是否删除 |
| tenant_id | BIGINT | 否 | 租户 ID |
crm_customer_transfer_log 客户转移日志表
| 字段名 | 字段类型 | 是否必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 主键 ID |
| customer_id | BIGINT | 是 | 客户 ID |
| from_user_id | BIGINT | 是 | 原负责人 ID |
| to_user_id | BIGINT | 是 | 新负责人 ID |
| transfer_type | TINYINT | 是 | 转移类型:1手动转移 2公海领取 3自动分配 |
| reason | VARCHAR(500) | 否 | 转移原因 |
| creator | VARCHAR(64) | 否 | 操作人 |
| create_time | DATETIME | 否 | 操作时间 |
| tenant_id | BIGINT | 否 | 租户 ID |
六、跨模块联动
6.1 联动关系总览
| 联动模块 | 联动方式 | 数据流向 |
|---|---|---|
| 工作流管理(03-01) | 合同审批、回款审批调用工作流引擎 | CRM → 工作流 |
| 消息通知(02-03) | 跟进提醒、回款提醒、审批通知 | CRM → 消息通知 |
| 统计分析(02-05) | CRM 数据汇入全局统计 | CRM → 统计 |
| 认证授权(01-01) | 用户信息、部门信息、角色权限 | 系统管理 → CRM |
| 日志审计(01-08) | 操作日志记录 | CRM → 审计 |
| 文件存储(02-02) | 导入导出文件、跟进附件 | CRM → 文件存储 |
| 商城-商品管理(06-01) | 商机/合同产品关联商品主数据 | 商城 → CRM |
| 钱包管理(04-02) | 回款到账后更新钱包余额 | CRM → 钱包 |
6.2 详细联动说明
CRM ↔ 工作流管理(03-01)
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| 合同审批 | 销售提交合同审批 | 创建工作流实例,按配置的审批流程流转 | CRM 合同 → 工作流 |
| 回款审批 | 销售提交回款审批 | 创建工作流实例,财务审批 | CRM 回款 → 工作流 |
| 审批结果回写 | 工作流审批完成 | 回写合同/回款状态 | 工作流 → CRM |
CRM → 消息通知(02-03)
| 联动场景 | 触发条件 | 联动行为 |
|---|---|---|
| 跟进提醒 | 到达下次跟进时间 | 推送系统消息给负责人 |
| 回款提醒 | 回款计划到期前 7 天 | 推送系统消息 + 邮件给负责人 |
| 公海回收预警 | 客户即将触发回收(前 3 天) | 推送预警消息给负责人 |
| 审批通知 | 有新的审批待处理 | 推送消息给审批人 |
| 客户分配通知 | 管理员分配客户给某人 | 推送消息给被分配人 |
CRM → 钱包管理(04-02)
| 联动场景 | 触发条件 | 联动行为 |
|---|---|---|
| 回款到账 | 回款记录审批通过 | 更新对应客户的钱包余额(如有预付款场景) |
七、附录
7.1 名词解释
| 术语 | 通俗理解 |
|---|---|
| CRM(Customer Relationship Management) | 客户关系管理系统,就是帮销售团队"记住每个客户、跟进每笔生意"的工具 |
| 客户(Customer) | 你的目标买家,可能已经合作了,也可能还没合作 |
| 联系人(Contact) | 客户公司里的具体对接人,比如"张总""李经理" |
| 商机(Business/Opportunity) | 一笔有可能成交的生意,比如"客户想买我们的 ERP 系统" |
| 商机阶段(Stage) | 商机进展到了哪一步,就像看病——初诊→检查→开药→治疗→康复 |
| 合同(Contract) | 和客户签的正式合作协议,具有法律效力 |
| 回款(Receivable) | 客户付给你的钱,合同签了不代表钱到手了 |
| 回款计划 | 约定"什么时候收多少钱"的时间表 |
| 公海(Pool) | 没人负责的客户资源池,谁有精力谁去领——就像餐厅的"等位区" |
| 公海回收 | 把长期不跟进的客户从销售手里"收回来"放到公海 |
| 跟进记录 | 每次和客户沟通的记录,比如打了电话、发了邮件、上门拜访 |
| 销售漏斗(Funnel) | 从大量潜在客户到最终成交的层层筛选过程,越往下人越少 |
| 赢单率 | 最终成交的商机占全部商机的比例,就像投篮命中率 |
| 主联系人 | 客户那边最重要的对接人,通常是有决策权的人 |
| 数据权限 | 控制谁能看到哪些数据的规则——销售只看自己的,经理看团队的,总监看全部 |
| 字段权限 | 控制谁能看到哪些字段的规则——比如合同金额只对相关人可见 |
| 客户转移 | 把一个客户从 A 销售手里转给 B 销售负责 |
| 租户(Tenant) | 使用系统的企业/组织,每个租户的数据完全隔离 |
7.2 权限标识汇总
| 权限标识 | 说明 | 所属角色 |
|---|---|---|
| crm:customer:list | 查看客户列表 | 销售人员、销售经理、销售总监 |
| crm:customer:create | 创建客户 | 销售人员 |
| crm:customer:update | 编辑客户 | 销售人员(仅自己)、销售经理 |
| crm:customer:delete | 删除客户 | 销售经理、销售总监 |
| crm:customer:import | 导入客户 | 销售人员、销售经理 |
| crm:customer:export | 导出客户 | 销售人员、销售经理 |
| crm:customer:transfer | 转移客户 | 销售经理、销售总监 |
| crm:customer:lock | 锁定/解锁客户 | 销售经理 |
| crm:customer:pool | 放入公海 | 销售人员、销售经理 |
| crm:contact:list | 查看联系人 | 销售人员 |
| crm:contact:create | 创建联系人 | 销售人员 |
| crm:contact:update | 编辑联系人 | 销售人员 |
| crm:contact:delete | 删除联系人 | 销售人员 |
| crm:business:list | 查看商机列表 | 销售人员、销售经理、销售总监 |
| crm:business:create | 创建商机 | 销售人员 |
| crm:business:update | 编辑商机 | 销售人员 |
| crm:business:stage | 推进阶段 | 销售人员 |
| crm:business:won | 标记赢单 | 销售人员 |
| crm:business:lost | 标记输单 | 销售人员 |
| crm:contract:list | 查看合同列表 | 销售人员、销售经理、财务 |
| crm:contract:create | 创建合同 | 销售人员 |
| crm:contract:approve | 审批合同 | 销售经理、财务 |
| crm:contract:archive | 归档合同 | 销售人员 |
| crm:receivable:plan:list | 查看回款计划 | 销售人员、财务 |
| crm:receivable:plan:create | 创建回款计划 | 销售人员 |
| crm:receivable:create | 创建回款记录 | 销售人员 |
| crm:receivable:approve | 审批回款 | 财务 |
| crm:followup:list | 查看跟进记录 | 销售人员、销售经理 |
| crm:followup:create | 创建跟进记录 | 销售人员 |
| crm:pool:list | 查看公海客户 | 销售人员、销售经理 |
| crm:pool:claim | 领取客户 | 销售人员 |
| crm:pool:assign | 分配客户 | 销售经理 |
| crm:pool:reclaim | 回收客户 | 销售经理 |
| crm:pool:rule:list | 查看公海规则 | 销售经理、销售总监 |
| crm:pool:rule:create | 创建公海规则 | 销售总监 |
| crm:pool:rule:update | 编辑公海规则 | 销售总监 |
| crm:statistics:view | 查看统计报表 | 销售经理、销售总监 |
文档变更记录
| 版本 | 日期 | 修改人 | 修改内容 |
|---|---|---|---|
| v1.0 | 2026-09-24 | PM | 初始版本 |
| v2.0 | 2026-09-24 | PM | 全面重写:增强业务场景(5 个命名角色场景 + AC)、ASCII 页面原型、状态机、业务规则含设计原因、错误码、缓存策略、跨模块联动、名词解释通俗化 |