From 4b2141bb5a82c549f5222841b91c0adc35dc32e8 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Mon, 25 Mar 2024 09:46:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/LoginAuthInterceptor.java | 4 ++- .../java/com/atguigu/utils/MenuHelper.java | 25 +++++++++++++++++++ .../spzx/manger/MangerApplication.java | 10 ++++---- .../manger/controller/IndexController.java | 13 ++++++++++ .../spzx/manger/mapper/SysMenuMapper.java | 8 ++++++ .../spzx/manger/service/SysMenuService.java | 8 ++++++ .../service/impl/SysMenuServiceImpl.java | 16 ++++++++++++ .../main/resources/mapper/SysMenuMapper.xml | 5 ++++ 8 files changed, 83 insertions(+), 6 deletions(-) diff --git a/spzx-common/common-service/src/main/java/com/atguigu/interceptor/LoginAuthInterceptor.java b/spzx-common/common-service/src/main/java/com/atguigu/interceptor/LoginAuthInterceptor.java index 6869f7d..7bb820d 100644 --- a/spzx-common/common-service/src/main/java/com/atguigu/interceptor/LoginAuthInterceptor.java +++ b/spzx-common/common-service/src/main/java/com/atguigu/interceptor/LoginAuthInterceptor.java @@ -47,7 +47,9 @@ public class LoginAuthInterceptor implements HandlerInterceptor { } // 将用户信息放到ThreadLocal中 - BaseContext.setSysUser(JSON.parseObject(sysUserString, SysUser.class)); + SysUser sysUser = JSON.parseObject(sysUserString, SysUser.class); + BaseContext.setSysUser(sysUser); + BaseContext.setUserId(sysUser.getId()); // 更新Redis过期时间 redisTemplate.expire(token, 7, TimeUnit.DAYS); diff --git a/spzx-common/common-service/src/main/java/com/atguigu/utils/MenuHelper.java b/spzx-common/common-service/src/main/java/com/atguigu/utils/MenuHelper.java index e491ed2..57a6dc4 100644 --- a/spzx-common/common-service/src/main/java/com/atguigu/utils/MenuHelper.java +++ b/spzx-common/common-service/src/main/java/com/atguigu/utils/MenuHelper.java @@ -2,8 +2,11 @@ package com.atguigu.utils; import com.atguigu.spzx.model.entity.system.SysMenu; +import com.atguigu.spzx.model.vo.system.SysMenuVo; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; @@ -43,4 +46,26 @@ public class MenuHelper { return sysMenu; } + + + /** + * 将List对象转换成List对象 + * + * @param menus 全部菜单列表 + * @return 系统菜单响应结果实体类列表 + */ + public static List buildMenus(List menus) { + LinkedList sysMenuVos = new LinkedList<>(); + menus.forEach(menu -> { + SysMenuVo menuVo = new SysMenuVo(); + menuVo.setTitle(menu.getTitle()); + menuVo.setName(menu.getComponent()); + List children = menu.getChildren(); + if (!CollectionUtils.isEmpty(children)) { + menuVo.setChildren(buildMenus(children)); + } + sysMenuVos.add(menuVo); + }); + return sysMenuVos; + } } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java index dfd7c12..b7c467e 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/MangerApplication.java @@ -9,13 +9,13 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; +@Slf4j +@MapperScan("com.atguigu.spzx.manger.mapper") +@EnableCaching// 开启缓存注解 +@ComponentScan("com.atguigu") +@EnableScheduling @SpringBootApplication @EnableTransactionManagement // 开启注解方式的事务管理 -@EnableCaching// 开启缓存注解 -@EnableScheduling -@ComponentScan("com.atguigu") -@MapperScan("com.atguigu.spzx.manger.mapper") -@Slf4j public class MangerApplication { public static void main(String[] args) { SpringApplication.run(MangerApplication.class, args); diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java index f5a5aab..15470d9 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/controller/IndexController.java @@ -1,18 +1,22 @@ package com.atguigu.spzx.manger.controller; import com.atguigu.context.BaseContext; +import com.atguigu.spzx.manger.service.SysMenuService; import com.atguigu.spzx.manger.service.SysUserService; import com.atguigu.spzx.manger.service.ValidateCodeService; import com.atguigu.spzx.model.dto.system.LoginDto; import com.atguigu.spzx.model.entity.system.SysUser; import com.atguigu.spzx.model.vo.result.Result; import com.atguigu.spzx.model.vo.system.LoginVo; +import com.atguigu.spzx.model.vo.system.SysMenuVo; import com.atguigu.spzx.model.vo.system.ValidateCodeVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Tag(name = "用户相关接口") @RestController @RequestMapping("/admin/system/index") @@ -20,6 +24,8 @@ public class IndexController { @Autowired private SysUserService sysUserService; @Autowired + private SysMenuService sysMenuService; + @Autowired private ValidateCodeService validateCodeService; @Operation(summary = "生成验证码", description = "生成验证码信息") @@ -49,4 +55,11 @@ public class IndexController { sysUserService.logout(token); return Result.success(); } + + @Operation(summary = "动态菜单", description = "动态菜单") + @GetMapping("menus") + public Result> menus() { + List sysMenuVoList = sysMenuService.findUserMenuList(); + return Result.success(sysMenuVoList); + } } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/mapper/SysMenuMapper.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/mapper/SysMenuMapper.java index dc6e3ad..e44fdaf 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/mapper/SysMenuMapper.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/mapper/SysMenuMapper.java @@ -42,4 +42,12 @@ public interface SysMenuMapper { * @param id 菜单id */ void deleteById(Long id); + + /** + * 根据用户ID查找 + * + * @param userId 用户ID + * @return 菜单列表 + */ + List selectListByUserId(Long userId); } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysMenuService.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysMenuService.java index f04967c..996c710 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysMenuService.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/SysMenuService.java @@ -1,6 +1,7 @@ package com.atguigu.spzx.manger.service; import com.atguigu.spzx.model.entity.system.SysMenu; +import com.atguigu.spzx.model.vo.system.SysMenuVo; import java.util.List; @@ -32,4 +33,11 @@ public interface SysMenuService { * @param id 菜单id */ void removeById(Long id); + + /** + * 动态菜单 + * + * @return 动态菜单列表 + */ + List findUserMenuList(); } diff --git a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysMenuServiceImpl.java b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysMenuServiceImpl.java index 48e8ad4..9d0ee0f 100644 --- a/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysMenuServiceImpl.java +++ b/spzx-manager/src/main/java/com/atguigu/spzx/manger/service/impl/SysMenuServiceImpl.java @@ -1,10 +1,12 @@ package com.atguigu.spzx.manger.service.impl; import com.atguigu.constant.MessageConstant; +import com.atguigu.context.BaseContext; import com.atguigu.exception.BunnyException; import com.atguigu.spzx.manger.mapper.SysMenuMapper; import com.atguigu.spzx.manger.service.SysMenuService; import com.atguigu.spzx.model.entity.system.SysMenu; +import com.atguigu.spzx.model.vo.system.SysMenuVo; import com.atguigu.utils.MenuHelper; import com.atguigu.utils.StringEmptyUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -64,4 +66,18 @@ public class SysMenuServiceImpl implements SysMenuService { } sysMenuMapper.deleteById(id); } + + /** + * 动态菜单 + * + * @return 动态菜单列表 + */ + @Override + public List findUserMenuList() { + Long userId = BaseContext.getUserId(); + // 根据用户ID查找 + List sysMenuList = sysMenuMapper.selectListByUserId(userId); + sysMenuList = MenuHelper.buildTree(sysMenuList); + return MenuHelper.buildMenus(sysMenuList); + } } diff --git a/spzx-manager/src/main/resources/mapper/SysMenuMapper.xml b/spzx-manager/src/main/resources/mapper/SysMenuMapper.xml index 7502c2c..59a0f42 100644 --- a/spzx-manager/src/main/resources/mapper/SysMenuMapper.xml +++ b/spzx-manager/src/main/resources/mapper/SysMenuMapper.xml @@ -59,4 +59,9 @@ from sys_menu where is_deleted = 0 order by sort_value + + +