# CRM销售自动化(渠道版)执行级详细设计说明书 V2 # 1. 文档说明 ## 1.1 文档目标 本文档用于指导HZHub项目中CRM销售自动化(渠道版)系统的: - 数据库设计(适配 MySQL 8 + MyBatis-Plus) - 后端接口开发(适配 hzhub-system 服务) - 前端页面开发(适配 hzhub-admin Vben Admin) - AI能力集成(适配 LangChain4j + Weaviate) - 企业微信集成 - 自动化流程配置(适配 warm-flow) - 权限与组织体系建设(适配 Sa-Token) 本文档属于"开发执行版设计文档 V2",针对HZHub项目架构进行定制化适配。 --- ## 1.2 与 V1 版本的主要差异 | 方面 | V1 版本 | V2 版本(HZHub 适配) | |---|---|---| | 前端技术栈 | Vue3 + Element Plus | Vben Admin + Ant Design Vue | | 后端框架 | Java Spring Boot(通用) | Spring Boot 3.5.8 + MyBatis-Plus | | API路径 | `/api/**` | `/crm/**`(通过 Gateway 路由) | | 权限框架 | JWT(自定义) | Sa-Token(已集成) | | 工作流引擎 | Flowable | warm-flow 1.8.2(已集成) | | AI服务 | Python FastAPI | LangChain4j(Java) | | 向量数据库 | 未指定 | Weaviate 1.25.0(已部署) | | 搜索引擎 | Elasticsearch | 暂不集成(可选) | | 消息队列 | RabbitMQ | 暂不集成(可选) | | 文件存储 | MinIO | MinIO(已部署) | | 实体设计 | 通用字段规范 | TenantEntity(多租户) | --- # 2. 系统总体架构 ## 2.1 HZHub 集成架构 ### 服务归属 CRM模块归属于 **hzhub-system** 服务(端口 8083),通过 Gateway 路由对外提供服务。 ``` ┌─────────────────────────────────────────┐ │ hzhub-admin (管理后台) │ │ Vue3 + Vben Admin + Ant Design Vue │ │ Port: 5666 │ └────────────┬────────────────────────────┘ │ ┌────────┴────────┐ │ hzhub-gateway │ (API Gateway, port 8080) │ Spring Cloud │ JWT auth, routing └───┬──────┬──────┘ │ │ ┌───▼──────────┐ │ hzhub-system │ CRM 模块归属服务 │ 8083 │ (Users, Roles, CRM) └─────────────┘ ``` ### Gateway 路由配置 在 `hzhub-gateway/src/main/resources/application.yml` 中添加 CRM 路由: ```yaml spring: cloud: gateway: routes: # CRM 路由(新增) - id: hzhub-crm uri: lb://hzhub-system predicates: - Path=/crm/** filters: - StripPrefix=1 # 去除 /crm 前缀 ``` **注意:** CRM 路由需要添加到现有路由列表中,位置在 `hzhub-system` 路由之后。 --- ## 2.2 技术栈适配 | 层级 | HZHub 技术栈 | 说明 | |---|---|---| | 前端Web | Vue3 + Vben Admin + Ant Design Vue | 已在 hzhub-admin 中部署 | | 移动端 | 企业微信H5 + UniApp | 集成企业微信侧边栏 | | 后端 | Spring Boot 3.5.8 + MyBatis-Plus | hzhub-system 服务 | | 数据库 | MySQL 8.0 | 已部署 | | 缓存 | Redis 7 | 已部署,用于缓存与限流 | | 向量数据库 | Weaviate 1.25.0 | 已部署,用于知识检索 | | AI服务 | LangChain4j + LangGraph4j | hzhub-ai 服务集成 | | 文件存储 | MinIO | 已部署,用于合同/录音文件存储 | | 工作流 | warm-flow 1.8.2 | 已集成在 hzhub-system | | 权限 | Sa-Token | 已集成,JWT-based | | BI | FineBI / Superset | 可选(暂不集成) | --- # 3. 数据库设计规范(HZHub 适配) ## 3.1 通用字段规范 所有CRM业务表继承 `TenantEntity`,包含以下字段: | 字段 | 类型 | 注解 | 说明 | |---|---|---|---| | tenant_id | varchar(20) | 无注解(继承) | 租户ID(多租户) | | create_dept | bigint | @TableField(fill = INSERT) | 创建部门 | | create_by | bigint | @TableField(fill = INSERT) | 创建人 | | create_time | datetime | @TableField(fill = INSERT) | 创建时间 | | update_by | bigint | @TableField(fill = INSERT_UPDATE) | 更新人 | | update_time | datetime | @TableField(fill = INSERT_UPDATE) | 更新时间 | **注意:** 不需要手动添加 `id` 字段,使用 MyBatis-Plus 的 `@TableId` 注解。 --- ## 3.2 Entity 实体类规范 ### 基类继承 ```java @Data @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @TableName("crm_lead") public class CrmLead extends TenantEntity { @TableId(value = "lead_id", type = IdType.ASSIGN_ID) private Long leadId; // 业务字段... /** * 删除标志(0代表存在 1代表删除) */ @TableLogic private Integer delFlag; } ``` ### Bo 业务对象 ```java @Data @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @AutoMapper(target = CrmLead.class) public class CrmLeadBo extends BaseEntity { private Long leadId; // 业务字段... } ``` ### Vo 视图对象 ```java @Data @AutoMapper(target = CrmLead.class) public class CrmLeadVo implements Serializable { @Serial private static final long serialVersionUID = 1L; private Long leadId; /** * 租户ID(翻译) */ @Translation(type = TransConstant.TENANT_ID_TO_NAME, mapper = "tenantId") private String tenantId; /** * 创建人(翻译) */ @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") private String createByName; // 业务字段... } ``` --- ## 3.3 Controller 接口规范 ```java @Validated @RequiredArgsConstructor @RestController @RequestMapping("/crm/lead") public class CrmLeadController extends BaseController { private final ICrmLeadService leadService; /** * 获取线索列表 */ @SaCheckPermission("crm:lead:list") @GetMapping("/list") public TableDataInfo list(CrmLeadBo lead, PageQuery pageQuery) { return leadService.selectPageLeadList(lead, pageQuery); } /** * 新增线索 */ @Log(title = "线索管理", businessType = BusinessType.INSERT) @SaCheckPermission("crm:lead:add") @RepeatSubmit() @PostMapping() public R add(@Validated @RequestBody CrmLeadBo lead) { return R.ok(leadService.insertLead(lead)); } } ``` --- # 4. 线索中心模块设计 ## 4.1 模块目标 用于管理潜在经销商,支持: - 多渠道线索接入 - AI意向识别(LangChain4j) - AI风险分析 - 自动分配销售 - 商机转化 --- ## 4.2 数据表设计 ### 4.2.1 crm_lead(线索表) | 字段 | 类型 | 注解 | 说明 | |---|---|---|---| | lead_id | bigint | @TableId(ASSIGN_ID) | 主键 | | company_name | varchar(200) | - | 公司名称 | | contact_name | varchar(100) | - | 联系人 | | mobile | varchar(50) | - | 手机号 | | wechat | varchar(100) | - | 微信号 | | province | varchar(50) | - | 省 | | city | varchar(50) | - | 市 | | region_id | bigint | - | 区域ID(关联 sys_dept) | | source_type | varchar(50) | - | 来源类型(字典:crm_lead_source) | | activity_name | varchar(100) | - | 活动名称 | | referrer_name | varchar(100) | - | 推荐人 | | industry | varchar(100) | - | 行业(字典:crm_industry) | | company_scale | varchar(100) | - | 公司规模(字典:crm_scale) | | store_count | int | - | 门店数 | | intent_level | varchar(20) | - | AI意向等级(字典:crm_intent_level) | | ai_score | decimal(5,2) | - | AI评分 | | risk_level | varchar(20) | - | 风险等级(字典:crm_risk_level) | | owner_user_id | bigint | - | 负责人(关联 sys_user) | | lead_status | varchar(50) | - | 状态(字典:crm_lead_status) | | converted_dealer_id | bigint | - | 转化经销商ID | | del_flag | int | @TableLogic | 删除标志 | **继承字段:** tenant_id, create_dept, create_by, create_time, update_by, update_time --- ### 4.2.2 crm_lead_follow(线索跟进记录) | 字段 | 类型 | 说明 | |---|---|---| | follow_id | bigint | 主键 | | lead_id | bigint | 线索ID | | follow_type | varchar(50) | 跟进方式(字典:crm_follow_type) | | content | text | 跟进内容 | | ai_summary | text | AI摘要 | | next_follow_time | datetime | 下次跟进时间 | | follow_user_id | bigint | 跟进人(关联 sys_user) | | del_flag | int | 删除标志 | --- ## 4.3 接口设计 ### 4.3.1 创建线索 **API:** `POST /crm/lead` **请求参数:** ```json { "companyName": "XX贸易有限公司", "contactName": "张三", "mobile": "13800000000", "wechat": "zhangsan", "province": "广东省", "city": "深圳市", "industry": "食品", "storeCount": 20 } ``` **业务逻辑:** 1. 校验手机号是否重复(同租户内) 2. 调用 LangChain4j AI服务分析意向等级(`hzhub-ai:6039/ai/analyze/intent`) 3. 自动生成AI评分 4. 根据区域规则(sys_dept)分配销售(owner_user_id) 5. 创建自动跟进任务(warm-flow) --- ### 4.3.2 线索转经销商 **API:** `POST /crm/lead/convert` **请求参数:** ```json { "leadId": 12345, "dealerName": "XX贸易", "dealerCode": "DL20260001" } ``` **逻辑:** 1. 创建 `crm_dealer` 数据 2. 迁移历史跟进记录到 `crm_dealer_follow` 3. 创建初始商机(`crm_opportunity`) 4. 更新线索状态为"已转化" 5. 触发 warm-flow 工作流(经销商审批) --- ## 4.4 前端页面设计(Vben Admin) ### 4.4.1 线索列表页 **路径:** `apps/web-antd/src/views/crm/lead/index.vue` **页面布局:** ```text ------------------------------------------------- 顶部:搜索栏 + 高级筛选(Ant Design Form) ------------------------------------------------- 左侧:区域树(Ant Design Tree) 右侧:线索列表(Ant Design Table) ------------------------------------------------- 底部:分页(Ant Design Pagination) ``` **筛选项:** - 区域(区域树选择) - 来源(字典下拉:crm_lead_source) - AI意向等级(字典下拉:crm_intent_level) - 风险等级(字典下拉:crm_risk_level) - 销售负责人(用户选择器) - 创建时间(日期范围) **表格字段:** | 字段 | Ant Design 组件 | |---|---| | 公司名称 | Tag(高意向标红) | | 联系人 | - | | 手机 | 脱敏展示 | | 区域 | 翻译展示 | | AI评分 | Progress(进度条) | | 意向等级 | Badge(高/中/低) | | 风险等级 | Tag(高风险标红) | | 当前负责人 | Avatar(头像) | | 跟进状态 | Badge | | 下次跟进时间 | DatePicker | **操作按钮:** - 查看(Drawer 侧边栏) - 分配(Modal 弹窗) - 跟进(Drawer) - 转经销商(Modal) - 作废(Popconfirm 确认) --- ### 4.4.2 AI分析侧边栏 右侧固定展示(Ant Design Drawer): ```text ┌────────────────────────┐ │ AI意向评分(Progress) │ │ AI风险提示(Alert) │ │ 推荐动作(Steps) │ │ 推荐销售话术(Collapse)│ │ 推荐拜访时间(DatePicker)│ └────────────────────────┘ ``` **AI服务调用:** 通过 Gateway 调用 `hzhub-ai:6039/ai/chat/analyze` --- # 5. 经销商中心模块设计 ## 5.1 数据表设计 ### 5.1.1 crm_dealer(经销商表) | 字段 | 类型 | 说明 | |---|---|---| | dealer_id | bigint | 主键 | | dealer_name | varchar(200) | 经销商名称 | | dealer_code | varchar(100) | 编码 | | contact_name | varchar(100) | 联系人 | | mobile | varchar(50) | 手机 | | province | varchar(50) | 省 | | city | varchar(50) | 市 | | level | varchar(50) | 等级(字典:crm_dealer_level) | | lifecycle | varchar(50) | 生命周期(字典:crm_lifecycle) | | signed_at | datetime | 签约时间 | | store_count | int | 门店数 | | team_size | int | 团队规模 | | total_order_amount | decimal(18,2) | 累计订单金额 | | total_payment_amount | decimal(18,2) | 累计回款金额 | | activity_score | decimal(5,2) | 活跃评分 | | risk_score | decimal(5,2) | 飆险评分 | | owner_user_id | bigint | 负责人(关联 sys_user) | | del_flag | int | 删除标志 | --- ### 5.1.2 crm_dealer_tag(经销商标签表) | 字段 | 类型 | 说明 | |---|---|---| | tag_id | bigint | 主键 | | dealer_id | bigint | 经销商ID | | tag_name | varchar(100) | 标签名称 | | tag_type | varchar(50) | 标签类型(字典:crm_tag_type) | | score | decimal(5,2) | 标签评分 | | del_flag | int | 删除标志 | --- ## 5.2 接口设计 ### 5.2.1 获取经销商画像 **API:** `GET /crm/dealer/{dealerId}/profile` **返回内容:** ```json { "code": 200, "data": { "dealerName": "XX贸易", "activityLevel": "高活跃", "riskLevel": "低风险", "growthTrend": "高增长", "lastVisitTime": "2026-05-10", "nextVisitTime": "2026-05-20", "aiRecommendActions": [ "建议本周拜访", "关注库存周转" ] } } ``` --- ## 5.3 前端页面设计 ### 5.3.1 经销商详情页 **路径:** `apps/web-antd/src/views/crm/dealer/detail.vue` **页面布局:** ```text 顶部:基础信息卡片(Ant Design Card) ------------------------------------------------- Tab页(Ant Design Tabs): 1. 基础档案(Descriptions) 2. 商机(Table + Kanban) 3. 拜访记录(Timeline) 4. 订单(Table) 5. 回款(Table) 6. AI画像(Progress + Chart) 7. 会话记录(Timeline) ------------------------------------------------- 右侧:AI经营分析面板(Affix 固定) ``` **AI经营分析面板:** 使用 Ant Design Charts 展示: - 活跃度趋势(LineChart) - 近90天订单趋势(AreaChart) - 流失风险(Gauge) - 推荐动作(Steps) - 竞品风险(Alert) --- # 6. 拜访管理模块设计 ## 6.1 数据表设计 ### 6.1.1 crm_visit_plan(拜访计划表) | 字段 | 类型 | 说明 | |---|---|---| | plan_id | bigint | 主键 | | dealer_id | bigint | 经销商ID | | visit_type | varchar(50) | 拜访类型(字典:crm_visit_type) | | planned_time | datetime | 计划时间 | | visit_user_id | bigint | 销售人员(关联 sys_user) | | status | varchar(50) | 状态(字典:crm_visit_plan_status) | | del_flag | int | 删除标志 | --- ### 6.1.2 crm_visit_record(拜访记录表) | 字段 | 类型 | 说明 | |---|---|---| | record_id | bigint | 主键 | | dealer_id | bigint | 经销商ID | | plan_id | bigint | 拜访计划ID | | visit_time | datetime | 拜访时间 | | participants | varchar(500) | 参与人员 | | voice_file_url | varchar(500) | 录音文件(MinIO) | | ai_summary | text | AI摘要 | | ai_requirements | text | AI提取需求 | | ai_risk | text | AI风险 | | next_action | text | 下一步动作 | | latitude | decimal(10,6) | 纬度 | | longitude | decimal(10,6) | 经度 | | sign_photo_url | varchar(500) | 签到照片(MinIO) | | del_flag | int | 删除标志 | --- ## 6.2 AI语音处理流程 ```text 语音上传(MinIO) -> 调用 hzhub-ai:6039/ai/voice/transcribe -> LangChain4j ASR识别 -> NLP结构化提取 -> AI摘要生成 -> 风险分析 -> 推荐下一步动作 -> 写入 CRM ``` **技术栈:** LangChain4j + OpenAI Whisper / 本地 ASR 模型 --- ## 6.3 移动端页面设计 ### 6.3.1 企业微信H5拜访页面 **路径:** `hzhub-portal-employee/src/pages/crm/visit.vue`(员工门户) **页面模块(Element Plus):** - 地图签到(腾讯地图) - 语音录入按钮(Recorder) - 拍照上传(Upload) - AI实时摘要(Card) - 下一步动作建议(Steps) **AI辅助区域:** 自动生成(调用 hzhub-ai): - 客户关注点(Tag) - 异议问题(Alert) - 竞品信息(Collapse) - 推荐招商话术(Collapse) --- # 7. 商机管理模块设计 ## 7.1 数据表设计 ### 7.1.1 crm_opportunity(商机表) | 字段 | 类型 | 说明 | |---|---|---| | opportunity_id | bigint | 主键 | | dealer_id | bigint | 经销商ID | | opportunity_name | varchar(200) | 商机名称 | | stage | varchar(50) | 商机阶段(字典:crm_opportunity_stage) | | estimated_amount | decimal(18,2) | 预计金额 | | success_rate | decimal(5,2) | 成交概率 | | expected_sign_date | date | 预计签约时间 | | owner_user_id | bigint | 销售负责人(关联 sys_user) | | ai_next_stage | varchar(50) | AI建议阶段 | | ai_probability | decimal(5,2) | AI成交预测 | | del_flag | int | 删除标志 | --- ### 7.1.2 crm_opportunity_stage_log(阶段日志表) | 字段 | 类型 | 说明 | |---|---|---| | log_id | bigint | 主键 | | opportunity_id | bigint | 商机ID | | old_stage | varchar(50) | 原阶段 | | new_stage | varchar(50) | 新阶段 | | change_reason | text | 变更原因 | | changed_by | bigint | 变更人(关联 sys_user) | | change_time | datetime | 变更时间 | --- ## 7.2 商机阶段规则 | 阶段(字典:crm_opportunity_stage) | 条件 | |---|---| | 初步接触 | 创建商机 | | 需求沟通 | 已记录需求 | | 招商政策沟通 | 已发送政策 | | 样品测试 | 已寄样 | | 商务谈判 | 已讨论返点 | | 签约中 | 已提交合同 | | 已签约 | 合同生效 | --- ## 7.3 AI自动推进逻辑 **规则示例:** ```text 如果AI识别(LangChain4j分析会话记录): - 已询价 - 已谈返点 - 已谈库存 则自动建议推进至"商务谈判"阶段。 ``` **实现方式:** 定时任务调用 `hzhub-ai:6039/ai/opportunity/predict` --- ## 7.4 前端页面设计 ### 7.4.1 商机看板页 **路径:** `apps/web-antd/src/views/crm/opportunity/kanban.vue` **视图模式(Ant Design Segmented):** - Kanban阶段看板 - 列表模式 - 销售漏斗模式 **看板列(Ant Design Card):** ```text 初步接触 需求沟通 招商政策沟通 样品测试 商务谈判 签约中 已签约 ``` **卡片展示:** - 经销商名称 - 金额(Statistic) - AI成交概率(Progress) - 最近跟进时间 - 风险提示(Tag) --- # 8. 合同管理模块设计 ## 8.1 数据表设计 ### 8.1.1 crm_contract(合同表) | 字段 | 类型 | 说明 | |---|---|---| | contract_id | bigint | 主键 | | contract_no | varchar(100) | 合同编号 | | dealer_id | bigint | 经销商ID | | opportunity_id | bigint | 商机ID | | contract_amount | decimal(18,2) | 合同金额 | | sign_date | date | 签约日期 | | expire_date | date | 到期日期 | | contract_status | varchar(50) | 状态(字典:crm_contract_status) | | approval_status | varchar(50) | 审批状态(字典:crm_approval_status) | | sign_file_url | varchar(500) | 合同文件(MinIO) | | ai_risk_summary | text | AI风险摘要 | | del_flag | int | 删除标志 | --- ## 8.2 AI合同分析 AI识别(LangChain4j): - 高风险条款 - 超标准返点 - 区域冲突 - 超长账期 **实现:** 调用 `hzhub-ai:6039/ai/contract/analyze` --- ## 8.3 审批流设计(warm-flow) ```text 销售提交 -> 区域经理审批(warm-flow节点) -> 财务审批 -> 法务审批 -> 总部审批 -> 电子签章(可选) ``` **实现:** 1. 在 `hzhub-system` 中定义 warm-flow 流程定义(`workflow_definition`) 2. 合同提交触发流程实例(`workflow_instance`) 3. 审批节点与 `sys_role` 关联 --- # 9. 订单管理模块设计 ## 9.1 数据表设计 ### 9.1.1 crm_order(订单表) | 字段 | 类型 | 说明 | |---|---|---| | order_id | bigint | 主键 | | order_no | varchar(100) | 订单编号 | | dealer_id | bigint | 经销商ID | | contract_id | bigint | 合同ID | | order_amount | decimal(18,2) | 订单金额 | | order_status | varchar(50) | 订单状态(字典:crm_order_status) | | shipment_status | varchar(50) | 发货状态(字典:crm_shipment_status) | | payment_status | varchar(50) | 回款状态(字典:crm_payment_status) | | logistics_status | varchar(50) | 物流状态(字典:crm_logistics_status) | | erp_sync_status | varchar(50) | ERP同步状态(字典:crm_erp_sync_status) | | del_flag | int | 删除标志 | --- ## 9.2 ERP同步逻辑 ### 同步内容 - 订单数据(从 `hzhub-erp:8082` 拉取) - 发货数据 - 库存数据 - 回款数据 - 物流数据 ### 同步方式 1. **定时拉取:** 使用 XXL-Job(hzhub-extend 中已集成)定时任务 2. **Webhook回调:** ERP 主动推送(可选) 3. **MQ异步同步:** 暂不集成(可选) **实现:** ```java @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点 public void syncErpOrders() { // 调用 hzhub-erp:8082/erp/order/sync // 使用 dynamic-datasource 切换到 erp 数据源 } ``` --- ## 9.3 前端页面设计 ### 9.3.1 订单中心 **路径:** `apps/web-antd/src/views/crm/order/index.vue` **页面布局:** ```text 顶部:订单筛选(Form) ------------------------------------------------- 中部:订单表格(Table) ------------------------------------------------- 右侧:订单风险分析(Affix) ``` **风险分析:** - 延迟发货风险(Alert) - 超账期风险(Alert) - 异常退货风险(Alert) --- # 10. 回款管理模块设计 ## 10.1 数据表设计 ### 10.1.1 crm_payment(回款表) | 字段 | 类型 | 说明 | |---|---|---| | payment_id | bigint | 主键 | | dealer_id | bigint | 经销商ID | | order_id | bigint | 订单ID | | payment_amount | decimal(18,2) | 回款金额 | | payment_date | date | 回款日期 | | receivable_due_date | date | 应收截止日 | | overdue_days | int | 超期天数 | | payment_status | varchar(50) | 状态(字典:crm_payment_status) | | del_flag | int | 删除标志 | --- ## 10.2 AI预警规则 | 条件 | 预警 | Redis 缓存键 | |---|---|---| | 超过30天未回款 | 高风险 | `crm:payment:risk:{dealer_id}` | | 连续2次延迟 | 中风险 | - | | 回款金额下降 | 流失风险 | - | **实现:** 定时任务扫描 `crm_payment` 表,更新 Redis 缓存,前端实时查询。 --- # 11. 企业微信协同模块设计 ## 11.1 集成能力 ### 企业微信侧边栏 **展示内容:** - 经销商画像(从 `crm_dealer` 查询) - 最近订单(从 `crm_order` 查询) - 最近拜访(从 `crm_visit_record` 查询) - 商机阶段(从 `crm_opportunity` 查询) - AI风险(Redis 缓存) **实现:** 1. 企业微信应用配置(应用ID、Secret) 2. 后端接口:`GET /crm/wecom/sidebar/{externalUserId}` 3. 前端嵌入企业微信侧边栏(H5页面) --- ### 会话存档同步 **同步内容:** - 文本 - 图片 - 文件 - 语音 **数据表:** `crm_wecom_chat_record` | 字段 | 类型 | 说明 | |---|---|---| | record_id | bigint | 主键 | | external_user_id | varchar(100) | 外部联系人 | | dealer_id | bigint | 经销商ID | | sender_id | bigint | 发送人(关联 sys_user) | | message_type | varchar(50) | 消息类型 | | message_content | text | 内容 | | send_time | datetime | 发送时间 | | ai_analysis_result | text | AI分析结果 | | del_flag | int | 删除标志 | --- ## 11.2 AI会话分析 **识别内容:** - 采购意向 - 价格异议 - 投诉风险 - 竞品信息 **实现:** 调用 `hzhub-ai:6039/ai/chat/analyze` --- # 12. AI分析中心设计 ## 12.1 AI标签体系 | 标签类型(字典:crm_tag_type) | 示例 | |---|---| | 活跃标签 | 高频沟通 | | 风险标签 | 流失风险 | | 经营标签 | 高增长 | | 敏感标签 | 价格敏感 | --- ## 12.2 AI预测模型 | 模型 | 输入 | 调用服务 | |---|---|---| | 成交预测 | 商机数据 | `hzhub-ai:6039/ai/opportunity/predict` | | 回款预测 | 订单与历史回款 | `hzhub-ai:6039/ai/payment/predict` | | 流失预测 | 活跃度与订单 | `hzhub-ai:6039/ai/churn/predict` | | 补货预测 | 销量趋势 | `hzhub-ai:6039/ai/replenish/predict` | **向量检索:** 使用 Weaviate 存储历史案例,LangChain4j 进行相似度检索。 --- # 13. 自动化工作流设计 ## 13.1 自动提醒规则 | 规则 | 动作 | 实现方式 | |---|---|---| | 7天未跟进 | 创建跟进提醒 | XXL-Job 定时任务 + Redis 缓存 | | 30天未下单 | 创建经营风险提醒 | - | | 合同即将到期 | 通知销售与经理 | - | | 回款超期 | 通知财务与销售 | - | --- ## 13.2 自动任务规则 | 条件 | 自动任务 | warm-flow 流程 | |---|---|---| | 高意向线索 | 自动创建拜访 | `crm_auto_visit_flow` | | 商机推进 | 自动创建回访 | `crm_auto_follow_flow` | | 合同签约 | 自动创建首单跟进 | `crm_auto_order_flow` | --- # 14. BI分析设计(可选) ## 14.1 BI指标体系 ### 销售指标 - 销售额 - 回款率 - 转化率 - 客单价 - 区域增长率 ### AI经营指标 - 高风险经销商数 - 高潜经销商数 - AI成交预测准确率 - AI流失预测准确率 --- ## 14.2 仪表盘设计(Ant Design Charts) ### 总部仪表盘 **路径:** `apps/web-antd/src/views/crm/dashboard/index.vue` **展示内容:** - 全国销售地图(ChinaMap) - 区域排名(BarChart) - 经销商增长趋势(LineChart) - AI风险预警(Alert) - 商机漏斗(FunnelChart) --- ### 销售个人仪表盘 **展示内容:** - 今日待跟进(Statistic) - 今日拜访(Statistic) - 本月成交(Statistic) - AI推荐客户(List) - AI销售建议(Collapse) --- # 15. 权限与组织设计(Sa-Token) ## 15.1 RBAC模型 ### 数据权限层级 ```text 总部(sys_dept: root) -> 大区(sys_dept: level 1) -> 区域(sys_dept: level 2) -> 城市(sys_dept: level 3) -> 销售(sys_user) ``` **实现:** 使用 `sys_dept` 表的树形结构,通过 `DataPermissionHelper` 实现数据隔离。 --- ## 15.2 权限控制点 | 模块 | 权限标识 | Sa-Token 注解 | |---|---|---| | 线索 | crm:lead:list, crm:lead:add, crm:lead:edit, crm:lead:remove | @SaCheckPermission | | 经销商 | crm:dealer:list, crm:dealer:edit | - | | 合同 | crm:contract:approve, crm:contract:amount-edit | - | | 回款 | crm:payment:list, crm:payment:verify | - | | BI | crm:bi:view(区域数据隔离) | - | **菜单配置:** 在 `sys_menu` 表中添加 CRM 模块菜单树。 --- # 16. 移动端设计 ## 16.1 企业微信H5页面 **归属项目:** `hzhub-portal-employee`(员工门户,Element Plus) **必须支持:** - 快速拜访 - AI语音录入 - 地图签到(腾讯地图) - 拍照上传(MinIO) - 快速订单查询 - AI风险提醒 --- ## 16.2 移动端交互要求 | 要求 | 说明 | 技术实现 | |---|---|---| | 单手操作 | 核心按钮底部固定 | Element Plus Affix | | 弱网容错 | 本地缓存 | IndexedDB / LocalStorage | | 快速录入 | 支持语音 | Recorder + LangChain4j ASR | | 离线能力 | 支持草稿 | IndexedDB | --- # 17. 性能与安全设计 ## 17.1 性能目标 | 指标 | 目标 | 实现方式 | |---|---|---| | 页面响应 | <2秒 | Redis 缓存 + 分页查询 | | AI分析响应 | <5秒 | LangChain4j 异步调用 | | ERP同步延迟 | <1分钟 | XXL-Job 定时任务 | | 并发支持 | 5000用户 | Gateway 限流 + Redis 缓存 | --- ## 17.2 安全设计(HZHub 已有) ### 安全要求 - HTTPS加密(Gateway 配置) - Sa-Token JWT鉴权(已集成) - 数据权限隔离(TenantEntity + DataPermissionHelper) - 敏感字段脱敏(@Sensitive 注解) - 操作日志审计(@Log 注解) - 企业微信身份校验(wecom_userid) --- # 18. AI能力优先级实施建议 ## P0(第一阶段必须上线) - 企业微信集成(侧边栏) - 客户画像(基础字段) - AI语音拜访(LangChain4j ASR) - 会话分析(LangChain4j NLP) - 订单查询(ERP同步) --- ## P1(第二阶段) - AI标签(LangChain4j + Weaviate) - AI摘要(LangChain4j) - AI意向识别 - 自动提醒(XXL-Job) --- ## P2(第三阶段) - AI Copilot(LangGraph4j) - AI销售建议 - AI预测模型 - AI自动推进商机 --- # 19. 项目实施计划 ## 第一阶段(1-2个月) **建设内容:** - 基础CRM(线索、经销商、商机) - 企业微信侧边栏集成 - 拜访管理(移动端) - warm-flow 审批流程 - 订单查询(ERP同步) **技术栈:** - 后端:Spring Boot + MyBatis-Plus + Sa-Token - 前端:Vben Admin + Ant Design Vue - 移动端:Element Plus + 企业微信H5 - 工作流:warm-flow --- ## 第二阶段(2-3个月) **建设内容:** - AI标签体系(Weaviate) - AI会话分析(LangChain4j) - AI语音拜访(ASR + NLP) - 自动化工作流(XXL-Job) - 合同管理 **技术栈:** - AI:LangChain4j + hzhub-ai 服务 - 向量:Weaviate - 定时任务:XXL-Job --- ## 第三阶段(3-4个月) **建设内容:** - AI预测模型(成交预测、流失预测) - AI Copilot(LangGraph4j) - AI经营分析面板 - 智能决策支持 - BI仪表盘 **技术栈:** - AI:LangGraph4j + hzhub-ai 服务 - 图表:Ant Design Charts --- # 20. 数据字典定义 ## 20.1 线索相关字典 ### crm_lead_source(线索来源) | 字典值 | 字典标签 | |---|---| | activity | 活动 | | referral | 推荐 | | website | 网站 | | exhibition | 展会 | ### crm_lead_status(线索状态) | 字典值 | 字典标签 | |---|---| | new | 新线索 | | following | 跟进中 | | converted | 已转化 | | invalid | 已作废 | ### crm_intent_level(AI意向等级) | 字典值 | 字典标签 | |---|---| | high | 高意向 | | medium | 中意向 | | low | 低意向 | --- ## 20.2 经销商相关字典 ### crm_dealer_level(经销商等级) | 字典值 | 字典标签 | |---|---| | A | A级经销商 | | B | B级经销商 | | C | C级经销商 | ### crm_lifecycle(生命周期) | 字典值 | 字典标签 | |---|---| | active | 活跃期 | | stable | 稳定期 | | decline | 衰退期 | | churn | 流失期 | --- ## 20.3 商机相关字典 ### crm_opportunity_stage(商机阶段) | 字典值 | 字典标签 | |---|---| | initial_contact | 初步接触 | | requirement | 需求沟通 | | policy | 招商政策沟通 | | sample | 样品测试 | | negotiation | 商务谈判 | | signing | 签约中 | | signed | 已签约 | --- ## 20.4 审批状态字典 ### crm_approval_status(审批状态) | 字典值 | 字典标签 | |---|---| | pending | 待审批 | | approved | 已审批 | | rejected | 已拒绝 | --- # 21. 最终产品定位 系统最终定位: # "AI驱动的渠道销售经营平台" 区别于传统CRM: 传统CRM:记录客户 本系统: - AI驱动增长(LangChain4j + Weaviate) - AI驱动招商(意向识别 + 风险分析) - AI驱动销售动作(语音拜访 + 会话分析) - AI驱动经营分析(预测模型 + Copilot) - AI驱动渠道运营(自动化工作流) --- # 22. 与 HZHub 项目的集成要点 ## 22.1 Gateway 路由配置 **位置:** `hzhub-gateway/src/main/resources/application.yml` ```yaml spring: cloud: gateway: routes: # CRM 路由(添加到现有路由列表) - id: hzhub-crm uri: lb://hzhub-system predicates: - Path=/crm/** filters: - StripPrefix=1 ``` --- ## 22.2 hzhub-system 依赖 **位置:** `hzhub-system/pom.xml` ```xml org.hzhub hzhub-common-core org.hzhub hzhub-common-chat ${project.version} ``` --- ## 22.3 前端路由配置 **位置:** `hzhub-admin/apps/web-antd/src/router/routes/modules/crm.ts` ```typescript export default { path: '/crm', name: 'CRM', component: Layout, redirect: '/crm/dashboard', meta: { title: 'CRM管理', icon: 'ant-design:team-outlined', }, children: [ { path: 'dashboard', name: 'CrmDashboard', component: () => import('@/views/crm/dashboard/index.vue'), meta: { title: 'CRM仪表盘' }, }, { path: 'lead', name: 'CrmLead', component: () => import('@/views/crm/lead/index.vue'), meta: { title: '线索管理' }, }, // ... ], }; ``` --- ## 22.4 菜单配置(sys_menu) 在 `sys_menu` 表中添加 CRM 模块菜单树: ```sql -- CRM 模块根菜单 INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time) VALUES (5000, 'CRM管理', 0, 5, '/crm', NULL, 'M', '0', '0', '', 'ant-design:team-outlined', 1, NOW()); -- 线索管理菜单 INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time) VALUES (5001, '线索管理', 5000, 1, 'lead', 'crm/lead/index', 'C', '0', '0', 'crm:lead:list', 'ant-design:user-outlined', 1, NOW()); -- ... 其他菜单 ``` --- # 23. 开发规范建议 ## 23.1 包结构 ``` hzhub-system/src/main/java/org/hzhub/ ├── crm/ │ ├── controller/ # CRM 控制器 │ │ ├── CrmLeadController.java │ │ ├── CrmDealerController.java │ │ └── ... │ ├── domain/ # 实体类 │ │ ├── CrmLead.java │ │ ├── bo/ │ │ │ ├── CrmLeadBo.java │ │ └── vo/ │ │ │ ├── CrmLeadVo.java │ ├── service/ # 服务接口 │ │ ├── ICrmLeadService.java │ │ └── impl/ │ │ │ ├── CrmLeadServiceImpl.java │ └── mapper/ # MyBatis Mapper │ │ ├── CrmLeadMapper.java ``` --- ## 23.2 前端目录结构 ``` hzhub-admin/apps/web-antd/src/ ├── api/ │ └── crm/ │ │ ├── lead.ts # 线索 API │ │ ├── dealer.ts # 经销商 API │ │ └── types.ts # 类型定义 ├── views/ │ └── crm/ │ │ ├── dashboard/ # CRM 仪表盘 │ │ ├── lead/ # 线索管理 │ │ ├── dealer/ # 经销商管理 │ │ ├── opportunity/ # 商机管理 │ │ └── ... ``` --- # 24. 部署建议 ## 24.1 Docker Compose 配置 CRM 模块不需要新增容器,使用现有 `hzhub-system` 容器。 **位置:** `hzhub-deploy/docker-compose.yml` ```yaml services: # 现有服务(无需修改) hzhub-system: build: ../hzhub-system container_name: hzhub-system ports: - "8083:8083" environment: - SPRING_PROFILES_ACTIVE=prod depends_on: - mysql - redis networks: - hzhub-network ``` --- ## 24.2 数据库初始化 **SQL 文件:** `hzhub-system/src/main/resources/db/crm_init.sql` 包含: - CRM 表结构(crm_lead, crm_dealer, ...) - 数据字典(crm_lead_source, crm_opportunity_stage, ...) - 菜单配置(sys_menu) --- # 25. 后续优化方向 ## 25.1 性能优化 - Redis 缓存经销商画像、AI评分 - Weaviate 向量检索优化(相似案例推荐) - MyBatis-Plus 分页优化(避免全表扫描) ## 25.2 AI能力扩展 - LangGraph4j 集成(复杂 AI 工作流) - 多模型支持(OpenAI、Claude、本地模型) - AI Copilot 智能助手 ## 25.3 移动端增强 - UniApp 跨平台支持(iOS/Android) - 离线数据同步(IndexedDB) - 企业微信深度集成 --- # 附录:技术栈对比表 | 功能模块 | V1 版本技术栈 | V2 版本(HZHub)技术栈 | 优势 | |---|---|---|---| | 前端框架 | Vue3 + Element Plus | Vben Admin + Ant Design Vue | 企业级UI,更丰富的组件 | | 后端框架 | Spring Boot(通用) | Spring Boot 3.5.8 + MyBatis-Plus | 更强的ORM能力,多租户支持 | | 权限框架 | JWT(自定义) | Sa-Token | 已集成,成熟稳定 | | 工作流引擎 | Flowable | warm-flow 1.8.2 | 已集成,轻量级 | | AI服务 | Python FastAPI | LangChain4j(Java) | 与后端同语言,更易集成 | | 向量数据库 | 未指定 | Weaviate 1.25.0 | 已部署,用于知识检索 | | 文件存储 | MinIO | MinIO(已部署) | 无需额外部署 | | 数据权限 | 自定义实现 | TenantEntity + DataPermissionHelper | 已有实现,支持多租户 | --- # 总结 本文档将 CRM 销售自动化系统完全适配到 HZHub 项目架构中,充分利用项目已有的基础设施(Gateway、Sa-Token、warm-flow、MinIO、Weaviate、LangChain4j),避免重复开发,提高实施效率。 核心改动: 1. 服务归属:CRM 模块归属于 `hzhub-system` 服务 2. API路径:统一使用 `/crm/**`,通过 Gateway 路由 3. 数据模型:继承 `TenantEntity`,支持多租户与自动填充 4. 前端UI:使用 Vben Admin + Ant Design Vue 5. AI集成:调用 `hzhub-ai` 服务的 LangChain4j API 6. 权限控制:使用 Sa-Token + 数据权限隔离 后续实施时,严格按照本文档执行,确保与 HZHub 项目架构的一致性。