树人教育CRM系统总结
一、系统说明
1.1 概述
该系统是一个教育培训公司的客户关系管理系统,通过该系统可以方便进行潜在客户的挖掘跟踪、正式学员的管理、教务管理、公司部门员工的管理以及可以提供实时的数据分析供决策者使用。
1.2 系统流程概要
1.3 用户与角色
系统管理员:
管理系统模块的初始化,包括部门、数据字典,特别是权限分配和角色的创建,保证系统正常运行。
人事专员:
管理系统用户(新建、更新和重置密码等)
角色分配
员工详细档案维护
市场部主管:
管理下面的市场人员
市场专员:
联络高校,高校负责人
开展高校讲座和实训.
跟进高校学生
咨询部主管:
管理下面的咨询师
咨询师:
跟进社招学员,
学员跟踪
学生试听管理
班主任:
管理课程
管理学员
行政部:
教室管理
1.4 遵循的标准或规范
本系统采用MySQL数据库,使用Java EE进行开发,采用SpringMVC+Spring+MyBatis平台的B/S架构。数据库设计原则上符合第三范式,且规范,易于维护。
程序使用MVC模式,采用三层架构,保证系统的可维护性和可扩展性。
二、功能介绍
本系统分客户服务、学员管理、教务管理、日常办公、系统管理五大模块,同时进行权限管理。
2.1 客户服务模块
主要方便市场部和咨询部人员对客户(潜在个人客户和高校大客户)的挖掘、开发、跟踪管理,将潜在客户转化为正式客户。
2.1.1 潜在学员管理
业务概述
将收集到的潜在客户录入系统,交由咨询师或市场人员进行后续的跟踪开发,用户可以方便地查看客户信息,记录跟进信息,做到有的放矢,提升客户开发效果。
使用者
市场部主管、市场专员、
咨询部主管、咨询师
权限控制
如果登录用户是主管:可以查看所有的客户信息;
如果登录用户是专员:只能查看自己对应的客户信息。
/*
实现原理:
如果拥有权限而没有咨询师或市场专员的角色,则查出所有客户信息;
如果同时拥有权限和咨询师或市场专员的角色,则查出对应客户信息。
*/
@Override
public PageResult query(ClientQueryObject qo) {
boolean clientListPermission = SecurityUtils.getSubject().isPermitted("client:list");
boolean[] hasRoleOfMrkAndConsult = SecurityUtils.getSubject().hasRoles(Arrays.asList("市场专员", "咨询师"));
if (clientListPermission) {
Employee currentEmp = (Employee) SecurityUtils.getSubject().getPrincipal();
// 市场专员
if (hasRoleOfMrkAndConsult[0]) {
qo.setInputUserId(currentEmp.getId());
}
// 咨询专员
if (hasRoleOfMrkAndConsult[1]) {
qo.setSalemanId(currentEmp.getId());
}
// 高级别员工,查出所有
int i = clientMapper.queryForCount(qo);
if (i == 0) {
return new PageResult(i, Collections.emptyList());
}
List<Client> clients = clientMapper.queryForList(qo);
return new PageResult(i, clients);
}
return new PageResult(0, Collections.emptyList());
}
潜在学员管理主页面
新增功能
潜在客户信息的录入一部分是手动录入,一部分是从数据字典查出方便用户录入。
需完善:
- 输入框验;
- 如果手机号或qq号和已存在的客户一致,则予录入并给出提示。
导出功能
只能导出自己对应的潜在客户;
后台使用 JXL 工具进行Excel表的导入导出。
跟踪功能
1、对潜在客户执行一次跟进操作:
- 会将客户的信息更新;
- 跟踪次数自动增加1次;
- 会往跟踪记录表(clientTrace)中插入一条跟进记录;
2、难点:
- 潜在客户的跟踪(会更新client、新增一条clientTrace)和跟踪记录的编辑都使用的是同一个表单;
- 提交表单会同时对两个表进行操作;
- 此时,如何判断到底是要新增一条跟进记录还是更新一条跟进记录不能简单通过id来判断,因为form表单中隐藏的id既对应了客户(client),也对应了跟踪记录(clientTrace)
2、解决方案:
- 在表单中额外添加一个隐藏clientId作为标识;
- 对于clientTrace对象,通过clientId标识来判断到底是执行新增还是编辑;
- 在更新跟踪记录时,将clientTrace中关联的client的id重新设置给client,方便更新client对象。
// jsp中
<form id="clientTraceAdd_form" method="post">
<input type="hidden" name="id">
<input type="hidden" name="clientId">
...
</from>
// js中 编辑跟踪记录
// 设置clientID值,表示编辑
clientTrace["clientId"] = 1;
// java中
public JsonResult saveOrUpdate(ClientTrace clientTrace, Client client) {
try {
JsonResult result = new JsonResult(true, "新增跟踪记录成功");
if (clientTrace.getClientId() != null) {
client.setId(clientTrace.getClient().getId());
clientTraceService.updateByPrimaryKey(clientTrace);
result.setMessage("更新成功");
} else {
clientTrace.setId(null);
clientTraceService.insert(clientTrace);
}
clientService.updateWhenTrace(client);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return new JsonResult(false, "操作失败!");
}
放入资源池
将client对象中关联的saleman设置为null
考试登记
潜在客户转正式学员前会有一次摸底考试;
登记信息可以在考试管理子模块查询到。
下一篇: 基于 SSM 的 CRM 客户管理系统
推荐阅读