From b898d3275b4282d6849be108262da0391c87b211 Mon Sep 17 00:00:00 2001 From: konbai <1527468660@qq.com> Date: Thu, 12 May 2022 01:46:24 +0800 Subject: [PATCH] =?UTF-8?q?add=20--=20=E6=B5=81=E7=A8=8B=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0"=E4=BC=9A=E7=AD=BE"=E5=92=8C"=E6=88=96?= =?UTF-8?q?=E7=AD=BE"=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/MultiInstanceHandler.java | 64 +++++++++++++++ .../plugins/package/penal/PropertiesPanel.vue | 2 +- .../penal/task/task-components/UserTask.vue | 80 ++++++++++++++++++- 3 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/workflow/handler/MultiInstanceHandler.java 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 new file mode 100644 index 00000000..bdac85de --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/handler/MultiInstanceHandler.java @@ -0,0 +1,64 @@ +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.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 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.LinkedHashSet; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 多实例处理类 + * + * @author KonBAI + */ +@AllArgsConstructor +@Component("multiInstanceHandler") +public class MultiInstanceHandler { + + public HashSet getUserIds(DelegateExecution execution) { + HashSet 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())) { + candidateUserIds.addAll(userTask.getCandidateUsers()); + } else if (CollUtil.isNotEmpty(userTask.getCandidateGroups())) { + List groups = userTask.getCandidateGroups() + .stream().map(item -> item.substring(4)).collect(Collectors.toList()); + 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); + }); + } else if ("DEPTS".equals(dataType)) { + SysUserMapper userMapper = SpringUtils.getBean(SysUserMapper.class); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .select(SysUser::getUserId); + groups.forEach(item -> { + List userIds = userMapper.selectList(lambdaQueryWrapper.eq(SysUser::getDeptId, Long.parseLong(item))) + .stream().map(k -> String.valueOf(k.getDeptId())).collect(Collectors.toList()); + candidateUserIds.addAll(userIds); + }); + + } + } + } + return candidateUserIds; + } +} diff --git a/ruoyi-ui/src/plugins/package/penal/PropertiesPanel.vue b/ruoyi-ui/src/plugins/package/penal/PropertiesPanel.vue index 2aca9ed6..443000a2 100644 --- a/ruoyi-ui/src/plugins/package/penal/PropertiesPanel.vue +++ b/ruoyi-ui/src/plugins/package/penal/PropertiesPanel.vue @@ -21,7 +21,7 @@
任务
- +
多实例
diff --git a/ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue b/ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue index bb68446c..deee7766 100644 --- a/ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue +++ b/ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue @@ -1,6 +1,7 @@