From 4afe92902094409f6b751d33ba0b074409f92b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 29 Jun 2026 17:21:09 +0800 Subject: [PATCH] =?UTF-8?q?APP=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UserApplicationService.java | 18 +++++---- .../appMenu/AppMenuApplicationService.java | 38 ++++++++++++++++++- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java index acf878138..3ded3381e 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java @@ -1901,14 +1901,18 @@ public class UserApplicationService { } catch (Exception e) { log.warn("同步商城用户失败,但不影响用户保存: {}", e.getMessage()); } - try { - // 截断avatar URL(YMS的avatar列长度有限,去掉OSS签名参数) - if (userEntity.getAvatar() != null && userEntity.getAvatar().contains("?")) { - userEntity.setAvatar(userEntity.getAvatar().substring(0, userEntity.getAvatar().indexOf("?"))); + // 只有组织开启园区(排队)才同步YMS + Integer isQueue = userMapper.getOrdIsQueue(userEntity.getOrganizationId()); + if (isQueue != null && isQueue == 1) { + try { + // 截断avatar URL(YMS的avatar列长度有限,去掉OSS签名参数) + if (userEntity.getAvatar() != null && userEntity.getAvatar().contains("?")) { + userEntity.setAvatar(userEntity.getAvatar().substring(0, userEntity.getAvatar().indexOf("?"))); + } + ymsDomainService.addOrEditYmsUser(userEntity); + } catch (Exception e) { + log.warn("同步YMS平台员工信息失败,但不影响用户保存: {}", e.getMessage()); } - ymsDomainService.addOrEditYmsUser(userEntity); - } catch (Exception e) { - log.warn("同步YMS平台员工信息失败,但不影响用户保存: {}", e.getMessage()); } //2024年3月27日16:40:15 处理用户验证码注册,首次登录redis用户数据不更新问题 //此处根据id重新查询 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 2046586fb..2c188f6a9 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 @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; @@ -93,8 +94,10 @@ public class AppMenuApplicationService { appMenuDO.setTopOrganizationId(SecurityUtils.getLoginUser().getUserPo().getTopOrganizationId()); } List menuPos = appMenuDomainService.queryMenuListByApp(appMenuDO); - // 车队主管显示「订单调度」;业务主管显示「订单审核」 + // 获取用户角色 → 查角色APP菜单权限 → 取交集去重 List userRoles = userFeignService.selectUserRoles(appMenuDO.getUserId()); + menuPos = filterMenuByUserRole(menuPos, userRoles); + // 车队主管显示「订单调度」;业务主管显示「订单审核」 menuPos = filterMenuByRole(menuPos, userRoles); //判断控制推广码是否显示 if (menuPos != null){ @@ -108,6 +111,39 @@ public class AppMenuApplicationService { return menuPos; } + /** + * 在APP配置菜单基础上,根据用户角色取集合,去除重复菜单 + */ + private List filterMenuByUserRole(List appMenus, List userRoles) { + if (appMenus == null || appMenus.isEmpty() || userRoles == null || userRoles.isEmpty()) { + return appMenus != null ? appMenus : new ArrayList<>(); + } + // 获取用户所有角色ID + List roleIds = userRoles.stream() + .map(UserRoleMenuPO::getRoleId) + .filter(id -> id != null) + .distinct() + .collect(Collectors.toList()); + if (roleIds.isEmpty()) { + return appMenus; + } + // 查询角色对应的APP菜单权限(role_menu表中roleMenuClient=2的) + R> roleMenuR = userServiceFeign.roleAppMenuListByRoleIds(roleIds); + if (R.FAIL == roleMenuR.getCode() || roleMenuR.getData() == null || roleMenuR.getData().isEmpty()) { + return appMenus; + } + // 取角色菜单ID集合 + Set roleMenuIds = roleMenuR.getData().stream() + .map(UserRoleMenuPO::getMenuId) + .filter(id -> id != null) + .collect(Collectors.toSet()); + // 过滤:只保留APP配置菜单中也在角色权限中的菜单 + return appMenus.stream() + .filter(menu -> menu.getMenuId() != null && roleMenuIds.contains(menu.getMenuId())) + .distinct() + .collect(Collectors.toList()); + } + /** * 按角色过滤互斥菜单: * 车队主管隐藏「订单审核」;业务主管隐藏「订单调度」