diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/handler/MultiInstanceHandler.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/handler/MultiInstanceHandler.java index 28bdd370..0f940791 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/handler/MultiInstanceHandler.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/handler/MultiInstanceHandler.java @@ -3,20 +3,21 @@ package com.ruoyi.workflow.handler; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery; import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.flowable.common.constant.ProcessConstants; -import com.ruoyi.system.mapper.SysUserMapper; -import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.domain.SysUserRole; import lombok.AllArgsConstructor; import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; -import java.util.HashSet; +import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -28,32 +29,32 @@ import java.util.stream.Collectors; @Component("multiInstanceHandler") public class MultiInstanceHandler { - public HashSet getUserIds(DelegateExecution execution) { - HashSet candidateUserIds = new LinkedHashSet<>(); + public Set getUserIds(DelegateExecution execution) { + Set candidateUserIds = new LinkedHashSet<>(); FlowElement flowElement = execution.getCurrentFlowElement(); if (ObjectUtil.isNotEmpty(flowElement) && flowElement instanceof UserTask) { UserTask userTask = (UserTask) flowElement; String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); if ("USERS".equals(dataType) && CollUtil.isNotEmpty(userTask.getCandidateUsers())) { + // 添加候选用户id candidateUserIds.addAll(userTask.getCandidateUsers()); } else if (CollUtil.isNotEmpty(userTask.getCandidateGroups())) { - List groups = userTask.getCandidateGroups() - .stream().map(item -> item.substring(4)).collect(Collectors.toList()); + // 获取组的ID,角色ID集合或部门ID集合 + List groups = userTask.getCandidateGroups().stream() + .map(item -> Long.parseLong(item.substring(4))) + .collect(Collectors.toList()); + List userIds = new ArrayList<>(); if ("ROLES".equals(dataType)) { - SysUserRoleMapper userRoleMapper = SpringUtils.getBean(SysUserRoleMapper.class); - groups.forEach(item -> { - List userIds = userRoleMapper.selectUserIdsByRoleId(Long.parseLong(item)) - .stream().map(String::valueOf).collect(Collectors.toList()); - candidateUserIds.addAll(userIds); - }); + // 通过角色id,获取所有用户id集合 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(SysUserRole.class).select(SysUserRole::getUserId).in(SysUserRole::getRoleId, groups); + userIds = SimpleQuery.list(lqw, SysUserRole::getUserId); } else if ("DEPTS".equals(dataType)) { - SysUserMapper userMapper = SpringUtils.getBean(SysUserMapper.class); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() - .select(SysUser::getUserId).in(SysUser::getDeptId, groups); - List userIds = userMapper.selectList(lambdaQueryWrapper) - .stream().map(k -> String.valueOf(k.getUserId())).collect(Collectors.toList()); - candidateUserIds.addAll(userIds); + // 通过部门id,获取所有用户id集合 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(SysUser.class).select(SysUser::getUserId).in(SysUser::getDeptId, groups); + userIds = SimpleQuery.list(lqw, SysUser::getUserId); } + // 添加候选用户id + userIds.forEach(id -> candidateUserIds.add(String.valueOf(id))); } } return candidateUserIds;