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 的有效期

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值