527 lines
14 KiB
Markdown
527 lines
14 KiB
Markdown
# CRM业务表设计
|
||
|
||
## 1. 设计依据
|
||
|
||
本设计根据当前前端页面反推业务模型,涉及页面如下:
|
||
|
||
- `src/pages/Opportunities.tsx`:商机储备、商机详情、跟进记录
|
||
- `src/pages/Expansion.tsx`:销售人员拓展、渠道拓展、跟进记录
|
||
- `src/pages/Work.tsx`:外勤打卡、日报、历史记录、主管点评
|
||
- `src/pages/Profile.tsx`:个人资料、统计信息
|
||
- `src/pages/Dashboard.tsx`:首页统计、待办、动态
|
||
|
||
当前前端是展示型页面,未接入真实接口,因此以下设计属于“按现有前端信息推导出的第一版业务库设计”。
|
||
|
||
---
|
||
|
||
## 2. 业务模块拆分
|
||
|
||
建议按以下模块建表:
|
||
|
||
1. 组织与人员
|
||
2. 客户与商机
|
||
3. 拓展管理
|
||
4. 工作管理
|
||
5. 待办与动态(可选增强)
|
||
|
||
---
|
||
|
||
## 3. 核心实体关系
|
||
|
||
```text
|
||
部门 department
|
||
└─< 用户 user
|
||
|
||
客户 customer
|
||
└─< 商机 opportunity
|
||
└─< 商机跟进记录 opportunity_followup
|
||
|
||
用户 user
|
||
└─< 销售拓展 sales_expansion
|
||
└─< 拓展跟进记录 expansion_followup
|
||
|
||
用户 user
|
||
└─< 渠道拓展 channel_expansion
|
||
└─< 拓展跟进记录 expansion_followup
|
||
|
||
用户 user
|
||
└─< 外勤打卡 work_checkin
|
||
└─< 打卡附件 work_checkin_attachment
|
||
|
||
用户 user
|
||
└─< 日报 work_daily_report
|
||
└─< 日报点评 work_daily_report_comment
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 表设计
|
||
|
||
## 4.1 `sys_department` 部门表
|
||
|
||
用于承接“华东大区、华北大区”等组织信息。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| dept_code | varchar(50) | 部门编码 |
|
||
| dept_name | varchar(100) | 部门名称 |
|
||
| parent_id | bigint | 上级部门ID |
|
||
| manager_user_id | bigint | 部门负责人 |
|
||
| status | tinyint | 1启用 0停用 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
---
|
||
|
||
## 4.2 `sys_user` 用户表
|
||
|
||
承接“张三、李四、王五”等销售人员,以及个人页中的员工资料。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| user_code | varchar(50) | 工号/员工编号 |
|
||
| username | varchar(50) | 登录账号 |
|
||
| real_name | varchar(50) | 姓名 |
|
||
| mobile | varchar(20) | 手机号 |
|
||
| email | varchar(100) | 邮箱 |
|
||
| dept_id | bigint | 所属部门 |
|
||
| job_title | varchar(100) | 职位,如高级销售 |
|
||
| status | tinyint | 1在职 0离职 |
|
||
| hire_date | date | 入职日期 |
|
||
| avatar_url | varchar(255) | 头像地址 |
|
||
| password_hash | varchar(255) | 登录密码摘要 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_user_dept_id(dept_id)`
|
||
- `uk_user_username(username)`
|
||
- `uk_user_mobile(mobile)`
|
||
|
||
---
|
||
|
||
## 4.3 `crm_customer` 客户表
|
||
|
||
来源于商机页面中的“客户名称”,如医院、学校、集团。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| customer_code | varchar(50) | 客户编码 |
|
||
| customer_name | varchar(200) | 客户名称 |
|
||
| customer_type | varchar(50) | 客户类型,如医院/高校/企业 |
|
||
| industry | varchar(50) | 行业 |
|
||
| province | varchar(50) | 省份 |
|
||
| city | varchar(50) | 城市 |
|
||
| address | varchar(255) | 地址 |
|
||
| owner_user_id | bigint | 当前负责人 |
|
||
| source | varchar(50) | 来源,如渠道推荐/市场活动 |
|
||
| status | varchar(30) | 潜在/跟进中/成交/流失 |
|
||
| remark | text | 备注 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_customer_owner(owner_user_id)`
|
||
- `idx_customer_name(customer_name)`
|
||
|
||
---
|
||
|
||
## 4.4 `crm_opportunity` 商机表
|
||
|
||
这是前端最核心业务表,对应“商机储备”页面。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| opportunity_code | varchar(50) | 商机编号,如 `HD-20231024-001` |
|
||
| opportunity_name | varchar(200) | 商机名称 |
|
||
| customer_id | bigint | 关联客户 |
|
||
| owner_user_id | bigint | 商机负责人 |
|
||
| amount | decimal(18,2) | 商机金额 |
|
||
| expected_close_date | date | 预计结单日期 |
|
||
| confidence_pct | tinyint | 把握度,0-100 |
|
||
| stage | varchar(50) | 阶段,如初步沟通/方案交流/招投标/商务谈判/已成交 |
|
||
| opportunity_type | varchar(50) | 类型,如新建/扩容 |
|
||
| product_type | varchar(100) | 产品类别,如VDI/VOI/IDV云桌面 |
|
||
| source | varchar(50) | 商机来源 |
|
||
| pushed_to_oms | tinyint | 是否已推送OMS |
|
||
| oms_push_time | datetime | 推送OMS时间 |
|
||
| description | text | 商机说明/备注 |
|
||
| status | varchar(30) | 正常/赢单/输单/关闭 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `uk_opportunity_code(opportunity_code)`
|
||
- `idx_opportunity_customer(customer_id)`
|
||
- `idx_opportunity_owner(owner_user_id)`
|
||
- `idx_opportunity_stage(stage)`
|
||
- `idx_opportunity_expected_close(expected_close_date)`
|
||
|
||
---
|
||
|
||
## 4.5 `crm_opportunity_followup` 商机跟进记录表
|
||
|
||
对应商机详情里的“跟进记录”时间线。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| opportunity_id | bigint | 商机ID |
|
||
| followup_time | datetime | 跟进时间 |
|
||
| followup_type | varchar(50) | 跟进方式,如电话沟通/现场拜访/微信沟通 |
|
||
| content | text | 跟进内容 |
|
||
| next_action | varchar(255) | 下一步动作 |
|
||
| followup_user_id | bigint | 跟进人 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_opp_followup_opportunity(opportunity_id, followup_time desc)`
|
||
- `idx_opp_followup_user(followup_user_id)`
|
||
|
||
---
|
||
|
||
## 4.6 `crm_sales_expansion` 销售拓展表
|
||
|
||
对应“销售人员拓展”。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| candidate_name | varchar(50) | 候选人姓名 |
|
||
| mobile | varchar(20) | 手机号 |
|
||
| email | varchar(100) | 邮箱 |
|
||
| target_dept_id | bigint | 目标归属部门 |
|
||
| industry | varchar(50) | 擅长行业 |
|
||
| title | varchar(100) | 当前或目标职位 |
|
||
| intent_level | varchar(20) | 意向度,高/中/低 |
|
||
| stage | varchar(50) | 阶段,如初步沟通/方案交流 |
|
||
| has_desktop_exp | tinyint | 是否有云桌面经验 |
|
||
| in_progress | tinyint | 是否持续跟进中 |
|
||
| employment_status | varchar(20) | 在职/离职/已入职/已放弃 |
|
||
| expected_join_date | date | 预计入职日期,可为空 |
|
||
| owner_user_id | bigint | 负责人 |
|
||
| remark | text | 备注 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_sales_expansion_owner(owner_user_id)`
|
||
- `idx_sales_expansion_stage(stage)`
|
||
- `idx_sales_expansion_mobile(mobile)`
|
||
|
||
---
|
||
|
||
## 4.7 `crm_channel_expansion` 渠道拓展表
|
||
|
||
对应“渠道拓展”。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| channel_name | varchar(200) | 渠道名称 |
|
||
| province | varchar(50) | 所在省份 |
|
||
| industry | varchar(50) | 主要行业 |
|
||
| annual_revenue | decimal(18,2) | 年营收规模 |
|
||
| staff_size | int | 公司人数 |
|
||
| contact_name | varchar(50) | 联系人 |
|
||
| contact_title | varchar(100) | 联系人职务 |
|
||
| contact_mobile | varchar(20) | 联系电话 |
|
||
| stage | varchar(50) | 阶段,如初步接触/合作洽谈 |
|
||
| landed_flag | tinyint | 是否已落地 |
|
||
| expected_sign_date | date | 预计签约日期 |
|
||
| owner_user_id | bigint | 负责人 |
|
||
| remark | text | 备注 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_channel_expansion_owner(owner_user_id)`
|
||
- `idx_channel_expansion_stage(stage)`
|
||
- `idx_channel_expansion_name(channel_name)`
|
||
|
||
---
|
||
|
||
## 4.8 `crm_expansion_followup` 拓展跟进记录表
|
||
|
||
销售拓展和渠道拓展都存在“跟进记录”,建议共用一张表,通过对象类型区分。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| biz_type | varchar(20) | `sales` / `channel` |
|
||
| biz_id | bigint | 对应拓展对象ID |
|
||
| followup_time | datetime | 跟进时间 |
|
||
| followup_type | varchar(50) | 电话/微信/面谈等 |
|
||
| content | text | 跟进内容 |
|
||
| next_action | varchar(255) | 下一步动作 |
|
||
| followup_user_id | bigint | 跟进人 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_exp_followup_biz(biz_type, biz_id, followup_time desc)`
|
||
- `idx_exp_followup_user(followup_user_id)`
|
||
|
||
---
|
||
|
||
## 4.9 `work_checkin` 外勤打卡表
|
||
|
||
对应工作台里的“外勤打卡”。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| user_id | bigint | 打卡人 |
|
||
| checkin_date | date | 打卡日期 |
|
||
| checkin_time | datetime | 打卡时间 |
|
||
| longitude | decimal(10,6) | 经度 |
|
||
| latitude | decimal(10,6) | 纬度 |
|
||
| location_text | varchar(255) | 地址文本 |
|
||
| remark | varchar(500) | 备注说明 |
|
||
| status | varchar(30) | 正常/异常/补卡 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_checkin_user_date(user_id, checkin_date desc)`
|
||
|
||
---
|
||
|
||
## 4.10 `work_checkin_attachment` 打卡附件表
|
||
|
||
前端要求“现场照片必填”,建议单独拆附件表。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| checkin_id | bigint | 打卡ID |
|
||
| file_url | varchar(255) | 文件地址 |
|
||
| file_type | varchar(30) | image/audio/video |
|
||
| file_name | varchar(255) | 原始文件名 |
|
||
| file_size | bigint | 文件大小 |
|
||
| created_at | datetime | 创建时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_checkin_attachment_checkin(checkin_id)`
|
||
|
||
---
|
||
|
||
## 4.11 `work_daily_report` 日报表
|
||
|
||
对应“每日表”和右侧历史日报。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| user_id | bigint | 提交人 |
|
||
| report_date | date | 日报日期 |
|
||
| work_content | text | 今日工作内容 |
|
||
| tomorrow_plan | text | 明日工作计划 |
|
||
| source_type | varchar(30) | manual/voice |
|
||
| submit_time | datetime | 提交时间 |
|
||
| status | varchar(30) | 待提交/已提交/已阅/已点评 |
|
||
| score | int | 评分 |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_daily_report_user_date(user_id, report_date desc)`
|
||
- `idx_daily_report_status(status)`
|
||
- `uk_daily_report_user_date(user_id, report_date)`
|
||
|
||
---
|
||
|
||
## 4.12 `work_daily_report_comment` 日报点评表
|
||
|
||
对应历史记录中的“主管点评”。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| report_id | bigint | 日报ID |
|
||
| reviewer_user_id | bigint | 点评人 |
|
||
| score | int | 评分 |
|
||
| comment_content | text | 点评内容 |
|
||
| reviewed_at | datetime | 点评时间 |
|
||
| created_at | datetime | 创建时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_report_comment_report(report_id)`
|
||
|
||
---
|
||
|
||
## 4.13 `work_todo` 待办表(建议补充)
|
||
|
||
首页有“待办事项”,虽然现在是静态数据,但真实业务通常需要。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| user_id | bigint | 所属用户 |
|
||
| title | varchar(200) | 待办标题 |
|
||
| biz_type | varchar(30) | opportunity / expansion / report / other |
|
||
| biz_id | bigint | 业务对象ID |
|
||
| due_date | datetime | 截止时间 |
|
||
| status | varchar(20) | todo / done / canceled |
|
||
| priority | varchar(20) | high / medium / low |
|
||
| created_at | datetime | 创建时间 |
|
||
| updated_at | datetime | 更新时间 |
|
||
|
||
---
|
||
|
||
## 4.14 `sys_activity_log` 动态日志表(建议补充)
|
||
|
||
首页“最新动态”适合由统一动态表驱动。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| id | bigint PK | 主键 |
|
||
| biz_type | varchar(30) | 业务类型 |
|
||
| biz_id | bigint | 业务ID |
|
||
| action_type | varchar(50) | 如商机阶段更新/日报点评/新增渠道 |
|
||
| title | varchar(200) | 动态标题 |
|
||
| content | varchar(500) | 动态描述 |
|
||
| operator_user_id | bigint | 操作人 |
|
||
| created_at | datetime | 创建时间 |
|
||
|
||
索引建议:
|
||
|
||
- `idx_activity_created(created_at desc)`
|
||
- `idx_activity_biz(biz_type, biz_id)`
|
||
|
||
---
|
||
|
||
## 5. 推荐枚举值
|
||
|
||
为了避免硬编码中文状态,建议状态字段统一使用编码值,前端再做字典映射。
|
||
|
||
### 商机阶段 `opportunity.stage`
|
||
|
||
- `initial_contact` 初步沟通
|
||
- `solution_discussion` 方案交流
|
||
- `bidding` 招投标
|
||
- `business_negotiation` 商务谈判
|
||
- `won` 已成交
|
||
- `lost` 已丢单
|
||
|
||
### 商机状态 `opportunity.status`
|
||
|
||
- `active`
|
||
- `won`
|
||
- `lost`
|
||
- `closed`
|
||
|
||
### 销售拓展意向 `sales_expansion.intent_level`
|
||
|
||
- `high`
|
||
- `medium`
|
||
- `low`
|
||
|
||
### 外勤打卡状态 `work_checkin.status`
|
||
|
||
- `normal`
|
||
- `abnormal`
|
||
- `reissue`
|
||
|
||
### 日报状态 `work_daily_report.status`
|
||
|
||
- `draft`
|
||
- `submitted`
|
||
- `read`
|
||
- `reviewed`
|
||
|
||
---
|
||
|
||
## 6. 第一版最小可落地表
|
||
|
||
如果先做 MVP,建议优先落以下 8 张:
|
||
|
||
1. `sys_department`
|
||
2. `sys_user`
|
||
3. `crm_customer`
|
||
4. `crm_opportunity`
|
||
5. `crm_opportunity_followup`
|
||
6. `crm_channel_expansion`
|
||
7. `work_checkin`
|
||
8. `work_daily_report`
|
||
|
||
这 8 张就能支撑目前前端大部分核心展示。
|
||
|
||
如果要把“拓展管理”做完整,再补:
|
||
|
||
1. `crm_sales_expansion`
|
||
2. `crm_expansion_followup`
|
||
3. `work_checkin_attachment`
|
||
4. `work_daily_report_comment`
|
||
|
||
---
|
||
|
||
## 7. 建表原则建议
|
||
|
||
1. 所有业务表统一保留 `created_at`、`updated_at`。
|
||
2. 负责人、创建人、点评人等人员字段统一关联 `sys_user.id`。
|
||
3. 跟进记录建议独立建表,不要直接塞进主表。
|
||
4. 金额统一用 `decimal(18,2)`,不要用字符串。
|
||
5. 时间类字段区分清楚 `date` 和 `datetime`。
|
||
6. 中文状态不要直接写死在数据库,建议存编码值。
|
||
7. 如果后续要对接 OMS,商机表中保留 `pushed_to_oms` 和外部系统单号字段会更稳妥。
|
||
|
||
---
|
||
|
||
## 8. 与前端页面的映射关系
|
||
|
||
### 商机页
|
||
|
||
- 列表:`crm_opportunity`
|
||
- 客户名称:`crm_customer`
|
||
- 详情跟进:`crm_opportunity_followup`
|
||
|
||
### 拓展页
|
||
|
||
- 销售拓展:`crm_sales_expansion`
|
||
- 渠道拓展:`crm_channel_expansion`
|
||
- 跟进记录:`crm_expansion_followup`
|
||
|
||
### 工作页
|
||
|
||
- 外勤打卡:`work_checkin`
|
||
- 打卡照片:`work_checkin_attachment`
|
||
- 日报:`work_daily_report`
|
||
- 主管点评:`work_daily_report_comment`
|
||
|
||
### 首页/我的
|
||
|
||
- 统计看板:由商机、拓展、打卡、日报聚合生成
|
||
- 待办事项:`work_todo`
|
||
- 最新动态:`sys_activity_log`
|
||
- 个人信息:`sys_user` + `sys_department`
|
||
|
||
---
|
||
|
||
## 9. 下一步建议
|
||
|
||
如果要继续往后端落地,建议按以下顺序推进:
|
||
|
||
1. 先定字段字典和状态流转
|
||
2. 再输出 MySQL DDL
|
||
3. 再补接口文档
|
||
4. 最后和前端页面一一对齐新增/编辑/详情接口
|
||
|
||
如果需要,我下一步可以直接继续帮你补一版 MySQL 建表 SQL。
|