From b8571e9ca13e9a5782b5a9524670c75be7557fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 22 Jan 2026 18:01:45 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=BA=BF=E7=A8=8B=E5=B7=A5=E5=85=B7=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E7=BA=BF=E7=A8=8B=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/web/service/SysLoginService.java | 29 ++++++--------- .../common/core/utils/ThreadUtils.java | 36 +++++++++++++++++++ 2 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index 1c7cb3438..293bbe7e5 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -33,8 +33,6 @@ import org.springframework.stereotype.Service; import java.time.Duration; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.function.Supplier; /** @@ -151,22 +149,17 @@ public class SysLoginService { loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY)); loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY)); } - try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { - executor.execute(() -> { - loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); - }); - executor.execute(() -> { - loginUser.setRolePermission(permissionService.getRolePermission(userId)); - }); - executor.execute(() -> { - List roles = roleService.selectRolesByUserId(userId); - loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class)); - }); - executor.execute(() -> { - List posts = postService.selectPostsByUserId(userId); - loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class)); - }); - } + ThreadUtils.virtualSubmit(() -> { + loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); + }, () -> { + loginUser.setRolePermission(permissionService.getRolePermission(userId)); + }, () -> { + List roles = roleService.selectRolesByUserId(userId); + loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class)); + }, () -> { + List posts = postService.selectPostsByUserId(userId); + loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class)); + }); return loginUser; } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java new file mode 100644 index 000000000..fd382918b --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java @@ -0,0 +1,36 @@ +package org.dromara.common.core.utils; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + +/** + * 线程工具 + * + * @author Lion Li + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ThreadUtils { + + /** + * 批量执行任务 + */ + public static void virtualSubmit(Runnable ...runnableList) { + List> callableList = new ArrayList<>(); + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { + for (Runnable runnable : runnableList) { + callableList.add(executor.submit(runnable)); + } + for (Future future : callableList) { + future.get(); + } + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + + } + +}