热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CRM项目-模块一(CRM项目)

本文主要分享【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版权协议。


推荐阅读
  • oracle恢复失败,RMAN数据库恢复失败解决一例
    问题:这是一个从RAC环境的数据库的RAMN备份恢复到一个单机数据库的操作。当恢复数据文件和恢复正常,但在open数据库时出报下面的错误。--rman备 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
author-avatar
清新的淡淡茶绿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有