# 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 物料: ```sql -- 新增字段 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 管理后台创建审批分类: ```sql 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) ``` ### 关键改进 1. **数据统一**:客户和物料数据不再分散,统一管理 2. **流程衔接**:报价 → 合同 → 订单,数据无缝流转 3. **BPM集成**:报价和合同都支持审批流程 4. **追溯完整**:从商机到回款全链条可追溯