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); + } }