CRM 功能设计
这篇解决什么
客户关系怎么分层:客户 / 线索 / 商机是 CRM 自己的表和数据权限;合同、回款才交给 BPM。公海不是第二张客户表。读完先对模块边界和表,再进客户、线索、商机等功能篇。
默认端口 48080,前缀 /admin-api。工程启动见 快速开始。审批接入见 业务表单开发。
业务流程及架构
CRM 自己不算流程引擎。客户、线索、商机不走 FlowBillService。合同审批 key 是 crm-contract-audit,回款是 crm-receivable-audit。
示意图:左客户端。中间 CRM 自己做数据权限。合同 / 回款提交走 Flowable。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 客户 / 公海 | ownerUserId 为空即公海 | 客户管理、公海客户 |
| 线索 | 转化后进客户 | 线索管理 |
| 商机 | 状态组可配 | 商机管理、商机状态 |
| 合同 | 401 crm-contract-audit | 合同管理、合同提醒 |
| 回款 | 402 crm-receivable-audit | 回款管理、回款计划 |
| 跟进 / 待办 | 详情页签 + 待办页 | 跟进记录、待办事项 |
| 权限 | @CrmPermission | CRM 数据权限 |
| 产品 | 商机选品 | 产品管理、产品分类 |
| 移动 | CRM 搬家 | 移动端 CRM |
不要写成 crm_customer
客户、线索、商机没有人事那种单据枚举。合同 / 回款 key 以 CrmBillTypeEnum 为准,中间是短横线。
数据表 ER
主干表按 DO 画出。联系人、附件、操作日志不进这张图。
示意图:公海只是客户行上负责人置空。权限行在 crm_permission。
前后端代码
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 模块 | api 枚举 + server 实现 | ruoyi-office/yudao-module-crm/ |
| 单体引入 | yudao-module-crm-server | ruoyi-office/yudao-server/pom.xml |
| 单据枚举 | 401 / 402 | yudao-module-crm-api/.../CrmBillTypeEnum.java |
| 数据权限 | @CrmPermission | .../framework/permission/ |
| 公海 Job | customerAutoPutPoolJob | .../job/customer/CrmCustomerAutoPutPoolJob.java |
| 管理端 | CRM 目录 | ruoyi-office-vben/apps/web-antd/src/views/crm/ |
官方菜单:2397 CRM(/crm)。客户 2391,线索 2404,商机 2410,公海 2546,配置 2524。看不到菜单先查角色。

本系统截图:CRM → 客户管理。模块和菜单已经在跑。

本系统截图:负责人已清空的客户。领取后再写 ownerUserId。
功能开启
单体 -P boot 时已经依赖 CRM 实现,没有单独的「CRM 开关」页。启动 YudaoServerApplication 即可。
客户默认包 ruoyi-office-db/dump/latest/:先 schema_*.sql 再 static_data_*.sql,带 crm_* 表、菜单、字典和合同 / 回款模型。以后改表走 ruoyi-office-db/update/。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
401 合同 | crm-contract-audit | /crm/contract 或 /crm/contract/detail |
402 回款 | crm-receivable-audit | 回款 info |
公海要启用 crm_customer_pool_config 并挂 XXL-Job customerAutoPutPoolJob,否则不会自动掉入。
CRM_CONTRACT_AUDIT("401", "合同审批", "crm-contract-audit"),
CRM_RECEIVABLE_AUDIT("402", "回款审批", "crm-receivable-audit"),摘自 CrmBillTypeEnum。第三段才是 Flowable 的 KEY_。
示意图:先库和菜单。公海关掉或 Job 没挂,客户会一直挂原负责人。
旧文 CRM 功能开启 已并入本页,请收藏本篇。
