# CRM 与 ERP 销售一体化改造计划 ## 一、现状分析 ### 1.1 当前问题 | 问题 | 说明 | |------|------| | **客户数据独立** | CRM 客户 (`crm_customer`) 和 ERP 客户 (`erp_customer`) 是两张完全独立的表,无法共享 | | **产品数据独立** | CRM 产品 (`crm_product`) 和 ERP 产品 (`erp_product`) 独立维护 | | **合同与订单脱节** | CRM 合同审批通过后无法自动生成 ERP 销售订单 | | **回款数据独立** | CRM 回款 (`crm_receivable`) 和 ERP 收款单 (`erp_finance_receipt`) 无关联 | | **销售流程断裂** | 线索 → 客户 → 商机 → 合同 → 订单 → 出库 → 收款,流程在合同和订单之间断裂 | ### 1.2 改造目标 根据需求描述,改造目标为: 1. **统一客户管理** - CRM 客户作为统一客户主数据,ERP 使用 CRM 客户 2. **统一产品管理** - ERP 产品作为产品主数据,CRM 使用 ERP 产品 3. **销售流程打通** - 合同审批通过后可生成销售订单,实现全流程追溯 4. **销售数据联动** - 销售订单状态实时同步,支持销售决策分析 5. **营销数据报表** - 整合 CRM 和 ERP 数据,提供完整的销售分析报表 --- ## 二、分批改造计划 ### Phase 1: 客户数据统一(预计 2 天) **目标**: 统一客户主数据,ERP 销售模块使用 CRM 客户 **改造内容**: | 序号 | 改造项 | 说明 | |------|--------|------| | 1.1 | 创建 CRM 客户 API 模块 | 暴露客户查询接口供 ERP 调用 | | 1.2 | ERP 销售订单关联 CRM 客户 | `erp_sale_order.customer_id` 改为关联 `crm_customer.id` | | 1.3 | ERP 销售出库关联 CRM 客户 | `erp_sale_out.customer_id` 改为关联 `crm_customer.id` | | 1.4 | ERP 销售退货关联 CRM 客户 | `erp_sale_return.customer_id` 改为关联 `crm_customer.id` | | 1.5 | ERP 收款单关联 CRM 客户 | `erp_finance_receipt.customer_id` 改为关联 `crm_customer.id` | | 1.6 | 废弃 ERP 客户表 | 标记废弃,保留数据迁移接口 | **涉及文件**: - 新增: `yudao-module-crm-api/` 模块 - 修改: `ErpSaleOrderDO.java`, `ErpSaleOutDO.java`, `ErpSaleReturnDO.java` - 修改: `ErpSaleOrderServiceImpl.java`, `ErpSaleOutServiceImpl.java`, `ErpSaleReturnServiceImpl.java` --- ### Phase 2: 产品数据统一(预计 1 天) **目标**: 统一产品主数据,CRM 使用 ERP 产品 **改造内容**: | 序号 | 改造项 | 说明 | |------|--------|------| | 2.1 | 创建 ERP 产品 API 模块 | 暴露产品查询接口供 CRM 调用 | | 2.2 | CRM 商机产品关联 ERP 产品 | `crm_business_product.product_id` 改为关联 `erp_product.id` | | 2.3 | CRM 合同产品关联 ERP 产品 | `crm_contract_product.product_id` 改为关联 `erp_product.id` | | 2.4 | 废弃 CRM 产品表 | 标记废弃,保留数据迁移接口 | **涉及文件**: - 新增: `yudao-module-erp-api/` 模块(如果不存在) - 修改: `CrmBusinessProductDO.java`, `CrmContractProductDO.java` - 修改: CRM 商机/合同 Service 层 --- ### Phase 3: 合同生成销售订单(预计 2 天) **目标**: CRM 合同审批通过后可生成 ERP 销售订单 **改造内容**: | 序号 | 改造项 | 说明 | |------|--------|------| | 3.1 | ERP 销售订单增加关联合同字段 | 新增 `contract_id`, `contract_no` 字段 | | 3.2 | CRM 合同增加订单关联字段 | 新增 `order_id`, `order_no` 字段 | | 3.3 | 合同生成订单接口 | 合同审批通过后,调用 ERP 服务生成销售订单 | | 3.4 | 合同状态监听器 | 监听合同审批通过事件,自动/手动触发订单生成 | **涉及文件**: - 修改: `ErpSaleOrderDO.java`, `CrmContractDO.java` - 新增: `CrmContractToOrderService.java` - 修改: `CrmContractStatusListener.java` --- ### Phase 4: 销售全流程追溯(预计 1 天) **目标**: 实现从线索到收款的完整销售流程追溯 **改造内容**: | 序号 | 改造项 | 说明 | |------|--------|------| | 4.1 | 商机关联销售订单 | `crm_business` 增加订单关联,支持商机直接下单 | | 4.2 | 销售订单状态回写 | 出库/退货/收款状态实时回写到订单和关联合同 | | 4.3 | 全流程查询接口 | 提供按客户/商机/合同查询完整销售链路的接口 | **涉及文件**: - 修改: `CrmBusinessDO.java` - 新增: `CrmSaleTraceService.java` --- ### Phase 5: 营销数据报表(预计 2 天) **目标**: 整合 CRM 和 ERP 数据,提供销售决策报表 **改造内容**: | 序号 | 改造项 | 说明 | |------|--------|------| | 5.1 | 销售漏斗分析增强 | 整合 ERP 订单数据,展示从商机到订单的转化率 | | 5.2 | 客户销售分析 | 按客户统计:商机金额、合同金额、订单金额、出库金额、收款金额 | | 5.3 | 销售业绩分析 | 整合 CRM 商机/合同和 ERP 订单/收款,计算销售业绩 | | 5.4 | 销售趋势分析 | 按时间维度分析销售趋势 | | 5.5 | 销售排行榜 | 综合排名:商机、合同、订单、收款 | **涉及文件**: - 修改: CRM 统计相关 Service - 新增: `CrmErpSalesStatisticsService.java` --- ### Phase 6: 数据迁移与清理(预计 1 天) **目标**: 将现有数据迁移到统一结构 **改造内容**: | 序号 | 改造项 | 说明 | |------|--------|------| | 6.1 | ERP 客户迁移到 CRM | 数据迁移 SQL 脚本 | | 6.2 | CRM 产品迁移到 ERP | 数据迁移 SQL 脚本 | | 6.3 | 数据校验脚本 | 验证迁移后数据完整性 | --- ## 三、改造优先级建议 | 优先级 | Phase | 说明 | |--------|-------|------| | P0 | Phase 1 | 客户统一是基础,必须最先完成 | | P0 | Phase 2 | 产品统一是基础,必须最先完成 | | P1 | Phase 3 | 合同生成订单是核心业务流程 | | P1 | Phase 4 | 全流程追溯是合规要求 | | P2 | Phase 5 | 报表分析可后续完善 | | P2 | Phase 6 | 数据迁移可在系统稳定后进行 | --- ## 四、技术方案要点 ### 4.1 跨模块调用方案 使用模块间 API 调用: - CRM 提供 `CrmCustomerApi` 供 ERP 调用 - ERP 提供 `ErpProductApi`、`ErpSaleOrderApi` 供 CRM 调用 ### 4.2 数据一致性方案 - 使用 Spring Event 进行模块间事件通知 - 关键操作使用事务保证一致性 - 增加数据同步状态字段,支持异常恢复 ### 4.3 权限控制方案 - CRM 客户沿用现有的团队权限机制 - ERP 模块通过 API 查询客户时,需校验数据权限 --- ## 五、风险与注意事项 | 风险 | 应对措施 | |------|----------| | 现有数据迁移复杂 | 提供迁移脚本和回滚脚本,分批迁移 | | 跨模块调用性能 | 使用缓存减少 API 调用,批量查询优化 | | 权限控制复杂 | 统一权限校验逻辑,复用 CRM 权限服务 | | 业务流程变更 | 充分测试,提供用户培训文档 | --- ## 六、交付物 每个 Phase 完成后交付: 1. **SQL 脚本** - 表结构变更、数据迁移 2. **前端文档** - 接口变更、页面修改说明 3. **测试用例** - 功能测试、回归测试