日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

基于javaweb的crm客户关系管理系统(java+springboot+echarts+freemarker+layui+mysql)

發(fā)布時間:2023/12/31 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于javaweb的crm客户关系管理系统(java+springboot+echarts+freemarker+layui+mysql) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基于javaweb的crm客戶關(guān)系管理系統(tǒng)(java+springboot+echarts+freemarker+layui+mysql)

運行環(huán)境

Java≥8、MySQL≥5.7

開發(fā)工具

eclipse/idea/myeclipse/sts等均可配置運行

適用

課程設(shè)計,大作業(yè),畢業(yè)設(shè)計,項目練習,學習演示等

功能說明

基于javaweb+SpringBoot的crm客戶關(guān)系管理系統(tǒng)(java+SpringBoot+ECharts+Freemarker+Layui+maven+mysql)

CRM智能辦公

項目介紹

本應用是一個客戶關(guān)系管理系統(tǒng),主要包括五大模塊,分別是營銷管理,客戶管理,服務(wù)管理,統(tǒng)計報表和系統(tǒng)管理,為客戶關(guān)系管理提供簡單的數(shù)據(jù)管理與分析

技術(shù)選型方面,該項目是一個SpringBoot的單體應用,項目使用SpringBoot2框架快速開發(fā),數(shù)據(jù)訪問層使用Mybatis框架,頁面渲染引擎使用Freemarker,頁面樣式使用Layui,日志方面選用的是logback,統(tǒng)計報表部分使用的是ECharts,數(shù)據(jù)庫使用的Mysql 8.0版本;

安裝教程

  • 在mysql(默認為mysql8)中創(chuàng)建名為crm的數(shù)據(jù)庫,并執(zhí)行源碼根目錄的crm.sql腳本生成數(shù)據(jù)庫表以及數(shù)據(jù) 2. ?將項目源碼導入idea中,指定項目的jdk版本為jdk8或以上,并標記為maven項目,下載所需依賴 3. ?修改application.yml中針對于數(shù)據(jù)庫的配置(主要是數(shù)據(jù)庫名和數(shù)據(jù)庫密碼) 4. ?修改logback.xml中,第4行,日志文件的存儲地址,改為自己的路徑;

  • 啟動項目測試是否正常,默認啟動地址首頁為http://localhost:1212/crm,默認數(shù)據(jù)庫中的管理員為admin,密碼為123456,可在登錄系統(tǒng)之后自行修改用戶密碼

  • 用戶管理控制層:

    /**

    • @author yy

    */

    @Controller

    @RequestMapping(“/user”)

    public class UserController {

    @Autowired

    IUserService userService;

    @Autowired

    IRoleService roleService;

    @Autowired

    RedisUtil redisUtil;

    @Autowired

    MailUtil mailUtil;

    Logger logger = LoggerFactory.getLogger(UserController.class);

    /**

    • 描述:查找用戶

    • @param page

    • @param limit

    • @param user

    • @return

    */

    @Operation(name=“查找用戶”)

    @RequiresPermissions(“1001”)

    @RequestMapping(“/findUser”)

    @ResponseBody

    public Map<String, Object> findUser(Integer page,Integer limit, User user){

    Map<String, Object> map = new HashMap<String,Object>(16);

    //創(chuàng)建用戶模板類

    UserExample userExample = new UserExample();

    //創(chuàng)建查詢準則

    Criteria criteria = userExample.createCriteria();

    if(page == null || page <= 0) {

    page = 1;

    if(limit == null || limit <= 0) {

    limit = 10;

    //判斷user類的條件是否為空

    if(user.getRealName() != null) {

    criteria.andRealNameLike(“%”+user.getRealName()+“%”);

    if(user.getRoleId() != null) {

    logger.info(“獲得到的角色編號為:” + user.getRoleId());

    criteria.andRoleIdEqualTo(user.getRoleId());

    if(user.getAccount() != null) {

    criteria.andAccountLike(“%”+user.getAccount()+“%”);

    Long offset = new Long((page - 1) * limit);

    Long count = userService.countByExample(userExample);

    userExample.setLimit(limit);

    userExample.setOffset(offset);

    List list = userService.findByExample(userExample);

    logger.info(list.toString());

    map.put(“data”, list);

    map.put(“code”, 0);

    map.put(“msg”, “success”);

    map.put(“count”, count);

    return map;

    /**

    • 描述:根據(jù)編號查找用戶

    • @author wanghaoyu

    • @version 1.0

    • @param id

    • @return

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“根據(jù)編號查找用戶”)

    @RequiresAuthentication

    @RequestMapping(“/findUserById”)

    @ResponseBody

    public Map<String, Object> findUserById(Integer id){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    String msg = “”;

    User user = userService.findById(id);

    if(user != null){

    user.setPassword(null);

    user.setSalt(null);

    success = true;

    }else{

    msg = “讀取用戶數(shù)據(jù)出錯,請稍后再試!”;

    map.put(“success”, success);

    map.put(“user”, user);

    map.put(“msg”,msg);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:根據(jù)用戶ID刪除用戶

    • @author wanghaoyu

    • @version 1.0

    • @param id 用戶編號

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“刪除用戶”)

    @RequiresPermissions(“1004”)

    @RequestMapping(“/deleteUser”)

    @ResponseBody

    public Map<String, Object> deleteUser(Integer id){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    //刪除成功

    if(userService.deleteById(id) == true) {

    success = true;

    map.put(“success”, success);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:編輯用戶

    • @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”)

    @ResponseBody

    public Map<String, Object> editUser(User user){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    String msg = “”;

    //修改成功

    if(userService.edit(user) == true) {

    success = true;

    msg = “修改成功!”;

    }else {

    msg = “修改失敗!”;

    map.put(“success”, success);

    map.put(“msg”, msg);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:添加用戶

    • @author wanghaoyu

    • @version 1.0

    • @param user 要添加的用戶信息

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“添加用戶”)

    @RequiresPermissions(“1003”)

    @RequestMapping(“/addUser”)

    @ResponseBody

    public Map<String, Object> addUser(User user){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    //設(shè)置user的初始密碼為123456

    user.setPassword(“123456”);

    //添加

    if(userService.save(user) == true) {

    success = true;

    map.put(“success”, success);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:查找所有的角色

    • @author wanghaoyu

    • @version 1.0

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“后臺查找角色列表”)

    @RequiresAuthentication

    @RequestMapping(“/findRoles”)

    @ResponseBody

    public Map<String, Object> findRoles(){

    Map<String, Object> map = new HashMap<String, Object>(16);

    List roles = roleService.selectByRoleExample(new RoleExample());

    map.put(“success”, true);

    map.put(“l(fā)ist”, roles);

    logger.info(roles.toString());

    return map;

    /**

    • 描述:查找除當前登錄的客戶經(jīng)理外的所有的客戶經(jīng)理

    • @author wanghaoyu

    • @version 1.0

    • @param request

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“后臺查找其他客戶經(jīng)理角色”)

    @RequiresAuthentication

    @RequestMapping(“/findOthersManager”)

    @ResponseBody

    public Map<String, Object> findOthersManager(HttpServletRequest request){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    //獲取當前登錄用戶

    User user = (User)request.getSession().getAttribute(“user”);

    //創(chuàng)建用戶模塊

    UserExample userExample = new UserExample();

    //創(chuàng)建查詢準則

    Criteria criteria = userExample.createCriteria();

    //如果當前用戶為客戶經(jīng)理

    if(user.getRoleId() == 1) {

    criteria.andIdNotEqualTo(user.getId());

    criteria.andRoleIdEqualTo(1);

    List users = userService.findByExample(userExample);

    success = true;

    map.put(“success”, success);

    map.put(“l(fā)ist”, users);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:檢查用戶賬號是否可用

    • @author wanghaoyu

    • @version 1.0

    • @param account

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“檢查用戶賬號”)

    @RequestMapping(“/checkUserAccount”)

    @ResponseBody

    public Map<String, Object> checkUserAccount(String account){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    //沒有找到該賬號名,說明賬號可用

    if(userService.findByAccount(account) == null) {

    success = true;

    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

    */

    @Operation(name=“檢查用戶郵箱”)

    @RequestMapping(“/checkUserEmail”)

    @ResponseBody

    public Map<String, Object> checkUserEmail(String email){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    //沒有找到該賬號名,說明郵箱可用

    if(userService.findByEmail(email) == null) {

    success = true;

    map.put(“success”, success);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:根據(jù)session域里面的用戶編號查找當前登錄的用戶

    • @author wanghaoyu

    • @version 1.0

    • @param id

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“查找當前登錄的用戶”)

    @RequiresPermissions(“13001”)

    @RequestMapping(“/findCurrentUser”)

    @ResponseBody

    public Map<String, Object> findCurrentUser(Integer id){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    String msg = “”;

    //根據(jù)ID查找用戶

    User user = userService.findById(id);

    if(user != null){

    user.setPassword(null);

    user.setSalt(null);

    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>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“修改用戶密碼”)

    @RequiresPermissions(“14001”)

    @RequestMapping(“/editUserPasswd”)

    @ResponseBody

    public Map<String, Object> editUserPasswd(User user,String oldPassword){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    String msg = “”;

    if(userService.editPasswd(user,oldPassword)) {

    success = true;

    msg = “修改成功!”;

    }else {

    success = false;

    msg = “修改失敗!”;

    map.put(“success”, success);

    map.put(“msg”, msg);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:獲取忘記密碼時的驗證碼

    • @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 = “不存在的賬號!”;

    }else{

    try {

    //生成長度為4的隨機數(shù)字

    String code = RandomStringUtil.getRandomCode(4, 0);

    //存到redis緩存中,有效時間為5分鐘

    //先刪除原來已存在的驗證碼

    redisUtil.remove(email);

    redisUtil.set(email, code, 300L);

    //發(fā)送郵件

    mailUtil.send(email, “找回密碼”, “驗證碼:” + code + “(驗證碼有效期為5分鐘)”);

    success = true;

    msg = “發(fā)送驗證碼成功!”;

    } catch (Exception e) {

    e.printStackTrace();

    msg = “獲取驗證碼失敗!”;

    map.put(“success”, success);

    map.put(“code”, 0);

    map.put(“msg”, msg);

    return map;

    /**

    • 描述: 重設(shè)密碼

    • @author wanghaoyu

    • @version 1.0

    • @param email

    • @return

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“重設(shè)密碼”)

    @RequestMapping(“/resetPasswd”)

    @ResponseBody

    public Map<String, Object> resetPasswd(String email, String code, String password){

    Map<String, Object> map = new HashMap<String, Object>(16);

    boolean success = false;

    String msg = “”;

    try {

    //先根據(jù)郵箱獲取相應用戶的信息

    User user = userService.findByEmail(email);

    if(user == null){

    msg = “不存在的賬號!”;

    }else{

    //從redis緩存中獲取驗證碼

    if(redisUtil.exists(email)){

    String redisCode = (String) redisUtil.get(email);

    if(redisCode.equals(code)){

    //驗證碼正確,修改密碼

    User editUser = new User();

    editUser.setId(user.getId());

    editUser.setPassword(password);

    if(userService.edit(editUser)){

    msg = “修改成功!”;

    success = true;

    }else{

    msg = “修改失敗!”;

    }else{

    msg = “驗證碼錯誤!”;

    }else{

    msg = “驗證碼已過期,請重新獲取!”;

    } catch (Exception e) {

    e.printStackTrace();

    msg = “服務(wù)器出了小差,請稍等…”;

    map.put(“success”, success);

    map.put(“code”, 0);

    map.put(“msg”, msg);

    return map;

    客戶管理控制層:

    /**

    • @author yy

    */

    @Controller

    @RequestMapping(“customer”)

    public class CustomerController {

    @Autowired

    private ICustomerService customerService;

    private User user = null;

    /**

    • @author huangwanzong

    • @date 2018年7月6日

    */

    private User getUser(HttpServletRequest request) {

    HttpSession session = request.getSession();

    user = (User)session.getAttribute(“user”);

    return user;

    /**

    • 描述:分頁查詢客戶

    • @author huangwanzong

    • @date 2018/07/06

    • @version 1.0

    • @param page 可選參數(shù),查詢的頁數(shù),默認值 1

    • @param limit 可選參數(shù),分頁的大小,默認值 10

    • @param customer 可選參數(shù),查詢的條件

    • @param findtype 可選參數(shù),該參數(shù)值為 all 時不執(zhí)行分頁查詢,返回全部符合條件的客戶

    • @param request

    • @return Map<String,Object>

    • @since 1.8

    */

    @RequiresPermissions(“5001”)

    @Operation(name=“分頁查詢客戶”)

    @RequestMapping(“l(fā)ist”)

    @ResponseBody

    public Map<String, Object> listCustomer(Integer page,Integer limit,Customer customer,String findtype,HttpServletRequest request){

    Map<String, Object> map = new HashMap<String,Object>(16);

    //獲取用戶

    user = this.getUser(request);

    //檢驗用戶正確性

    if(user == null || user.getId() == null) {

    map.put(“code”, -1);

    map.put(“msg”, “用戶不存在,無法執(zhí)行操作.”);

    return map;

    CustomerExample example = new CustomerExample();

    Criteria criteria = example.createCriteria();

    //設(shè)置分頁參數(shù)

    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);

    //設(shè)置管理者ID

    criteria.andManagerIdEqualTo(user.getId());

    //只查詢未刪除的客戶

    criteria.andDeleteStatusEqualTo(0);

    System.out.println(customer);

    //檢測屬性是否存在,存在則進行條件查詢

    if(customer != null) {

    if(customer.getName() != null) {

    criteria.andNameLike(“%” + customer.getName() + “%”);

    if(customer.getType() != null && !“”.equals(customer.getType())) {

    criteria.andTypeEqualTo(customer.getType());

    if(customer.getStatus() != null && !“”.equals(customer.getStatus())) {

    criteria.andStatusEqualTo(customer.getStatus());

    if(customer.getSource() != null && !“”.equals(customer.getSource())) {

    criteria.andSourceEqualTo(customer.getSource());

    if(customer.getLevel() != null && !“”.equals(customer.getLevel())) {

    criteria.andLevelEqualTo(customer.getLevel());

    if(customer.getCredit() != null && !“”.equals(customer.getCredit())) {

    criteria.andCreditEqualTo(customer.getCredit());

    if(customer.getMaturity() != null && !“”.equals(customer.getMaturity())) {

    criteria.andMaturityEqualTo(customer.getMaturity());

    Long count = customerService.countByCustomerExample(example);

    List customers = customerService.selectByCustomerExample(example);

    map.put(“data”, customers);

    map.put(“count”, count);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:添加一個客戶

    • @author huangwanzong

    • @date 2018/07/17

    • @version 1.0

    • @param customer 客戶信息

    • @param linkman 聯(lián)系人信息

    • @param customerName 客戶名稱

    • @param linkmanName 聯(lián)系人名稱

    • @param customerLevel 客戶等級

    • @param request

    • @return Map<String,Object>

    • @since 1.8

    */

    @RequiresPermissions(“5002”)

    @Operation(name=“添加客戶”)

    @RequestMapping(“add”)

    @ResponseBody

    public Map<String, Object> addCustomer(Customer customer,Linkman linkman,String customerName,String linkmanName,String customerLevel,HttpServletRequest request){

    Map<String, Object> map = new HashMap<String,Object>(16);

    this.getUser(request);

    //檢測是否存在customer對象

    if(customer == null || linkman == null) {

    map.put(“msg”, “參數(shù)為空”);

    map.put(“success”, false);

    return map;

    //檢測客戶名是否存在

    if(customerName == null || “”.equals(customerName)) {

    map.put(“msg”, “用戶名稱參數(shù)不能為空”);

    map.put(“success”, false);

    return map;

    //檢測聯(lián)系人姓名是否存在

    if(linkmanName == null || “”.equals(linkmanName)) {

    map.put(“msg”, “聯(lián)系人名稱參數(shù)不能為空”);

    map.put(“success”, false);

    return map;

    //客戶所屬者默認為創(chuàng)建者

    customer.setManagerId(user.getId());

    //設(shè)置創(chuàng)建者id

    customer.setCreater(user.getId());

    //設(shè)置創(chuàng)建時間

    customer.setCreateTime(LocalDateTime.now());

    //設(shè)置客戶名稱

    customer.setName(customerName);

    //設(shè)置客戶等級

    customer.setLevel(customerLevel);

    //設(shè)置未刪除

    customer.setDeleteStatus(0);

    //設(shè)置聯(lián)系人名稱

    linkman.setName(linkmanName);

    //進行數(shù)據(jù)插入

    if(customerService.insertSelective(customer,linkman)) {

    map.put(“msg”, “添加成功”);

    map.put(“success”, true);

    }else {

    map.put(“msg”, “添加失敗”);

    map.put(“success”, false);

    return map;

    @RequiresPermissions(“7009”)

    @Operation(name=“檢測客戶名稱是否存在”)

    @RequestMapping(“checkname”)

    @ResponseBody

    public boolean checkCustomerName(String name){

    CustomerExample example = new CustomerExample();

    example.createCriteria().andNameEqualTo(name);

    List list = customerService.selectByCustomerExample(example);

    if(list.size()>0) {

    return true;

    return false;

    @RequiresPermissions(“5003”)

    @Operation(name=“更新客戶信息”)

    @RequestMapping(“update”)

    @ResponseBody

    public Map<String, Object> updateCustomer(Customer customer){

    Map<String, Object> map = new HashMap<String,Object>(16);

    if(customerService.updateCustomerByPrimaryKeySelective(customer)) {

    map.put(“msg”, “更新成功”);

    map.put(“success”, true);

    }else {

    map.put(“msg”, “更新失敗”);

    map.put(“success”, false);

    return map;

    @RequiresPermissions(“5004”)

    @Operation(name=“刪除客戶”)

    @RequestMapping(“delete”)

    @ResponseBody

    public Map<String, Object> deleteCustomer(int[] ids){

    Map<String, Object> map = new HashMap<String,Object>(16);

    List success = new ArrayList();

    List fail = new ArrayList();

    for(int id : ids) {

    if(customerService.deleteByPrimaryKey(id)) {

    success.add(id);

    }else {

    fail.add(id);

    map.put(“msg”, “刪除完成”);

    map.put(“status”, true);

    map.put(“success”, success);

    map.put(“fail”, fail);

    return map;

    @RequiresPermissions(“7010”)

    @Operation(name=“id查找客戶”)

    @RequestMapping(“find”)

    @ResponseBody

    public Map<String, Object> findCustomer(Integer id){

    Map<String, Object> map = new HashMap<String,Object>(16);

    Customer customer = null;

    if(id == null) {

    map.put(“msg”, “非法操作”);

    map.put(“success”, false);

    return map;

    customer = customerService.selectCustomerByPrimaryKey(id);

    if(customer != null) {

    map.put(“msg”, “查找成功”);

    map.put(“success”, true);

    map.put(“data”, customer);

    }else {

    map.put(“msg”, “查找失敗”);

    map.put(“success”, false);

    return map;

    登錄管理控制層:

    /**

    • @author yy

    */

    @Controller

    @RequestMapping(“/user”)

    public class LoginController {

    @Autowired

    private IUserService userService;

    private Logger logger = LoggerFactory.getLogger(LoginController.class);

    /**

    • 描述:登陸

    • @author wanghaoyu

    • @version 1.0

    • @param user 用戶

    • @param verifyCode 驗證碼

    • @param request 請求

    • @return Map<String,Object> map封裝要返回到前端的信息

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“登陸”)

    @RequestMapping(“/login”)

    @ResponseBody

    public Map<String, Object> login(User user, String verifyCode,

    HttpServletRequest request){

    Map<String, Object> maps = new HashMap<String, Object>(16);

    //1. 驗證驗證碼

    if(verifyCode == null || “”.equals(verifyCode) ) {

    maps.put(“code”, 200);

    maps.put(“msg”, “請輸入驗證碼”);

    return maps;

    verifyCode = verifyCode.toLowerCase();

    String sessionCode = (String) request.getSession().getAttribute(“verifyCode”);

    if( sessionCode == null || “”.equals(sessionCode)){

    maps.put(“code”, 200);

    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());

    //判斷用戶是否已經(jīng)登陸

    if(!subject.isAuthenticated()) {

    UsernamePasswordToken token = new UsernamePasswordToken(user.getAccount(),user.getPassword());

    try {

    subject.login(token);

    //驗證成功

    //登陸成功后的用戶賬號信息

    String account = (String)subject.getPrincipal();

    //根據(jù)用戶賬號,查詢用戶,并保存到session域中

    User loginUser = userService.findByAccount(account);

    LocalDateTime now = LocalDateTime.now();

    //如果上次登陸的時間為空,則說明這次是首次登陸,前臺應該跳轉(zhuǎn)到修改密碼界面

    if(loginUser.getLastLoginTime() == null) {

    maps.put(“firstLogin”, true);

    //修改最后一次登錄的時間,并保存到數(shù)據(jù)庫

    loginUser.setLastLoginTime(now);

    loginUser.setPassword(null);

    //新創(chuàng)建對象用來更新user的最后一次登錄時間

    User updateUser = new User();

    updateUser.setId(loginUser.getId());

    updateUser.setLastLoginTime(now);

    userService.edit(updateUser);

    request.getSession().setAttribute(“user”, loginUser);

    logger.info(“登陸的用戶信息:” + loginUser.toString());

    request.getSession().setAttribute(“user”, loginUser);

    maps.put(“code”, 0);

    //賬號被鎖定

    } catch(LockedAccountException e){

    maps.put(“code”,200);

    maps.put(“msg”,“賬號已被鎖定,請聯(lián)系管理員進行處理!”);

    //不存在的賬號

    } catch(UnknownAccountException e) {

    maps.put(“code”,200);

    maps.put(“msg”,“賬號或密碼錯誤!”);

    //密碼錯誤

    } catch(IncorrectCredentialsException e) {

    maps.put(“code”,200);

    maps.put(“msg”,“賬號或密碼錯誤!”);

    }catch (Exception e) {

    e.printStackTrace();

    maps.put(“code”, 200);

    maps.put(“msg”, “系統(tǒng)出了小差,請稍等…”);

    }else {

    maps.put(“code”, 0);

    return maps;

    /**

    • 描述:

    • @author wanghaoyu

    • @version 1.0

    • @param request request請求

    • @return ModelAndView

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name=“注銷”)

    @RequestMapping(“/logout”)

    public ModelAndView logout(HttpServletRequest request) {

    ModelAndView view = new ModelAndView();

    //獲取shiro中的用戶

    Subject subject = SecurityUtils.getSubject();

    //獲取用戶賬號信息

    String account = (String) subject.getPrincipal();

    if(account != null) {

    //登出

    subject.logout();

    //同時刪除session中的用戶信息

    request.getSession().removeAttribute(“user”);

    request.getSession().invalidate();

    //重定向到登陸頁面

    view.setViewName(“redirect:/pages/login.jsp”);

    return view;

    角色管理控制層:

    /**

    • @author yy

    */

    @Controller

    @RequestMapping(“/role”)

    public class RoleController {

    Logger logger = LoggerFactory.getLogger(RoleController.class);

    @Autowired

    IRoleService roleService;

    @Autowired

    IRolePermissionService rolePermissionService;

    @Autowired

    IPermissionService permissionService;

    @Autowired

    RedisUtil redisUtil;

    /**

    • 描述:分頁加條件查詢Role

    • @author wanghaoyu

    • @version 1.0

    • @param page

    • @param limit

    • @param role

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name = “查詢職位”)

    @RequiresPermissions(“4001”)

    @RequestMapping(“/findRoles”)

    @ResponseBody

    public Map<String, Object> findRoles(Integer page, Integer limit, Role role) {

    Map<String, Object> map = new HashMap<String, Object>(16);

    // 創(chuàng)建角色模板類

    RoleExample roleExample = new RoleExample();

    // 創(chuàng)建查詢準則

    Criteria criteria = roleExample.createCriteria();

    // 判斷role中的條件

    if (role.getName() != null) {

    criteria.andNameLike(“%” + role.getName() + “%”);

    // 分頁數(shù)據(jù)合法性判斷

    if (page == null || page <= 0) {

    page = 1;

    if (limit == null || limit <= 0) {

    limit = 10;

    // 偏移值,即從第幾條數(shù)據(jù)開始查

    Long offset = new Long((page - 1) * limit);

    // 數(shù)據(jù)總條數(shù)

    Long count = roleService.countByRoleExample(roleExample);

    roleExample.setOffset(offset);

    roleExample.setLimit(limit);

    List roles = roleService.selectByRoleExample(roleExample);

    logger.info(roles.toString());

    // 封裝數(shù)據(jù),返回到前臺

    map.put(“data”, roles);

    map.put(“code”, 0);

    map.put(“msg”, “success”);

    map.put(“count”, count);

    return map;

    /**

    • 描述:根據(jù)職位編號刪除職位

    • @author wanghaoyu

    • @version 1.0

    • @param id

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name = “刪除職位”)

    @RequiresPermissions(“4004”)

    @RequestMapping(“/deleteRole”)

    @ResponseBody

    public Map<String, Object> deleteRole(Integer id) {

    Map<String, Object> map = new HashMap<String, Object>(16);

    // 用于判斷返回給前臺的結(jié)果

    boolean success = false;

    // 刪除結(jié)果判斷

    if (roleService.deleteRoleByPrimaryKey(id)) {

    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 = “編輯職位”)

    @RequiresPermissions(“4002”)

    @RequestMapping(“/editRole”)

    @ResponseBody

    public Map<String, Object> editRole(Role role) {

    Map<String, Object> map = new HashMap<String, Object>(16);

    // 用于判斷返回給前臺的結(jié)果

    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 = “添加職位”)

    @RequiresPermissions(“4003”)

    @RequestMapping(“/addRole”)

    @ResponseBody

    public Map<String, Object> addRole(Role role) {

    Map<String, Object> map = new HashMap<String, Object>(16);

    // 用于判斷返回給前臺的結(jié)果

    boolean success = false;

    if (roleService.insertRole(role)) {

    success = true;

    map.put(“success”, success);

    map.put(“code”, 0);

    return map;

    /**

    • 描述:查詢角色所擁有的權(quán)限id

    • @author huangqingwen

    • @version 1.0

    • @param rolePermission

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name = “查詢角色所擁有的權(quán)限id”)

    @RequiresAuthentication

    @RequestMapping(“/findRolePermissionId”)

    @ResponseBody

    public Map<String, Object> findRolePermissionId(RolePermission rolePermission) {

    Map<String, Object> maps = new HashMap<String, Object>(16);

    // 1. 獲取該角色id下的所有權(quán)限id

    RolePermissionExample example = new RolePermissionExample();

    example.createCriteria().andRoleIdEqualTo(rolePermission.getRoleId());

    List list = rolePermissionService.selectByRolePermissionExample(example);

    maps.put(“result”, list);

    return maps;

    /**

    • 描述:分配權(quán)限給特定的角色

    • @author huangqingwen

    • @version 1.0

    • @param permissionId,

    • roleId
    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @Operation(name = “分配權(quán)限”)

    @RequiresPermissions(“4005”)

    @RequestMapping(“allotPermission”)

    @ResponseBody

    public Map<String, Object> allotPermission(HttpServletRequest request, @RequestParam(value = “permissionIds[]”, defaultValue=“”) Integer[] permissionIds,

    @RequestParam(value = “roleId”) Integer roleId) {

    Map<String, Object> maps = new HashMap<String, Object>(16);

    //從session中獲取用戶角色

    //User user = (User)request.getSession().getAttribute(“user”);

    int result = rolePermissionService.allotPermission(permissionIds, roleId);

    //權(quán)限發(fā)生改變,刪除權(quán)限相關(guān)的緩存

    //刪除相應角色菜單的緩存

    redisUtil.remove(“roleMenu-”+roleId);

    //刪除權(quán)限相關(guān)的緩存

    redisUtil.remove(“rolePermission-”+roleId);

    if (permissionIds.length > 0) {

    if (result == permissionIds.length) {

    maps.put(“code”, 0);

    } else {

    maps.put(“code”, 200);

    maps.put(“msg”, “分配失敗!”);

    return maps;

    maps.put(“code”, 0);

    return maps;

    /**

    • 描述:獲取用戶角色的權(quán)限菜單

    • @author huangqingwen

    • @version 1.0

    • @param request

    • @return Map<String,Object>

    • @exception Nothing

    • @since 1.8

    */

    @SuppressWarnings(“unchecked”)

    @Operation(name=“獲取用戶角色的權(quán)限菜單”)

    @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 userPermissions = null;

    logger.info(user.toString());

    //先從redis緩存中查找角色權(quán)限菜單

    String roleMenu = “roleMenu-”;

    if(redisUtil.exists(roleMenu+user.getRoleId())) {

    userPermissions = (List) redisUtil.get(“roleMenu-”+user.getRoleId());

    }else {

    //如果沒有在緩存中找到,則從數(shù)據(jù)庫中查找

    //獲取權(quán)限樹

    List permissions = permissionService.selectTreePermission();

    //查詢該用戶的角色所擁有的權(quán)限id

    RolePermissionExample rolePermissionExample = new RolePermissionExample();

    rolePermissionExample.createCriteria().andRoleIdEqualTo(user.getRoleId());

    List rolePermissions = rolePermissionService.selectByRolePermissionExample(rolePermissionExample);

    //將用戶的權(quán)限id放到數(shù)組中

    int size = rolePermissions.size();

    Integer[] array = new Integer[size];

    for(int i = 0 ; i < size ; i ++ ) {

    array[i] = rolePermissions.get(i).getPermissionId();

    //過濾用戶的權(quán)限

    userPermissions = getUserPermission(permissions, array);

    //把查找到的數(shù)據(jù)存入到redis緩存中

    redisUtil.set(“roleMenu-”+user.getRoleId(), userPermissions, 1800L);

    maps.put(“permission”, userPermissions);

    maps.put(“code”, 0);

    return maps;

    /**

    • 過濾用戶的菜單

    • @param permissions

    • @param array

    • @return

    • @author huangqingwen

    */

    public List getUserPermission(List 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;

    permission.setChildPermission(getUserPermission(permission.getChildPermission(), array));

    //把類型為功能的permission也移除掉

    if(flag == false || permission.getType().equals(1)) {

    permissions.remove(i);

    return permissions;


    總結(jié)

    以上是生活随笔為你收集整理的基于javaweb的crm客户关系管理系统(java+springboot+echarts+freemarker+layui+mysql)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。