# CRM线索中心模块开发完成总结 ## 开发日期 2026-05-19 ## 项目信息 - **服务归属**: hzhub-system (端口 8083) - **包路径**: org.hzhub.crm - **技术栈**: Spring Boot 3.5.8 + MyBatis-Plus + Sa-Token --- ## 一、创建的文件列表 ### 1. 数据库设计 - `/data/hzhub/hzhub-system/src/main/resources/db/crm_lead_init.sql` - 数据字典定义(5个字典类型) - crm_lead 表(线索表) - crm_lead_follow 表(跟进记录表) ### 2. Entity 实体类 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/domain/CrmLead.java` - 继承 TenantEntity - 包含 customerCode 字段(ERP客户编码) - 使用 @TableLogic 逻辑删除 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/domain/CrmLeadFollow.java` - 继承 TenantEntity ### 3. Bo 业务对象 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/domain/bo/CrmLeadBo.java` - 继承 BaseEntity - 使用 @AutoMapper 注解 - 包含 customerCode 字段 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/domain/bo/CrmLeadFollowBo.java` ### 4. Vo 视图对象 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/domain/vo/CrmLeadVo.java` - 使用 @Translation 字段翻译 - mobile 字段使用 @Sensitive 脱敏 - 包含 customerCode 字段 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/domain/vo/CrmLeadFollowVo.java` ### 5. Mapper 接口 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/mapper/CrmLeadMapper.java` - 继承 BaseMapperPlus - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/mapper/CrmLeadFollowMapper.java` ### 6. Mapper XML 映射文件 - `/data/hzhub/hzhub-system/src/main/resources/mapper/crm/CrmLeadMapper.xml` - `/data/hzhub/hzhub-system/src/main/resources/mapper/crm/CrmLeadFollowMapper.xml` ### 7. Service 接口与实现 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/service/ICrmLeadService.java` - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/service/ICrmLeadFollowService.java` - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/service/impl/CrmLeadServiceImpl.java` - 实现列表查询、详情、新增、编辑、删除、分配、跟进记录查询、添加跟进 - **关键逻辑**: 如果提供 customerCode,调用 ERP 服务拉取客户信息 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/service/impl/CrmLeadFollowServiceImpl.java` ### 8. ERP 集成类 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/service/ErpIntegrationService.java` - 封装对 hzhub-erp 的调用 - 使用 RestTemplate 调用 http://localhost:8082/erp/dynamic/v1/customer/detail ### 9. Controller 控制器 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/controller/CrmLeadController.java` - 遵循 API 契约接口定义 - 无 @SaCheckPermission 注解(员工门户权限由 Gateway 控制) - 使用 @Log、@RepeatSubmit 注解 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/crm/controller/CrmLeadFollowController.java` ### 10. 配置类 - `/data/hzhub/hzhub-system/src/main/java/org/hzhub/system/config/RestTemplateConfig.java` - 配置 RestTemplate Bean - `/data/hzhub/hzhub-system/src/main/resources/application.yml` - 添加 ERP 配置: erp.base-url --- ## 二、数据库表结构摘要 ### crm_lead(线索表) 主要字段: - **lead_id**: 主键(ASSIGN_ID) - **customer_code**: ERP客户编码(varchar(100),可选) - **company_name**: 公司名称(必填) - **contact_name**: 联系人(必填) - **mobile**: 手机号(必填) - **region_id**: 区域ID(关联 sys_dept) - **source_type**: 来源类型(字典:crm_lead_source) - **intent_level**: AI意向等级(字典:crm_intent_level) - **ai_score**: AI评分(decimal(5,2)) - **risk_level**: 风险等级(字典:crm_risk_level) - **owner_user_id**: 负责人(关联 sys_user) - **lead_status**: 状态(字典:crm_lead_status) - **del_flag**: 删除标志(逻辑删除) 继承 TenantEntity 字段: - tenant_id, create_dept, create_by, create_time, update_by, update_time 索引: - idx_tenant_id, idx_customer_code, idx_mobile, idx_owner_user_id, idx_lead_status, idx_create_time ### crm_lead_follow(跟进记录表) 主要字段: - **follow_id**: 主键 - **lead_id**: 线索ID(必填) - **follow_type**: 跟进方式(字典:crm_follow_type) - **content**: 跟进内容(必填) - **ai_summary**: AI摘要 - **next_follow_time**: 下次跟进时间 - **follow_user_id**: 跟进人(关联 sys_user) - **del_flag**: 删除标志 --- ## 三、主要实现的接口功能 ### 1. 线索列表查询 (GET /crm/lead/list) - 支持多条件筛选:公司名称模糊、手机号、意向等级、负责人、customerCode等 - 使用 TableDataInfo 分页返回 - mobile 字段自动脱敏 - 字典字段自动翻译 ### 2. 线索详情查询 (GET /crm/lead/{leadId}) - 返回线索详细信息 - 字段自动翻译(负责人姓名、区域名称、字典值等) ### 3. 新增线索 (POST /crm/lead) - **关键逻辑**: 如果提供 customerCode,自动从 ERP 拉取客户信息填充 - 校验手机号唯一性 - 使用 @RepeatSubmit 防重复提交 - 记录操作日志 ### 4. 编辑线索 (PUT /crm/lead) - 校验线索存在性 - 校验手机号唯一性 - 记录操作日志 ### 5. 删除线索 (DELETE /crm/lead/{leadIds}) - 支持批量删除(逻辑删除) - 记录操作日志 ### 6. 分配线索 (PUT /crm/lead/assign) - 更新 owner_user_id - 自动更新状态为 "following" ### 7. 获取跟进记录列表 (GET /crm/lead/follow/{leadId}) - 根据线索ID查询跟进记录 - 按创建时间倒序 ### 8. 添加跟进记录 (POST /crm/lead/follow) - 自动设置跟进人为当前用户 - 如果提供下次跟进时间,更新线索的 nextFollowTime - 记录操作日志 --- ## 四、ERP集成的实现方式 ### 实现方式 使用 `RestTemplate` 调用 hzhub-erp 服务 ### 配置 - **配置项**: `erp.base-url` (默认: http://localhost:8082) - **配置类**: `RestTemplateConfig` (提供 RestTemplate Bean) ### 调用逻辑 ```java // CrmLeadServiceImpl.insertLead() 方法 if (StringUtils.isNotBlank(lead.getCustomerCode())) { // 调用 ERP 服务拉取客户详情 Map customerDetail = erpIntegrationService .getCustomerDetail(lead.getCustomerCode()); // 自动填充线索基础信息 if (customerDetail != null) { lead.setCompanyName((String) customerDetail.get("customerName")); lead.setContactName((String) customerDetail.get("contactName")); lead.setMobile((String) customerDetail.get("phone")); // ... 其他字段 } } ``` ### ERP接口 - `GET /erp/dynamic/v1/customer/detail?customerCode={code}` - 返回客户信息(Map形式) --- ## 五、需要注意的配置项 ### 1. 数据字典类型(需在数据库初始化) - **crm_lead_source**: 线索来源(activity/referral/website/exhibition/wecom/erp/other) - **crm_lead_status**: 线索状态(new/following/converted/invalid) - **crm_intent_level**: AI意向等级(high/medium/low) - **crm_risk_level**: 风险等级(high/medium/low) - **crm_follow_type**: 跟进方式(phone/wecom/visit/email/other) ### 2. ERP配置(application.yml) ```yaml erp: base-url: ${ERP_BASE_URL:http://localhost:8082} ``` 可通过环境变量 `ERP_BASE_URL` 配置 ERP 服务地址。 ### 3. SQL初始化顺序 执行 `/data/hzhub/hzhub-system/src/main/resources/db/crm_lead_init.sql`: 1. 先创建数据字典(sys_dict_type, sys_dict_data) 2. 再创建业务表(crm_lead, crm_lead_follow) ### 4. Gateway路由配置 需在 `hzhub-gateway/src/main/resources/application.yml` 中添加: ```yaml spring: cloud: gateway: routes: - id: hzhub-crm uri: lb://hzhub-system predicates: - Path=/crm/** filters: - StripPrefix=1 ``` --- ## 六、后续待实现功能(第二阶段) ### 1. AI意向分析 - 调用 hzhub-ai 服务(`/ai/analyze/intent`) - 自动生成 aiScore、intentLevel ### 2. AI跟进摘要生成 - 调用 hzhub-ai 服务(`/ai/summarize`) - 自动生成 aiSummary ### 3. 线索转经销商 (POST /crm/lead/convert) - 创建 crm_dealer 数据 - 迁移历史跟进记录 - 更新线索状态为 "converted" --- ## 七、关键特性总结 1. **多租户支持**: 所有实体类继承 TenantEntity,自动租户隔离 2. **ERP关联**: customerCode 字段关联 ERP 客户,自动拉取信息 3. **字段翻译**: 使用 @Translation 注解自动翻译字典值、用户名、部门名 4. **敏感字段脱敏**: mobile 字段列表查询时自动脱敏 5. **逻辑删除**: 使用 @TableLogic,删除时不物理删除 6. **员工门户适配**: 无 Sa-Token 权限注解,权限由 Gateway 控制 7. **防重复提交**: 新增操作使用 @RepeatSubmit 8. **操作日志**: 新增、编辑、删除使用 @Log 记录 --- ## 开发完成 所有代码已创建完毕,可进行编译测试。