Browse Source

增加递归获取菜单路由功能

wangzl 2 tháng trước cách đây
mục cha
commit
39dfb3bca7

+ 3 - 0
tr-modules/tr-module-smartFollowUp/src/main/java/cn/tr/module/smart/common/service/impl/DoctorUserServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.strategy.LoginUserStrategy;
+import cn.tr.core.tenant.TenantContextHolder;
 import cn.tr.core.utils.PswUtils;
 import cn.tr.module.api.sys.user.SysMenuApi;
 import cn.tr.module.smart.common.dto.BizAppUserBindHospitalDTO;
@@ -70,6 +71,8 @@ public class DoctorUserServiceImpl  implements IDoctorUserService {
     public List<DoctorUserHospitalVO> stdSelectHospitalList(String currentUserId) {
         List<DoctorUserHospitalVO> doctorUserHospitalVOS = userRepository.stdSelectHospitalList(currentUserId);
         doctorUserHospitalVOS.forEach(doctorUserHospitalVO -> {
+                    TenantContextHolder.setIgnore(Boolean.FALSE);
+                    TenantContextHolder.setTenantId(doctorUserHospitalVO.getTenantId());
                     String firstMenuPathByUserAndTenant = sysMenuApi.findFirstMenuPathByUserAndTenant(currentUserId);
                     doctorUserHospitalVO.setHospitalHomeRoute(firstMenuPathByUserAndTenant);
                 }

+ 26 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/provider/SysMenuApiProvider.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
+import cn.tr.core.tree.TreeNode;
 import cn.tr.core.utils.MenuUtil;
 import cn.tr.core.utils.TreeUtil;
 import cn.tr.module.api.sys.user.CbbMenuDTO;
@@ -18,6 +19,7 @@ import cn.tr.module.sys.user.po.SysMenuPO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.service.ISysMenuService;
 import cn.tr.module.sys.user.vo.RouteItemVO;
+import cn.tr.plugin.security.utils.SaTokenUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Component;
@@ -54,10 +56,11 @@ public class SysMenuApiProvider implements SysMenuApi {
 
     @Override
     public String findFirstMenuPathByUserAndTenant(String userId) {
+        SaTokenUtils.getStpUtil().checkLogin();
         List<RouteItemVO> routeItemVOS = TreeUtil.buildTree(currentUserService.currentUserMenus(""));
         return routeItemVOS.stream()
                 .findFirst()
-                .map(RouteItemVO::getName)
+                .map(this::recursionRoute)
                 .orElse("");
     }
 
@@ -179,4 +182,26 @@ public class SysMenuApiProvider implements SysMenuApi {
         menu.setDisable(false);
         return menu;
     }
+
+    /**
+     * @description: 递归获取第一个菜单路由
+     * @author wangzl
+     * @date 2025/9/28
+     */
+    private String recursionRoute(RouteItemVO routeItemVO){
+        if(routeItemVO==null){
+            return "";
+        }
+        if(CollectionUtil.isEmpty(routeItemVO.getChildren())){
+            return routeItemVO.getName();
+        }
+
+        RouteItemVO firstChild = (RouteItemVO) routeItemVO.getChildren().stream()
+                .findFirst()
+                .orElse(null);
+
+        return recursionRoute(firstChild);
+
+    }
+
 }