From be00edc7b2568b5ee2d47c7e3eb8f9e89f34c82e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Fri, 5 Jun 2026 13:41:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E7=85=A7=E8=A7=92=E8=89=B2=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E8=8F=9C=E5=8D=95=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appMenu/AppMenuApplicationService.java | 46 +++++++++++++++++++ .../domain/menu/service/UserFeignService.java | 13 ++++++ 2 files changed, 59 insertions(+) diff --git a/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java b/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java index a2f7eeaf4..2046586fb 100644 --- a/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java +++ b/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java @@ -8,6 +8,7 @@ import com.linke.product.domain.appMenu.repository.po.AppModulePO; import com.linke.product.domain.appMenu.repository.todo.AppMenuDO; import com.linke.product.domain.appMenu.service.AppMenuDomainService; import com.linke.product.domain.menu.repository.po.MenuPo; +import com.linke.product.domain.menu.service.UserFeignService; import com.linke.product.infrastructure.feign.UserServiceFeign; import com.mhd.common.core.domain.entity.R; import com.mhd.common.core.domain.po.UserConfigSwitchPo; @@ -45,6 +46,8 @@ public class AppMenuApplicationService { private UserServiceFeign userServiceFeign; @Autowired private CommonApplicationService commonApplicationService; + @Autowired + private UserFeignService userFeignService; /** @@ -90,6 +93,9 @@ public class AppMenuApplicationService { appMenuDO.setTopOrganizationId(SecurityUtils.getLoginUser().getUserPo().getTopOrganizationId()); } List menuPos = appMenuDomainService.queryMenuListByApp(appMenuDO); + // 车队主管显示「订单调度」;业务主管显示「订单审核」 + List userRoles = userFeignService.selectUserRoles(appMenuDO.getUserId()); + menuPos = filterMenuByRole(menuPos, userRoles); //判断控制推广码是否显示 if (menuPos != null){ //获取配置判断是否开启推广码 @@ -102,6 +108,46 @@ public class AppMenuApplicationService { return menuPos; } + /** + * 按角色过滤互斥菜单: + * 车队主管隐藏「订单审核」;业务主管隐藏「订单调度」 + */ + private List filterMenuByRole(List menuPos, List userRoles) { + if (menuPos == null || menuPos.isEmpty()) { + return menuPos; + } + boolean isFleetSupervisor = hasRole(userRoles, "车队主管"); + boolean isBusinessSupervisor = hasRole(userRoles, "业务主管"); + if (!isFleetSupervisor && !isBusinessSupervisor) { + return menuPos; + } + return menuPos.stream() + .filter(menu -> !(isFleetSupervisor && isOrderReviewMenu(menu))) + .filter(menu -> !(isBusinessSupervisor && isOrderDispatchMenu(menu))) + .collect(Collectors.toList()); + } + + private boolean hasRole(List userRoles, String roleName) { + return userRoles.stream().anyMatch(role -> + roleName.equals(role.getRoleName()) || roleName.equals(role.getRoleCode())); + } + + private boolean isOrderDispatchMenu(MenuPo menu) { + return matchMenuName(menu, "订单调度", "运力调度"); + } + + private boolean isOrderReviewMenu(MenuPo menu) { + return matchMenuName(menu, "订单审核"); + } + + private boolean matchMenuName(MenuPo menu, String... menuNames) { + for (String menuName : menuNames) { + if (menuName.equals(menu.getMenuName()) || menuName.equals(menu.getMenuShowName())) { + return true; + } + } + return false; + } /** * 保存app/菜单权限 diff --git a/mhd_product/src/main/java/com/linke/product/domain/menu/service/UserFeignService.java b/mhd_product/src/main/java/com/linke/product/domain/menu/service/UserFeignService.java index 63e2b5718..bf06118a2 100644 --- a/mhd_product/src/main/java/com/linke/product/domain/menu/service/UserFeignService.java +++ b/mhd_product/src/main/java/com/linke/product/domain/menu/service/UserFeignService.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; +import java.util.stream.Collectors; /** * 用户中心微服务 防腐层 @@ -85,4 +86,16 @@ public class UserFeignService { } return menus; } + + /** + * 查询用户所属角色列表 + */ + public List selectUserRoles(Long userId) { + AjaxResult ajaxResult = userServiceFeign.selectRolesByUserId(userId); + if (!"200".equals(String.valueOf(ajaxResult.get("code")))) { + return new ArrayList<>(); + } + List userRoles = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), UserRoleMenuPO.class); + return userRoles != null ? userRoles : new ArrayList<>(); + } }