From 6bb8e7cefa214893522f721504ab36a2961a5822 Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Fri, 10 Jan 2025 15:26:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E6=B7=BB=E5=8A=A0=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD-=20=E5=9C=A8=20Me?= =?UTF-8?q?nuService=20=E4=B8=AD=E6=96=B0=E5=A2=9E=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E3=80=81=E6=9B=B4=E6=96=B0=E5=92=8C=E5=88=A0=E9=99=A4=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E6=96=B9=E6=B3=95=20-=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=20MenuServiceImpl=20=E7=B1=BB=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=85=B7=E4=BD=93=E7=9A=84=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9E=20MenuController=20=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E6=8F=90=E4=BE=9B=E8=8F=9C=E5=8D=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E7=9A=84=20API=20=E6=8E=A5=E5=8F=A3=20-=20=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=20MenuDto=20=E6=95=B0=E6=8D=AE=E4=BC=A0=E8=BE=93?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=EF=BC=8C=E7=94=A8=E4=BA=8E=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=9A=84=E4=BC=A0=E9=80=92=20-=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20MenuMapper=20=E6=98=A0=E5=B0=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0=E8=8F=9C=E5=8D=95=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E8=BD=AC=E6=8D=A2=20-=20=E7=A7=BB=E9=99=A4=20UserCont?= =?UTF-8?q?roller=20=E4=B8=AD=E7=9A=84=E8=8F=9C=E5=8D=95=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=9C=A8=20MenuCo?= =?UTF-8?q?ntroller=20=E4=B8=AD=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/MenuController.java | 63 +++++++++++++++++++ .../system/controller/UserController.java | 13 ---- .../gateway/modules/system/dto/MenuDto.java | 59 +++++++++++++++++ .../modules/system/mapper/MenuMapper.java | 15 +++++ .../modules/system/service/MenuService.java | 7 +++ .../system/service/impl/MenuServiceImpl.java | 33 ++++++++++ 6 files changed, 177 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/zsc/edu/gateway/modules/system/controller/MenuController.java create mode 100644 src/main/java/com/zsc/edu/gateway/modules/system/dto/MenuDto.java create mode 100644 src/main/java/com/zsc/edu/gateway/modules/system/mapper/MenuMapper.java diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/controller/MenuController.java b/src/main/java/com/zsc/edu/gateway/modules/system/controller/MenuController.java new file mode 100644 index 0000000..38617be --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/system/controller/MenuController.java @@ -0,0 +1,63 @@ +package com.zsc.edu.gateway.modules.system.controller; + +import com.zsc.edu.gateway.framework.security.UserDetailsImpl; +import com.zsc.edu.gateway.modules.system.dto.MenuDto; +import com.zsc.edu.gateway.modules.system.entity.Menu; +import com.zsc.edu.gateway.modules.system.service.MenuService; +import com.zsc.edu.gateway.modules.system.utils.TreeUtil; +import com.zsc.edu.gateway.modules.system.vo.MenuVo; +import lombok.AllArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author zhuang + */ +@AllArgsConstructor +@RestController +@RequestMapping("/api/rest/menu") +public class MenuController { + + private final MenuService service; + + + /** + * 获取菜单树 + */ + @GetMapping("/menu") + public List menu(@AuthenticationPrincipal UserDetailsImpl userDetails) { + List list = service.selectByUserId(userDetails.getId(), Menu.Type.PAGE).stream().map(MenuVo::new).toList(); + return TreeUtil.makeTree( + list, + x -> x.getPid() == null, + (x, y) -> x.getId().equals(y.getPid()), + MenuVo::setChildren + ); + } + + /** + * 新建菜单 + */ + @PostMapping("") + public Menu create(MenuDto dto) { + return service.create(dto); + } + + /** + * 更新菜单 + */ + @PatchMapping("") + public Menu update(MenuDto dto, Long id) { + return service.update(dto, id); + } + + /** + * 删除菜单 + */ + @DeleteMapping("/{id}") + public Boolean delete(@PathVariable Long id) { + return service.delete(id); + } +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java index 277883e..161e231 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java @@ -190,19 +190,6 @@ public class UserController { return service.getById(id); } - /** - * 获取MENU - * */ - @GetMapping("/menu") - public List menu(@AuthenticationPrincipal UserDetailsImpl userDetails) { - List list = menuService.selectByUserId(userDetails.getId(), Menu.Type.PAGE).stream().map(MenuVo::new).toList(); - return TreeUtil.makeTree( - list, - x -> x.getPid() == null, - (x, y) -> x.getId().equals(y.getPid()), - MenuVo::setChildren - ); - } /** * 发送邮件 * */ diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/dto/MenuDto.java b/src/main/java/com/zsc/edu/gateway/modules/system/dto/MenuDto.java new file mode 100644 index 0000000..d08af5b --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/system/dto/MenuDto.java @@ -0,0 +1,59 @@ +package com.zsc.edu.gateway.modules.system.dto; + +import com.zsc.edu.gateway.modules.system.entity.Menu; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author zhuang + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MenuDto { + /** + * 子部门ID + */ + private Long pid; + /** + * 菜单类型 + */ + private Menu.Type type; + /** + * 名称 + */ + private String name; + /** + * 路径 + */ + private String path; + /** + * 应用区域 + */ + private String locale; + /** + * 标注 + */ + private String icon; + /** + * 是否需要认证 + */ + private Boolean requiresAuth; + /** + * 是否隐藏 + */ + private Boolean hideInMenu; + /** + * 菜单排序 + */ + private Integer menuOrder; + /** + * 权限 + */ + private String permissions; + /** + * 权限标识 + */ + private String authority = ""; +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/mapper/MenuMapper.java b/src/main/java/com/zsc/edu/gateway/modules/system/mapper/MenuMapper.java new file mode 100644 index 0000000..49af1a6 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/system/mapper/MenuMapper.java @@ -0,0 +1,15 @@ +package com.zsc.edu.gateway.modules.system.mapper; + +import com.zsc.edu.gateway.common.mapstruct.BaseMapper; +import com.zsc.edu.gateway.modules.system.dto.MenuDto; +import com.zsc.edu.gateway.modules.system.entity.Menu; +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; +import org.mapstruct.ReportingPolicy; + +/** + * @author zhuang + */ +@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface MenuMapper extends BaseMapper { +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java index 71872a4..ee319d5 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java @@ -1,6 +1,7 @@ package com.zsc.edu.gateway.modules.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.zsc.edu.gateway.modules.system.dto.MenuDto; import com.zsc.edu.gateway.modules.system.entity.Menu; import java.util.List; @@ -13,4 +14,10 @@ public interface MenuService extends IService { List selectByRoleId(Long roleId); List selectByUserId(Long userId, Menu.Type type); + + Menu create(MenuDto dto); + + Menu update(MenuDto dto, Long id); + + Boolean delete(Long id); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java index da896cb..de10cdd 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java @@ -1,8 +1,14 @@ package com.zsc.edu.gateway.modules.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zsc.edu.gateway.exception.ConstraintException; +import com.zsc.edu.gateway.modules.system.dto.MenuDto; import com.zsc.edu.gateway.modules.system.entity.Menu; +import com.zsc.edu.gateway.modules.system.entity.RoleMenu; +import com.zsc.edu.gateway.modules.system.mapper.MenuMapper; import com.zsc.edu.gateway.modules.system.repo.MenuRepository; +import com.zsc.edu.gateway.modules.system.repo.RoleMenuRepository; import com.zsc.edu.gateway.modules.system.service.MenuService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -15,6 +21,8 @@ import java.util.List; @AllArgsConstructor @Service public class MenuServiceImpl extends ServiceImpl implements MenuService { + private MenuMapper mapper; + private RoleMenuRepository roleMenuRepository; @Override public List selectByRoleId(Long roleId) { return baseMapper.selectByRoleId(roleId); @@ -24,4 +32,29 @@ public class MenuServiceImpl extends ServiceImpl implement public List selectByUserId(Long userId, Menu.Type type) { return baseMapper.selectByUserId(userId, type); } + + @Override + public Menu create(MenuDto dto) { + Menu menu = mapper.toEntity(dto); + baseMapper.insert(menu); + return menu; + } + + @Override + public Menu update(MenuDto dto, Long id) { + Menu menu = baseMapper.selectById(id); + if (menu == null) { + throw new ConstraintException("菜单不存在!请检查输入ID是否正确!"); + } + mapper.convert(dto, menu); + baseMapper.updateById(menu); + return menu; + } + + @Override + public Boolean delete(Long id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + roleMenuRepository.delete(queryWrapper.eq(RoleMenu::getMenuId, id)); + return removeById(id); + } }