本人负责后端的开发(Java)
CRM系统即客户关系管理系统,是指企业用CRM技术来管理与客户之间的关系。他的目标是缩减销售周期和销售成本,增加收入,寻找扩展业务所需的新的市场和渠道以及提高客户的价值,满意度,营利性和忠实度。CRM项目的实施可以分为3步,即应用业务集成。业务诗句分析和决策执行。
<1> 项目业务介绍
客户关系管理是指企业为提高核心竞争力,利用相应的技术信息以及互联网技术协调企业与顾客间在消费,营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程,其最终目标是吸引新客户,保留老客户以及将已有客户转为忠实客户,增加市场
<2>开发环境
项目名称:CRM客户管理系统
系统作用:公司客户关系管理,潜在客户开发及订单合同管理
开发环境:IDEA Windows10 jdk1.8 Maven Mysql8
需要的工具:postman fiddler抓包工具或浏览器开发者工具
<3>开发技术
1.基础模块:包含系统基本的用户登录,退出,记住我,密码修改等基本操作。
2.营销管理:
营销机会管理:企业客户的质询需求所建立的信息录入功能
客户开发计划:开发计划是根据营销机会而来,对于企业质询的客户,会有相应的销售人员对于该客户
进行具体的沟通交流,此时对于整个 Crm 系统而言,通过营销开发计划来进行相应的信息管理,提高
客户的购买企业产品的可能性。
3.客户管理:
客户信息管理 :Crm 系统中完整记录客户信息来源的数据、企业与客户交往、客户订单查询等信息录
入功能,方便企业与客户进行相应的信息交流与后续合作。
客户流失管理 :Crm 通过一定规则机制所定义的流失客户(无效客户),通过该规则可以有效管理客
户信息资源,提高营销开发的效率。
5.数据报表:
Crm 提供的数据报表功能能够帮助企业了解客户整体分布,了解客户开发结果整体信息,从而帮助企业
整体调整客户开发计划,提高企业的在市场中的竞争力度。
6.系统管理:系统管理包含常量字典维护工作,以及权限管理模块,Crm 权限管理是基于角色的一种权限控制,基于
RBAC 实现基于角色的权限控制,通过不同角色的用户登录该系统后展示系统不同的操作功能,从而达
到对不同角色完成不同操作功能。
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)
这里注意:工具有点缺陷,每次需要改工具作用的表名
使用mybatis-generator生成Mybatis代码。能够生成 vo 类、能生成 mapper 映射文件(其中包括基本
的增删改查功能)、能生成 mapper 接口。
命令: mybatis-generator:generate -e
9.导入工具类,主要有:根据Cookie获取作用域,登录成功返回userIdStr加密,Md5协议加密,判断电话号码的格式,userID加解密等
主要讲解核心模块的核心代码
<1>.表结构分析
<2>.用户登录
定义UserModel类,用于用户登录成功返回的用户信息,用来设置前端的Cookie
设置cookie
退出登录时,删除前端Cookie即可
<3>全局统一的异常处理及非法请求的拦截
(1)统一的异常处理
全局异常实现思路:
控制层的方法返回的内容两种情况
- 视图:视图异常
- Json:方法执行错误 返回错误json信息
全局异常拦截器的实现,简化了try-catch代码
实现 HandlerExceptionResolver 接口 ,处理应用程序异常信息
(2)非法请求拦截
对于后端菜单资源,这里要求用户必须进行登录来保护 web 资源的安全性,此时引入非法请求拦截功
能。
实现思路:
判断用户是否是登录状态
获取Cookie对象,解析用户ID的值
如果用户ID不为空,且在数据库中存在对应的用户记录,表示请求合法
否则,请求不合法,进行拦截,重定向到登录页面
全局异常类配置:在全局异常处理类中引入未登录异常判断
拦截器生效配置:
测试拦截效果:
当 Cookie 中的用户ID不存在时,访问 main 页面,会自动跳转到登录页面
<3>记住我功能
记住我功能核心在于当用户上次登录时如果点击了记住我,下次在重新打开浏览器时可以不用选择登
录,此时可以借助拦截器 + cookie 来实现,当用户在登录时,如果用户点击了记住我功能,默认设置
cookie存储时间为7天即可。
<1>功能开发及表结构分析
功能开发:
表结构:
这里注意:时间格式化:
基本概念:RBAC是基于角色的访问控制( Role-Based Access Control )在RBAC中,权限与角色相关联,用户
通过扮演适当的角色从而得到这些角色的权限。这样管理都是层级相互依赖的,权限赋予给角色,角色
又赋予用户,这样的权限设计很清楚,管理起来很方便。
<1>.模块功能及表的结构设计
功能模块:
表结构设计:
从上面实体对应关系分析,权限表设计分为以下基本的五张表结构:用户表(t_user)、角色表(t_role)、
t_user_role(用户角色表)、资源表(t_module)、权限表(t_permission)
用户和角色间一对一关系,角色和权限间一对一关系,建立t_user_role和t_permission中间表
表结构关系如下:
<2>角色权限功能
当完成角色权限添加功能后,下一步就是对角色操作的资源进行认证操作,这里对于认证包含两块:
- 菜单级别显示控制
- 后端方法访问控制
查询出改用户所拥有的角色,然后根据角色查询出拥有的权限码,具体实现如下:
(1).菜单级别显示控制
系统根据登录用户扮演的不同角色来对登录用户操作的菜单进行动态控制显示操作,这里显示的控制使
用freemarker指令+内建函数实现
例如:
会根据权限码,来显示菜单内容:
(2).后端方法级别访问控制(AOP+注解实现)
自定义注解类:表示资源所需的权限码
方法级别使用注解:
例如:
定义aop切面类 拦截指定注解标注的方法:
<1>.模块功能及表结构设计
模块功能:
表结构设计:
t_customer 客户表、t_customer_contact 客户交往记录表、t_customer_linkman 客户联系人表、t_customer_order 客户订单表、t_order_details 订单详情表
<2>.定时器
当实现了客户数据转移业务逻辑代码后,这里需要思考一个问题:客户数据量的问题随着时间的积累,流失的客户数据可能就比较大,如果数据的获取在用户查询时进行,此时后端对于数据的查询就会变得很慢,此时可以使用我们之前讲到的定时任务来处理,后台通过定时器来对流失客户数据定时进行转移处理,从而当前端用户查询时只需到客户流失表查询流失数据即可。
增加定时器服务:
Starter开启定时任务环境配置:
<1>功能实现及表结构设计
功能实现:
表结构设计:
<2>服务实现
这里对于服务管理服务的创建,分配,处理与反馈后端代码实现放在同一个方法中进行处理,同时方便对于服务状态值统一处理,这里定义 CustomerServeStatus 枚举类来实现。
<1>.功能实现
功能实现:
<2>.使用ECharts对数据进行分析
ECharts官网:添加链接描述
折线图数据返回实现:
饼状图数据返回实现:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/10961.html