package com.dl.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.dl.common.core.domain.entity.SysUser; import com.dl.flowable.common.constant.ProcessConstants; import com.dl.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.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * 多实例处理类 * * @author KonBAI */ @AllArgsConstructor @Component("multiInstanceHandler") public class MultiInstanceHandler { 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())) { // 获取组的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)) { // 通过角色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)) { // 通过部门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; } }