From facd3e351f0c94269a438223eb8dce56443a2940 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: Mon, 12 May 2025 18:21:21 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IFlwTaskAssigneeService.java | 14 ++--------- .../service/impl/FlwCommonServiceImpl.java | 7 ++---- .../impl/FlwTaskAssigneeServiceImpl.java | 25 +++---------------- .../service/impl/FlwTaskServiceImpl.java | 2 +- 4 files changed, 9 insertions(+), 39 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskAssigneeService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskAssigneeService.java index 7264ee079..dfeb4df57 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskAssigneeService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskAssigneeService.java @@ -15,19 +15,9 @@ public interface IFlwTaskAssigneeService { * 根据存储标识符(storageId)解析分配类型和ID,并获取对应的用户列表 * 支持单个标识(例如 "user:123" 或 "456"),格式非法将返回空列表 * - * @param storageId 包含分配类型和ID的字符串 + * @param storageIds 包含分配类型和ID的字符串 * @return 匹配的用户列表,格式非法返回空列表 */ - List fetchUsersByStorageId(String storageId); - - /** - * 批量解析多个存储标识符(storageIds),按类型分类并合并查询用户列表 - * 输入格式支持多个以逗号分隔的标识(如 "user:123,role:456,789") - * 会自动去重返回结果,非法格式的标识将被忽略 - * - * @param storageIds 多个存储标识符字符串(逗号分隔) - * @return 合并后的用户列表,去重后返回,非法格式的标识将被跳过 - */ - List fetchUsersByStorageIds(List storageIds); + List fetchUsersByStorageIds(String storageIds); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java index 35434d389..8e9c5096c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java @@ -72,11 +72,8 @@ public class FlwCommonServiceImpl implements IFlwCommonService { IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class); Map> userListMap = StreamUtils.groupByKey(userList, User::getType); for (Map.Entry> entry : userListMap.entrySet()) { - List processedBys = entry.getValue().stream() - .map(User::getProcessedBy) - .filter(StringUtils::isNotBlank) - .distinct() - .collect(Collectors.toList()); + List entryValue = entry.getValue(); + String processedBys = StreamUtils.join(entryValue, User::getProcessedBy); // 根据 processedBy 前缀判断处理人类型,分别获取用户列表 List users = taskAssigneeService.fetchUsersByStorageIds(processedBys); // 转换为 FlowUser 并添加到结果集合 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java index 9f847e184..5ebf2bbeb 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java @@ -169,33 +169,16 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand * 根据存储标识符(storageId)解析分配类型和ID,并获取对应的用户列表 * 支持单个标识(例如 "user:123" 或 "456"),格式非法将返回空列表 * - * @param storageId 包含分配类型和ID的字符串 + * @param storageIds 包含分配类型和ID的字符串 * @return 匹配的用户列表,格式非法返回空列表 */ @Override - public List fetchUsersByStorageId(String storageId) { - Pair parsed = this.parseStorageId(storageId); - if (parsed == null) { - return List.of(); - } - return this.getUsersByType(parsed.getKey(), Collections.singletonList(parsed.getValue())); - } - - /** - * 批量解析多个存储标识符(storageIds),按类型分类并合并查询用户列表 - * 输入格式支持多个以逗号分隔的标识(如 "user:123,role:456,789") - * 会自动去重返回结果,非法格式的标识将被忽略 - * - * @param storageIds 多个存储标识符字符串(逗号分隔) - * @return 合并后的用户列表,去重后返回,非法格式的标识将被跳过 - */ - @Override - public List fetchUsersByStorageIds(List storageIds) { - if (CollUtil.isEmpty(storageIds)) { + public List fetchUsersByStorageIds(String storageIds) { + if (StringUtils.isEmpty(storageIds)) { return List.of(); } Map> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class); - for (String storageId : storageIds) { + for (String storageId : storageIds.split(StringUtils.SEPARATOR)) { Pair parsed = this.parseStorageId(storageId); if (parsed != null) { typeIdMap.computeIfAbsent(parsed.getKey(), k -> new ArrayList<>()).add(parsed.getValue()); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 4bc0b0878..0cdabbf4a 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -600,7 +600,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { for (FlowNode flowNode : nextFlowNodes) { buildNextTaskList.stream().filter(t -> t.getNodeCode().equals(flowNode.getNodeCode())).findFirst().ifPresent(t -> { if (CollUtil.isNotEmpty(t.getPermissionList())) { - List users = flwTaskAssigneeService.fetchUsersByStorageIds(t.getPermissionList()); + List users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList())); if (CollUtil.isNotEmpty(users)) { flowNode.setPermissionFlag(StreamUtils.join(users, e -> String.valueOf(e.getUserId()))); }