Java实战案例:基于 Spring Boot、MyBatis 、MySQL和Jsp构建客户关系管理系统
一、引言
1.1 系统概述
本客户关系管理系统涵盖客户管理、销售管理、服务管理、数据分析、系统管理等多个模块。系统采用B/S架构,使用Java语言开发,基于Spring Boot框架构建,数据库选用MySQL。系统具备良好的可扩展性和可维护性,能够满足企业不同发展阶段的需求。
1.2 预期读者
本设计文档主要面向系统开发人员、测试人员、运维人员以及企业管理人员。系统开发人员可依据文档进行系统的详细设计、编码实现和单元测试;测试人员可根据文档了解系统功能,制定测试计划和测试用例;运维人员可借助文档进行系统的部署、维护和性能优化;企业管理人员则能通过文档了解系统架构和功能,为企业决策提供支持。
二、系统架构设计
2.1 技术选型
- 前端技术:HTML、CSS、JavaScript、Vue.js。
- 后端技术:Java、Spring Boot、Spring MVC、MyBatis。
- 数据库:MySQL。
- 服务器:Tomcat。
- 其他技术:Redis(缓存)、Shiro(安全框架)、Logback(日志框架)、Sigar(系统监控)。
2.2 系统架构图
2.3 功能架构图
2.4 模块详细设计
- 客户管理模块
- 客户信息管理:实现客户基本信息(如姓名、性别、年龄、联系方式、地址等)的增删改查操作。提供客户信息的批量导入和导出功能,方便数据的迁移和备份。支持客户信息的模糊查询和高级查询,便于快速定位目标客户。
- 联系人管理:对客户的联系人信息进行管理,包括联系人姓名、职位、电话、邮箱等。可添加、编辑、删除联系人,并关联到相应客户。实现联系人信息的同步更新,确保客户与联系人信息的一致性。
- 客户分配管理:将客户分配给指定的客户经理,支持手动分配和自动分配(根据预设规则)。记录客户分配历史,方便跟踪客户归属的变更情况。
- 客户转移管理:在客户经理变更时,实现客户的转移操作。确保客户相关数据(如跟进记录、订单信息等)的完整性和连续性。
- 客户流失管理:对流失客户进行标识和分析,记录流失原因。提供流失客户的召回策略和措施,降低客户流失率。
- 销售管理模块
- 销售机会管理:记录潜在销售机会的详细信息,如机会名称、客户、预计金额、成功概率、跟进阶段等。支持销售机会的创建、编辑、删除和查询操作。提供销售机会的跟进提醒和任务分配功能,提高销售效率。
- 订单管理:管理客户订单,包括订单创建、编辑、查询、发货、退货等操作。关联订单与客户、产品、销售人员等信息,实现订单流程的可视化跟踪。支持订单的打印和导出功能,方便订单处理和存档。
- 产品管理:对销售产品进行分类管理,维护产品基本信息(如名称、规格、价格、库存等)。实现产品信息的增删改查操作,支持产品图片上传和展示。提供产品库存预警功能,及时提醒补货。
- 服务管理模块
- 服务创建与分配:客户提交服务请求后,创建服务工单并分配给相应服务人员。记录服务请求的详细内容和优先级,确保服务及时响应。
- 服务处理与反馈:服务人员处理服务工单,记录处理过程和结果。支持服务状态的实时更新,方便客户查询。提供客户满意度评价功能,收集客户反馈意见。
- 服务转移:在服务人员无法处理或需要转交给其他人员时,实现服务工单的转移操作。确保服务流程的顺畅进行,不影响客户体验。
- 数据分析模块
- 客户数据统计分析:统计客户数量、增长趋势、地域分布、客户价值等信息。生成客户数据分析报表和图表,为市场决策提供数据支持。
- 销售数据统计分析:分析销售业绩、销售趋势、产品销售排名、销售渠道等数据。提供销售数据分析工具,帮助销售人员制定销售策略。
- 服务数据统计分析:统计服务工单数量、处理时长、满意度评价等数据。根据服务数据分析结果,优化服务流程和质量。
- 系统管理模块
- 用户管理:管理系统用户信息,包括用户注册、登录、权限分配、密码修改等功能。支持用户信息的批量导入和导出,方便用户管理。
- 角色管理:定义系统角色(如管理员、客户经理、销售人员、服务人员等),并为角色分配相应权限。支持角色的创建、编辑、删除和权限调整操作。
- 权限管理:精确控制用户对系统功能和数据的访问权限,确保系统安全。采用基于角色的访问控制(RBAC)模型,实现权限的灵活管理。
- 数据字典管理:维护系统中的数据字典项,如客户类型、销售状态、服务类型等。确保数据的一致性和规范性,方便系统的扩展和维护。
- 系统监控:实时监控系统的运行状态,包括服务器性能、数据库连接数、缓存使用情况等。提供系统性能优化建议和预警功能,保障系统稳定运行。
2.5 数据库设计
- 客户表(customer):存储客户基本信息,如客户ID、姓名、性别、年龄、联系方式、地址、创建时间、修改时间、创建人、修改人、删除状态等。
- 联系人表(linkman):记录客户联系人信息,包括联系人ID、客户ID、联系人姓名、职位、电话、邮箱、创建时间、修改时间、创建人、修改人、删除状态等。
- 销售机会表(sale_opportunity):存放销售机会相关信息,如机会ID、客户ID、机会名称、预计金额、成功概率、跟进阶段、销售状态、创建时间、修改时间、创建人、修改人、删除状态等。
- 订单表(orders):管理客户订单信息,包括订单ID、客户ID、订单编号、订单金额、订单日期、发货地址、发货时间、收货时间、订单状态、创建时间、修改时间、创建人、修改人、删除状态等。
- 产品表(product):存储产品基本信息,如产品ID、产品名称、产品规格、产品价格、库存数量、创建时间、修改时间、创建人、修改人、删除状态等。
- 服务表(service):记录服务工单信息,如服务ID、客户ID、服务类型、服务内容、服务状态、创建时间、修改时间、创建人、修改人、处理人、删除状态等。
- 用户表(user):管理系统用户信息,包括用户ID、账号、密码、姓名、性别、年龄、联系方式、邮箱、角色ID、创建时间、修改时间、创建人、修改人、删除状态等。
- 角色表(role):定义系统角色信息,如角色ID、角色名称、角色描述、创建时间、修改时间、创建人、修改人、删除状态等。
- 权限表(permission):存储系统权限信息,如权限ID、权限名称、权限描述、创建时间、修改时间、创建人、修改人、删除状态等。
- 角色权限关联表(role_permission):关联角色与权限,包括角色权限ID、角色ID、权限ID、创建时间、修改时间、创建人、修改人、删除状态等。
- 数据字典表(dictionary_type):维护数据字典类型信息,如字典类型ID、字典类型名称、字典类型描述、创建时间、修改时间、创建人、修改人、删除状态等。
- 数据字典项表(dictionary_item):记录数据字典项信息,如字典项ID、字典类型ID、字典项名称、字典项值、字典项描述、创建时间、修改时间、创建人、修改人、删除状态等。
2.6 接口设计
- 客户管理接口
- 添加客户:
POST /customer/add
,请求参数为客户信息对象,返回成功或失败标识。 - 修改客户:
PUT /customer/update
,请求参数为客户信息对象,返回成功或失败标识。 - 删除客户:
DELETE /customer/delete/{id}
,根据客户ID删除客户,返回成功或失败标识。 - 查询客户列表:
GET /customer/list
,可根据条件查询客户列表,返回客户信息列表。 - 查询单个客户:
GET /customer/{id}
,根据客户ID查询客户详细信息,返回客户信息对象。
- 添加客户:
- 销售管理接口
- 添加销售机会:
POST /saleOpportunity/add
,请求参数为销售机会信息对象,返回成功或失败标识。 - 修改销售机会:
PUT /saleOpportunity/update
,请求参数为销售机会信息对象,返回成功或失败标识。 - 删除销售机会:
DELETE /saleOpportunity/delete/{id}
,根据销售机会ID删除销售机会,返回成功或失败标识。 - 查询销售机会列表:
GET /saleOpportunity/list
,可根据条件查询销售机会列表,返回销售机会信息列表。 - 查询单个销售机会:
GET /saleOpportunity/{id}
,根据销售机会ID查询销售机会详细信息,返回销售机会信息对象。
- 添加销售机会:
- 服务管理接口
- 创建服务工单:
POST /service/create
,请求参数为服务工单信息对象,返回成功或失败标识。 - 分配服务工单:
PUT /service/assign
,请求参数为服务工单分配信息对象,返回成功或失败标识。 - 处理服务工单:
PUT /service/handle
,请求参数为服务工单处理结果对象,返回成功或失败标识。 - 查询服务工单列表:
GET /service/list
,可根据条件查询服务工单列表,返回服务工单信息列表。 - 查询单个服务工单:
GET /service/{id}
,根据服务工单ID查询服务工单详细信息,返回服务工单信息对象。
- 创建服务工单:
- 数据分析接口
- 获取客户数据统计信息:
GET /analysis/customer
,返回客户数据统计结果对象。 - 获取销售数据统计信息:
GET /analysis/sales
,返回销售数据统计结果对象。 - 获取服务数据统计信息:
GET /analysis/service
,返回服务数据统计结果对象。
- 获取客户数据统计信息:
- 系统管理接口
- 用户注册:
POST /user/register
,请求参数为用户注册信息对象,返回成功或失败标识。 - 用户登录:
POST /user/login
,请求参数为用户登录信息对象,返回登录成功后的用户信息对象及Token。 - 获取用户信息:
GET /user/info
,根据Token获取当前登录用户信息,返回用户信息对象。 - 修改用户密码:
PUT /user/password/update
,请求参数为用户密码修改信息对象,返回成功或失败标识。 - 角色管理接口(增删改查角色信息):
POST /role/add
、DELETE /role/delete/{id}
、PUT /role/update
、GET /role/list
等。 - 权限管理接口(增删改查权限信息、分配权限等):
POST /permission/add
、DELETE /permission/delete/{id}
、PUT /permission/update
、GET /permission/list
、PUT /permission/assign
等。 - 数据字典管理接口(增删改查数据字典项和类型):
POST /dictionary/item/add
、DELETE /dictionary/item/delete/{id}
、PUT /dictionary/item/update
、GET /dictionary/item/list
、POST /dictionary/type/add
、DELETE /dictionary/type/delete/{id}
、PUT /dictionary/type/update
、GET /dictionary/type/list
等。 - 系统监控接口(获取系统运行状态信息):
GET /monitor/system
,返回系统运行状态信息对象。
- 用户注册:
三、系统部署设计
3.1 部署环境要求
- 硬件环境:服务器配置推荐为4核CPU、8GB内存、500GB硬盘及以上。
- 软件环境:操作系统选用Linux(如CentOS 7),JDK版本8及以上,Tomcat 8及以上,MySQL 5.7及以上。
3.2 部署架构图
3.3 部署步骤
- 在服务器上安装Linux操作系统,配置好网络环境。
- 安装JDK,配置环境变量。
- 安装Tomcat,配置端口号、虚拟目录等参数。
- 安装MySQL数据库,创建数据库和用户,授权访问权限。
- 将项目打包成WAR文件,部署到Tomcat的webapps目录下。
- 启动Tomcat服务器,访问项目进行测试。
四、部分实现页面