Skip to content

Commit 9097fc8

Browse files
committed
feat: 添加user getInfo菜单接口
1 parent 2944b3f commit 9097fc8

8 files changed

Lines changed: 167 additions & 0 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package top.cadecode.uniboot.controller;
2+
3+
import io.swagger.annotations.Api;
4+
import io.swagger.annotations.ApiOperation;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.web.bind.annotation.PostMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
import top.cadecode.uniboot.common.annotation.ApiFormat;
11+
import top.cadecode.uniboot.framework.security.TokenAuthHolder;
12+
import top.cadecode.uniboot.system.bean.dto.SysUserDto.SysUserDetailsDto;
13+
import top.cadecode.uniboot.system.bean.dto.SysUserDto.SysUserInfoDto;
14+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
15+
import top.cadecode.uniboot.system.service.SysMenuService;
16+
17+
import java.util.List;
18+
19+
/**
20+
* 系统管理API
21+
*
22+
* @author Cade Li
23+
* @since 2023/4/12
24+
*/
25+
@ApiFormat
26+
@Slf4j
27+
@RequiredArgsConstructor
28+
@Api(tags = "系统管理")
29+
@RequestMapping("system")
30+
@RestController
31+
public class SystemController {
32+
33+
private final SysMenuService sysMenuService;
34+
35+
/**
36+
* 获取用户信息
37+
*/
38+
@ApiOperation("获取用户信息")
39+
@PostMapping("user/get_info")
40+
public SysUserInfoDto userGetInfo() {
41+
SysUserDetailsDto userDetails = TokenAuthHolder.getUserDetails(null);
42+
List<SysMenuTreeVo> sysMenuTreeVos = sysMenuService.listTreeVoByRoles(userDetails.getRoles());
43+
return SysUserInfoDto.builder().menuList(sysMenuTreeVos).build();
44+
}
45+
}

system/src/main/java/top/cadecode/uniboot/system/bean/dto/SysUserDto.java

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

33
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
46
import lombok.Data;
7+
import lombok.NoArgsConstructor;
58
import org.springframework.security.core.GrantedAuthority;
69
import org.springframework.security.core.authority.SimpleGrantedAuthority;
710
import org.springframework.security.core.userdetails.UserDetails;
11+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
812

913
import java.util.Collection;
1014
import java.util.Date;
@@ -79,4 +83,12 @@ public boolean isEnabled() {
7983
return true;
8084
}
8185
}
86+
87+
@Data
88+
@AllArgsConstructor
89+
@NoArgsConstructor
90+
@Builder
91+
public static class SysUserInfoDto {
92+
private List<SysMenuTreeVo> menuList;
93+
}
8294
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package top.cadecode.uniboot.system.bean.vo;
2+
3+
import lombok.Data;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
/**
9+
* 系统菜单VO
10+
*
11+
* @author Cade Li
12+
* @since 2023/4/15
13+
*/
14+
public class SysMenuVo {
15+
16+
@Data
17+
public static class SysMenuTreeVo {
18+
private Long id;
19+
20+
private Long parentId;
21+
22+
private String routeName;
23+
24+
private String routePath;
25+
26+
private String menuName;
27+
28+
private Boolean leafFlag;
29+
30+
private String icon;
31+
32+
private List<SysMenuTreeVo> children = new ArrayList<>();
33+
}
34+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.mapstruct.Mapper;
44
import org.mapstruct.factory.Mappers;
5+
import top.cadecode.uniboot.system.bean.po.SysMenu;
6+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
57

68
/**
79
* 系统菜单BEAN转换
@@ -14,4 +16,6 @@ public interface SysMenuConvert {
1416

1517
SysMenuConvert INSTANCE = Mappers.getMapper(SysMenuConvert.class);
1618

19+
SysMenuTreeVo toTreeVo(SysMenu sysMenu);
20+
1721
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
44
import org.apache.ibatis.annotations.Mapper;
5+
import org.apache.ibatis.annotations.Param;
56
import top.cadecode.uniboot.system.bean.po.SysMenu;
67

8+
import java.util.List;
9+
710
/**
811
* 系统菜单DAO
912
*
@@ -12,4 +15,6 @@
1215
*/
1316
@Mapper
1417
public interface SysMenuMapper extends BaseMapper<SysMenu> {
18+
19+
List<SysMenu> listByRoles(@Param("roleCodes") List<String> roleCodes);
1520
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.baomidou.mybatisplus.extension.service.IService;
44
import top.cadecode.uniboot.system.bean.po.SysMenu;
5+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
6+
7+
import java.util.List;
58

69
/**
710
* 系统菜单服务
@@ -10,4 +13,8 @@
1013
* @date 2022/5/27
1114
*/
1215
public interface SysMenuService extends IService<SysMenu> {
16+
17+
List<SysMenu> listByRoles(List<String> roleCodes);
18+
19+
List<SysMenuTreeVo> listTreeVoByRoles(List<String> roleCodes);
1320
}

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package top.cadecode.uniboot.system.serviceimpl;
22

3+
import cn.hutool.core.util.ObjectUtil;
34
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
45
import lombok.RequiredArgsConstructor;
56
import org.springframework.stereotype.Service;
67
import top.cadecode.uniboot.system.bean.po.SysMenu;
8+
import top.cadecode.uniboot.system.bean.vo.SysMenuVo.SysMenuTreeVo;
9+
import top.cadecode.uniboot.system.convert.SysMenuConvert;
710
import top.cadecode.uniboot.system.mapper.SysMenuMapper;
811
import top.cadecode.uniboot.system.service.SysMenuService;
912

13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.stream.Collectors;
16+
1017
/**
1118
* 系统菜单服务实现
1219
*
@@ -16,4 +23,45 @@
1623
@Service
1724
@RequiredArgsConstructor
1825
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
26+
27+
private final SysMenuMapper sysMenuMapper;
28+
29+
@Override
30+
public List<SysMenu> listByRoles(List<String> roleCodes) {
31+
return sysMenuMapper.listByRoles(roleCodes);
32+
}
33+
34+
@Override
35+
public List<SysMenuTreeVo> listTreeVoByRoles(List<String> roleCodes) {
36+
List<SysMenu> sysMenus = listByRoles(roleCodes);
37+
List<SysMenuTreeVo> menuTreeVoList = sysMenus.stream()
38+
.filter(m -> ObjectUtil.equal(m.getEnableFlag(), true))
39+
.map(SysMenuConvert.INSTANCE::toTreeVo)
40+
.collect(Collectors.toList());
41+
return generateMenuTree(menuTreeVoList, null);
42+
}
43+
44+
private List<SysMenuTreeVo> generateMenuTree(List<SysMenuTreeVo> menus, Long rootId) {
45+
List<SysMenuTreeVo> resultList = new ArrayList<>();
46+
menus.forEach(menu -> {
47+
// 确定下父亲
48+
if (ObjectUtil.notEqual(menu.getParentId(), rootId)) {
49+
return;
50+
}
51+
menus.forEach(m -> {
52+
// 比一下是不是儿子
53+
if (ObjectUtil.notEqual(m.getParentId(), menu.getId())) {
54+
return;
55+
}
56+
// 拿儿子列表
57+
List<SysMenuTreeVo> children = menu.getChildren();
58+
// 存儿子
59+
m.setChildren(generateMenuTree(menus, m.getId()));
60+
children.add(m);
61+
});
62+
resultList.add(menu);
63+
});
64+
return resultList;
65+
}
66+
1967
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3+
<mapper namespace="top.cadecode.uniboot.system.mapper.SysMenuMapper">
4+
<select id="listByRoles" resultType="top.cadecode.uniboot.system.bean.po.SysMenu">
5+
SELECT sm.*
6+
FROM sys_menu sm LEFT JOIN sys_role_menu srm ON sm.id = srm.menu_id
7+
LEFT JOIN sys_role sr ON srm.role_id = sr.id
8+
<foreach collection="roleCodes" item="roleCode" separator="," open="where sr.code IN (" close=")">
9+
#{roleCode}
10+
</foreach>
11+
</select>
12+
</mapper>

0 commit comments

Comments
 (0)