menu完成,因为数据库类repository没有继承base
This commit is contained in:
parent
3c449aefa3
commit
ee7e0a44c4
@ -1,20 +1,16 @@
|
||||
package com.qqchen.deploy.backend.api;
|
||||
|
||||
import com.qqchen.deploy.backend.entity.Menu;
|
||||
import com.qqchen.deploy.backend.entity.Tenant;
|
||||
import com.qqchen.deploy.backend.framework.api.Response;
|
||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import com.qqchen.deploy.backend.model.MenuDTO;
|
||||
import com.qqchen.deploy.backend.model.TenantDTO;
|
||||
import com.qqchen.deploy.backend.model.query.MenuQuery;
|
||||
import com.qqchen.deploy.backend.model.query.TenantQuery;
|
||||
import com.qqchen.deploy.backend.model.response.MenuResponse;
|
||||
import com.qqchen.deploy.backend.service.IMenuService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@ -37,9 +33,7 @@ public class MenuApiController extends BaseController<Menu, MenuDTO, Long, MenuQ
|
||||
@Operation(summary = "获取当前用户的菜单")
|
||||
@GetMapping("/current")
|
||||
public Response<List<MenuResponse>> getCurrentUserMenus() {
|
||||
// TODO: 从 SecurityContext 获取当前用户ID
|
||||
// return Response.success(menuService.getUserMenus(1L));
|
||||
return null;
|
||||
return Response.success(menuService.getUserMenus());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,49 +1,48 @@
|
||||
//package com.qqchen.deploy.backend.controller;
|
||||
//
|
||||
//import com.qqchen.deploy.backend.entity.Menu;
|
||||
//import com.qqchen.deploy.backend.framework.api.Response;
|
||||
//import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
//import com.qqchen.deploy.backend.model.MenuDTO;
|
||||
//import com.qqchen.deploy.backend.model.query.MenuQuery;
|
||||
//import com.qqchen.deploy.backend.model.response.MenuResponse;
|
||||
//import com.qqchen.deploy.backend.service.IMenuService;
|
||||
//import io.swagger.v3.oas.annotations.Operation;
|
||||
//import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
//import jakarta.servlet.http.HttpServletResponse;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.springframework.web.bind.annotation.GetMapping;
|
||||
//import org.springframework.web.bind.annotation.RequestMapping;
|
||||
//import org.springframework.web.bind.annotation.RestController;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//@Slf4j
|
||||
//@RestController
|
||||
//@RequestMapping("/api/v1/menu")
|
||||
//@Tag(name = "菜单管理", description = "菜单管理相关接口")
|
||||
//public class MenuController extends BaseController<Menu, MenuDTO, Long, MenuQuery> {
|
||||
//
|
||||
// /**
|
||||
// * 获取菜单树
|
||||
// */
|
||||
// @Operation(summary = "获取菜单树")
|
||||
// @GetMapping("/tree")
|
||||
// public Response<List<MenuResponse>> getMenuTree() {
|
||||
// return Response.success(((IMenuService) service).getMenuTree());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 获取当前用户的菜单
|
||||
// */
|
||||
// @Operation(summary = "获取当前用户的菜单")
|
||||
// @GetMapping("/current")
|
||||
// public Response<List<MenuResponse>> getCurrentUserMenus() {
|
||||
// // TODO: 从 SecurityContext 获取当前用户ID
|
||||
// return Response.success(((IMenuService) service).getUserMenus(1L));
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void exportData(HttpServletResponse response, List<MenuDTO> data) {
|
||||
//
|
||||
// }
|
||||
//}
|
||||
package com.qqchen.deploy.backend.controller;
|
||||
|
||||
import com.qqchen.deploy.backend.entity.Menu;
|
||||
import com.qqchen.deploy.backend.framework.api.Response;
|
||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import com.qqchen.deploy.backend.model.MenuDTO;
|
||||
import com.qqchen.deploy.backend.model.query.MenuQuery;
|
||||
import com.qqchen.deploy.backend.model.response.MenuResponse;
|
||||
import com.qqchen.deploy.backend.service.IMenuService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/mgmt/menu")
|
||||
@Tag(name = "菜单管理", description = "菜单管理相关接口")
|
||||
public class MenuController extends BaseController<Menu, MenuDTO, Long, MenuQuery> {
|
||||
|
||||
/**
|
||||
* 获取菜单树
|
||||
*/
|
||||
@Operation(summary = "获取菜单树")
|
||||
@GetMapping("/tree")
|
||||
public Response<List<MenuResponse>> getMenuTree() {
|
||||
return Response.success(((IMenuService) service).getMenuTree());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户的菜单
|
||||
*/
|
||||
@Operation(summary = "获取当前用户的菜单")
|
||||
@GetMapping("/current")
|
||||
public Response<List<MenuResponse>> getCurrentUserMenus() {
|
||||
return Response.success(((IMenuService) service).getUserMenus());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void exportData(HttpServletResponse response, List<MenuDTO> data) {
|
||||
|
||||
}
|
||||
}
|
||||
@ -190,8 +190,7 @@ public class DependencyInjectionPostProcessor implements BeanPostProcessor, Disp
|
||||
entityClass,
|
||||
key -> {
|
||||
if (!applicationContext.containsBean(repositoryBeanName)) {
|
||||
String errorMsg = String.format("找不到 Repository - 服务类: %s, 实体类: %s, Repository名称: %s",
|
||||
service.getClass().getName(), key.getSimpleName(), repositoryBeanName);
|
||||
String errorMsg = String.format("找不到 Repository - 服务类: %s, 实体类: %s, Repository名称: %s", service.getClass().getName(), key.getSimpleName(), repositoryBeanName);
|
||||
log.error(errorMsg);
|
||||
throw new DependencyInjectionException(errorMsg, new RuntimeException(errorMsg));
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
@Repository
|
||||
public interface IMenuRepository extends JpaRepository<Menu, Long> {
|
||||
public interface IMenuRepository extends IBaseRepository<Menu, Long> {
|
||||
List<Menu> findByDeletedFalseOrderBySort();
|
||||
|
||||
List<Menu> findByParentIdAndDeletedFalseOrderBySort(Long parentId);
|
||||
|
||||
@ -12,16 +12,15 @@ import java.util.List;
|
||||
|
||||
public interface IMenuService extends IBaseService<Menu, MenuDTO, Long> {
|
||||
|
||||
// /**
|
||||
// * 获取菜单树
|
||||
// * @return 菜单树
|
||||
// */
|
||||
// List<MenuResponse> getMenuTree();
|
||||
//
|
||||
// /**
|
||||
// * 获取用户菜单
|
||||
// * @param userId 用户ID
|
||||
// * @return 用户菜单
|
||||
// */
|
||||
// List<MenuResponse> getUserMenus(Long userId);
|
||||
/**
|
||||
* 获取菜单树
|
||||
* @return 菜单树
|
||||
*/
|
||||
List<MenuResponse> getMenuTree();
|
||||
|
||||
/**
|
||||
* 获取当前用户的菜单
|
||||
* @return 用户菜单
|
||||
*/
|
||||
List<MenuResponse> getUserMenus();
|
||||
}
|
||||
@ -2,12 +2,18 @@ package com.qqchen.deploy.backend.service.impl;
|
||||
|
||||
import com.qqchen.deploy.backend.converter.MenuConverter;
|
||||
import com.qqchen.deploy.backend.entity.Menu;
|
||||
import com.qqchen.deploy.backend.entity.User;
|
||||
import com.qqchen.deploy.backend.framework.annotation.ServiceType;
|
||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||
import com.qqchen.deploy.backend.framework.exception.BusinessException;
|
||||
import com.qqchen.deploy.backend.framework.security.SecurityUtils;
|
||||
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
|
||||
import com.qqchen.deploy.backend.model.MenuDTO;
|
||||
import com.qqchen.deploy.backend.model.response.LoginResponse;
|
||||
import com.qqchen.deploy.backend.model.response.MenuResponse;
|
||||
import com.qqchen.deploy.backend.repository.IMenuRepository;
|
||||
import com.qqchen.deploy.backend.service.IMenuService;
|
||||
import com.qqchen.deploy.backend.service.IUserService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -29,40 +35,44 @@ public class MenuServiceImpl extends BaseServiceImpl<Menu, MenuDTO, Long> implem
|
||||
@Resource
|
||||
private MenuConverter converter;
|
||||
|
||||
// @Override
|
||||
// public List<MenuResponse> getMenuTree() {
|
||||
// List<Menu> allMenus = repository.findByDeletedFalseOrderBySort();
|
||||
// List<MenuDTO> menuDTOs = converter.toDtoList(allMenus);
|
||||
// List<MenuDTO> menuTree = buildMenuTree(menuDTOs);
|
||||
// return converter.toResponseList(menuTree);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<MenuResponse> getUserMenus(Long userId) {
|
||||
// // TODO: 根据用户角色获取菜单
|
||||
// return getMenuTree();
|
||||
// }
|
||||
//
|
||||
// private List<MenuDTO> buildMenuTree(List<MenuDTO> menus) {
|
||||
// Map<Long, MenuDTO> menuMap = menus.stream()
|
||||
// .collect(Collectors.toMap(MenuDTO::getId, menu -> menu));
|
||||
//
|
||||
// List<MenuDTO> rootMenus = new ArrayList<>();
|
||||
//
|
||||
// for (MenuDTO menu : menus) {
|
||||
// if (menu.getParentId() == null || menu.getParentId() == 0) {
|
||||
// rootMenus.add(menu);
|
||||
// } else {
|
||||
// MenuDTO parent = menuMap.get(menu.getParentId());
|
||||
// if (parent != null) {
|
||||
// if (parent.getChildren() == null) {
|
||||
// parent.setChildren(new ArrayList<>());
|
||||
// }
|
||||
// parent.getChildren().add(menu);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return rootMenus;
|
||||
// }
|
||||
@Resource
|
||||
private IUserService userService;
|
||||
|
||||
@Override
|
||||
public List<MenuResponse> getMenuTree() {
|
||||
List<Menu> allMenus = repository.findByDeletedFalseOrderBySort();
|
||||
List<MenuDTO> menuDTOs = converter.toDtoList(allMenus);
|
||||
List<MenuDTO> menuTree = buildMenuTree(menuDTOs);
|
||||
return converter.toResponseList(menuTree);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MenuResponse> getUserMenus() {
|
||||
LoginResponse user = userService.getCurrentUser();
|
||||
// TODO: 根据用户角色获取菜单
|
||||
return getMenuTree();
|
||||
}
|
||||
|
||||
private List<MenuDTO> buildMenuTree(List<MenuDTO> menus) {
|
||||
Map<Long, MenuDTO> menuMap = menus.stream()
|
||||
.collect(Collectors.toMap(MenuDTO::getId, menu -> menu));
|
||||
|
||||
List<MenuDTO> rootMenus = new ArrayList<>();
|
||||
|
||||
for (MenuDTO menu : menus) {
|
||||
if (menu.getParentId() == null || menu.getParentId() == 0) {
|
||||
rootMenus.add(menu);
|
||||
} else {
|
||||
MenuDTO parent = menuMap.get(menu.getParentId());
|
||||
if (parent != null) {
|
||||
if (parent.getChildren() == null) {
|
||||
parent.setChildren(new ArrayList<>());
|
||||
}
|
||||
parent.getChildren().add(menu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rootMenus;
|
||||
}
|
||||
}
|
||||
@ -55,3 +55,25 @@ CREATE TABLE sys_param (
|
||||
CONSTRAINT UK_sys_param_code UNIQUE (code)
|
||||
) COMMENT '系统参数表';
|
||||
|
||||
-- 菜单表
|
||||
CREATE TABLE sys_menu (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
create_by VARCHAR(255),
|
||||
create_time DATETIME(6),
|
||||
deleted BIT NOT NULL DEFAULT 0,
|
||||
update_by VARCHAR(255),
|
||||
update_time DATETIME(6),
|
||||
version INT NOT NULL DEFAULT 0,
|
||||
|
||||
name VARCHAR(100) NOT NULL COMMENT '菜单名称',
|
||||
path VARCHAR(200) COMMENT '路由路径',
|
||||
component VARCHAR(255) COMMENT '组件路径',
|
||||
icon VARCHAR(100) COMMENT '菜单图标',
|
||||
permission VARCHAR(100) COMMENT '权限标识',
|
||||
type INT NOT NULL COMMENT '菜单类型(1:目录 2:菜单 3:按钮)',
|
||||
parent_id BIGINT COMMENT '父菜单ID',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
hidden BIT NOT NULL DEFAULT 0 COMMENT '是否隐藏(0显示 1隐藏)',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0禁用 1启用)'
|
||||
) COMMENT '菜单表';
|
||||
|
||||
@ -24,3 +24,39 @@ VALUES
|
||||
('SYSTEM_LOGO', '系统Logo', '/logo.png', 'TEXT', '系统Logo路径', 1, 'system', '2024-01-01 00:00:00'),
|
||||
('GENDER_ENUM', '性别枚举', '[{"code":"1","name":"男"},{"code":"2","name":"女"}]', 'ENUM', '性别枚举值', 1, 'system', '2024-01-01 00:00:00'),
|
||||
('USER_STATUS_ENUM', '用户状态枚举', '[{"code":"0","name":"禁用"},{"code":"1","name":"启用"}]', 'ENUM', '用户状态枚举值', 1, 'system', '2024-01-01 00:00:00');
|
||||
|
||||
-- 初始化系统管理菜单
|
||||
INSERT INTO sys_menu (create_by, create_time, deleted, update_by, update_time, version,
|
||||
name, path, component, icon, type, parent_id, sort, hidden, enabled)
|
||||
VALUES
|
||||
-- 系统管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'系统管理', '/system', null, 'setting', 1, null, 1, 0, 1),
|
||||
|
||||
-- 用户管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'用户管理', '/system/user', '/System/User', 'user', 2, 1, 1, 0, 1),
|
||||
|
||||
-- 角色管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'角色管理', '/system/role', '/System/Role', 'team', 2, 1, 2, 0, 1),
|
||||
|
||||
-- 菜单管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'菜单管理', '/system/menu', '/System/Menu', 'menu', 2, 1, 3, 0, 1),
|
||||
|
||||
-- 部门管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'部门管理', '/system/department', '/System/Department', 'apartment', 2, 1, 4, 0, 1),
|
||||
|
||||
-- 租户管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'租户管理', '/system/tenant', '/System/Tenant', 'cluster', 2, 1, 5, 0, 1),
|
||||
|
||||
-- Jenkins管理
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'Jenkins管理', '/system/jenkins', '/System/Jenkins', 'cloud-server', 2, 1, 6, 0, 1),
|
||||
|
||||
-- 代码仓库
|
||||
('system', '2024-01-01 00:00:00', 0, 'system', '2024-01-01 00:00:00', 0,
|
||||
'代码仓库', '/system/repository', '/System/Repository', 'code', 2, 1, 7, 0, 1);
|
||||
Loading…
Reference in New Issue
Block a user