Files
hzhub/docs/CRM销售模块详细设计说明书V2.md
大壮 3f643ef31f feat: 完成CRM商机和线索管理模块开发
## 新增功能

### 商机中心 (/opportunity)
- Stats统计卡片(商机总数、金额、赢单、转化率)
- Pipeline商机管道(阶段Tab:全部/线索/谈判中/方案/赢单)
- 商机列表真实数据渲染(来自crm_opportunity表)
- 商机卡片详情(经销商、负责人、金额、概率)
- Pipeline计数实时更新

### 线索中心 (/lead)
- 线索列表完整功能(CRUD)
- 线索详情Drawer(基础信息 + 跟进记录Timeline)
- 新建线索(含ERP客户关联、手机号验证)
- 添加跟进记录(跟进方式、内容、下次时间)
- 分配负责人(用户选择器,显示真实姓名)
- 线索转经销商(自动创建商机)
- 删除线索(逻辑删除)

## 后端开发

### 数据库表
- crm_lead(线索表)
- crm_lead_follow(线索跟进记录表)
- crm_dealer(经销商表)
- crm_opportunity(商机表)
- crm_opportunity_follow(商机跟进记录表)
- 数据字典初始化

### API接口
- 线索管理:CRUD、详情、跟进、分配、转化
- 商机管理:列表查询
- 用户选择器:员工门户专用API

### 核心功能
- 线索转化自动创建经销商和商机
- 负责人翻译显示真实姓名(修复)
- 手机号前后端双重格式验证(修复)

## 前端开发

### 页面架构改进
- 商机中心:保留原CRM设计风格(Stats + Pipeline)
- 线索中心:独立页面(完整线索管理)
- 左侧菜单:独立菜单项(商机中心、线索中心)

### API模块
- src/api/crm/:线索和商机API类型定义和调用方法
- src/api/user/:用户选择器API

### 样式设计
- 商机中心:100%保持原CRM Pipeline设计风格
- 使用CSS变量系统(var(--radius-lg), var(--shadow-sm)等)
- Pipeline Tab白色圆角设计
- 商机卡片阴影和hover效果
- 头像堆叠显示

## 配置修改

- Gateway路由:添加CRM模块路由配置
- Gateway路由:添加system模块路由配置
- Aside菜单:拆分商机中心和线索中心

## Bug修复

- 修复负责人显示手机号问题(UserNameTranslationImpl返回昵称)
- 修复手机号格式验证缺失(前后端双重验证)
- 修复商机管道设计风格不一致(完整复制原CRM样式)

## 文档

- CRM销售模块详细设计说明书V3.md
- CRM线索转化API契约
- CRM线索转化开发计划
- CRM线索转化测试指引
- CRM线索管理测试指引
- CRM商机管理测试指引
- CRM架构改进报告
- CRM Bug修复报告

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 09:46:59 +00:00

1525 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 | LangChain4jJava |
| 向量数据库 | 未指定 | 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<CrmLeadVo> list(CrmLeadBo lead, PageQuery pageQuery) {
return leadService.selectPageLeadList(lead, pageQuery);
}
/**
* 新增线索
*/
@Log(title = "线索管理", businessType = BusinessType.INSERT)
@SaCheckPermission("crm:lead:add")
@RepeatSubmit()
@PostMapping()
public R<Void> 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-Jobhzhub-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 CopilotLangGraph4j
- 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
- 合同管理
**技术栈:**
- AILangChain4j + hzhub-ai 服务
- 向量Weaviate
- 定时任务XXL-Job
---
## 第三阶段3-4个月
**建设内容:**
- AI预测模型成交预测、流失预测
- AI CopilotLangGraph4j
- AI经营分析面板
- 智能决策支持
- BI仪表盘
**技术栈:**
- AILangGraph4j + hzhub-ai 服务
- 图表Ant Design Charts
---
# 20. 数据字典定义
## 20.1 线索相关字典
### crm_lead_source线索来源
| 字典值 | 字典标签 |
|---|---|
| activity | 活动 |
| referral | 推荐 |
| website | 网站 |
| exhibition | 展会 |
### crm_lead_status线索状态
| 字典值 | 字典标签 |
|---|---|
| new | 新线索 |
| following | 跟进中 |
| converted | 已转化 |
| invalid | 已作废 |
### crm_intent_levelAI意向等级
| 字典值 | 字典标签 |
|---|---|
| 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
<dependencies>
<!-- 已有依赖 -->
<dependency>
<groupId>org.hzhub</groupId>
<artifactId>hzhub-common-core</artifactId>
</dependency>
<!-- 新增 CRM 依赖(可选) -->
<dependency>
<groupId>org.hzhub</groupId>
<artifactId>hzhub-common-chat</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
```
---
## 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 | LangChain4jJava | 与后端同语言,更易集成 |
| 向量数据库 | 未指定 | 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 项目架构的一致性。