1. 项目概述与架构设计
这套基于SpringBoot+Vue+MyBatis+MySQL的客户关系管理系统(CRM)采用了典型的前后端分离架构。作为一名经历过多个企业级项目开发的老手,我认为这种架构选择在当前开发环境下具有显著优势。前端用Vue.js构建响应式界面,后端通过SpringBoot提供RESTful API,两者通过HTTP协议进行数据交互,这种解耦方式让团队可以并行开发,大幅提升交付效率。
系统核心功能模块包括:
- 客户信息管理(基础信息、交互记录、标签分类)
- 销售机会跟踪(商机阶段、预计金额、成交概率)
- 数据分析看板(客户分布、转化率、业绩趋势)
- 权限控制系统(RBAC模型、JWT认证、动态路由)
技术栈选型经过了我们团队的多次技术论证:
- 后端选择SpringBoot 2.7.x版本,这是目前企业开发中最稳定的选择
- 前端采用Vue 3.x组合Element Plus,比React更适合快速开发管理后台
- 持久层使用MyBatis而非JPA,因为CRM系统存在大量复杂查询场景
- MySQL 8.0作为主数据库,其窗口函数对分析型查询非常友好
实际开发中发现,Vue 3的Composition API相比Options API更适合复杂业务逻辑的组织,建议新项目直接采用setup语法糖写法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心数据模型设计
2.1 客户主数据表结构
客户表(client_info)的设计经历了三次迭代优化,最终版包含以下关键字段:
sql复制CREATE TABLE `client_info` (
`client_id` varchar(32) NOT NULL COMMENT '客户UUID主键',
`client_name` varchar(100) NOT NULL COMMENT '客户全称',
`short_name` varchar(50) DEFAULT NULL COMMENT '客户简称',
`credit_code` varchar(18) DEFAULT NULL COMMENT '统一社会信用代码',
`industry_id` int DEFAULT NULL COMMENT '行业分类ID',
`region_path` varchar(255) DEFAULT NULL COMMENT '地区路径(省-市-区)',
`address` varchar(255) DEFAULT NULL COMMENT '详细地址',
`contact_person` varchar(50) DEFAULT NULL COMMENT '主要联系人',
`contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
`email` varchar(100) DEFAULT NULL COMMENT '电子邮箱',
`client_level` tinyint DEFAULT '1' COMMENT '客户等级(1-5)',
`client_status` tinyint DEFAULT '1' COMMENT '状态(1正常2流失3黑名单)',
`creator_id` varchar(32) DEFAULT NULL COMMENT '创建人ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`client_id`),
KEY `idx_industry` (`industry_id`),
KEY `idx_region` (`region_path`(20)),
KEY `idx_level_status` (`client_level`,`client_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
几个设计要点:
- 使用varchar(32)存储UUID而非自增ID,便于数据迁移和分布式部署
- region_path采用"省-市-区"格式存储,比单独存三个字段更易查询
- 创建时间和更新时间自动维护,避免业务代码处理
- 建立了复合索引提升常用查询效率
2.2 交互记录表设计
客户交互表(client_interaction)的设计特别注意了审计追踪需求:
sql复制CREATE TABLE `client_interaction` (
`interaction_id` varchar(32) NOT NULL,
`client_id` varchar(32) NOT NULL,
`interaction_type` tinyint NOT NULL COMMENT '1电话2邮件3拜访4线上',
`subject` varchar(2
