unis_crm/docs/crm.md

641 lines
14 KiB
Markdown

# 紫光汇智 CRM 技术系统规划与技术文档
## 1. 文档定位
本文档面向研发、架构、测试、运维与交付团队,说明紫光汇智 CRM 系统的技术现状、目标架构、模块规划、关键设计原则、实施路线与交付边界。
文档目标如下:
- 为当前系统提供统一的技术说明基线
- 为后续迭代提供可落地的技术规划
- 为环境部署、模块扩展、接口治理和性能治理提供参考
- 为研发协作、测试设计和运维交接提供统一口径
本文档基于当前仓库代码、SQL 初始化脚本与现有项目文档整理,整理日期为 `2026-04-03`
## 2. 系统概述
紫光汇智 CRM 是一个围绕销售过程管理建设的轻量 CRM 系统,当前主要覆盖以下业务域:
- 首页工作台聚合
- 销售拓展与渠道拓展
- 商机储备与推进
- 外勤打卡
- 销售日报
- 个人资料与账号安全
系统当前采用前后端分离模式:
- 前端:`frontend/`,基于 `Vite + React + TypeScript`
- 后端:`backend/`,基于 `Spring Boot + MyBatis Plus + PostgreSQL + Redis`
- 数据:通过 `sql/init_full_pg17.sql` 初始化业务表
## 3. 当前技术现状
### 3.1 前端现状
前端目录位于 `frontend/src/`,核心结构如下:
```text
frontend/src/
├── App.tsx
├── components/
├── hooks/
├── lib/
└── pages/
```
当前页面模块包括:
- `Login.tsx`:登录页
- `Dashboard.tsx`:首页工作台
- `Expansion.tsx`:销售拓展、渠道拓展
- `Opportunities.tsx`:商机管理
- `Work.tsx`:打卡、日报、历史记录
- `Profile.tsx`:个人中心
当前前端特点:
- 使用 `react-router-dom` 管理路由
- 通过 `lib/auth.ts` 封装统一 API 调用
- 已适配 PC 与移动端
- 页面交互完整,具备较强的可交付性
- 复杂页面采用单文件实现,后续存在进一步拆分空间
### 3.2 后端现状
后端目录位于 `backend/src/main/java/com/unis/crm/`,当前结构包括:
```text
backend/src/main/java/com/unis/crm/
├── common/
├── config/
├── controller/
├── dto/
├── mapper/
├── service/
└── service/impl/
```
当前已实现的控制器包括:
- `DashboardController`
- `ExpansionController`
- `OpportunityController`
- `WorkController`
- `ProfileController`
- `OpportunityIntegrationController`
- `WecomSsoController`
当前后端特点:
- 采用 Spring Boot 单体模式
- 基于 MyBatis Plus 组织数据访问
- DTO 分包清晰,按业务域拆分
- 已具备基础异常处理、统一响应和安全配置
- 业务仍集中在服务实现层,后续可继续增强领域边界和可测试性
### 3.3 数据层现状
当前项目已将业务初始化入口收敛为:
- `sql/init_full_pg17.sql`
脚本中已覆盖以下核心表:
- `crm_customer`
- `crm_opportunity`
- `crm_opportunity_followup`
- `crm_sales_expansion`
- `crm_channel_expansion`
- `crm_channel_expansion_contact`
- `crm_expansion_followup`
- `work_checkin`
- `work_daily_report`
- `work_daily_report_comment`
- `work_todo`
- `sys_activity_log`
当前数据层特点:
- 业务主表与过程表已较完整
- 初始化脚本已能作为统一部署入口
- 仍依赖基础平台表与基础数据
- 后续需继续收敛索引策略、归档策略和审计策略
## 4. 技术建设目标
未来技术建设建议围绕以下五个目标推进:
1. 稳定性目标:保证主链路功能可持续发布与回归验证。
2. 可维护性目标:降低单文件复杂度,提升模块边界清晰度。
3. 可扩展性目标:为后续客户管理、审批流、分析报表等能力预留扩展空间。
4. 可运维性目标:完善日志、监控、配置治理和部署标准。
5. 安全性目标:提升鉴权、配置、上传、接口访问和数据变更可控性。
## 5. 总体技术架构规划
建议系统继续保持“前后端分离 + 单体业务后端”的建设模式,在当前阶段不急于拆分微服务,以降低复杂度与运维成本。
推荐总体架构如下:
```mermaid
flowchart TD
U["用户端<br/>PC / Mobile"] --> FE["前端应用<br/>React + Vite"]
FE --> GW["应用接入层<br/>Nginx / HTTPS"]
GW --> BE["CRM 后端单体服务<br/>Spring Boot"]
BE --> PG["PostgreSQL"]
BE --> RD["Redis"]
BE --> BASE["基础平台能力<br/>用户/组织/参数/鉴权"]
BE --> OMS["外部系统集成<br/>OMS / 其他业务系统"]
BE --> FILE["文件存储目录<br/>上传附件 / 打卡照片"]
```
规划原则:
- 业务复杂度未达到微服务拆分必要性前,优先优化单体结构
- 前端优先按业务域拆分组件和状态
- 后端优先按业务模块做清晰分层,而不是过早做技术拆分
- 数据库优先保障一致性与查询性能
- 接口治理、日志治理、异常治理要优先于功能外延扩张
## 6. 模块规划
### 6.1 首页工作台模块
职责:
- 聚合展示欢迎语、统计指标、待办事项、最新动态
- 提供工作入口跳转
技术规划:
- 统计接口与待办接口继续保留聚合型接口风格
- 增加缓存策略,减少重复统计计算
- 动态与待办建议做统一事件源或统一日志源治理
### 6.2 拓展管理模块
职责:
- 管理销售拓展与渠道拓展主数据
- 支撑后续商机关联、日报关联和项目推进
技术规划:
- 拓展列表查询支持分页、筛选、导出、关键词搜索
- 跟进记录数据结构统一化
- 重复校验规则集中到服务层或领域规则层
- 前端表单组件逐步抽象,降低 `Expansion.tsx` 单文件复杂度
### 6.3 商机管理模块
职责:
- 管理商机主数据、推进阶段、竞争态势、售前协同和系统推送
技术规划:
- 商机状态机建议标准化
- 推送外部系统逻辑与本地业务保存逻辑解耦
- 推送记录、失败原因、重试机制单独建模
- 回写字段、自动跟进字段需进一步规范来源
### 6.4 工作管理模块
职责:
- 支撑打卡、日报、历史记录和过程数据留痕
技术规划:
- 打卡上传、定位、逆地理解析可进一步隔离为基础服务组件
- 日报行项目结构建议形成稳定 DTO 契约
- 历史记录建议增加分页游标和时间维度索引优化
- 主管点评能力后续可进一步显式建模为评审子域
### 6.5 个人中心模块
职责:
- 查看与修改个人资料
- 密码修改
- 展示个人月度工作概览
技术规划:
- 用户资料更新与基础平台用户数据同步策略需要明确
- 密码修改链路需与统一安全策略对齐
## 7. 分层设计规划
建议后端逐步收敛为以下分层:
### 7.1 Controller 层
职责:
- 接收 HTTP 请求
- 做基础参数校验
- 调用应用服务
- 返回统一响应体
约束:
- 不直接承载复杂业务规则
- 不直接拼接复杂数据库逻辑
### 7.2 Application Service 层
职责:
- 编排业务流程
- 协调多个领域对象、外部系统、事务边界
- 对接 Mapper/Repository
建议:
- 当前 `service/impl` 可逐步向“应用服务 + 领域服务”演进
### 7.3 Domain Rule 层
职责:
- 放置核心业务规则
- 例如:重复校验、状态切换、编辑权限判定、推送条件判断
建议:
- 先从复杂模块开始,例如商机推送、日报回写、拓展重复校验
### 7.4 Repository / Mapper 层
职责:
- 承接数据库查询和持久化
- 隔离 SQL 与业务逻辑
建议:
- 查询 SQL 与写入 SQL 适当拆分
- 对复杂列表查询建立专门 Mapper 方法,不在服务层拼装
## 8. 前端技术规划
### 8.1 路由与页面拆分
建议维持当前路由结构,但将复杂页面拆成子模块:
- `Expansion.tsx` 拆为列表区、表单区、详情区、导出逻辑
- `Opportunities.tsx` 拆为列表、详情、推送弹窗、编辑弹窗
- `Work.tsx` 拆为打卡面板、日报面板、历史面板、对象选择器
### 8.2 API 层治理
建议继续以 `lib/auth.ts` 作为 API 网关入口,但逐步按域拆文件:
- `api/dashboard.ts`
- `api/expansion.ts`
- `api/opportunity.ts`
- `api/work.ts`
- `api/profile.ts`
收益:
- 便于维护
- 更清晰的类型边界
- 更方便单元测试和 mock
### 8.3 组件规划
建议将高复用部分抽出:
- 弹窗容器
- 列表卡片
- 表单字段组件
- 状态标签组件
- 导出按钮组件
- 历史记录详情组件
### 8.4 前端质量治理
建议补齐以下内容:
- ESLint 与 Prettier 统一规范
- 类型检查纳入 CI
- 关键页面冒烟测试
- API mock 机制沉淀为正式脚本
## 9. 后端技术规划
### 9.1 单体后端演进路线
当前推荐继续使用单体服务,建议按模块增强而不是拆服务。
演进方向:
- 强化模块边界
- 减少跨模块直接访问
- 将外部系统集成收敛到独立适配层
- 增加服务层测试与接口测试
### 9.2 DTO 与接口契约
当前 DTO 已按业务域拆包,建议继续坚持:
- 输入 DTO 与输出 DTO 分离
- 复杂聚合返回专门建模
- 避免前端直接依赖数据库字段命名
### 9.3 事务与一致性
重点关注场景:
- 商机保存与外部系统推送
- 日报提交与商机回写
- 拓展编辑与关联信息刷新
- 打卡上传文件与数据库记录保存
建议:
- 本地事务和外部调用解耦
- 外部系统调用失败时保留本地状态与失败日志
- 对推送行为增加状态记录表或审计表
## 10. 数据库规划
### 10.1 设计原则
- 主表负责业务主状态
- 过程表负责轨迹沉淀
- 审计字段默认标准化
- 删除操作优先逻辑删除或状态化
- 高频查询字段提前建索引
### 10.2 索引规划建议
建议重点优化以下查询:
- 首页待办查询
- 首页动态查询
- 商机列表按负责人、阶段、归档状态查询
- 拓展列表按负责人、姓名、渠道名查询
- 打卡/日报历史按用户、日期倒序查询
### 10.3 归档与清理规划
建议对以下数据建立归档策略:
- 已签单商机
- 早期历史动态日志
- 历史打卡照片
- 大体量日报附件或冗余快照
## 11. 接口治理规划
### 11.1 接口规范
建议保持统一 API 风格:
- URL 使用业务域前缀
- GET 用于查询
- POST 用于新增或业务动作
- PUT 用于更新
- 统一返回结构 `code / msg / data`
### 11.2 错误处理
建议错误分层:
- 参数错误
- 业务规则错误
- 鉴权错误
- 外部系统错误
- 系统内部错误
并在日志中保留:
- traceId
- userId
- requestPath
- requestParams
- errorCode
- rootCause
### 11.3 版本治理
当前系统体量不大,可暂不引入 `/v1` 路径版本。
但建议提前约定:
- 外部开放接口预留版本化策略
- 集成接口变更必须同步更新文档
- 高风险字段变更必须保持向后兼容
## 12. 安全规划
### 12.1 鉴权
当前系统基于 JWT 鉴权,建议继续强化:
- Access Token 有效期控制
- Refresh Token 生命周期管理
- 登录失败次数控制
- 敏感操作二次确认
### 12.2 数据权限
建议明确至少三类权限边界:
- 仅本人可编辑
- 本部门可查看
- 管理员可全局查看
### 12.3 配置安全
建议将敏感配置从默认配置文件中进一步外置:
- 数据库密码
- Redis 密码
- JWT Secret
- 内部系统 Secret
- 外部系统 API Key
### 12.4 上传安全
打卡照片上传需重点关注:
- 文件类型限制
- 文件大小限制
- 文件名安全
- 存储目录隔离
- 访问权限控制
## 13. 日志、监控与可观测性规划
建议建立以下可观测能力:
### 13.1 日志
- 应用日志
- 接口访问日志
- 外部系统调用日志
- 业务动作日志
- 失败日志
### 13.2 监控指标
- 接口响应时间
- 错误率
- 慢 SQL
- PostgreSQL 连接数
- Redis 可用性
- 文件上传失败率
- 外部系统推送成功率
### 13.3 告警建议
- 登录异常激增
- 商机推送失败率异常
- 文件上传失败率异常
- 数据库连接异常
- 首页聚合接口超时
## 14. 测试规划
建议建立三层测试体系:
### 14.1 单元测试
覆盖重点:
- 业务规则判断
- 状态切换
- 参数转换
- 重复校验
### 14.2 接口测试
覆盖重点:
- 登录
- 首页接口
- 拓展新增/编辑
- 商机新增/编辑/推送
- 打卡与日报提交流程
### 14.3 前端冒烟测试
覆盖重点:
- 登录页
- 首页
- 拓展页
- 商机页
- 打卡页
- 日报页
- 个人中心页
## 15. 部署与环境规划
### 15.1 环境分层建议
建议至少分为:
- 本地开发环境
- 测试环境
- 预发布环境
- 生产环境
### 15.2 部署建议
前端建议:
- 使用 Nginx 托管静态资源
- 区分环境配置
- 启用 gzip 与缓存策略
后端建议:
- 使用独立配置文件或环境变量
- 使用进程守护或容器部署
- 按环境区分日志目录、上传目录和外部地址
数据库建议:
- 定期备份
- 版本化执行 SQL
- 升级前回滚预案
## 16. 迭代路线建议
### 第一阶段:稳态交付
目标:
- 完成现有主链路稳定交付
- 收敛环境配置
- 完成基础测试清单
建议事项:
- 修正高复杂度页面拆分
- 完善日志与异常信息
- 固化部署手册与回归手册
### 第二阶段:治理增强
目标:
- 增强可维护性与可观测性
建议事项:
- 引入 CI 检查
- 完成 API 分层拆分
- 增加推送日志和审计机制
- 增强权限模型
### 第三阶段:业务扩展
目标:
- 支撑更大规模的 CRM 业务演进
建议事项:
- 引入客户主档视图
- 引入审批/流程节点
- 引入经营分析与管理报表
- 引入更标准的数据字典中心
## 17. 当前主要技术风险
建议重点关注以下风险:
1. 前端复杂页面单文件过大,维护成本上升。
2. 外部系统集成失败场景的状态闭环仍需增强。
3. 当前配置文件中存在敏感参数,生产治理需加强。
4. 数据权限与角色权限模型还需要形成正式方案。
5. 自动化测试和持续集成能力仍有较大提升空间。
## 18. 技术文档交付建议
建议后续完整技术文档体系至少包括:
- 技术系统规划与技术文档
- 部署手册
- 数据库设计说明
- 接口文档
- 测试方案与回归清单
- 运维巡检与故障处理手册
## 19. 相关文件
- `docs/system-construction.md`
- `docs/business-schema-design.md`
- `docs/deployment-guide.md`
- `docs/opportunity-integration-api.md`
- `backend/README.md`
- `frontend/README.md`