本文主要分享【CRM项目】,技术文章【CRM项目-模块一】为【良師益友】投稿,如果你遇到相关问题,本文相关知识或能到你。CRM项目模块一:CRM-用户管理1.CRM基本概念CRM系统即客
本文主要分享【CRM项目】,技术文章【CRM项目-模块一】为【良師益友】投稿,如果你遇到相关问题,本文相关知识或能到你。
CRM项目
模块一:CRM-用户管理
1.CRM基本概念
CRM 系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系。 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制。客户关系管理的定义是:企业为提高核心竞争力,利用相应的信息技术以及互联网技术来协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。 其最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户,增加公司市场份额。
CRM 的实施目标就是通过全面提升企业业务流程的管理来降低企业成本,通过提供更快速和周到的优质服务来吸引和保持更多的客户。作为一种新型管理机制,CRM 极大地改善了企业与客户之间的关系,应用于企业的市场营销、销售、服务与技术支持等与客户相关的领域。
2.CRM分类
根据客户的类型不同,CRM 可以分为 B to B CRM 及 B to C CRM。 BtoB CRM 中管理的客户是企业客户,而 B to C CRM 管理的客户则是个人客户。
根据 CRM 管理侧重点不同又分为操作性和分析型 CRM。大部分 CRM 为操作型 CRM,支持CRM的日常作业流程的每个环节,而分析型 CRM 则偏重于数据分析。
3.企业项目开发流程
4.CRM系统模块划分
基础模块:包含系统基本的用户登录,退出,记住我,密码修改等基本操作。
营销机会管理 :企业客户的质询需求所建立的信息录入功能,方便销售人员进行后续的客户需求跟踪。
客户信息管理 :Crm 系统中完整记录客户信息来源的数据、企业与客户交往、客户订单查询等信息录入功能,方便企业与客户进行相应的信息交流与后续合作。
客户流失管理 :Crm 通过一定规则机制所定义的流失客户(无效客户),通过该规则可以有效管理客户信息资源,提高营销开发的效率。
服务管理 :是针对客户而开发的功能,针对客户要求,Crm 提供客户相应的信息质询,反馈与投诉功能,提高企业对于客户的服务质量。
数据报表 :Crm 提供的数据报表功能能够帮助企业了解客户整体分布,了解客户开发结果整体信息,从而帮助企业整体调整客户开发计划,提高企业的在市场中的竞争力度。
系统管理 :
系统管理包含常量字典维护工作,以及权限管理模块,Crm 权限管理是基于角色的一种权限控制,基于 RBAC 实现基于角色的权限控制,通过不同角色的用户登录该系统后展示系统不同的操作功能,从而达到对不同角色完成不同操作功能。
5.CRM 系统数据库设计
E-R图表:
营销管理模块(t_cus_dev_plan--->t_sale_chance)
客户管理模块(t_customer_linkman/contact/order/details--->t_customer)
客户流失管理(t_customer_reprieve--->t_customer_loss--->t_customer)
服务管理(t_customer_serve)
系统管理(t_user_role--->t_user/t_role t_permission--->t_role/t_module)
字典&日志管理(t_log t_datadic)
6.项目技术栈:LayUI,Freemarker,MySql,Java11,Mybatis,Spring5.X,SpringMvc,SpringBoot
7.环境搭建与测试
(1)新建项目:在 IDEA 中,新建 SpringBoot 项目,项目名设置为 crm
(2)引入坐标 & 插件:在 pom.xml 文件中,添加项目集成环境所需要的依赖坐标与插件
(3)添加配置文件:src/main/resources 目录下新建 application.yml 配置文件
(4)添加视图转发:新建 com.yjxxt.crm.controller 包,添加系统登录,主页面转发代码 。(这里先引入 base 包,具体文件见相关目录)
(5)添加静态资源:在 src/main/resources 目录下新建 public 目录,存放系统相关静态资源文件,拷贝静态文件内容到public 目录。
(6)添加视图模板:在 src/main/resources 目录下新建 views 目录,添加 index.ftl、main.ftl 等文件。 (具体视图文件详见相关目录)
(7)添加应用启动类:在 com.yjxxt.crm 包下新建 Starter.java,核心代码如下:
(8)项目目录结构
8.用户登录功能实现
(1)自动生成代码(generatorConfig.xml):在 src/main/resources 目录下,添加 generatorConfig.xml 配置文件。需要修改数据库驱动路径、数据库账号密码等信息。
(2)执行命令:使用mybatis-generator生成Mybatis代码。能够生成 vo 类、能生成 mapper 映射文件(其中包括基本的增删改查功能)、能生成 mapper 接口。
9.用户登录核心思路分析
(1)验证参数
姓名 非空判断
密码 非空判断
(2)根据用户名,查询用户对象
(3)判断用户是否存在
用户对象为空,记录不存在,方法结束
(4)用户对象不为空
用户存在,校验密码
密码不正确,方法结束
(5)密码正确
用户登录成功,返回用户的相关信息 (定义UserModel类,返回用户某些信息)
10.核心代码实现
(1)UserModel:
定义 UserModel 实体类,用来返回登录成功后的用户信息(空构造,getset方法省略)
(2)UserService:
用户登录具体的业务逻辑的实现
(3)UserMapper:
在 UserMapper 接口类中定义对应的查询方法
(4)UserMapper.xml:
配置查询对应的 SQL 语句
(5)UserController:
(6)Starter
修改启动类,在启动类上添加 @MapperScan 注解,设置扫描包范围。
(7) PostMan 测试:
利用 Postman 工具,对用户登录的接口进行测试。
(8)前端登录功能实现:
index.ftl 添加对应 index.js,使用 layui 表单组件实现表单提交操作。
return false;
(9)修改 COOKIE 的数据:
将 COOKIE 中的 userId 的值加密存储。
修改 UserModel 中的属性字段,将 Integer 类型的 userId 属性改为 String 类型的 userIdStr.
修改 UserService 中对应的方法,将 userId 的值加密
修改 index.js 中存储 COOKIE 的值
(10)主页面显示用户名信息:
在 IndexController控制器中,main 方法转发时,查询登录用户信息并放置到 request 域。
在 main.ftl 中获取作用域中的 user 对象,显示登录用户信息
(11)启动程序测试登录效果
使用测试账号执行登录操作。(用户名:admin ,密码:123)
11.密码修改功能实现
(1)核心思路分析:
*1. 参数校验
userId 非空 用户对象必须存在
oldPassword 非空 与数据库中密文密码保持一致
newPassword 非空 与原始密码不能相同
confirmPassword 非空 与新密码保持一致
* 2. 设置用户新密码
新密码进行加密处理
* 3. 执行更新操作
受影响的行数小于1,则表示修改失败
(2)UserService:
updateUserPassword 方法实现(用户密码修改)
checkUserPasswordParams方法实现(验证用户密码参数)
(3)UserController:
updateUserPassword 方法实现
(4)PostMan 测试:在 Postman 中添加 COOKIE:
(5)前端核心代码
*1.在 src/main/resources 目录的 views 目录下,新建 user 目录,将 password.ftl 文件拷贝进去
*2.在 layuimini 布局页面,通过点击"修改密码" ,请求后端的 user/toPasswordPage 接口
*3.在 UserController 控制层,添加对应的视图转发方法
(6)前端核心 JS
准备密码修改页对应 JS 文件。添加表单提交代码,使用 ajax 对接后端密码修改接口实现密码修改操作, 当密码修改后清除客户端 COOKIE 信息并跳转至登录页面。(添加 password.js 文件)
//取消默认表单的跳转
return false;
(7)测试操作
原始密码:123,修改后密码:123456,点击保存按钮
12.用户退出功能实现
退出登录:找到 "退出登录" 的元素,并绑定点击事件。当用户点击退出时,清空COOKIE信息
在 main.js 中,通过类选择器绑定元素的点击事件
13.全局异常统一处理
(1) 全局异常实现思路
控制层的方法返回的内容两种情况
*1. 视图:视图异常
*2. Json:方法执行错误 返回错误json信息
(2)全局异常拦截器实现
实现 HandlerExceptionResolver 接口 ,处理应用程序异常信息
(3)消除 try-catch 代码
系统引入全局异常,简化控制层 try-catch 代码
14.非法请求拦截
(1)实现思路
判断用户是否是登录状态
获取COOKIE对象,解析用户ID的值
如果用户ID不为空,且在数据库中存在对应的用户记录,表示请求合法
否则,请求不合法,进行拦截,重定向到登录页面
(2)定义拦截器
新建 interceptors 包,创建 NoLoginInterceptor 类,并继承 HandlerInterceptorAdapter 适配器,
实现拦截器功能。
(3)在全局异常处理类中引入未登录异常判断
(4)拦截器生效配置
新建 config 包,添加拦截器生效的配置类
(5)拦截测试
(6)测试拦截效果 : 当 COOKIE 中的用户ID不存在时,访问 main 页面,会自动跳转到登录页面
(7)记住密码功能实现
记住我功能核心在于当用户上次登录时如果点击了记住我,下次在重新打开浏览器时可以不用选择登录,此时可以借助拦截器 + COOKIE 来实现,当用户在登录时,如果用户点击了记住我功能,默设置COOKIE存储时间为7天即可
*1.修改 index.ftl
在用户登录表单中添加记住密码的复选框
*2.修改 index.js
如果用户在登录时,勾选了 "记住我" 的复选框,则在登录成功之后,设置 COOKIE 的有效期
本文《CRM项目-模块一》版权归良師益友所有,引用CRM项目-模块一需遵循CC 4.0 BY-SA版权协议。