Skip to content

Commit 55d81bf

Browse files
committed
feat: 添加menu管理接口
1 parent a76f601 commit 55d81bf

8 files changed

Lines changed: 299 additions & 0 deletions

File tree

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package top.cadecode.uniboot.controller.system;
2+
3+
import com.github.pagehelper.PageInfo;
4+
import io.swagger.annotations.Api;
5+
import io.swagger.annotations.ApiOperation;
6+
import lombok.RequiredArgsConstructor;
7+
import lombok.extern.slf4j.Slf4j;
8+
import org.springframework.transaction.annotation.Transactional;
9+
import org.springframework.validation.annotation.Validated;
10+
import org.springframework.web.bind.annotation.PostMapping;
11+
import org.springframework.web.bind.annotation.RequestBody;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.web.bind.annotation.RestController;
14+
import top.cadecode.uniboot.common.annotation.ApiFormat;
15+
import top.cadecode.uniboot.common.response.PageResult;
16+
import top.cadecode.uniboot.system.bean.po.SysMenu;
17+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuRolesVo;
18+
import top.cadecode.uniboot.system.convert.SysMenuConvert;
19+
import top.cadecode.uniboot.system.service.SysMenuService;
20+
import top.cadecode.uniboot.system.service.SysRoleService;
21+
22+
import javax.validation.Valid;
23+
import javax.validation.constraints.NotEmpty;
24+
import java.util.List;
25+
26+
import static top.cadecode.uniboot.system.request.SysMenuRequest.*;
27+
28+
/**
29+
* 菜单管理API
30+
*
31+
* @author Cade Li
32+
* @since 2023/4/12
33+
*/
34+
@ApiFormat
35+
@Slf4j
36+
@RequiredArgsConstructor
37+
@Api(tags = "菜单管理")
38+
@RequestMapping("system/menu")
39+
@RestController
40+
@Validated
41+
public class SysMenuController {
42+
43+
private final SysMenuService sysMenuService;
44+
private final SysRoleService sysRoleService;
45+
46+
@ApiOperation("查询用户列表(带角色)")
47+
@PostMapping("page_roles_vo")
48+
public PageResult<SysMenuRolesVo> pageRolesVo(@RequestBody @Valid SysMenuRolesRequest request) {
49+
PageInfo<SysMenuRolesVo> rolesVoPage = sysMenuService.pageRolesVo(request);
50+
return new PageResult<>((int) rolesVoPage.getTotal(), rolesVoPage.getList());
51+
}
52+
53+
@ApiOperation("更新用户启用状态")
54+
@PostMapping("update_enable")
55+
public boolean updateEnable(@RequestBody @Valid SysMenuUpdateEnableRequest request) {
56+
return sysMenuService.lambdaUpdate()
57+
.eq(SysMenu::getId, request.getId())
58+
.set(SysMenu::getEnableFlag, request.getEnableFlag())
59+
.update(new SysMenu());
60+
}
61+
62+
@ApiOperation("更新用户")
63+
@PostMapping("update")
64+
public boolean update(@RequestBody @Valid SysMenuUpdateRequest request) {
65+
SysMenu sysMenu = SysMenuConvert.INSTANCE.requestToPo(request);
66+
return sysMenuService.updateById(sysMenu);
67+
}
68+
69+
@ApiOperation("添加用户")
70+
@PostMapping("add")
71+
public boolean add(@RequestBody @Valid SysMenuAddRequest request) {
72+
SysMenu sysMenu = SysMenuConvert.INSTANCE.requestToPo(request);
73+
return sysMenuService.save(sysMenu);
74+
}
75+
76+
@ApiOperation("删除用户(多选)")
77+
@PostMapping("delete")
78+
@Transactional(rollbackFor = Exception.class)
79+
public boolean delete(@RequestBody @NotEmpty List<Long> menuIdList) {
80+
// 清理菜单角色绑定关系
81+
sysRoleService.removeRoleMenuByMenuIds(menuIdList);
82+
return sysMenuService.removeBatchByIds(menuIdList);
83+
}
84+
85+
@ApiOperation("获取用户(带角色)byMenuIds")
86+
@PostMapping("list_roles_vo_by_menu_ids")
87+
public List<SysMenuRolesVo> listRolesVoByMenuIds(@RequestBody @NotEmpty List<Long> menuIdList) {
88+
return sysMenuService.listRolesVoByMenuIds(menuIdList);
89+
}
90+
}

system/src/main/java/top/cadecode/uniboot/system/bean/vo/SysMenuVo.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import lombok.Data;
44

55
import java.util.ArrayList;
6+
import java.util.Date;
67
import java.util.List;
78

89
/**
@@ -33,4 +34,35 @@ public static class SysMenuTreeVo {
3334

3435
private List<SysMenuTreeVo> children = new ArrayList<>();
3536
}
37+
38+
@Data
39+
public static class SysMenuRolesVo {
40+
private Long id;
41+
42+
private Long parentId;
43+
44+
private String routeName;
45+
46+
private String routePath;
47+
48+
private String componentPath;
49+
50+
private String menuName;
51+
52+
private Boolean leafFlag;
53+
54+
private String icon;
55+
56+
private Integer orderNum;
57+
58+
private Boolean enableFlag;
59+
60+
private List<String> roles;
61+
62+
private Date createTime;
63+
64+
private Date updateTime;
65+
66+
private String updateUser;
67+
}
3668
}

system/src/main/java/top/cadecode/uniboot/system/convert/SysMenuConvert.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.mapstruct.factory.Mappers;
55
import top.cadecode.uniboot.system.bean.po.SysMenu;
66
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
7+
import top.cadecode.uniboot.system.request.SysMenuRequest.SysMenuAddRequest;
8+
import top.cadecode.uniboot.system.request.SysMenuRequest.SysMenuUpdateRequest;
79

810
/**
911
* 系统菜单BEAN转换
@@ -18,4 +20,8 @@ public interface SysMenuConvert {
1820

1921
SysMenuTreeVo toTreeVo(SysMenu sysMenu);
2022

23+
SysMenu requestToPo(SysMenuUpdateRequest request);
24+
25+
SysMenu requestToPo(SysMenuAddRequest request);
26+
2127
}

system/src/main/java/top/cadecode/uniboot/system/mapper/SysMenuMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.apache.ibatis.annotations.Mapper;
55
import org.apache.ibatis.annotations.Param;
66
import top.cadecode.uniboot.system.bean.po.SysMenu;
7+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuRolesVo;
8+
import top.cadecode.uniboot.system.request.SysMenuRequest.SysMenuRolesRequest;
79

810
import java.util.List;
911

@@ -17,4 +19,9 @@
1719
public interface SysMenuMapper extends BaseMapper<SysMenu> {
1820

1921
List<SysMenu> selectByRoles(@Param("roleCodes") List<String> roleCodes);
22+
23+
List<SysMenuRolesVo> selectRolesVo(@Param("request") SysMenuRolesRequest request);
24+
25+
List<SysMenuRolesVo> selectRolesVoByMenuIds(@Param("menuIds") List<Long> menuIds);
26+
2027
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package top.cadecode.uniboot.system.request;
2+
3+
import lombok.Data;
4+
import lombok.EqualsAndHashCode;
5+
import top.cadecode.uniboot.common.response.PageParams;
6+
7+
import javax.validation.constraints.NotEmpty;
8+
import javax.validation.constraints.NotNull;
9+
import java.util.List;
10+
11+
/**
12+
* 菜单请求体
13+
*
14+
* @author Cade Li
15+
* @since 2023/5/5
16+
*/
17+
public class SysMenuRequest {
18+
19+
@Data
20+
@EqualsAndHashCode(callSuper = true)
21+
public static class SysMenuRolesRequest extends PageParams {
22+
private String routeName;
23+
private String menuName;
24+
private List<Long> roleIdList;
25+
private Boolean enableFlag;
26+
}
27+
28+
@Data
29+
public static class SysMenuUpdateEnableRequest{
30+
@NotNull
31+
private Long id;
32+
@NotNull
33+
private Boolean enableFlag;
34+
}
35+
36+
@Data
37+
public static class SysMenuUpdateRequest{
38+
@NotNull
39+
private Long id;
40+
private Long parentId;
41+
@NotEmpty
42+
private String routeName;
43+
@NotEmpty
44+
private String routePath;
45+
@NotEmpty
46+
private String componentPath;
47+
@NotEmpty
48+
private String menuName;
49+
@NotNull
50+
private Boolean leafFlag;
51+
private String icon;
52+
@NotNull
53+
private Integer orderNum;
54+
}
55+
56+
@Data
57+
public static class SysMenuAddRequest{
58+
private Long parentId;
59+
@NotEmpty
60+
private String routeName;
61+
@NotEmpty
62+
private String routePath;
63+
@NotEmpty
64+
private String componentPath;
65+
@NotEmpty
66+
private String menuName;
67+
@NotNull
68+
private Boolean leafFlag;
69+
private String icon;
70+
@NotNull
71+
private Integer orderNum;
72+
@NotNull
73+
private Boolean enableFlag;
74+
}
75+
}

system/src/main/java/top/cadecode/uniboot/system/service/SysMenuService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package top.cadecode.uniboot.system.service;
22

33
import com.baomidou.mybatisplus.extension.service.IService;
4+
import com.github.pagehelper.PageInfo;
45
import top.cadecode.uniboot.system.bean.po.SysMenu;
6+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuRolesVo;
57
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
8+
import top.cadecode.uniboot.system.request.SysMenuRequest.SysMenuRolesRequest;
69

710
import java.util.List;
811

@@ -17,4 +20,11 @@ public interface SysMenuService extends IService<SysMenu> {
1720
List<SysMenu> listByRoles(List<String> roleCodes);
1821

1922
List<SysMenuTreeVo> listTreeVoByRoles(List<String> roleCodes);
23+
24+
List<SysMenuRolesVo> listRolesVo(SysMenuRolesRequest request);
25+
26+
PageInfo<SysMenuRolesVo> pageRolesVo(SysMenuRolesRequest request);
27+
28+
List<SysMenuRolesVo> listRolesVoByMenuIds(List<Long> menuIds);
29+
2030
}

system/src/main/java/top/cadecode/uniboot/system/serviceimpl/SysMenuServiceImpl.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import cn.hutool.core.util.ObjectUtil;
44
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5+
import com.github.pagehelper.PageHelper;
6+
import com.github.pagehelper.PageInfo;
57
import lombok.RequiredArgsConstructor;
68
import org.springframework.stereotype.Service;
79
import top.cadecode.uniboot.system.bean.po.SysMenu;
10+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuRolesVo;
811
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
912
import top.cadecode.uniboot.system.convert.SysMenuConvert;
1013
import top.cadecode.uniboot.system.mapper.SysMenuMapper;
14+
import top.cadecode.uniboot.system.request.SysMenuRequest.SysMenuRolesRequest;
1115
import top.cadecode.uniboot.system.service.SysMenuService;
1216

1317
import java.util.ArrayList;
@@ -41,6 +45,22 @@ public List<SysMenuTreeVo> listTreeVoByRoles(List<String> roleCodes) {
4145
return generateMenuTree(menuTreeVoList, null);
4246
}
4347

48+
@Override
49+
public List<SysMenuRolesVo> listRolesVo(SysMenuRolesRequest request) {
50+
return sysMenuMapper.selectRolesVo(request);
51+
}
52+
53+
@Override
54+
public PageInfo<SysMenuRolesVo> pageRolesVo(SysMenuRolesRequest request) {
55+
return PageHelper.startPage(request.getPageNumber(), request.getPageSize())
56+
.doSelectPageInfo(() -> sysMenuMapper.selectRolesVo(request));
57+
}
58+
59+
@Override
60+
public List<SysMenuRolesVo> listRolesVoByMenuIds(List<Long> menuIds) {
61+
return sysMenuMapper.selectRolesVoByMenuIds(menuIds);
62+
}
63+
4464
private List<SysMenuTreeVo> generateMenuTree(List<SysMenuTreeVo> menus, Long rootId) {
4565
List<SysMenuTreeVo> resultList = new ArrayList<>();
4666
menus.forEach(menu -> {

system/src/main/resources/mapper/SysMenuMapper.xml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
22
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
33
<mapper namespace="top.cadecode.uniboot.system.mapper.SysMenuMapper">
4+
<resultMap id="SysMenuRolesVoMap" type="top.cadecode.uniboot.system.bean.vo.SysMenuVo$SysMenuRolesVo">
5+
<result column="id" property="id"/>
6+
<result column="parent_id" property="parentId"/>
7+
<result column="route_name" property="routeName"/>
8+
<result column="route_path" property="routePath"/>
9+
<result column="component_path" property="componentPath"/>
10+
<result column="menu_name" property="menuName"/>
11+
<result column="leaf_flag" property="leafFlag"/>
12+
<result column="icon" property="icon"/>
13+
<result column="order_num" property="orderNum"/>
14+
<result column="enable_flag" property="enableFlag"/>
15+
<result column="create_time" property="createTime"/>
16+
<result column="update_time" property="updateTime"/>
17+
<result column="update_user" property="updateUser"/>
18+
<collection property="roles" ofType="string">
19+
<result column="r_code"/>
20+
</collection>
21+
</resultMap>
422
<select id="selectByRoles" resultType="top.cadecode.uniboot.system.bean.po.SysMenu">
523
SELECT DISTINCT sm.*
624
FROM sys_menu sm LEFT JOIN sys_role_menu srm ON sm.id = srm.menu_id
@@ -11,4 +29,45 @@
1129
</foreach>
1230
ORDER BY sm.order_num
1331
</select>
32+
<select id="selectRolesVo" resultMap="SysMenuRolesVoMap">
33+
SELECT sm.*, sr.code r_code
34+
FROM sys_menu sm
35+
LEFT JOIN sys_role_menu srm ON srm.menu_id = sm.id
36+
LEFT JOIN sys_role sr ON srm.role_id = sr.id
37+
<if test="request != null">
38+
<where>
39+
<if test="request.routeName != null and request.routeName.length > 0">
40+
sm.route_name like CONCAT(#{request.routeName}, '%')
41+
</if>
42+
<if test="request.menuName != null and request.menuName.length > 0">
43+
AND sm.menu_name like CONCAT(#{request.menuName}, '%')
44+
</if>
45+
<if test="request.enableFlag != null">
46+
AND sm.enable_flag = #{request.enableFlag}
47+
</if>
48+
<if test="request.roleIdList != null and request.roleIdList.size > 0 ">
49+
AND sr.id in (
50+
<foreach collection="request.roleIdList" item="id" separator=",">
51+
#{id}
52+
</foreach>
53+
)
54+
</if>
55+
</where>
56+
</if>
57+
ORDER BY sm.create_time DESC, sr.code
58+
</select>
59+
<select id="selectRolesVoByMenuIds" resultMap="SysMenuRolesVoMap">
60+
SELECT sm.*, sr.code r_code
61+
FROM sys_menu sm
62+
LEFT JOIN sys_role_menu srm ON srm.menu_id = sm.id
63+
LEFT JOIN sys_role sr ON srm.role_id = sr.id
64+
<if test="menuIds != null and menuIds.size > 0">
65+
WHERE sm.id IN (
66+
<foreach collection="menuIds" item="id" separator=",">
67+
#{id}
68+
</foreach>
69+
)
70+
</if>
71+
ORDER BY sm.create_time DESC, sr.code
72+
</select>
1473
</mapper>

0 commit comments

Comments
 (0)