瀏覽代碼

接口约束优化

chao 3 年之前
父節點
當前提交
0df76619d0

+ 12 - 3
src/main/java/com/caimei365/manager/controller/SysUserApi.java

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.*;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 
 /**
 /**
  * Description
  * Description
@@ -84,7 +85,7 @@ public class SysUserApi {
     /**
     /**
      * 添加用户
      * 添加用户
      */
      */
-    @PostMapping("/user/create/")
+    @PostMapping("/user/create")
     public ResponseJson<Void> addUser(@RequestBody SysUser sysUser) {
     public ResponseJson<Void> addUser(@RequestBody SysUser sysUser) {
         return sysUserService.addUser(sysUser);
         return sysUserService.addUser(sysUser);
     }
     }
@@ -136,7 +137,7 @@ public class SysUserApi {
     /**
     /**
      * 添加角色
      * 添加角色
      */
      */
-    @PostMapping("/role/create/")
+    @PostMapping("/role/create")
     public ResponseJson<Void> addRole(@RequestBody SysRole sysRole) {
     public ResponseJson<Void> addRole(@RequestBody SysRole sysRole) {
         return sysUserService.addRole(sysRole);
         return sysUserService.addRole(sysRole);
     }
     }
@@ -181,6 +182,14 @@ public class SysUserApi {
         return sysUserService.getMenuList(parentId, status, pageNum, pageSize);
         return sysUserService.getMenuList(parentId, status, pageNum, pageSize);
     }
     }
 
 
+    /**
+     * 获取所有启用的菜单列表(树状结构返回)
+     */
+    @GetMapping("/menu/tree")
+    public ResponseJson<List<SysMenu>> menuTree() {
+        return sysUserService.getMenuTree();
+    }
+
     /**
     /**
      * 根据ID获取菜单
      * 根据ID获取菜单
      */
      */
@@ -217,7 +226,7 @@ public class SysUserApi {
     /**
     /**
      * 添加菜单
      * 添加菜单
      */
      */
-    @PostMapping("/menu/create/")
+    @PostMapping("/menu/create")
     public ResponseJson<Void> addMenu(@RequestBody SysMenu menu) {
     public ResponseJson<Void> addMenu(@RequestBody SysMenu menu) {
         return sysUserService.addMenu(menu);
         return sysUserService.addMenu(menu);
     }
     }

+ 9 - 0
src/main/java/com/caimei365/manager/dao/SysUserDao.java

@@ -75,6 +75,10 @@ public interface SysUserDao {
      * 根据ID获取角色
      * 根据ID获取角色
      */
      */
     SysRole getRole(Integer id);
     SysRole getRole(Integer id);
+    /**
+     * 根据角色名称获取角色
+     */
+    SysRole getRoleByRoleName(String roleName);
     /**
     /**
      * 根据ID更新角色
      * 根据ID更新角色
      */
      */
@@ -106,6 +110,10 @@ public interface SysUserDao {
      * 根据ID获取菜单
      * 根据ID获取菜单
      */
      */
     SysMenu getMenu(Integer id);
     SysMenu getMenu(Integer id);
+    /**
+     * 根据路由名称查询菜单
+     */
+    SysMenu getMenuByName(String name);
     /**
     /**
      * 根据ID更新菜单
      * 根据ID更新菜单
      */
      */
@@ -118,4 +126,5 @@ public interface SysUserDao {
      * 添加菜单
      * 添加菜单
      */
      */
     void insertMenu(SysMenu menu);
     void insertMenu(SysMenu menu);
+
 }
 }

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

@@ -3,6 +3,7 @@ package com.caimei365.manager.entity;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * Description
  * Description
@@ -48,6 +49,14 @@ public class SysMenu {
      * 排序
      * 排序
      */
      */
     private Integer sort;
     private Integer sort;
+    /**
+     * 删除标记:0未删,其他删除
+     */
+    private Integer delFlag;
+    /**
+     * 排序
+     */
+    private List<SysMenu> subMenus;
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 }
 }

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

@@ -32,6 +32,10 @@ public class SysRole {
      * 更新时间
      * 更新时间
      */
      */
     private Date updateTime;
     private Date updateTime;
+    /**
+     * 删除标记:0未删,其他删除
+     */
+    private Integer delFlag;
     /**
     /**
      * 角色授权菜单
      * 角色授权菜单
      */
      */

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

@@ -45,6 +45,10 @@ public class SysUser {
      * 更新时间
      * 更新时间
      */
      */
     private Date updateTime;
     private Date updateTime;
+    /**
+     * 删除标记:0未删,其他删除
+     */
+    private Integer delFlag;
     /**
     /**
      * 角色Ids,用","隔开
      * 角色Ids,用","隔开
      */
      */

+ 4 - 0
src/main/java/com/caimei365/manager/service/SysUserService.java

@@ -83,6 +83,10 @@ public interface SysUserService {
      * @param pageSize 每页大小
      * @param pageSize 每页大小
      */
      */
     ResponseJson<PaginationVo<SysMenu>> getMenuList(Integer parentId, Integer status, int pageNum, int pageSize);
     ResponseJson<PaginationVo<SysMenu>> getMenuList(Integer parentId, Integer status, int pageNum, int pageSize);
+    /**
+     * 获取所有启用的菜单列表(树状结构返回)
+     */
+    ResponseJson<List<SysMenu>> getMenuTree();
     /**
     /**
      * 根据ID获取菜单
      * 根据ID获取菜单
      */
      */

+ 91 - 17
src/main/java/com/caimei365/manager/service/impl/SysUserServiceImpl.java

@@ -100,6 +100,7 @@ public class SysUserServiceImpl implements SysUserService {
     @Override
     @Override
     public ResponseJson<Void> updateUser(Integer id, SysUser sysUser) {
     public ResponseJson<Void> updateUser(Integer id, SysUser sysUser) {
         sysUser.setId(id);
         sysUser.setId(id);
+        sysUser.setDelFlag(0);
         if (StringUtils.hasLength(sysUser.getPassword())){
         if (StringUtils.hasLength(sysUser.getPassword())){
             // 密码加密
             // 密码加密
             String encodePassword = passwordEncoder.encode(sysUser.getPassword());
             String encodePassword = passwordEncoder.encode(sysUser.getPassword());
@@ -121,16 +122,25 @@ public class SysUserServiceImpl implements SysUserService {
     @Override
     @Override
     public ResponseJson<Void> addUser(SysUser sysUser) {
     public ResponseJson<Void> addUser(SysUser sysUser) {
         if (StringUtils.hasLength(sysUser.getUsername()) && StringUtils.hasLength(sysUser.getPassword())) {
         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);
+            // 查询是否存在当前用户名的用户
+            SysUser dbUser = sysUserDao.findByUsername(sysUser.getUsername());
+            if (null == dbUser || dbUser.getDelFlag() != 0) {
+                // 密码加密
+                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);
+            } else if (!Integer.valueOf(0).equals(dbUser.getDelFlag())){
+                // 更新已删除用户
+                return updateUser(dbUser.getId(), sysUser);
+            } else {
+                return ResponseJson.error("用户名已存在", null);
+            }
         }
         }
         return ResponseJson.error("用户名或密码不能为空", null);
         return ResponseJson.error("用户名或密码不能为空", null);
     }
     }
@@ -189,7 +199,14 @@ public class SysUserServiceImpl implements SysUserService {
     @Override
     @Override
     public ResponseJson<Void> updateRole(Integer id, SysRole sysRole) {
     public ResponseJson<Void> updateRole(Integer id, SysRole sysRole) {
         sysRole.setId(id);
         sysRole.setId(id);
+        sysRole.setDelFlag(0);
+        // 删除原有角色菜单关联
+        sysUserDao.deleteRoleMenuRelation(id);
+        // 菜单Ids,用","隔开
+        String menuIds = sysRole.getMenuIds();
         sysUserDao.updateRole(sysRole);
         sysUserDao.updateRole(sysRole);
+        // 保存角色菜单关系
+        saveRoleMenuRelation(sysRole.getId(), menuIds);
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 
 
@@ -198,12 +215,24 @@ public class SysUserServiceImpl implements SysUserService {
      */
      */
     @Override
     @Override
     public ResponseJson<Void> addRole(SysRole sysRole) {
     public ResponseJson<Void> addRole(SysRole sysRole) {
-        String menuIds = sysRole.getMenuIds();
-        // 保存角色
-        sysUserDao.insertRole(sysRole);
-        // 保存角色菜单关系
-        saveRoleMenuRelation(sysRole.getId(), menuIds);
-        return ResponseJson.success();
+        if (StringUtils.hasLength(sysRole.getRoleName())) {
+            // 查询是否存在当前角色
+            SysRole dbRole  = sysUserDao.getRoleByRoleName(sysRole.getRoleName());
+            if (null == dbRole) {
+                String menuIds = sysRole.getMenuIds();
+                // 保存角色
+                sysUserDao.insertRole(sysRole);
+                // 保存角色菜单关系
+                saveRoleMenuRelation(sysRole.getId(), menuIds);
+                return ResponseJson.success();
+            } else if (!Integer.valueOf(0).equals(dbRole.getDelFlag())){
+                // 更新已删除角色
+                return updateRole(dbRole.getId(), sysRole);
+            } else {
+                return ResponseJson.error("角色名已存在", null);
+            }
+        }
+        return ResponseJson.error("角色名称不能为空", null);
     }
     }
 
 
     /**
     /**
@@ -260,6 +289,32 @@ public class SysUserServiceImpl implements SysUserService {
         return ResponseJson.success(pageData);
         return ResponseJson.success(pageData);
     }
     }
 
 
+    /**
+     * 获取所有启用的菜单列表(树状结构返回)
+     */
+    @Override
+    public ResponseJson<List<SysMenu>> getMenuTree() {
+        List<SysMenu> menus = sysUserDao.getMenuList(0, 0);
+        // 递归设置子菜单
+        setSubMenusData(menus);
+        return ResponseJson.success(menus);
+    }
+
+    /**
+     * 递归设置子菜单
+     */
+    private void setSubMenusData(List<SysMenu> menus) {
+        if (!CollectionUtils.isEmpty(menus)) {
+            for (SysMenu menu : menus) {
+                List<SysMenu> submenus = sysUserDao.getMenuList(menu.getId(), 0);
+                if (!CollectionUtils.isEmpty(submenus)) {
+                    setSubMenusData(submenus);
+                    menu.setSubMenus(submenus);
+                }
+            }
+        }
+    }
+
     /**
     /**
      * 根据ID获取菜单
      * 根据ID获取菜单
      */
      */
@@ -275,6 +330,7 @@ public class SysUserServiceImpl implements SysUserService {
     @Override
     @Override
     public ResponseJson<Void> updateMenu(Integer id, SysMenu menu) {
     public ResponseJson<Void> updateMenu(Integer id, SysMenu menu) {
         menu.setId(id);
         menu.setId(id);
+        menu.setDelFlag(0);
         sysUserDao.updateMenu(menu);
         sysUserDao.updateMenu(menu);
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
@@ -314,7 +370,25 @@ public class SysUserServiceImpl implements SysUserService {
      */
      */
     @Override
     @Override
     public ResponseJson<Void> addMenu(SysMenu menu) {
     public ResponseJson<Void> addMenu(SysMenu menu) {
-        sysUserDao.insertMenu(menu);
+        if (null == menu.getParentId()) {
+            menu.setParentId(0);
+        }
+        if (!StringUtils.hasLength(menu.getName())) {
+            return ResponseJson.error("菜单路由名不能为空!", null);
+        }
+        if (!StringUtils.hasLength(menu.getTitle())) {
+            return ResponseJson.error("菜单名称不能为空!", null);
+        }
+        // 根据路由名称查询菜单
+        SysMenu dbMenu = sysUserDao.getMenuByName(menu.getName());
+        if (null == dbMenu) {
+            sysUserDao.insertMenu(menu);
+        } else if (!Integer.valueOf(0).equals(dbMenu.getDelFlag())){
+            // 更新已删除菜单
+            return updateMenu(dbMenu.getId(), menu);
+        } else {
+            return ResponseJson.error("菜单路由名已存在", null);
+        }
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 
 

+ 18 - 9
src/main/resources/mapper/SysUserDao.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!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">
 <mapper namespace="com.caimei365.manager.dao.SysUserDao">
     <select id="findByUsername" resultType="com.caimei365.manager.entity.SysUser">
     <select id="findByUsername" resultType="com.caimei365.manager.entity.SysUser">
-        SELECT id,username,PASSWORD,avatar FROM sys_user WHERE username=#{username}
+        SELECT id,username,PASSWORD,avatar,del_flag AS delFlag FROM sys_user WHERE username=#{username}
     </select>
     </select>
     <select id="getRoleListByUserId" resultType="java.lang.String">
     <select id="getRoleListByUserId" resultType="java.lang.String">
         SELECT DISTINCT r.role_name FROM sys_role r
         SELECT DISTINCT r.role_name FROM sys_role r
@@ -20,7 +20,7 @@
         WHERE u.username=#{username}
         WHERE u.username=#{username}
     </select>
     </select>
     <select id="getMenusByRoleIds" resultType="com.caimei365.manager.entity.SysMenu">
     <select id="getMenusByRoleIds" 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, del_flag AS delFlag
         FROM sys_menu m
         FROM sys_menu m
                  LEFT JOIN sys_role_menu rm ON m.id = rm.menu_id
                  LEFT JOIN sys_role_menu rm ON m.id = rm.menu_id
         WHERE m.del_flag = 0 AND m.status = 0 AND rm.role_id IN
         WHERE m.del_flag = 0 AND m.status = 0 AND rm.role_id IN
@@ -30,7 +30,7 @@
         ORDER BY m.sort
         ORDER BY m.sort
     </select>
     </select>
     <select id="getUserList" resultType="com.caimei365.manager.entity.SysUser">
     <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
+        SELECT u.id, u.username, u.password, u.avatar, u.fullName, u.phone, u.create_time AS createTime ,u.update_time AS updateTime, del_flag AS delFlag
         FROM sys_user u
         FROM sys_user u
         WHERE u.del_flag = 0
         WHERE u.del_flag = 0
         <if test="username != null and username != ''">
         <if test="username != null and username != ''">
@@ -41,7 +41,7 @@
         </if>
         </if>
     </select>
     </select>
     <select id="getUser" resultType="com.caimei365.manager.entity.SysUser">
     <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
+        SELECT u.id, u.username, u.password, u.avatar, u.fullName, u.phone, u.create_time AS createTime ,u.update_time AS updateTime, del_flag AS delFlag
         FROM sys_user u
         FROM sys_user u
         WHERE u.id = #{id}
         WHERE u.id = #{id}
     </select>
     </select>
@@ -54,7 +54,7 @@
         <if test="password != null and password != ''">
         <if test="password != null and password != ''">
             password=#{password},
             password=#{password},
         </if>
         </if>
-        avatar=#{avatar}, fullName=#{fullName}, phone=#{phone}, update_time=NOW()
+        avatar=#{avatar}, fullName=#{fullName}, phone=#{phone}, del_flag=#{delFlag}, update_time=NOW()
         WHERE id = #{id}
         WHERE id = #{id}
     </update>
     </update>
     <update id="deleteSysUser">
     <update id="deleteSysUser">
@@ -67,13 +67,17 @@
         DELETE FROM sys_role_user WHERE user_id = #{userId}
         DELETE FROM sys_role_user WHERE user_id = #{userId}
     </delete>
     </delete>
     <select id="getRoleList" resultType="com.caimei365.manager.entity.SysRole">
     <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
+        SELECT  r.id, r.role_name AS roleName, r.role_desc AS roleDesc, r.create_time AS createTime, r.update_time AS updateTime, del_flag AS delFlag
         FROM sys_role r WHERE r.del_flag = 0
         FROM sys_role r WHERE r.del_flag = 0
     </select>
     </select>
     <select id="getRole" resultType="com.caimei365.manager.entity.SysRole">
     <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
+        SELECT  r.id, r.role_name AS roleName, r.role_desc AS roleDesc, r.create_time AS createTime, r.update_time AS updateTime, del_flag AS delFlag
         FROM sys_role r WHERE r.id = #{id}
         FROM sys_role r WHERE r.id = #{id}
     </select>
     </select>
+    <select id="getRoleByRoleName" 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, del_flag AS delFlag
+        FROM sys_role r WHERE r.role_name = #{roleName}
+    </select>
     <insert id="insertRole" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
     <insert id="insertRole" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
         INSERT INTO sys_role(role_name, role_desc, create_time)
         INSERT INTO sys_role(role_name, role_desc, create_time)
         VALUES (#{roleName}, #{roleDesc}, NOW())
         VALUES (#{roleName}, #{roleDesc}, NOW())
@@ -92,7 +96,7 @@
         UPDATE sys_role SET del_flag=1, update_time=NOW() WHERE id = #{id}
         UPDATE sys_role SET del_flag=1, update_time=NOW() WHERE id = #{id}
     </update>
     </update>
     <select id="getMenuList" resultType="com.caimei365.manager.entity.SysMenu">
     <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, del_flag AS delFlag,
         (SELECT COUNT(*) FROM sys_menu WHERE parent_id=m.id) AS childCount
         (SELECT COUNT(*) FROM sys_menu WHERE parent_id=m.id) AS childCount
         FROM sys_menu m
         FROM sys_menu m
         WHERE m.del_flag = 0
         WHERE m.del_flag = 0
@@ -105,10 +109,15 @@
         ORDER BY m.sort
         ORDER BY m.sort
     </select>
     </select>
     <select id="getMenu" resultType="com.caimei365.manager.entity.SysMenu">
     <select id="getMenu" 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, del_flag AS delFlag
         FROM sys_menu m
         FROM sys_menu m
         WHERE m.id = #{id}
         WHERE m.id = #{id}
     </select>
     </select>
+    <select id="getMenuByName" 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, del_flag AS delFlag
+        FROM sys_menu m
+        WHERE m.name = #{name}
+    </select>
     <update id="updateMenu">
     <update id="updateMenu">
         UPDATE sys_menu SET title=#{title}, name=#{name}, icon=#{icon}, parent_id=#{parentId}, status=#{status}, sort=#{sort}, update_time=NOW()
         UPDATE sys_menu SET title=#{title}, name=#{name}, icon=#{icon}, parent_id=#{parentId}, status=#{status}, sort=#{sort}, update_time=NOW()
         WHERE id = #{id}
         WHERE id = #{id}