Files
hzhub/docs/crm-convert-api-contract.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

103 lines
2.4 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 线索转经销商 API 契约
## 基础信息
- **服务**: hzhub-system (8083)
- **API**: `POST /lead/convert`
- **Gateway路由**: `/crm/**` → StripPrefix=1 → `/lead/convert`
---
## 接口定义
### 线索转经销商
**API**: `POST /lead/convert`
**请求参数** (CrmLeadConvertBo):
```json
{
"leadId": 1001, // 必填线索ID
"dealerName": "XX贸易有限公司", // 必填,经销商名称
"dealerCode": "DL20260001", // 必填,经销商编码
"customerCode": "C001", // 可选ERP客户编码
"signedAt": "2026-05-20", // 可选,签约时间
"level": "C" // 可选经销商等级默认C
}
```
**响应**: `R<Void>`
```json
{
"code": 200,
"msg": "转化成功"
}
```
---
## 业务逻辑
1. 查询线索信息(`crm_lead`
2. 校验线索状态(必须不是"已转化"
3. 创建经销商记录(`crm_dealer`
- 从线索复制基础信息companyName→dealerName, contactName, mobile, province, city
- 设置 sourceLeadId = leadId
- 设置 ownerUserId = lead.ownerUserId
4. 迁移跟进记录(可选):
-`crm_lead_follow` 数据复制到 `crm_dealer_follow`(如果有此表)
5. 创建初始商机(`crm_opportunity`
- opportunityName = "初始商机"
- dealerId = 新经销商ID
- stage = "初步接触"
6. 更新线索状态:
- leadStatus = "converted"
- convertedDealerId = 新经销商ID
7. 返回成功消息
---
## 数据字典
### crm_dealer_level经销商等级
| 字典值 | 字典标签 |
|---|---|
| A | A级经销商 |
| B | B级经销商 |
| C | C级经销商 |
### crm_lifecycle生命周期
| 字典值 | 字典标签 |
|---|---|
| active | 活跃期 |
| stable | 稳定期 |
| decline | 衰退期 |
| churn | 流失期 |
---
## 前端类型定义
```typescript
export interface CrmLeadConvertBo {
leadId: number; // 必填
dealerName: string; // 必填
dealerCode: string; // 必填
customerCode?: string; // 可选
signedAt?: string; // 可选,格式 YYYY-MM-DD
level?: string; // 可选,默认 C
}
```
---
## 注意事项
1. **数据校验**: 线索ID必须存在且状态未转化
2. **唯一性**: dealerCode在同一租户内唯一
3. **事务性**: 整个转化过程使用事务(@Transactional
4. **ERP关联**: 如果提供customerCode在经销商详情中可查看ERP数据