Ver código fonte

update 优化工作流办理人标识符解析

AprilWind 1 mês atrás
pai
commit
800c6c8ff3

+ 16 - 6
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java

@@ -1,6 +1,7 @@
 package org.dromara.workflow.service.impl;
 package org.dromara.workflow.service.impl;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -25,9 +26,7 @@ import org.dromara.workflow.common.enums.TaskAssigneeEnum;
 import org.dromara.workflow.service.IFlwTaskAssigneeService;
 import org.dromara.workflow.service.IFlwTaskAssigneeService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
 
 /**
 /**
  * 流程设计器-获取办理人权限设置列表
  * 流程设计器-获取办理人权限设置列表
@@ -132,15 +131,26 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
     @Override
     @Override
     public List<UserDTO> fetchUsersByStorageId(String storageId) {
     public List<UserDTO> fetchUsersByStorageId(String storageId) {
         List<UserDTO> list = new ArrayList<>();
         List<UserDTO> list = new ArrayList<>();
+        Map<TaskAssigneeEnum, List<Long>> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class);
         for (String str : storageId.split(StrUtil.COMMA)) {
         for (String str : storageId.split(StrUtil.COMMA)) {
             String[] parts = str.split(StrUtil.COLON, 2);
             String[] parts = str.split(StrUtil.COLON, 2);
+            TaskAssigneeEnum type;
+            Long id;
             if (parts.length < 2) {
             if (parts.length < 2) {
-                list.addAll(getUsersByType(TaskAssigneeEnum.USER, List.of(Long.valueOf(parts[0]))));
+                // 无前缀时默认是用户类型
+                type = TaskAssigneeEnum.USER;
+                id = Long.valueOf(parts[0]);
             } else {
             } else {
-                list.addAll(getUsersByType(TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON), List.of(Long.valueOf(parts[1]))));
+                // 根据前缀解析类型(如 "role:123" -> ROLE 类型)
+                type = TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON);
+                id = Long.valueOf(parts[1]);
             }
             }
+            typeIdMap.computeIfAbsent(type, k -> new ArrayList<>()).add(id);
         }
         }
-        return list;
+        typeIdMap.entrySet().stream()
+            .filter(entry -> CollUtil.isNotEmpty(entry.getValue()))
+            .forEach(entry -> list.addAll(getUsersByType(entry.getKey(), entry.getValue())));
+        return list.stream().distinct().toList();
     }
     }
 
 
     /**
     /**