CRM智能办公
项目介绍
本应用是一个客户关系管理系统,主要包括五大模块,分别是营销管理,客户管理,服务管理,统计报表和系统管理,为客户关系管理提供简单的数据管理与分析
技术选型方面,该项目是一个SpringBoot
的单体应用,项目使用SpringBoot2
框架快速开发,数据访问层使用Mybatis
框架,页面渲染引擎使用Freemarker
,页面样式使用Layui
,日志方面选用的是logback
,统计报表部分使用的是ECharts
,数据库使用的Mysql 8.0版本;
安装教程
-
在mysql(默认为mysql8)中创建名为
crm
的数据库,并执行源码根目录的crm.sql
脚本生成数据库表以及数据 -
将项目源码导入idea中,指定项目的jdk版本为jdk8或以上,并标记为maven项目,下载所需依赖
-
修改
application.yml
中针对于数据库的配置(主要是数据库名和数据库密码) -
修改logback.xml中,第4行,日志文件的存储地址,改为自己的路径;
-
启动项目测试是否正常,默认启动地址首页为
http://localhost:1212/crm
,默认数据库中的管理员为admin
,密码为123456
,可在登录系统之后自行修改用户密码
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
}
/**
*
* 描述:获取忘记密码时的验证码
* @author wanghaoyu
* @version 1.0
* @param email
* @return
* @exception Nothing
* @since 1.8
*
*/
@Operation(name="获取找回密码所需的验证码")
@RequestMapping("/getForgotPasswdCode")
@ResponseBody
public Map<String, Object> getForgotPasswdCode(String email){
Map<String, Object> map = new HashMap<String, Object>(16);
boolean success = false;
String msg = "";
if(userService.findByEmail(email) == null){
//找不到该邮箱的账号
msg = "不存在的账号!";
* @author huangqingwen
*/
public List<Permission> getUserPermission(List<Permission> permissions, Integer[] array){
if(permissions == null) {
return null;
}
for(int i=permissions.size()-1; i>=0; i--) {
Permission permission = permissions.get(i);
boolean flag = false;
for (Integer a : array) {
if(permission.getId().equals(a)) {
flag = true;
maps.put("msg", "验证码获取失败! 请刷新页面!");
return maps;
}
sessionCode = sessionCode.toLowerCase();
if(!sessionCode.equals(verifyCode)) {
maps.put("code", 200);
maps.put("msg", "验证码不正确!");
return maps;
}
//2.判断用户账号密码
Subject subject = SecurityUtils.getSubject();
System.err.println("==============================" +subject.isAuthenticated());
//判断用户是否已经登陆
if(!subject.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken(user.getAccount(),user.getPassword());
try {
subject.login(token);
//验证成功
//登陆成功后的用户账号信息
String account = (String)subject.getPrincipal();
//根据用户账号,查询用户,并保存到session域中
success = true;
msg = "查找成功!";
}else{
success = false;
msg = "查找失败!";
}
map.put("success", success);
map.put("code",0);
map.put("data", user);
map.put("msg", msg);
return map;
}
/**
*
* 描述:用户修改密码
* @author wanghaoyu
* @version 1.0
* @param user
* @return Map<String,Object>
/**
*
* 描述:编辑用户
* @author wanghaoyu
* @version 1.0
* @param user 要编辑的用户信息
* @return Map<String,Object>
* @exception Nothing
* @since 1.8
*
*/
@Operation(name="修改用户")
@RequiresPermissions(value={"1002","13002"}, logical=Logical.OR)
@RequestMapping("/editUser")
Map<String, Object> map = new HashMap<String, Object>(16);
// 用于判断返回给前台的结果
boolean success = false;
if (roleService.updateRoleByPrimaryKey(role)) {
success = true;
}
map.put("success", success);
map.put("code", 0);
return map;
}
/**
*
* 描述:添加职位
*
* @author wanghaoyu
* @version 1.0
* @param role
* @return Map<String,Object>
* @exception Nothing
* @since 1.8
*
*/
@Operation(name = "添加职位")
}
/**
*
* 描述:分配权限给特定的角色
*
* @author huangqingwen
* @version 1.0
* @param permissionId,
* roleId
* @return Map<String,Object>
* @exception Nothing
* @since 1.8
*
*/
@Operation(name = "分配权限")
@RequiresPermissions("4005")
@RequestMapping("allotPermission")
CustomerExample example = new CustomerExample();
Criteria criteria = example.createCriteria();
//设置分页参数
if(page == null || page <= 0) {
page = 1;
}
if(limit == null || limit <= 0) {
limit = 10;
}
String all = "all";
if(!all.equals(findtype)) {
example.setLimit(limit);
Long offset = new Long((page-1)*limit);
example.setOffset(offset);
}
//设置管理者ID
criteria.andManagerIdEqualTo(user.getId());
//只查询未删除的客户
criteria.andDeleteStatusEqualTo(0);
System.out.println(customer);
}
map.put("success", success);
map.put("code", 0);
return map;
}
/**
*
* 描述:检查用户邮箱是否可用
* @author wanghaoyu
* @version 1.0
* @param email
* @return Map<String,Object>
* @exception Nothing
* @since 1.8
@SuppressWarnings("unchecked")
@Operation(name="获取用户角色的权限菜单")
@RequiresAuthentication
@RequestMapping("/getRolePermissionMenu")
@ResponseBody
public Map<String, Object> getRolePermissionMenu(HttpServletRequest request){
Map<String, Object> maps = new HashMap<String, Object>(16);
//从session中获取用户角色
User user = (User)request.getSession().getAttribute("user");
List<Permission> userPermissions = null;
logger.info(user.toString());
//先从redis缓存中查找角色权限菜单
String roleMenu = "roleMenu-";
if(redisUtil.exists(roleMenu+user.getRoleId())) {
userPermissions = (List<Permission>) redisUtil.get("roleMenu-"+user.getRoleId());
}else {
//如果没有在缓存中找到,则从数据库中查找
//获取权限树
List<Permission> permissions = permissionService.selectTreePermission();
//查询该用户的角色所拥有的权限id
RolePermissionExample rolePermissionExample = new RolePermissionExample();