menu完成,因为数据库类repository没有继承base

This commit is contained in:
戚辰先生 2024-11-30 10:52:12 +08:00
parent 3c449aefa3
commit ee7e0a44c4
8 changed files with 167 additions and 108 deletions

View File

@ -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

View File

@ -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) {
// }
// } }
//}

View File

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

View File

@ -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);

View File

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

View File

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

View File

@ -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 '菜单表';

View File

@ -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);