Pārlūkot izejas kodu

系统基础功能

chao 3 gadi atpakaļ
vecāks
revīzija
25cb2e152b

+ 1 - 1
src/main/java/com/caimei365/manager/config/security/AuthenticationEntryPointImpl.java

@@ -31,7 +31,7 @@ public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
         log.debug("预认证入口被调用。拒绝访问,AuthenticationException={}", exception.getMessage());
         // 没有权限,返回403
         // response.sendError(403, "Access Denied");
-        ResponseJson<Void> errorJson = ResponseJson.error("访问失败,需要身份认证", null);
+        ResponseJson<Void> errorJson = ResponseJson.error(-99, "访问失败,需要身份认证", null);
         response.setCharacterEncoding("UTF-8");
         response.getWriter().write(JSON.toJSONString(errorJson));
     }

+ 1 - 1
src/main/java/com/caimei365/manager/config/security/UserDetailsServiceImpl.java

@@ -31,7 +31,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
             throw new UsernameNotFoundException("用户" + username + "不存在!");
         }
         // 获取用户角色列表
-        List<String> roleList = sysUserDao.getRoleList(user.getId());
+        List<String> roleList = sysUserDao.getRoleListByUserId(user.getId());
         // 设置权限和角色
         ArrayList<GrantedAuthority> authorities = new ArrayList<>();
         for (String role : roleList) {

+ 136 - 49
src/main/java/com/caimei365/manager/controller/SysUserApi.java

@@ -2,16 +2,13 @@ package com.caimei365.manager.controller;
 
 import com.caimei365.manager.config.security.ConstantKey;
 import com.caimei365.manager.config.security.JwtService;
-import com.caimei365.manager.entity.PaginationVo;
-import com.caimei365.manager.entity.ResponseJson;
-import com.caimei365.manager.entity.SysMenu;
-import com.caimei365.manager.entity.SysUser;
+import com.caimei365.manager.entity.*;
 import com.caimei365.manager.service.SysUserService;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.util.List;
 
 /**
  * Description
@@ -38,6 +35,137 @@ public class SysUserApi {
         return sysUserService.getInfoByUsername(username);
     }
 
+    /**
+     * 退出登录
+     */
+    @PostMapping("/user/logout")
+    public ResponseJson<Void> logout(HttpServletRequest request) {
+        String token = request.getHeader(ConstantKey.TOKEN_NAME);
+        return sysUserService.logout(token);
+    }
+
+    /**
+     * 获取用户列表
+     *
+     * @param username 用户名
+     * @param fullName 姓名
+     * @param pageNum  页码
+     * @param pageSize 每页大小
+     */
+    @GetMapping("/user/list")
+    public ResponseJson<PaginationVo<SysUser>> userList(String username, String fullName,
+                                                        @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                        @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        return sysUserService.getUserList(username, fullName, pageNum, pageSize);
+    }
+
+    /**
+     * 根据ID获取用户
+     */
+    @GetMapping("/user/{id}")
+    public ResponseJson<SysUser> getUser(@PathVariable("id") Integer id) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return sysUserService.getUser(id);
+    }
+
+    /**
+     * 根据ID更新用户
+     */
+    @PostMapping("/user/update/{id}")
+    public ResponseJson<Void> updateUser(@PathVariable("id") Integer id, @RequestBody SysUser sysUser) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return sysUserService.updateUser(id, sysUser);
+    }
+
+    /**
+     * 添加用户
+     */
+    @PostMapping("/user/create/")
+    public ResponseJson<Void> addUser(@RequestBody SysUser sysUser) {
+        return sysUserService.addUser(sysUser);
+    }
+
+    /**
+     * 根据ID删除用户
+     */
+    @PostMapping("/user/delete/{id}")
+    public ResponseJson<Void> deleteUser(@PathVariable("id") Integer id) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return sysUserService.deleteUser(id);
+    }
+
+    /**
+     * 获取角色列表
+     * @param pageNum  页码
+     * @param pageSize 每页大小
+     */
+    @GetMapping("/role/list")
+    public ResponseJson<PaginationVo<SysRole>> roleList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                        @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        return sysUserService.getRoleList(pageNum, pageSize);
+    }
+
+    /**
+     * 根据ID获取角色
+     */
+    @GetMapping("/role/{id}")
+    public ResponseJson<SysRole> getRole(@PathVariable("id") Integer id) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("角色Id不能为空!", null);
+        }
+        return sysUserService.getRole(id);
+    }
+
+    /**
+     * 根据ID更新角色
+     */
+    @PostMapping("/role/update/{id}")
+    public ResponseJson<Void> updateRole(@PathVariable("id") Integer id, @RequestBody SysRole sysRole) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("角色Id不能为空!", null);
+        }
+        return sysUserService.updateRole(id, sysRole);
+    }
+
+    /**
+     * 添加角色
+     */
+    @PostMapping("/role/create/")
+    public ResponseJson<Void> addRole(@RequestBody SysRole sysRole) {
+        return sysUserService.addRole(sysRole);
+    }
+
+    /**
+     * 根据ID删除角色
+     */
+    @PostMapping("/role/delete/{id}")
+    public ResponseJson<Void> deleteRole(@PathVariable("id") Integer id) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("角色Id不能为空!", null);
+        }
+        return sysUserService.deleteRole(id);
+    }
+
+    /**
+     * 角色授权菜单
+     */
+    @PostMapping("/role/auth/{id}")
+    public ResponseJson<Void> setRoleMenu(@PathVariable("id") Integer id, @RequestBody SysRole sysRole) {
+        if (null == id || id <= 0) {
+            return ResponseJson.error("角色Id不能为空!", null);
+        }
+        if (!StringUtils.hasLength(sysRole.getMenuIds())){
+            return ResponseJson.error("菜单Id不能为空!", null);
+        }
+        return sysUserService.setRoleMenu(id, sysRole);
+    }
+
     /**
      * 获取菜单列表
      *
@@ -68,7 +196,7 @@ public class SysUserApi {
      * 根据ID更新菜单
      */
     @PostMapping("/menu/update/{id}")
-    public ResponseJson<Void> updateMenu(@PathVariable("id") Integer id, SysMenu menu) {
+    public ResponseJson<Void> updateMenu(@PathVariable("id") Integer id, @RequestBody SysMenu menu) {
         if (null == id || id <= 0) {
             return ResponseJson.error("菜单Id不能为空!", null);
         }
@@ -79,7 +207,7 @@ public class SysUserApi {
      * 根据ID(可选择的)更新菜单字段
      */
     @PostMapping("/menu/update/selective/{id}")
-    public ResponseJson<Void> updateMenuSelective(@PathVariable("id") Integer id, SysMenu menu) {
+    public ResponseJson<Void> updateMenuSelective(@PathVariable("id") Integer id, @RequestBody SysMenu menu) {
         if (null == id || id <= 0) {
             return ResponseJson.error("菜单Id不能为空!", null);
         }
@@ -90,7 +218,7 @@ public class SysUserApi {
      * 添加菜单
      */
     @PostMapping("/menu/create/")
-    public ResponseJson<Void> addMenu(SysMenu menu) {
+    public ResponseJson<Void> addMenu(@RequestBody SysMenu menu) {
         return sysUserService.addMenu(menu);
     }
 
@@ -105,45 +233,4 @@ public class SysUserApi {
         return sysUserService.deleteMenu(id);
     }
 
-
-
-
-
-
-
-
-
-
-    /**
-     * 退出登录
-     */
-    @PostMapping("/user/logout")
-    public ResponseJson<Void> logout(HttpServletRequest request) {
-        String token = request.getHeader(ConstantKey.TOKEN_NAME);
-        return sysUserService.logout(token);
-    }
-
-    /**
-     * 注册接口
-     */
-    @PostMapping("/user/register")
-    public ResponseJson<SysUser> register(SysUser sysUser) {
-        return sysUserService.register(sysUser);
-    }
-
-//    /**
-//     * 测试公开接口
-//     */
-//    @GetMapping("/hello")
-//    public ResponseJson<Void> hello() {
-//        return ResponseJson.success("访问成功!公开接口:/hello",null);
-//    }
-//
-//    /**
-//     * 测试需要认证的接口
-//     */
-//    @GetMapping("/private")
-//    public ResponseJson<Void> hello2() {
-//        return ResponseJson.success("访问成功!非公开接口:/private", null);
-//    }
 }

+ 61 - 16
src/main/java/com/caimei365/manager/dao/SysUserDao.java

@@ -2,6 +2,7 @@ package com.caimei365.manager.dao;
 
 
 import com.caimei365.manager.entity.SysMenu;
+import com.caimei365.manager.entity.SysRole;
 import com.caimei365.manager.entity.SysUser;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -16,59 +17,103 @@ import java.util.List;
  */
 @Mapper
 public interface SysUserDao {
-
     /**
      * 根据用户名称查找用户
      */
     SysUser findByUsername(String username);
-
-    /**
-     * 新增系统用户
-     */
-    void insertSysUser(SysUser sysUser);
-
     /**
      * 新增用户角色关系表
      */
     void insertUserRoleRelation(Integer userId, Integer roleId);
-
     /**
      * 获取用户角色名称列表
      */
-    List<String> getRoleList(Integer userId);
-
+    List<String> getRoleListByUserId(Integer userId);
     /**
      * 获取用户角色Id列表
      */
-    List<Integer> getRoleIdsByUserId(String username);
-
+    List<Integer> getRoleIdsByUserId(Integer userId);
+    /**
+     * 获取用户角色Id列表
+     */
+    List<Integer> getRoleIdsByUsername(String username);
+    /**
+     * 删除用户原有角色关联
+     */
+    void deleteUserRoleRelation(Integer userId);
     /**
      * 根据角色Ids获取菜单列表
      */
     List<SysMenu> getMenusByRoleIds(@Param("roleIds") List<Integer> roleIds);
 
+    /**
+     * 获取用户列表
+     */
+    List<SysUser> getUserList(String username, String fullName);
+    /**
+     * 根据ID获取用户
+     */
+    SysUser getUser(Integer id);
+    /**
+     * 新增系统用户
+     */
+    void insertSysUser(SysUser sysUser);
+    /**
+     * 根据ID更新用户
+     */
+    void updateSysUser(SysUser sysUser);
+    /**
+     * 根据ID删除用户
+     */
+    void deleteSysUser(Integer id);
+
+    /**
+     * 获取角色列表
+     */
+    List<SysRole> getRoleList();
+    /**
+     * 根据ID获取角色
+     */
+    SysRole getRole(Integer id);
+    /**
+     * 根据ID更新角色
+     */
+    void updateRole(SysRole sysRole);
+    /**
+     * 添加角色
+     */
+    void insertRole(SysRole sysRole);
+    /**
+     * 根据ID删除角色
+     */
+    void deleteRole(Integer id);
+    /**
+     * 保存角色菜单关系
+     */
+    void insertRoleMenuRelation(Integer roleId, Integer menuId);
+    /**
+     * 删除原有角色菜单关联
+     */
+    void deleteRoleMenuRelation(Integer roleId);
+
     /**
      * 获取菜单列表
      * @param parentId 父级菜单Id
      * @param status   状态:0启用,1停用
      */
     List<SysMenu> getMenuList(Integer parentId, Integer status);
-
     /**
      * 根据ID获取菜单
      */
     SysMenu getMenu(Integer id);
-
     /**
      * 根据ID更新菜单
      */
     void updateMenu(SysMenu menu);
-
     /**
      * 根据ID删除菜单
      */
     void deleteMenu(Integer id);
-
     /**
      * 添加菜单
      */

+ 4 - 0
src/main/java/com/caimei365/manager/entity/SysMenu.java

@@ -28,6 +28,10 @@ public class SysMenu {
      * 图标
      */
     private String icon;
+    /**
+     * 子菜单数量
+     */
+    private Integer childCount;
     /**
      * 父级菜单Id
      */

+ 41 - 0
src/main/java/com/caimei365/manager/entity/SysRole.java

@@ -0,0 +1,41 @@
+package com.caimei365.manager.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/12/17
+ */
+@Data
+public class SysRole {
+    /**
+     * 角色ID
+     */
+    private Integer id;
+    /**
+     * 角色名称
+     */
+    private String roleName;
+    /**
+     * 描述
+     */
+    private String roleDesc;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+    /**
+     * 角色授权菜单
+     */
+    private String menuIds;
+
+    private static final long serialVersionUID = 1L;
+}

+ 17 - 0
src/main/java/com/caimei365/manager/entity/SysUser.java

@@ -2,6 +2,7 @@ package com.caimei365.manager.entity;
 
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -28,6 +29,22 @@ public class SysUser {
      * 头像
      */
     private String avatar;
+    /**
+     * 姓名
+     */
+    private String fullName;
+    /**
+     * 电话
+     */
+    private String phone;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
     /**
      * 角色Ids,用","隔开
      */

+ 58 - 26
src/main/java/com/caimei365/manager/service/SysUserService.java

@@ -1,10 +1,7 @@
 package com.caimei365.manager.service;
 
 
-import com.caimei365.manager.entity.PaginationVo;
-import com.caimei365.manager.entity.ResponseJson;
-import com.caimei365.manager.entity.SysMenu;
-import com.caimei365.manager.entity.SysUser;
+import com.caimei365.manager.entity.*;
 
 import java.util.List;
 
@@ -16,11 +13,67 @@ import java.util.List;
  */
 
 public interface SysUserService {
-
     /**
      * 获取用户信息
      */
     ResponseJson<SysUser> getInfoByUsername(String username);
+    /**
+     * 退出登录
+     */
+    ResponseJson<Void> logout(String token);
+
+    /**
+     * 获取用户列表
+     *
+     * @param username 用户名
+     * @param fullName 姓名
+     * @param pageNum  页码
+     * @param pageSize 每页大小
+     */
+    ResponseJson<PaginationVo<SysUser>> getUserList(String username, String fullName, int pageNum, int pageSize);
+    /**
+     * 根据ID获取用户
+     */
+    ResponseJson<SysUser> getUser(Integer id);
+    /**
+     * 根据ID更新用户
+     */
+    ResponseJson<Void> updateUser(Integer id, SysUser sysUser);
+    /**
+     * 添加用户
+     */
+    ResponseJson<Void> addUser(SysUser sysUser);
+    /**
+     * 根据ID删除用户
+     */
+    ResponseJson<Void> deleteUser(Integer id);
+
+    /**
+     * 获取角色列表
+     * @param pageNum  页码
+     * @param pageSize 每页大小
+     */
+    ResponseJson<PaginationVo<SysRole>> getRoleList(int pageNum, int pageSize);
+    /**
+     * 根据ID获取角色
+     */
+    ResponseJson<SysRole> getRole(Integer id);
+    /**
+     * 根据ID更新角色
+     */
+    ResponseJson<Void> updateRole(Integer id, SysRole sysRole);
+    /**
+     * 添加角色
+     */
+    ResponseJson<Void> addRole(SysRole sysRole);
+    /**
+     * 根据ID删除角色
+     */
+    ResponseJson<Void> deleteRole(Integer id);
+    /**
+     * 角色授权菜单
+     */
+    ResponseJson<Void> setRoleMenu(Integer id, SysRole sysRole);
 
     /**
      * 获取菜单列表
@@ -30,46 +83,25 @@ public interface SysUserService {
      * @param pageSize 每页大小
      */
     ResponseJson<PaginationVo<SysMenu>> getMenuList(Integer parentId, Integer status, int pageNum, int pageSize);
-
     /**
      * 根据ID获取菜单
      */
     ResponseJson<SysMenu> getMenu(Integer id);
-
     /**
      * 根据ID更新菜单
      */
     ResponseJson<Void> updateMenu(Integer id, SysMenu menu);
-
     /**
      * 根据ID(可选择的)更新菜单字段
      */
     ResponseJson<Void> updateMenuSelective(Integer id, SysMenu menu);
-
     /**
      * 添加菜单
      */
     ResponseJson<Void> addMenu(SysMenu menu);
-
     /**
      * 根据ID删除菜单
      */
     ResponseJson<Void> deleteMenu(Integer id);
 
-
-//    /**
-//     * 获取用户可访问菜单
-//     */
-//    ResponseJson<List<SysMenu>> menuList(String username);
-    /**
-     * 退出登录
-     */
-    ResponseJson<Void> logout(String token);
-    /**
-     * 注册接口
-     */
-    ResponseJson<SysUser> register(SysUser sysUser);
-
-
-
 }

+ 191 - 63
src/main/java/com/caimei365/manager/service/impl/SysUserServiceImpl.java

@@ -1,10 +1,7 @@
 package com.caimei365.manager.service.impl;
 
 import com.caimei365.manager.dao.SysUserDao;
-import com.caimei365.manager.entity.PaginationVo;
-import com.caimei365.manager.entity.ResponseJson;
-import com.caimei365.manager.entity.SysMenu;
-import com.caimei365.manager.entity.SysUser;
+import com.caimei365.manager.entity.*;
 import com.caimei365.manager.service.RedisService;
 import com.caimei365.manager.service.SysUserService;
 import com.github.pagehelper.PageHelper;
@@ -42,11 +39,11 @@ public class SysUserServiceImpl implements SysUserService {
         if (StringUtils.hasLength(username)) {
             SysUser sysUser = sysUserDao.findByUsername(username);
             // 获取用户角色列表
-            List<String> roleList = sysUserDao.getRoleList(sysUser.getId());
+            List<String> roleList = sysUserDao.getRoleListByUserId(sysUser.getId());
             sysUser.setRoles(roleList);
 
             // 获取用户角色Id
-            List<Integer> roleIds = sysUserDao.getRoleIdsByUserId(username);
+            List<Integer> roleIds = sysUserDao.getRoleIdsByUsername(username);
             List<SysMenu> menus = null;
             if (!CollectionUtils.isEmpty(roleIds)) {
                 // 根据角色Id获取菜单列表
@@ -59,6 +56,194 @@ public class SysUserServiceImpl implements SysUserService {
         return ResponseJson.error("用户数据异常", null);
     }
 
+    /**
+     * 退出登录
+     *
+     * @param token
+     */
+    @Override
+    public ResponseJson<Void> logout(String token) {
+        if (StringUtils.hasLength(token)) {
+            redisService.remove(token);
+        }
+        return ResponseJson.success();
+    }
+
+    /**
+     * 获取用户列表
+     *
+     * @param username 用户名
+     * @param fullName 姓名
+     * @param pageNum  页码
+     * @param pageSize 每页大小
+     */
+    @Override
+    public ResponseJson<PaginationVo<SysUser>> getUserList(String username, String fullName, int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<SysUser> menus = sysUserDao.getUserList(username, fullName);
+        PaginationVo<SysUser> pageData = new PaginationVo<>(menus);
+        return ResponseJson.success(pageData);
+    }
+
+    /**
+     * 根据ID获取用户
+     */
+    @Override
+    public ResponseJson<SysUser> getUser(Integer id) {
+        SysUser sysUser = sysUserDao.getUser(id);
+        return ResponseJson.success(sysUser);
+    }
+
+    /**
+     * 根据ID更新用户
+     */
+    @Override
+    public ResponseJson<Void> updateUser(Integer id, SysUser sysUser) {
+        sysUser.setId(id);
+        if (StringUtils.hasLength(sysUser.getPassword())){
+            // 密码加密
+            String encodePassword = passwordEncoder.encode(sysUser.getPassword());
+            sysUser.setPassword(encodePassword);
+        }
+        // 删除原有角色关联
+        sysUserDao.deleteUserRoleRelation(id);
+        // 前端传入角色Ids,用","隔开
+        String roleIds = sysUser.getRoleIds();
+        // 保存用户角色关系
+        saveRoleRelation(sysUser.getId(), roleIds);
+        sysUserDao.updateSysUser(sysUser);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 添加用户
+     */
+    @Override
+    public ResponseJson<Void> addUser(SysUser sysUser) {
+        if (StringUtils.hasLength(sysUser.getUsername()) && StringUtils.hasLength(sysUser.getPassword())) {
+            // 密码加密
+            String encodePassword = passwordEncoder.encode(sysUser.getPassword());
+            sysUser.setPassword(encodePassword);
+            // 新增用户
+            sysUserDao.insertSysUser(sysUser);
+            // 角色Ids,用","隔开
+            String roleIds = sysUser.getRoleIds();
+            // 保存用户角色关系
+            saveRoleRelation(sysUser.getId(), roleIds);
+            return ResponseJson.success("添加用户成功", null);
+        }
+        return ResponseJson.error("用户名或密码不能为空", null);
+    }
+
+    /**
+     * 根据ID删除用户
+     */
+    @Override
+    public ResponseJson<Void> deleteUser(Integer id) {
+        sysUserDao.deleteSysUser(id);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 保存用户角色关系
+     */
+    private void saveRoleRelation(Integer userId, String roleIds) {
+        if (StringUtils.hasLength(roleIds)) {
+            // 设置用户角色
+            String[] split = roleIds.split(",");
+            for (String s : split) {
+                if (StringUtils.hasLength(s)) {
+                    // 保存用户角色关系
+                    sysUserDao.insertUserRoleRelation(userId, Integer.valueOf(s));
+                }
+            }
+        }
+    }
+
+    /**
+     * 获取角色列表
+     *
+     * @param pageNum  页码
+     * @param pageSize 每页大小
+     */
+    @Override
+    public ResponseJson<PaginationVo<SysRole>> getRoleList(int pageNum, int pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<SysRole> roles = sysUserDao.getRoleList();
+        PaginationVo<SysRole> pageData = new PaginationVo<>(roles);
+        return ResponseJson.success(pageData);
+    }
+
+    /**
+     * 根据ID获取角色
+     */
+    @Override
+    public ResponseJson<SysRole> getRole(Integer id) {
+        SysRole sysRole = sysUserDao.getRole(id);
+        return ResponseJson.success(sysRole);
+    }
+
+    /**
+     * 根据ID更新角色
+     */
+    @Override
+    public ResponseJson<Void> updateRole(Integer id, SysRole sysRole) {
+        sysRole.setId(id);
+        sysUserDao.updateRole(sysRole);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 添加角色
+     */
+    @Override
+    public ResponseJson<Void> addRole(SysRole sysRole) {
+        String menuIds = sysRole.getMenuIds();
+        // 保存角色
+        sysUserDao.insertRole(sysRole);
+        // 保存角色菜单关系
+        saveRoleMenuRelation(sysRole.getId(), menuIds);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 根据ID删除角色
+     */
+    @Override
+    public ResponseJson<Void> deleteRole(Integer id) {
+        sysUserDao.deleteRole(id);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 角色授权菜单
+     */
+    @Override
+    public ResponseJson<Void> setRoleMenu(Integer id, SysRole sysRole) {
+        // 删除原有角色菜单关联
+        sysUserDao.deleteRoleMenuRelation(id);
+        // 保存角色菜单关系
+        String menuIds = sysRole.getMenuIds();
+        saveRoleMenuRelation(id, menuIds);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 保存角色菜单关系
+     */
+    private void saveRoleMenuRelation(Integer roleId, String menuIds) {
+        if (StringUtils.hasLength(menuIds)) {
+            // 设置角色菜单
+            String[] split = menuIds.split(",");
+            for (String s : split) {
+                if (StringUtils.hasLength(s)) {
+                    // 保存角色菜单关系
+                    sysUserDao.insertRoleMenuRelation(roleId, Integer.valueOf(s));
+                }
+            }
+        }
+    }
+
     /**
      * 获取菜单列表
      *
@@ -143,61 +328,4 @@ public class SysUserServiceImpl implements SysUserService {
         sysUserDao.deleteMenu(id);
         return ResponseJson.success();
     }
-
-//    /**
-//     * 获取用户可访问菜单
-//     */
-//    @Override
-//    public ResponseJson<List<SysMenu>> menuList(String username) {
-//        if (!StringUtils.hasLength(username)) {
-//            return ResponseJson.error("用户信息异常", null);
-//        }
-//        // 获取用户角色Id
-//        List<Long> roleIds = sysUserDao.getRoleIdsByUserId(username);
-//        List<SysMenu> menus = null;
-//        if (!CollectionUtils.isEmpty(roleIds)) {
-//            // 根据角色Id获取菜单列表
-//            menus = sysUserDao.getMenuListByRoleIds(roleIds);
-//        }
-//        return ResponseJson.success(menus);
-//    }
-
-    /**
-     * 退出登录
-     *
-     * @param token
-     */
-    @Override
-    public ResponseJson<Void> logout(String token) {
-        if (StringUtils.hasLength(token)) {
-            redisService.remove(token);
-        }
-        return ResponseJson.success();
-    }
-
-    @Override
-    public ResponseJson<SysUser> register(SysUser sysUser) {
-        if (StringUtils.hasLength(sysUser.getUsername()) && StringUtils.hasLength(sysUser.getPassword())) {
-            // 密码加密
-            String encodePassword = passwordEncoder.encode(sysUser.getPassword());
-            sysUser.setPassword(encodePassword);
-            // 新增用户
-            sysUserDao.insertSysUser(sysUser);
-            // 角色Ids,用","隔开
-            String roleIds = sysUser.getRoleIds();
-            if (StringUtils.hasLength(roleIds)) {
-                // 设置用户角色
-                String[] split = roleIds.split(",");
-                for (String s : split) {
-                    if (StringUtils.hasLength(s)) {
-                        // 保存用户角色关系
-                        sysUserDao.insertUserRoleRelation(sysUser.getId(), Integer.valueOf(s));
-                    }
-                }
-            }
-            return ResponseJson.success("注册成功", sysUser);
-        }
-        return ResponseJson.error("用户名或密码不能为空", null);
-    }
-
 }

+ 76 - 14
src/main/resources/mapper/SysUserDao.xml

@@ -1,21 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei365.manager.dao.SysUserDao">
-    <insert id="insertSysUser" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
-        INSERT INTO sys_user(username, password) VALUES(#{username}, #{password})
-    </insert>
-    <insert id="insertUserRoleRelation">
-        INSERT INTO sys_role_user(user_id, role_id) VALUES(#{userId}, #{roleId})
-    </insert>
     <select id="findByUsername" resultType="com.caimei365.manager.entity.SysUser">
         SELECT id,username,PASSWORD,avatar FROM sys_user WHERE username=#{username}
     </select>
-    <select id="getRoleList" resultType="java.lang.String">
-        SELECT r.role_name FROM sys_role r
-                 LEFT JOIN sys_role_user ru ON r.id = ru.role_id
+    <select id="getRoleListByUserId" resultType="java.lang.String">
+        SELECT DISTINCT r.role_name FROM sys_role r
+            LEFT JOIN sys_role_user ru ON r.id = ru.role_id
         WHERE ru.user_id = #{userId}
     </select>
     <select id="getRoleIdsByUserId" resultType="java.lang.Integer">
+        SELECT DISTINCT r.id FROM sys_role r
+            LEFT JOIN sys_role_user ru ON r.id = ru.role_id
+        WHERE ru.user_id = #{userId}
+    </select>
+    <select id="getRoleIdsByUsername" resultType="java.lang.Integer">
         SELECT DISTINCT ru.role_id FROM sys_role_user ru
         LEFT JOIN sys_user u ON ru.user_id = u.id
         WHERE u.username=#{username}
@@ -30,8 +29,71 @@
         </foreach>
         ORDER BY m.sort
     </select>
+    <select id="getUserList" resultType="com.caimei365.manager.entity.SysUser">
+        SELECT u.id, u.username, u.password, u.avatar, u.fullName, u.phone, u.create_time AS createTime ,u.update_time AS updateTime
+        FROM sys_user u
+        WHERE u.del_flag = 0
+        <if test="username != null and username != ''">
+            AND u.username=#{username}
+        </if>
+        <if test="fullName != null and fullName != ''">
+            AND u.fullName=#{fullName}
+        </if>
+    </select>
+    <select id="getUser" resultType="com.caimei365.manager.entity.SysUser">
+        SELECT u.id, u.username, u.password, u.avatar, u.fullName, u.phone, u.create_time AS createTime ,u.update_time AS updateTime
+        FROM sys_user u
+        WHERE u.id = #{id}
+    </select>
+    <insert id="insertSysUser" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
+        INSERT INTO sys_user(username, password, avatar, fullName, phone, create_time)
+        VALUES(#{username}, #{password}, #{avatar}, #{fullName}, #{phone}, NOW())
+    </insert>
+    <update id="updateSysUser">
+        UPDATE sys_user SET username=#{username},
+        <if test="password != null and password != ''">
+            password=#{password},
+        </if>
+        avatar=#{avatar}, fullName=#{fullName}, phone=#{phone}, update_time=NOW()
+        WHERE id = #{id}
+    </update>
+    <update id="deleteSysUser">
+        UPDATE sys_user SET del_flag=1, update_time=NOW() WHERE id = #{id}
+    </update>
+    <insert id="insertUserRoleRelation">
+        INSERT INTO sys_role_user(user_id, role_id) VALUES(#{userId}, #{roleId})
+    </insert>
+    <delete id="deleteUserRoleRelation">
+        DELETE FROM sys_role_user WHERE user_id = #{userId}
+    </delete>
+    <select id="getRoleList" resultType="com.caimei365.manager.entity.SysRole">
+        SELECT  r.id, r.role_name AS roleName, r.role_desc AS roleDesc, r.create_time AS createTime, r.update_time AS updateTime
+        FROM sys_role r WHERE r.del_flag = 0
+    </select>
+    <select id="getRole" resultType="com.caimei365.manager.entity.SysRole">
+        SELECT  r.id, r.role_name AS roleName, r.role_desc AS roleDesc, r.create_time AS createTime, r.update_time AS updateTime
+        FROM sys_role r WHERE r.id = #{id}
+    </select>
+    <insert id="insertRole" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
+        INSERT INTO sys_role(role_name, role_desc, create_time)
+        VALUES (#{roleName}, #{roleDesc}, NOW())
+    </insert>
+    <insert id="insertRoleMenuRelation">
+        INSERT INTO sys_role_menu(role_id, menu_id) VALUES(#{roleId}, #{menuId})
+    </insert>
+    <delete id="deleteRoleMenuRelation">
+        DELETE FROM sys_role_menu WHERE role_id = #{roleId}
+    </delete>
+    <update id="updateRole">
+        UPDATE sys_role SET role_name=#{roleName}, role_desc=#{roleDesc}, update_time=NOW()
+        WHERE id = #{id}
+    </update>
+    <update id="deleteRole">
+        UPDATE sys_role SET del_flag=1, update_time=NOW() WHERE id = #{id}
+    </update>
     <select id="getMenuList" resultType="com.caimei365.manager.entity.SysMenu">
-        SELECT m.id, m.title , m.name, m.icon, m.parent_id AS parentId, m.status, m.sort, m.create_time AS createTime
+        SELECT m.id, m.title , m.name, m.icon, m.parent_id AS parentId, m.status, m.sort, m.create_time AS createTime,
+        (SELECT COUNT(*) FROM sys_menu WHERE parent_id=m.id) AS childCount
         FROM sys_menu m
         WHERE m.del_flag = 0
         <if test="parentId != null or parentId == 0">
@@ -51,11 +113,11 @@
         UPDATE sys_menu SET title=#{title}, name=#{name}, icon=#{icon}, parent_id=#{parentId}, status=#{status}, sort=#{sort}, update_time=NOW()
         WHERE id = #{id}
     </update>
-    <update id="deleteMenu">
-        UPDATE sys_menu SET del_flag=1, update_time=NOW() WHERE id = #{id}
-    </update>
-    <insert id="insertMenu">
+    <insert id="insertMenu" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
         INSERT INTO sys_menu(title, name, icon, parent_id, status, sort, create_time)
         VALUES (#{title}, #{name}, #{icon}, #{parentId}, #{status}, #{sort}, NOW())
     </insert>
+    <update id="deleteMenu">
+        UPDATE sys_menu SET del_flag=1, update_time=NOW() WHERE id = #{id}
+    </update>
 </mapper>