From e0781b0f8c3cec3819cc56ffdc45e330c85d0419 Mon Sep 17 00:00:00 2001 From: user Date: Fri, 11 Apr 2025 23:46:37 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=92=8C=E5=85=B3=E7=B3=BB=E6=9C=8D=E5=8A=A1=E5=8F=8A?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E7=B1=BB=E7=9A=84=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构了菜单和关系服务的代码,包括方法重命名、参数顺序调整以及SQL查询逻辑的优化。同时,更新了相关资源类以适配服务层的更改,提升了代码的可读性和可维护性。 --- .../vxnet/pms/repository/BaseRepository.java | 8 ++++ .../com/vxnet/pms/service/MenuService.java | 13 ++----- .../vxnet/pms/service/RelationService.java | 4 +- .../com/vxnet/pms/web/rest/MenuResource.java | 38 ++++++++++++++----- .../core/jhi-navbar/jhi-navbar.component.ts | 2 +- 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/vxnet/pms/repository/BaseRepository.java b/src/main/java/com/vxnet/pms/repository/BaseRepository.java index 98c0e84..d2948af 100644 --- a/src/main/java/com/vxnet/pms/repository/BaseRepository.java +++ b/src/main/java/com/vxnet/pms/repository/BaseRepository.java @@ -85,6 +85,10 @@ public abstract class BaseRepository { if (condition == null) continue; String operator = condition.get("op") != null ? condition.get("op").toString() : ""; Object value = condition.get("value"); + Object filter = condition.get("filter"); + if (filter != null) { + sql.append(" AND (").append(filter).append(")"); + } if (operator.isEmpty() || value == null) continue; // 构建SQL条件 if (operator.equalsIgnoreCase("IFNULL")) { @@ -145,6 +149,10 @@ public abstract class BaseRepository { } String operator = condition.get("op") != null ? condition.get("op").toString() : ""; Object value = condition.get("value"); + Object filter = condition.get("filter"); + if (filter != null) { + wheres.append(" AND (").append(filter).append(")"); + } if (operator.isEmpty() || value == null) continue; // 构建SQL条件 if (operator.equalsIgnoreCase("IFNULL")) { diff --git a/src/main/java/com/vxnet/pms/service/MenuService.java b/src/main/java/com/vxnet/pms/service/MenuService.java index ba284eb..1d32a22 100644 --- a/src/main/java/com/vxnet/pms/service/MenuService.java +++ b/src/main/java/com/vxnet/pms/service/MenuService.java @@ -96,7 +96,7 @@ public class MenuService { } @Transactional(readOnly = true) - public Flux> getMenusTree(String table, Map params, Pageable pageable) { + public Flux> getTree(String table, Map params, Pageable pageable) { return SecurityUtils.getCurrentOrganization() .flatMapMany(organization -> menuRepository @@ -128,7 +128,7 @@ public class MenuService { } @Transactional(readOnly = true) - public Flux> getMenusRelation(String table, Map params, Pageable pageable) { + public Flux> getRelation(String table, Map params, Pageable pageable) { return SecurityUtils.getCurrentUserLogin() .flatMapMany(login -> { params.put( @@ -137,7 +137,7 @@ public class MenuService { login + "'))" ); - return getMenusTree(table, params, pageable); + return getTree(table, params, pageable); }); } @@ -155,13 +155,6 @@ public class MenuService { }); } - @Transactional(readOnly = true) - public Flux getVisibleMenus() { - return SecurityUtils.getCurrentOrganization() - .map(organization -> menuRepository.findVisibleMenus(organization)) - .flatMapMany(menus -> menus); - } - private Flux getChildren(String organization, String number) { return menuRepository .findByParentNumber(organization, number) diff --git a/src/main/java/com/vxnet/pms/service/RelationService.java b/src/main/java/com/vxnet/pms/service/RelationService.java index c6d6200..d2053ed 100644 --- a/src/main/java/com/vxnet/pms/service/RelationService.java +++ b/src/main/java/com/vxnet/pms/service/RelationService.java @@ -27,10 +27,10 @@ public class RelationService { private final R2dbcEntityTemplate r2dbcEntityTemplate; private final DatabaseClient databaseClient; - public RelationService(RelationRepository relationRepository, R2dbcEntityTemplate r2dbcEntityTemplate, DatabaseClient databaseClient) { + public RelationService(DatabaseClient databaseClient, RelationRepository relationRepository, R2dbcEntityTemplate r2dbcEntityTemplate) { + this.databaseClient = databaseClient; this.relationRepository = relationRepository; this.r2dbcEntityTemplate = r2dbcEntityTemplate; - this.databaseClient = databaseClient; } /** diff --git a/src/main/java/com/vxnet/pms/web/rest/MenuResource.java b/src/main/java/com/vxnet/pms/web/rest/MenuResource.java index 5d1cbe2..a01facc 100644 --- a/src/main/java/com/vxnet/pms/web/rest/MenuResource.java +++ b/src/main/java/com/vxnet/pms/web/rest/MenuResource.java @@ -1,6 +1,7 @@ package com.vxnet.pms.web.rest; import com.vxnet.pms.domain.Menu; +import com.vxnet.pms.security.SecurityUtils; import com.vxnet.pms.service.MenuService; import jakarta.validation.Valid; import java.util.Arrays; @@ -72,7 +73,7 @@ public class MenuResource { } @GetMapping("/menus/tree") - public Mono>>> getMenusTree( + public Mono>>> getTree( @RequestParam Map params, @ParameterObject @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable ) { @@ -82,12 +83,12 @@ public class MenuResource { return menuService .countMenus(table, params) .map(total -> - ResponseEntity.ok().header("X-Total-Count", String.valueOf(total)).body(menuService.getMenusTree(table, params, pageable)) + ResponseEntity.ok().header("X-Total-Count", String.valueOf(total)).body(menuService.getTree(table, params, pageable)) ); } @GetMapping("/menus/relation") - public Mono>>> getMenusRelation( + public Mono>>> getRelation( @RequestParam Map params, @ParameterObject @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable ) { @@ -97,14 +98,33 @@ public class MenuResource { return menuService .countMenus(table, params) .map(total -> - ResponseEntity.ok() - .header("X-Total-Count", String.valueOf(total)) - .body(menuService.getMenusRelation(table, params, pageable)) + ResponseEntity.ok().header("X-Total-Count", String.valueOf(total)).body(menuService.getRelation(table, params, pageable)) ); } - @GetMapping("/menus/visible") - public Mono>> getVisibleMenus() { - return Mono.just(ResponseEntity.ok().body(menuService.getVisibleMenus())); + @GetMapping("/menus/available") + public Mono>>> getAvailable( + @RequestParam Map params, + @ParameterObject @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable + ) { + if (!onlyContainsAllowedProperties(pageable)) { + return Mono.just(ResponseEntity.badRequest().build()); + } + return SecurityUtils.getCurrentUserLogin() + .flatMap(login -> { + params.put( + "dataScope[filter]", + "(select 1 from jhi_relation where jhi_relation.relation_type = 'menu' and jhi_relation.number = jhi_menu.number and IFNULL(data_scope,'') <> '' and exists(select 1 from jhi_relation r where r.role_number = jhi_relation.role_number and relation_type = 'user' and number = '" + + login + + "'))" + ); + return menuService + .countMenus(table, params) + .map(total -> + ResponseEntity.ok() + .header("X-Total-Count", String.valueOf(total)) + .body(menuService.getTree(table, params, pageable)) + ); + }); } } diff --git a/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts b/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts index 209f7b0..7bd1372 100644 --- a/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts +++ b/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts @@ -73,7 +73,7 @@ export default defineComponent({ sort: sort(), }; - const response = await axios.get(`api/menus/tree?${buildPaginationQuery(pagination)}`, { + const response = await axios.get(`api/menus/available?${buildPaginationQuery(pagination)}`, { params: { number: { name: '' }, name: { name: '' },