feat(system): 添加菜单管理功能- 在 MenuService 中新增创建、更新和删除菜单的方法

- 实现 MenuServiceImpl 类,添加具体的操作逻辑
- 新增 MenuController 控制器,提供菜单管理的 API 接口
- 创建 MenuDto 数据传输对象,用于菜单信息的传递
- 添加 MenuMapper 映射接口,实现菜单数据的转换
- 移除 UserController 中的菜单相关代码,改为在 MenuController 中统一管理
This commit is contained in:
zhuangtianxiang 2025-01-10 15:26:14 +08:00
parent 91d99c7f6d
commit 6bb8e7cefa
6 changed files with 177 additions and 13 deletions

View File

@ -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<MenuVo> menu(@AuthenticationPrincipal UserDetailsImpl userDetails) {
List<MenuVo> 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);
}
}

View File

@ -190,19 +190,6 @@ public class UserController {
return service.getById(id); return service.getById(id);
} }
/**
* 获取MENU
* */
@GetMapping("/menu")
public List<MenuVo> menu(@AuthenticationPrincipal UserDetailsImpl userDetails) {
List<MenuVo> 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
);
}
/** /**
* 发送邮件 * 发送邮件
* */ * */

View File

@ -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 = "";
}

View File

@ -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<MenuDto, Menu> {
}

View File

@ -1,6 +1,7 @@
package com.zsc.edu.gateway.modules.system.service; package com.zsc.edu.gateway.modules.system.service;
import com.baomidou.mybatisplus.extension.service.IService; 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 com.zsc.edu.gateway.modules.system.entity.Menu;
import java.util.List; import java.util.List;
@ -13,4 +14,10 @@ public interface MenuService extends IService<Menu> {
List<Menu> selectByRoleId(Long roleId); List<Menu> selectByRoleId(Long roleId);
List<Menu> selectByUserId(Long userId, Menu.Type type); List<Menu> selectByUserId(Long userId, Menu.Type type);
Menu create(MenuDto dto);
Menu update(MenuDto dto, Long id);
Boolean delete(Long id);
} }

View File

@ -1,8 +1,14 @@
package com.zsc.edu.gateway.modules.system.service.impl; 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.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.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.MenuRepository;
import com.zsc.edu.gateway.modules.system.repo.RoleMenuRepository;
import com.zsc.edu.gateway.modules.system.service.MenuService; import com.zsc.edu.gateway.modules.system.service.MenuService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,6 +21,8 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@Service @Service
public class MenuServiceImpl extends ServiceImpl<MenuRepository, Menu> implements MenuService { public class MenuServiceImpl extends ServiceImpl<MenuRepository, Menu> implements MenuService {
private MenuMapper mapper;
private RoleMenuRepository roleMenuRepository;
@Override @Override
public List<Menu> selectByRoleId(Long roleId) { public List<Menu> selectByRoleId(Long roleId) {
return baseMapper.selectByRoleId(roleId); return baseMapper.selectByRoleId(roleId);
@ -24,4 +32,29 @@ public class MenuServiceImpl extends ServiceImpl<MenuRepository, Menu> implement
public List<Menu> selectByUserId(Long userId, Menu.Type type) { public List<Menu> selectByUserId(Long userId, Menu.Type type) {
return baseMapper.selectByUserId(userId, 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<RoleMenu> queryWrapper = new LambdaQueryWrapper<>();
roleMenuRepository.delete(queryWrapper.eq(RoleMenu::getMenuId, id));
return removeById(id);
}
} }