diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java index e7edbd090..6773eefff 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java @@ -1,5 +1,6 @@ package org.dromara.workflow.flowable.cmd; +import cn.hutool.core.util.ObjectUtil; import lombok.AllArgsConstructor; import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; @@ -51,10 +52,14 @@ public class DeleteSequenceMultiInstanceCmd implements Command { ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(); ExecutionEntity entity = executionEntityManager.findById(executionId); // 设置流程变量 - List userIds = (List) entity.getVariable(assigneeList); + List userIds = new ArrayList<>(); + List variable = (List) entity.getVariable(assigneeList); + for (Object o : variable) { + userIds.add(Long.valueOf(o.toString())); + } List userIdList = new ArrayList<>(); userIds.forEach(e -> { - Long userId = assignees.stream().filter(id -> id.equals(e)).findFirst().orElse(null); + Long userId = assignees.stream().filter(id -> ObjectUtil.equals(id, e)).findFirst().orElse(null); if (userId == null) { userIdList.add(e); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index 5c38fad8f..009a1ad29 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -36,7 +36,6 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.zip.ZipInputStream; @@ -295,17 +294,25 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer InputStream inputStream = file.getInputStream(); Deployment deployment; if (FlowConstant.ZIP.equals(suffix)) { - // zip deployment = repositoryService.createDeployment() .tenantId(TenantHelper.getTenantId()) .addZipInputStream(new ZipInputStream(inputStream)).name(processName).key(processKey).category(categoryCode).deploy(); - } else if (Arrays.asList(ResourceNameUtil.BPMN_RESOURCE_SUFFIXES).contains(filename)) { - // xml 或 bpmn - deployment = repositoryService.createDeployment() - .tenantId(TenantHelper.getTenantId()) - .addInputStream(filename, inputStream).name(processName).key(processKey).category(categoryCode).deploy(); } else { - throw new ServiceException("文件类型上传错误!"); + String[] list = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES; + boolean flag = false; + for (String str : list) { + if (filename.contains(str)) { + flag = true; + break; + } + } + if (flag) { + deployment = repositoryService.createDeployment() + .tenantId(TenantHelper.getTenantId()) + .addInputStream(filename, inputStream).name(processName).key(processKey).category(categoryCode).deploy(); + } else { + throw new ServiceException("文件类型上传错误!"); + } } // 更新分类 ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult(); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 59348e5ae..19c5de554 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -492,7 +492,13 @@ public class ActTaskServiceImpl implements IActTaskService { */ @Override public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) { - Task task = taskService.createTaskQuery().taskId(addMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + TaskQuery taskQuery = taskService.createTaskQuery(); + taskQuery.taskId(addMultiBo.getTaskId()); + taskQuery.taskTenantId(TenantHelper.getTenantId()); + if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { + taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); + } + Task task = taskQuery.singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -535,7 +541,13 @@ public class ActTaskServiceImpl implements IActTaskService { */ @Override public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) { - Task task = taskService.createTaskQuery().taskId(deleteMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + TaskQuery taskQuery = taskService.createTaskQuery(); + taskQuery.taskId(deleteMultiBo.getTaskId()); + taskQuery.taskTenantId(TenantHelper.getTenantId()); + if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { + taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); + } + Task task = taskQuery.singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java index 647e6d4d7..e30e553eb 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowUserServiceImpl.java @@ -99,13 +99,16 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService { if (multiInstance == null) { return Collections.emptyList(); } - List assigneeList = null; + List assigneeList = new ArrayList<>(); if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - assigneeList = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); + List variable = (List) runtimeService.getVariable(task.getExecutionId(), multiInstance.getAssigneeList()); + for (Object o : variable) { + assigneeList.add(Long.valueOf(o.toString())); + } } if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) { - List userIds = StreamUtils.filter(assigneeList, e -> !e.toString().equals(task.getAssignee())); + List userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee())); List sysUsers = null; if (CollectionUtil.isNotEmpty(userIds)) { sysUsers = sysUserMapper.selectVoBatchIds(userIds); diff --git a/script/bpmn/请假流程(会签)-leave5.zip b/script/bpmn/请假流程(会签)-leave5.zip index a5e03efce..afe031af7 100644 Binary files a/script/bpmn/请假流程(会签)-leave5.zip and b/script/bpmn/请假流程(会签)-leave5.zip differ diff --git a/script/bpmn/请假流程(包容网关)-leave4.zip b/script/bpmn/请假流程(包容网关)-leave4.zip index 41f129619..9df55d918 100644 Binary files a/script/bpmn/请假流程(包容网关)-leave4.zip and b/script/bpmn/请假流程(包容网关)-leave4.zip differ diff --git a/script/bpmn/请假流程(并行网关)-leave3.zip b/script/bpmn/请假流程(并行网关)-leave3.zip index 8f7ffb08f..ab10060bc 100644 Binary files a/script/bpmn/请假流程(并行网关)-leave3.zip and b/script/bpmn/请假流程(并行网关)-leave3.zip differ diff --git a/script/bpmn/请假流程(边界定时任务)-leave7.zip b/script/bpmn/请假流程(边界定时任务)-leave7.zip deleted file mode 100644 index bd553753a..000000000 Binary files a/script/bpmn/请假流程(边界定时任务)-leave7.zip and /dev/null differ