CRM系统即客户关系管理系统,是指企业用CRM技术来管理与客户之间的关系。他的目标是缩减销售周期和销售成本,增加收入,寻找扩展业务所需的新的市场和渠道以及提高客户的价值,满意度,营利性和忠实度。CRM项目的实施可以分为3步,即应用业务集成。业务诗句分析和决策执行。
客户关系管理是指企业为提高核心竞争力,利用相应的技术信息以及互联网技术协调企业与顾客间在消费,营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程,其最终目标是吸引新客户,保留老客户以及将已有客户转为忠实客户,增加市场
项目名称:CRM客户管理系统
系统作用:公司客户关系管理,潜在客户开发及订单合同管理
开发环境:IDEA Windows10 jdk1.8 Maven Mysql8
需要的工具:postman fiddler抓包工具或浏览器开发者工具
包含系统基本的用户登录,退出,记住我,密码修改等基本操作。
营销机会管理 :企业客户的质询需求所建立的信息录入功能,方便销售人员进行后续的客户需求跟
踪。
客户信息管理 :Crm 系统中完整记录客户信息来源的数据、企业与客户交往、客户订单查询等信息录
入功能,方便企业与客户进行相应的信息交流与后续合作。
客户流失管理 :Crm 通过一定规则机制所定义的流失客户(无效客户),通过该规则可以有效管理客
户信息资源,提高营销开发的效率。
服务管理是针对客户而开发的功能,针对客户要求,Crm 提供客户相应的信息质询,反馈与投诉功
能,提高企业对于客户的服务质量。
营销开发计划 :开发计划是根据营销机会而来,对于企业质询的客户,会有相应的销售人员对于该客户进行具 体的沟通交流,此时对于整个 Crm 系统而言,通过营销开发计划来进行相应的信息管理,提高客户的购买企 业产品的可能性。
Crm 提供的数据报表功能能够帮助企业了解客户整体分布,了解客户开发结果整体信息,从而帮助企
业整体调整客户开发计划,提高企业的在市场中的竞争力度。
系统管理包含常量字典维护工作,以及权限管理模块,Crm 权限管理是基于角色的一种权限控制,基
于 RBAC 实现基于角色的权限控制,通过不同角色的用户登录该系统后展示系统不同的操作功能,从而
达到对不同角色完成不同操作功能。
1.创建SpringBoot项目,导入依赖(见源代码)
2.在src/main/resources 目录下新建 application.yml 配置文件
3.新建 org.example.crm.controller 包,添加系统登录,主页面转发代码 。
4.添加静态资源:在 src/main/resources 目录下新建 public 目录,存放系统相关静态资源文件,拷贝静态文件内容到
public 目录。
5.添加视图模板:在 src/main/resources 目录下新建 views 目录,添加 index.ftl、main.ftl 等文件。 (具体视图文件详见
相关目录)
6.添加启动类:在 org.example.crm 包下新建 Starter.java 。
7.添加Base包:主要用户对Controller,Service Dao层的统一控制,BaseQuery用于控制按条件搜索的对象,ResultInfo是后端返回的对象的统一封装
8.准备MyBatis代码统一生成工具(generatorConfig.xml)
9.导入工具类,主要有:根据Cookie获取作用域,登录成功返回userIdStr加密,Md5协议加密,判断电话号码的格式,userID加解密等
实现思路
/**
* 用户登录
* 1. 验证参数
* 姓名 非空判断
* 密码 非空判断
* 2. 根据用户名,查询用户对象
* 3. 判断用户是否存在
* 用户对象为空,记录不存在,方法结束
* 4. 用户对象不为空
* 用户存在,校验密码
* 密码不正确,方法结束
* 5. 密码正确
* 用户登录成功,返回用户的相关信息 (定义UserModel类,返回用户某些信息)
*/
全局异常实现思路:
控制层的方法返回的内容两种情况
全局异常拦截器的实现,简化了try-catch代码
实现 HandlerExceptionResolver 接口 ,处理应用程序异常信息
对于后端菜单资源,这里要求用户必须进行登录来保护 web 资源的安全性,此时引入非法请求拦截功
能。
实现思路:
判断用户是否是登录状态
获取Cookie对象,解析用户ID的值
如果用户ID不为空,且在数据库中存在对应的用户记录,表示请求合法
否则,请求不合法,进行拦截,重定向到登录页面
定义拦截器:在新建 interceptors 包,创建 NoLoginInterceptor 类,并继承 HandlerInterceptorAdapter 适配器,
实现拦截器功能。
记住我功能核心在于当用户上次登录时如果点击了记住我,下次在重新打开浏览器时可以不用选择登
录,此时可以借助拦截器 + cookie 来实现,当用户在登录时,如果用户点击了记住我功能,默认设置
cookie存储时间为7天即可。
实现思路
/**
* 用户密码修改
* 1. 参数校验
* userId 非空 用户对象必须存在
* oldPassword 非空 与数据库中密文密码保持一致
* newPassword 非空 与原始密码不能相同
* confirmPassword 非空 与新密码保持一致
* 2. 设置用户新密码
* 新密码进行加密处理
* 3. 执行更新操作
* 受影响的行数小于1,则表示修改失败
*/
实现思路
找到 “退出登录” 的元素,并绑定点击事件。当用户点击退出时,清空cookie信息
在 main.js 中,通过类选择器绑定元素的点击事件
/**
* 用户退出
* 删除cookie
*/
$(".login-out").click(function () {
// 删除 cookie
$.removeCookie("userIdStr", {domain:"localhost",path:"/crm"});
$.removeCookie("userName", {domain:"localhost",path:"/crm"});
$.removeCookie("trueName", {domain:"localhost",path:"/crm"});
// 跳转到登录页面 (父窗口跳转)
window.parent.location.href = ctx + "/index";
});
实现思路
/**
* 营销机会数据添加
* 1.参数校验
* customerName:非空
* linkMan:非空
* linkPhone:非空 11位手机号
* 2.设置相关参数默认值
* state:默认未分配 如果选择分配人 state 为已分配
* assignTime:如果 如果选择分配人 时间为当前系统时间
* devResult:默认未开发 如果选择分配人devResult为开发中 0-未开发 1-开发中 2-开