CRM 与 ERP 销售流程全景图
一、整体业务流程
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ CRM 销售线索管理(前端) │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 线索(clue) ──转化──► 客户(customer) ──跟进──► 商机(business) │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ 线索入库 客户公海池 商机状态推进 │
│ 线索分配 客户锁定 赢单/输单 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ CRM 销售报价与合同(新增) │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 销售报价(quotation) ──BPM审批──► 合同(contract) │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ 创建报价单 审批通过 合同签订 │
│ 选择MDM物料 审批拒绝 合同审批 │
│ 提交审批 审批取消 生成订单 │
│ 转为合同 关联商机 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ ERP 销售订单与执行 │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 销售订单(order) ──► 销售出库(out) ──► 销售退货(return) │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ 订单审批 出库审核 退货审核 │
│ 关联合同 出库单号 退货单号 │
│ 选择MDM物料 出库数量 退货数量 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ ERP 财务收款 │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ 收款单(receipt) ──► 收款核销 │
│ │ │
│ ▼ │
│ 关联销售订单 │
│ 关联CRM客户 │
│ 收款金额 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────┘
二、数据流转详解
2.1 客户数据(统一来源)
| 模块 |
数据来源 |
说明 |
| CRM 客户 |
crm_customer |
唯一客户数据源 |
| ERP 销售订单 |
crm_customer (通过 API) |
使用 CRM 客户 |
| ERP 销售出库 |
crm_customer (通过 API) |
使用 CRM 客户 |
| ERP 销售退货 |
crm_customer (通过 API) |
使用 CRM 客户 |
| ERP 收款单 |
crm_customer (通过 API) |
使用 CRM 客户 |
关键 API:CrmCustomerApi
- /rpc-api/crm/customer/get - 获取单个客户
- /rpc-api/crm/customer/list-by-ids - 批量获取客户
- /rpc-api/crm/customer/validate - 校验客户存在
2.2 物料数据(统一来源)
| 模块 |
数据来源 |
说明 |
| MDM 物料 |
mdm_item |
唯一物料数据源 |
| 销售报价 |
mdm_item (通过 API) |
使用 MDM 物料 |
| CRM 合同 |
mdm_item (通过 API) |
使用 MDM 物料 |
| ERP 销售订单 |
mdm_item (通过 API) |
使用 MDM 物料 |
关键 API:MdmItemApi
- /rpc-api/mdm/item/get - 获取物料
- /rpc-api/mdm/item/list - 批量获取物料
- /rpc-api/mdm/item/validate-item-exists - 校验物料存在
三、详细流程图
3.1 CRM 销售报价流程(新增)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 创建报价单 │────►│ 提交审批 │────►│ BPM审批 │────►│ 审批通过 │
│ │ │ │ │ │ │ │
│ 选择客户 │ │ 选择流程 │ │ 审批中状态 │ │ 已通过状态 │
│ 选择MDM物料 │ │ 动态选择 │ │ status=10 │ │ status=20 │
│ 填写报价金额 │ │ │ │ │ │ │
│ 可关联商机 │ │ │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐ ┌──────────────┐
│ 转为合同 │────►│ 合同生成 │
│ │ │ │
│ 物料直接复制 │ │ 合同审批流程 │
│ 字段一致 │ │ 生成销售订单 │
│ 状态=50 │ │ │
└──────────────┘ └──────────────┘
状态流转:
| 状态值 |
状态名 |
可操作 |
| 0 |
草稿 |
编辑、删除、提交审批 |
| 10 |
审批中 |
无 |
| 20 |
已通过 |
转合同 |
| 30 |
已拒绝 |
重新提交 |
| 40 |
已取消 |
无 |
| 50 |
已转合同 |
查看合同 |
3.2 CRM 合同流程
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 创建合同 │────►│ 提交审批 │────►│ BPM审批 │────►│ 审批通过 │
│ │ │ │ │ │ │ │
│ 选择客户 │ │ 固定流程Key │ │ 审批中状态 │ │ 已通过状态 │
│ 选择MDM物料 │ │ crm-contract │ │ auditStatus │ │ auditStatus │
│ 合同金额 │ │ -audit │ │ =10 │ │ =20 │
│ 可关联商机 │ │ │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ 生成销售订单 │
│ │
│ ERP订单创建 │
│ 关联合同编号 │
│ 物料明细复制 │
└──────────────┘
3.3 ERP 销售订单流程
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 创建订单 │────►│ 订单审批 │────►│ 审批通过 │────►│ 销售出库 │
│ │ │ │ │ │ │ │
│ CRM客户 │ │ ERP审批流程 │ │ 可执行出库 │ │ 出库单生成 │
│ MDM物料 │ │ │ │ │ │ 出库数量累计 │
│ 关联合同(可) │ │ │ │ │ │ │
│ 订单金额 │ │ │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ 收款核销 │
│ │
│ 收款单创建 │
│ 关联订单 │
│ 收款金额累计 │
└──────────────┘
四、模块关系图
┌─────────────────────────────────────┐
│ MDM 主数据模块 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ mdm_item │ │ mdm_unit │ │
│ │ (物料) │ │ (单位) │ │
│ └─────────────┘ └─────────────┘ │
│ │
└──────────────┬──────────────────────┘
│
│ MdmItemApi
│
┌────────────────────────┼────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ CRM 模块 │ │ ERP 模块 │ │ BPM 模块 │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │crm_customer │ │ │ │erp_sale_ │ │ │ │ bpm_category│ │
│ │(客户) │◄├────┤ │ order │ │ │ │ (审批分类) │ │
│ └─────────────┘ │ │ │(销售订单) │ │ │ └─────────────┘ │
│ │ │ └─────────────┘ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │crm_sale_ │ │ │ │erp_sale_ │ │ │ │ bpm_process │ │
│ │ quotation │ │ │ │ out │ │ │ │ _definition │ │
│ │(销售报价) │ │ │ │(销售出库) │ │ │ │ (流程定义) │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ └─────────────┘ │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ │
│ │crm_contract │ │ │ │erp_finance_ │ │ │ │
│ │(合同) │◄├────┤ │ receipt │ │ │ │
│ └─────────────┘ │ │ │(收款单) │ │ │ │
│ │ │ └─────────────┘ │ │ │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
五、关键表结构
5.1 CRM 表
| 表名 |
说明 |
关键字段 |
crm_customer |
客户主表 |
id, name, owner_user_id |
crm_business |
商机主表 |
id, customer_id, total_price, status_id |
crm_sale_quotation |
销售报价 |
id, no, customer_id, business_id, status |
crm_sale_quotation_product |
报价明细 |
quotation_id, item_id(MDM物料) |
crm_contract |
合同主表 |
id, no, customer_id, business_id, audit_status |
crm_contract_product |
合同明细 |
contract_id, item_id(MDM物料) |
5.2 ERP 表
| 表名 |
说明 |
关键字段 |
erp_sale_order |
销售订单 |
id, no, customer_id(CRM), contract_id |
erp_sale_order_items |
订单明细 |
order_id, item_id(MDM物料) |
erp_sale_out |
销售出库 |
id, order_id, customer_id |
erp_finance_receipt |
收款单 |
id, customer_id(CRM) |
六、API 调用关系
6.1 CRM 调用 MDM
CrmSaleQuotationServiceImpl
└─► MdmItemApi.validateItemExists(itemId) // 校验物料存在
└─► MdmItemApi.getItemMap(itemIds) // 批量获取物料信息
CrmContractServiceImpl
└─► MdmItemApi.validateItemExists(itemId) // 校验物料存在
└─► MdmItemApi.getItemMap(itemIds) // 批量获取物料信息
6.2 ERP 调用 CRM
ErpSaleOrderServiceImpl
└─► CrmCustomerApi.getCustomer(customerId) // 获取CRM客户
└─► CrmCustomerApi.validateCustomer(customerId) // 校验客户存在
ErpFinanceReceiptServiceImpl
└─► CrmCustomerApi.getCustomer(customerId) // 获取CRM客户
6.3 CRM 调用 BPM
CrmSaleQuotationServiceImpl
└─► BpmProcessInstanceApi.createProcessInstance() // 创建审批流程实例
└─► BpmCategoryService.getCategoryMap() // 获取审批分类
└─► BpmProcessDefinitionService.getProcessDefinitionInfoListByCategory() // 获取流程定义
CrmContractServiceImpl
└─► BpmProcessInstanceApi.createProcessInstance() // 创建审批流程实例
七、状态枚举对照
7.1 销售报价状态 (CrmSaleQuotationStatusEnum)
| 值 |
枚举 |
说明 |
| 0 |
DRAFT |
草稿 |
| 10 |
PROCESS |
审批中 |
| 20 |
APPROVE |
已通过 |
| 30 |
REJECT |
已拒绝 |
| 40 |
CANCEL |
已取消 |
| 50 |
CONVERTED |
已转合同 |
7.2 合同审批状态 (CrmAuditStatusEnum)
| 值 |
枚举 |
说明 |
| 0 |
DRAFT |
未提交 |
| 10 |
PROCESS |
审批中 |
| 20 |
APPROVE |
审核通过 |
| 30 |
REJECT |
审核不通过 |
| 40 |
CANCEL |
已取消 |
7.3 BPM 任务状态 (BpmTaskStatusEnum)
| 值 |
枚举 |
说明 |
| 2 |
APPROVE |
审批通过 |
| 3 |
REJECT |
审批不通过 |
| 4 |
CANCEL |
已取消 |
状态映射:BPM状态 → 业务状态
- 2(APPROVE) → 20(已通过)
- 3(REJECT) → 30(已拒绝)
- 4(CANCEL) → 40(已取消)
八、操作权限说明
8.1 销售报价操作权限
| 状态 |
编辑 |
删除 |
提交审批 |
转合同 |
| 草稿(0) |
✅ |
✅ |
✅ |
❌ |
| 审批中(10) |
❌ |
❌ |
❌ |
❌ |
| 已通过(20) |
❌ |
❌ |
❌ |
✅ |
| 已拒绝(30) |
✅ |
❌ |
✅ |
❌ |
| 已转合同(50) |
❌ |
❌ |
❌ |
❌ |
8.2 合同操作权限
| 状态 |
编辑 |
删除 |
提交审批 |
生成订单 |
| 未提交(0) |
✅ |
✅ |
✅ |
❌ |
| 审批中(10) |
✅ |
❌ |
❌ |
❌ |
| 已通过(20) |
❌ |
❌ |
❌ |
✅ |
| 已拒绝(30) |
✅ |
❌ |
✅ |
❌ |
九、完整业务链条示例
示例:一个客户从线索到回款的完整流程
1. 【线索阶段】
- 销售人员录入线索 → 线索状态:待跟进
- 线索转化为客户 → 客户创建成功
2. 【客户跟进】
- 创建跟进记录 → 记录沟通内容
- 创建商机 → 商机金额:100,000元
- 商机状态推进 → 赢单
3. 【报价阶段】(新增)
- 创建销售报价单 → 报价金额:95,000元
- 选择MDM物料 → 物料A、物料B
- 提交审批 → 选择审批流程
- 审批通过 → 状态:已通过
4. 【合同阶段】
- 报价单转合同 → 合同自动创建
- 合同审批 → BPM审批流程
- 审批通过 → 状态:审核通过
5. 【订单阶段】
- 合同生成销售订单 → ERP订单创建
- 订单关联合同 → 合同编号记录
- 订单审批 → ERP审批流程
- 审批通过 → 可执行出库
6. 【出库阶段】
- 创建销售出库单 → 选择仓库
- 出库审核 → 出库完成
- 出库数量回写订单
7. 【收款阶段】
- 创建收款单 → 关联订单
- 收款金额:50,000元
- 收款核销 → 订单收款累计
8. 【追溯查询】
- 查询销售流程追溯 → 显示完整链条
- 商机 → 报价 → 合同 → 订单 → 出库 → 收款
十、数据迁移注意事项
10.1 合同产品表变更
原表使用 CRM 产品,现改为 MDM 物料:
-- 新增字段
ALTER TABLE crm_contract_product
ADD COLUMN item_id bigint COMMENT 'MDM物料编号',
ADD COLUMN item_unit_id bigint COMMENT '计量单位编号',
ADD COLUMN item_price decimal(24,6) COMMENT '物料原价';
-- 数据迁移(如果有映射关系)
-- UPDATE crm_contract_product SET item_id = product_id;
10.2 BPM 分类创建
需要在 BPM 管理后台创建审批分类:
INSERT INTO bpm_category (name, code, description, status, sort)
VALUES ('销售报价审批', 'sale_quotation_approve', '销售报价单审批流程分类', 0, 0);
十一、总结
统一数据源
| 数据类型 |
统一来源 |
使用模块 |
| 客户 |
CRM (crm_customer) |
CRM、ERP销售全流程 |
| 物料 |
MDM (mdm_item) |
销售报价、合同、ERP订单 |
核心流程
客户(CRM) → 商机(CRM) → 报价(CRM+BPM) → 合同(CRM+BPM) → 订单(ERP) → 出库(ERP) → 收款(ERP)
关键改进
- 数据统一:客户和物料数据不再分散,统一管理
- 流程衔接:报价 → 合同 → 订单,数据无缝流转
- BPM集成:报价和合同都支持审批流程
- 追溯完整:从商机到回款全链条可追溯