menu完成,因为数据库类repository没有继承base
This commit is contained in:
parent
3c449aefa3
commit
ee7e0a44c4
@ -1,20 +1,16 @@
|
|||||||
package com.qqchen.deploy.backend.api;
|
package com.qqchen.deploy.backend.api;
|
||||||
|
|
||||||
import com.qqchen.deploy.backend.entity.Menu;
|
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.api.Response;
|
||||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||||
import com.qqchen.deploy.backend.model.MenuDTO;
|
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.MenuQuery;
|
||||||
import com.qqchen.deploy.backend.model.query.TenantQuery;
|
|
||||||
import com.qqchen.deploy.backend.model.response.MenuResponse;
|
import com.qqchen.deploy.backend.model.response.MenuResponse;
|
||||||
import com.qqchen.deploy.backend.service.IMenuService;
|
import com.qqchen.deploy.backend.service.IMenuService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@ -37,9 +33,7 @@ public class MenuApiController extends BaseController<Menu, MenuDTO, Long, MenuQ
|
|||||||
@Operation(summary = "获取当前用户的菜单")
|
@Operation(summary = "获取当前用户的菜单")
|
||||||
@GetMapping("/current")
|
@GetMapping("/current")
|
||||||
public Response<List<MenuResponse>> getCurrentUserMenus() {
|
public Response<List<MenuResponse>> getCurrentUserMenus() {
|
||||||
// TODO: 从 SecurityContext 获取当前用户ID
|
return Response.success(menuService.getUserMenus());
|
||||||
// return Response.success(menuService.getUserMenus(1L));
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -1,49 +1,48 @@
|
|||||||
//package com.qqchen.deploy.backend.controller;
|
package com.qqchen.deploy.backend.controller;
|
||||||
//
|
|
||||||
//import com.qqchen.deploy.backend.entity.Menu;
|
import com.qqchen.deploy.backend.entity.Menu;
|
||||||
//import com.qqchen.deploy.backend.framework.api.Response;
|
import com.qqchen.deploy.backend.framework.api.Response;
|
||||||
//import com.qqchen.deploy.backend.framework.controller.BaseController;
|
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||||
//import com.qqchen.deploy.backend.model.MenuDTO;
|
import com.qqchen.deploy.backend.model.MenuDTO;
|
||||||
//import com.qqchen.deploy.backend.model.query.MenuQuery;
|
import com.qqchen.deploy.backend.model.query.MenuQuery;
|
||||||
//import com.qqchen.deploy.backend.model.response.MenuResponse;
|
import com.qqchen.deploy.backend.model.response.MenuResponse;
|
||||||
//import com.qqchen.deploy.backend.service.IMenuService;
|
import com.qqchen.deploy.backend.service.IMenuService;
|
||||||
//import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
//import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
//import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
//import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
//import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
//import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
//import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
//
|
|
||||||
//import java.util.List;
|
import java.util.List;
|
||||||
//
|
|
||||||
//@Slf4j
|
@Slf4j
|
||||||
//@RestController
|
@RestController
|
||||||
//@RequestMapping("/api/v1/menu")
|
@RequestMapping("/mgmt/menu")
|
||||||
//@Tag(name = "菜单管理", description = "菜单管理相关接口")
|
@Tag(name = "菜单管理", description = "菜单管理相关接口")
|
||||||
//public class MenuController extends BaseController<Menu, MenuDTO, Long, MenuQuery> {
|
public class MenuController extends BaseController<Menu, MenuDTO, Long, MenuQuery> {
|
||||||
//
|
|
||||||
// /**
|
/**
|
||||||
// * 获取菜单树
|
* 获取菜单树
|
||||||
// */
|
*/
|
||||||
// @Operation(summary = "获取菜单树")
|
@Operation(summary = "获取菜单树")
|
||||||
// @GetMapping("/tree")
|
@GetMapping("/tree")
|
||||||
// public Response<List<MenuResponse>> getMenuTree() {
|
public Response<List<MenuResponse>> getMenuTree() {
|
||||||
// return Response.success(((IMenuService) service).getMenuTree());
|
return Response.success(((IMenuService) service).getMenuTree());
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// /**
|
/**
|
||||||
// * 获取当前用户的菜单
|
* 获取当前用户的菜单
|
||||||
// */
|
*/
|
||||||
// @Operation(summary = "获取当前用户的菜单")
|
@Operation(summary = "获取当前用户的菜单")
|
||||||
// @GetMapping("/current")
|
@GetMapping("/current")
|
||||||
// public Response<List<MenuResponse>> getCurrentUserMenus() {
|
public Response<List<MenuResponse>> getCurrentUserMenus() {
|
||||||
// // TODO: 从 SecurityContext 获取当前用户ID
|
return Response.success(((IMenuService) service).getUserMenus());
|
||||||
// return Response.success(((IMenuService) service).getUserMenus(1L));
|
}
|
||||||
// }
|
|
||||||
//
|
@Override
|
||||||
// @Override
|
protected void exportData(HttpServletResponse response, List<MenuDTO> data) {
|
||||||
// protected void exportData(HttpServletResponse response, List<MenuDTO> data) {
|
|
||||||
//
|
}
|
||||||
// }
|
}
|
||||||
//}
|
|
||||||
@ -190,8 +190,7 @@ public class DependencyInjectionPostProcessor implements BeanPostProcessor, Disp
|
|||||||
entityClass,
|
entityClass,
|
||||||
key -> {
|
key -> {
|
||||||
if (!applicationContext.containsBean(repositoryBeanName)) {
|
if (!applicationContext.containsBean(repositoryBeanName)) {
|
||||||
String errorMsg = String.format("找不到 Repository - 服务类: %s, 实体类: %s, Repository名称: %s",
|
String errorMsg = String.format("找不到 Repository - 服务类: %s, 实体类: %s, Repository名称: %s", service.getClass().getName(), key.getSimpleName(), repositoryBeanName);
|
||||||
service.getClass().getName(), key.getSimpleName(), repositoryBeanName);
|
|
||||||
log.error(errorMsg);
|
log.error(errorMsg);
|
||||||
throw new DependencyInjectionException(errorMsg, new RuntimeException(errorMsg));
|
throw new DependencyInjectionException(errorMsg, new RuntimeException(errorMsg));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import org.springframework.stereotype.Repository;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@Repository
|
@Repository
|
||||||
public interface IMenuRepository extends JpaRepository<Menu, Long> {
|
public interface IMenuRepository extends IBaseRepository<Menu, Long> {
|
||||||
List<Menu> findByDeletedFalseOrderBySort();
|
List<Menu> findByDeletedFalseOrderBySort();
|
||||||
|
|
||||||
List<Menu> findByParentIdAndDeletedFalseOrderBySort(Long parentId);
|
List<Menu> findByParentIdAndDeletedFalseOrderBySort(Long parentId);
|
||||||
|
|||||||
@ -12,16 +12,15 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface IMenuService extends IBaseService<Menu, MenuDTO, Long> {
|
public interface IMenuService extends IBaseService<Menu, MenuDTO, Long> {
|
||||||
|
|
||||||
// /**
|
/**
|
||||||
// * 获取菜单树
|
* 获取菜单树
|
||||||
// * @return 菜单树
|
* @return 菜单树
|
||||||
// */
|
*/
|
||||||
// List<MenuResponse> getMenuTree();
|
List<MenuResponse> getMenuTree();
|
||||||
//
|
|
||||||
// /**
|
/**
|
||||||
// * 获取用户菜单
|
* 获取当前用户的菜单
|
||||||
// * @param userId 用户ID
|
* @return 用户菜单
|
||||||
// * @return 用户菜单
|
*/
|
||||||
// */
|
List<MenuResponse> getUserMenus();
|
||||||
// List<MenuResponse> getUserMenus(Long userId);
|
|
||||||
}
|
}
|
||||||
@ -2,12 +2,18 @@ package com.qqchen.deploy.backend.service.impl;
|
|||||||
|
|
||||||
import com.qqchen.deploy.backend.converter.MenuConverter;
|
import com.qqchen.deploy.backend.converter.MenuConverter;
|
||||||
import com.qqchen.deploy.backend.entity.Menu;
|
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.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.framework.service.impl.BaseServiceImpl;
|
||||||
import com.qqchen.deploy.backend.model.MenuDTO;
|
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.model.response.MenuResponse;
|
||||||
import com.qqchen.deploy.backend.repository.IMenuRepository;
|
import com.qqchen.deploy.backend.repository.IMenuRepository;
|
||||||
import com.qqchen.deploy.backend.service.IMenuService;
|
import com.qqchen.deploy.backend.service.IMenuService;
|
||||||
|
import com.qqchen.deploy.backend.service.IUserService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -29,40 +35,44 @@ public class MenuServiceImpl extends BaseServiceImpl<Menu, MenuDTO, Long> implem
|
|||||||
@Resource
|
@Resource
|
||||||
private MenuConverter converter;
|
private MenuConverter converter;
|
||||||
|
|
||||||
// @Override
|
@Resource
|
||||||
// public List<MenuResponse> getMenuTree() {
|
private IUserService userService;
|
||||||
// List<Menu> allMenus = repository.findByDeletedFalseOrderBySort();
|
|
||||||
// List<MenuDTO> menuDTOs = converter.toDtoList(allMenus);
|
@Override
|
||||||
// List<MenuDTO> menuTree = buildMenuTree(menuDTOs);
|
public List<MenuResponse> getMenuTree() {
|
||||||
// return converter.toResponseList(menuTree);
|
List<Menu> allMenus = repository.findByDeletedFalseOrderBySort();
|
||||||
// }
|
List<MenuDTO> menuDTOs = converter.toDtoList(allMenus);
|
||||||
//
|
List<MenuDTO> menuTree = buildMenuTree(menuDTOs);
|
||||||
// @Override
|
return converter.toResponseList(menuTree);
|
||||||
// public List<MenuResponse> getUserMenus(Long userId) {
|
}
|
||||||
// // TODO: 根据用户角色获取菜单
|
|
||||||
// return getMenuTree();
|
@Override
|
||||||
// }
|
public List<MenuResponse> getUserMenus() {
|
||||||
//
|
LoginResponse user = userService.getCurrentUser();
|
||||||
// private List<MenuDTO> buildMenuTree(List<MenuDTO> menus) {
|
// TODO: 根据用户角色获取菜单
|
||||||
// Map<Long, MenuDTO> menuMap = menus.stream()
|
return getMenuTree();
|
||||||
// .collect(Collectors.toMap(MenuDTO::getId, menu -> menu));
|
}
|
||||||
//
|
|
||||||
// List<MenuDTO> rootMenus = new ArrayList<>();
|
private List<MenuDTO> buildMenuTree(List<MenuDTO> menus) {
|
||||||
//
|
Map<Long, MenuDTO> menuMap = menus.stream()
|
||||||
// for (MenuDTO menu : menus) {
|
.collect(Collectors.toMap(MenuDTO::getId, menu -> menu));
|
||||||
// if (menu.getParentId() == null || menu.getParentId() == 0) {
|
|
||||||
// rootMenus.add(menu);
|
List<MenuDTO> rootMenus = new ArrayList<>();
|
||||||
// } else {
|
|
||||||
// MenuDTO parent = menuMap.get(menu.getParentId());
|
for (MenuDTO menu : menus) {
|
||||||
// if (parent != null) {
|
if (menu.getParentId() == null || menu.getParentId() == 0) {
|
||||||
// if (parent.getChildren() == null) {
|
rootMenus.add(menu);
|
||||||
// parent.setChildren(new ArrayList<>());
|
} else {
|
||||||
// }
|
MenuDTO parent = menuMap.get(menu.getParentId());
|
||||||
// parent.getChildren().add(menu);
|
if (parent != null) {
|
||||||
// }
|
if (parent.getChildren() == null) {
|
||||||
// }
|
parent.setChildren(new ArrayList<>());
|
||||||
// }
|
}
|
||||||
//
|
parent.getChildren().add(menu);
|
||||||
// return rootMenus;
|
}
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rootMenus;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -55,3 +55,25 @@ CREATE TABLE sys_param (
|
|||||||
CONSTRAINT UK_sys_param_code UNIQUE (code)
|
CONSTRAINT UK_sys_param_code UNIQUE (code)
|
||||||
) COMMENT '系统参数表';
|
) 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'),
|
('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'),
|
('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');
|
('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