fix(工作流模块): 修复 多实例处理类当候选组下没有用户时,执行会报错问题。同时使用MP提供的SimpleQuery优化查询操作。[I6WQP1](https://gitee.com/KonBAI-Q/ruoyi-flowable-plus/issues/I6WQP1)

This commit is contained in:
konbai
2023-04-26 23:38:26 +08:00
parent f3ef5c5ab7
commit 691febae61

View File

@@ -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<String> getUserIds(DelegateExecution execution) {
HashSet<String> candidateUserIds = new LinkedHashSet<>();
public Set<String> getUserIds(DelegateExecution execution) {
Set<String> 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<String> groups = userTask.getCandidateGroups()
.stream().map(item -> item.substring(4)).collect(Collectors.toList());
// 获取组的ID角色ID集合或部门ID集合
List<Long> groups = userTask.getCandidateGroups().stream()
.map(item -> Long.parseLong(item.substring(4)))
.collect(Collectors.toList());
List<Long> userIds = new ArrayList<>();
if ("ROLES".equals(dataType)) {
SysUserRoleMapper userRoleMapper = SpringUtils.getBean(SysUserRoleMapper.class);
groups.forEach(item -> {
List<String> userIds = userRoleMapper.selectUserIdsByRoleId(Long.parseLong(item))
.stream().map(String::valueOf).collect(Collectors.toList());
candidateUserIds.addAll(userIds);
});
// 通过角色id获取所有用户id集合
LambdaQueryWrapper<SysUserRole> 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<SysUser> lambdaQueryWrapper = new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId).in(SysUser::getDeptId, groups);
List<String> userIds = userMapper.selectList(lambdaQueryWrapper)
.stream().map(k -> String.valueOf(k.getUserId())).collect(Collectors.toList());
candidateUserIds.addAll(userIds);
// 通过部门id获取所有用户id集合
LambdaQueryWrapper<SysUser> 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;