Springboot项目CRM客户关系管理系统:

系统实现了CRM客户关系系统的基本功能,主要有看板(当月参与的业务机会、当月转化情况、将要结束的业务机会等)、业务机会(初步接触中、需求分析中、协商方案中、商业谈判中的业务机会)、客户管理、联系人管理、个人日报管理、查看团队日报、主数据管理(组织架构管理)、系统管理(用户管理、角色管理、菜单管理)。

java crm 开源 java crm系统_maven


java crm 开源 java crm系统_java_02


java crm 开源 java crm系统_java_03


java crm 开源 java crm系统_List_04


java crm 开源 java crm系统_maven_05


java crm 开源 java crm系统_java_06


java crm 开源 java crm系统_maven_07


角色控制层:

/**
• @author yy
 */
 @Controller
 @RequestMapping("/role")
 public class RoleController extends BaseController{
 private String prefix = “system/role/”;
@Autowired
 IUserService iUserService;
@Autowired
 IRoleService iRoleService;
@Autowired
 IPermissionService iPermissionService;
/**
 *• @描述 页面跳转
• 
• @date 2018/9/16 10:59
 */
 @RequestMapping("/tolist")
 @RequiresPermissions(“role:list”)
 public String tolist()
 {
 return prefix + “role”;
 }/**
 *• @描述 ajax请求所有
• 
• @date 2018/9/16 10:48
 */
 @RequestMapping("/ajaxlist")
 @ResponseBody
 public List list(Role role)
 {
 List roles = iRoleService.selectRoleList(role);
 return roles;
 }/**
 *• @描述 列表
• 
• @date 2018/9/16 10:52
 */
 @RequestMapping("/tableList")
 @ResponseBody
 public TableDataInfo listPag(Role role)
 {
 //开启分页
 startPage();
 List roles = iRoleService.selectRoleList(role);
 return getDataTable(roles);
 }/**
 *• @描述 新增页面
• 
• @date 2018/9/16 11:37
 */
 @RequestMapping("/toAdd")
 @RequiresPermissions(“role:add”)
 public String toAdd(Model model)
 {
 return prefix + “add”;
 }/**
 *• @描述 批量删除
• 
• @date 2018/9/16 11:53
 */
 @RequestMapping("/del")
 @RequiresPermissions(“role:del”)
 @Operlog(modal = “角色管理”,descr = “删除角色”)
 @ResponseBody
 public AjaxResult del(Integer[] ids)
 {
 try
 {
 iRoleService.deleteByPrimaryKeys(ids);
 }
 catch (Exception e)
 {
 return error(e.getMessage());
 }
 return success();
 }/**
 *• @描述 添加保存
• 
• @date 2018/9/16 11:54
 */@RequestMapping("/addSave")
 @RequiresPermissions(“role:update”)
 @Operlog(modal = “角色管理”,descr = “添加角色”)
 @ResponseBody
 public AjaxResult addRole(Role role, Integer[] ids)
 {
 role.setCreateTime(new Date());
 int insert = 0;
 try
 {
 if (StringUtils.isEmpty(ids))
 {
 ids = new Integer[0];
 }
 insert = iRoleService.insert(role, ids);
 }
 catch (Exception e)
 {
 return error(e.getMessage());
 }
 //清空缓存
 ShiroUtils.clearCachedAuthorizationInfo();
 return result(insert);
 }/**
 *• @描述: 根据ID 获取u他的所有权限 做回显
• 
• @params: roleId 角色Id
• @return:
• @date: 2018/9/27 14:04
 */
 @RequestMapping("/selectById/{roleId}")
 @ResponseBody
 public Role selectById(@PathVariable(“roleId”) Integer roleId)
 {
 Role role = iRoleService.selectByPrimaryKey(roleId);
 return role;
 }/**
 *• @描述 编辑修改页面
• 
• @date 2018/9/16 14:06
 */
 @RequestMapping("/edit/{id}")
 @RequiresPermissions(“role:update”)
 public String edit(@PathVariable(“id”) Integer id, Model model)
 {
 Role role = iRoleService.selectByPrimaryKey(id);
 model.addAttribute(“Role”, role);
 return prefix + “edit”;
 }/**
 *• @描述 编辑修改权限页面
• 
• @date 2018/9/16 14:06
 */
 @RequestMapping("/editPower/{id}")
 @RequiresPermissions(“role:update”)
 public String editPower(@PathVariable(“id”) Integer id, Model model)
 {
 Role role = iRoleService.selectByPrimaryKey(id);
 model.addAttribute(“Role”, role);
 return prefix + “editPower”;
 }/**
 *• @描述 修改角色信息保存
• 
• @date 2018/9/16 16:12
 */
 @RequestMapping("/editSave")
 @RequiresPermissions(“role:update”)
 @Operlog(modal = “角色管理”,descr = “修改角色信息”)
 @ResponseBody
 public AjaxResult save(Role role)
 {
 int i = 0;
 try
 {
 i = iRoleService.updateByPrimaryKeySelective(role);
 }
 catch (Exception e)
 {
 return error(e.getMessage());
 }
 return result(i);
 }/**
 *• @描述 修改角色权限信息保存
• 
• @date 2018/9/16 16:12
 */
 @RequestMapping("/editPowerSave")
 @RequiresPermissions(“role:update”)
 @Operlog(modal = “角色管理”,descr = “修改角色权限”)
 @ResponseBody
 public AjaxResult editPowerSave(Role role, Integer[] ids)
 {
 int i = 0;
 try
 {
 if (StringUtils.isEmpty(ids))
 {
 ids = new Integer[0];
 }
 i = iRoleService.updateByPrimaryKeyPowerSelective(role, ids);
 }
 catch (Exception e)
 {
 return error(e.getMessage());
 }
 //清空缓存
 ShiroUtils.clearCachedAuthorizationInfo();
 //如果用户正在修改的角色id 是当前用户的角色id 则刷新 subject的User信息
 if (role.getRoleId().equals(getRoleId()))
 {
 ShiroUtils.reloadUser(iUserService.selectByPrimaryKey(getUserId()));
 }
 return result(i);
 }/**
• 校验名称唯一
 */
 @PostMapping("/checkRoleNameUnique")
 @ResponseBody
 public String checkDeptNameUnique(Role role)
 {
 String uniqueFlag = “0”;
 if (role != null)
 {
 uniqueFlag = iRoleService.checkRoleNameUnique(role);
 }
 return uniqueFlag;
 }
 }
 登录控制层:
 @RequestMapping("/login")
 public class LoginController extends BaseController{
 private static final Logger logger = LoggerFactory.getLogger(LoginController.class);private String prefix = “system/user/”;
@Autowired
 LoginService loginService;@Autowired
 IUserService userService;/**
 *• @描述: 执行登录操作
• 
• @params: user:用户登录信息;
validateCode:验证码• @return:
• @date: 2018/9/29 21:20
 */
 @RequestMapping("/login")
 @Operlog(descr = “用户登录”, modal = “登录模块”)
 @ResponseBody
 public AjaxResult Logining(User user, String validateCode, Boolean rememberMe, HttpServletRequest request)
 {
 HttpSession session = ServletUtils.getSession();
UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPwd());
 token.setRememberMe(rememberMe);
 Subject subject = SecurityUtils.getSubject();
//验证用户名和密码 验证码的问题
 try
 {
 loginService.checkLogin(user.getName(), user.getPwd(), validateCode);
 }
 catch (Exception e)
 {
 session.setAttribute(Constants.LOGIN_ERROR, e.getMessage());
 return error(e.getMessage());
 }
 try
 {
 if (!subject.isAuthenticated())
 {
 subject.login(token);
 }
 }
 catch (IncorrectCredentialsException e)
 {
 session.setAttribute(Constants.LOGIN_ERROR,“密码错误”);
 return error(“密码错误!”);
 }
 catch (UnknownAccountException e)
 {
 session.setAttribute(Constants.LOGIN_ERROR,e.getMessage());
 return error(e.getMessage());
 }
 catch (LockedAccountException e)
 {
 session.setAttribute(“login”,e.getMessage());
 return error(e.getMessage());
 }
 catch (AuthenticationException e)
 {
 // String msg = “用户名或密码错误!”;
 // if (!StringUtils.isEmpty(e.getMessage()))
 // {
 // msg = e.getMessage();
 // }
 session.setAttribute(Constants.LOGIN_ERROR,e.getMessage());
 return error(“系统异常!”);
 }
return success();
 }/**
 s sl
 *• @描述: 登录页面
• 
• @params:
• @return:
• @date: 2018/9/29 21:20
 */
 @RequestMapping("/toLogin")
 public String toLogin()
 {
 return “login”;
 }}
 部门控制层:/**
• @author yy
 */
 @Controller
 @RequestMapping("/dept")
 public class DeptController extends BaseController{
private String prefix = “system/dept/”;
@Autowired
 IDeptService iDeptService;
@Autowired
 IUserService iUserService;
/**
 *• @描述 页面跳转到部门
• 
• @date 2018/9/16 10:59
 */@RequestMapping("/tolist")
 @RequiresPermissions(“dept:list”)
 public String tolist()
 {
 return prefix + “dept”;
 }/**
 *• @描述 ajax请求的所有部门
• 
• @date 2018/9/16 10:48
 */
 @RequestMapping("/ajaxlist")
 @ResponseBody
 public List list(Dept dept)
 {
 List depts = iDeptService.selectDeptList(dept);
 return depts;
 }/**
 *• @描述 部门列表页
• 
• @date 2018/9/16 10:52
 */
 @RequestMapping("/tableList")
 @ResponseBody
 public TableDataInfo listPag(Dept dept)
 {
 //开启分页
 startPage();
 List depts = iDeptService.selectDeptList(dept);
 return getDataTable(depts);
 }/**
 *• @描述 新增页面
• 
• @date 2018/9/16 11:37
 */
 @RequiresPermissions(“dept:add”)
 @RequestMapping("/toAdd")
 public String toAdd(Model model)
 {
 List users = iUserService.selectByUser(new User());
 model.addAttribute(“users”, users);
 return prefix + “add”;
 }/**
 *• @描述: 查询所有部门下的所有用户 用户归类 树状数据
• 
• @date: 2018/9/27 11:25
 */
 @RequestMapping("/getDeptAndUserTreeData")
 @ResponseBody
 public List DeptAndUserTreeData()
 {
 List depts = iDeptService.selectDeptAndUser();
List users=new ArrayList<>();
 LinkedList deptList = new LinkedList<>();
 for (Dept dept : depts)
 {
 Map<String, Object> deptMap = new HashMap();
 deptMap.put(“name”, dept.getDeptName());
 deptMap.put(“id”, null);
 users = dept.getUsers();
 LinkedList userlist = new LinkedList<>();
 for (User user : users)
 {
 Map<String, Object> userMap = new HashMap();
 userMap.put(“name”,user.getName());
 userMap.put(“id”,user.getUid());
 userMap.put(“icon”,"/img/timg.jpg");
 userlist.add(userMap);
 }
 deptMap.put(“children”,userlist);
 deptList.add(deptMap);
 }
return deptList;
 }/**
 *• @描述 批量删除
• 
• @date 2018/9/16 11:53
 */
 @RequestMapping("/del")
 @RequiresPermissions(“dept:del”)
 @ResponseBody
 @Operlog(modal = “部门管理”,descr = “删除部门”)
 public AjaxResult del(String[] ids)
 {
 try
 {
 iDeptService.deleteByPrimaryKeys(ids);
 }
 catch (Exception e)
 {
 return error(e.getMessage());
 }
 return success();
 }/**
 *• @描述 执行保存操作
• 
• @date 2018/9/16 11:54
 */@RequestMapping("/addSave")
 @Operlog(modal = “部门管理”,descr = “添加部门”)
 @RequiresPermissions(“dept:add”)
 @ResponseBody
 public AjaxResult addDept(Dept dept)
 {
 dept.setCreateTime(new Date());
 return result(iDeptService.insertSelective(dept));
 }/**
 *• @描述 编辑修改页面
• 
• @date 2018/9/16 14:06
 */
 @RequestMapping("/edit/{id}")
 @RequiresPermissions(“dept:update”)
 public String edit(@PathVariable(“id”) String id, Model model)
 {
 Dept dept = iDeptService.selectByPrimaryKey(id);
 List users = iUserService.selectByUser(new User());
 model.addAttribute(“users”, users);
model.addAttribute(“Dept”, dept);
 return prefix + “edit”;}
/**
 *• @描述 修改保存
• 
• @date 2018/9/16 16:12
 */
 @RequestMapping("/editSave")
 @RequiresPermissions(“dept:update”)
 @Operlog(modal = “部门管理”,descr = “修改信息”)
 @ResponseBody
 public AjaxResult save(Dept dept)
 {
 int i = 0;
 try
 {
 i = iDeptService.updateByPrimaryKeySelective(dept);
 }
 catch (Exception e)
 {
 return error(e.getMessage());
 }
 return result(i);
 }/**
• 校验部门名称
 */
 @PostMapping("/checkDeptNameUnique")
 @ResponseBody
 public String checkDeptNameUnique(Dept dept)
 {
 String uniqueFlag = “0”;
 if (dept != null)
 {
 uniqueFlag = iDeptService.checkDeptNameUnique(dept);
 }
 return uniqueFlag;
 }
 }