From 931c812cae93c59a6d80310c660146d86c1d0113 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 22 Dec 2023 18:06:32 +0800 Subject: [PATCH] =?UTF-8?q?update=20-=20=E5=AE=8C=E5=96=84=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E8=8A=82=E7=82=B9=E7=94=B1=E4=B8=9A=E5=8A=A1=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=AE=A1=E6=89=B9=E4=BA=BA=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?,=E5=B9=B6=E8=87=AA=E6=B5=8B=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomBizSpecifyAssigneeToTaskCmd.java | 29 +++++++++++++++++-- .../common/annotation/RepeatSubmit.java | 2 +- .../task/MessagePushTaskEventListener.java | 5 ++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomBizSpecifyAssigneeToTaskCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomBizSpecifyAssigneeToTaskCmd.java index 7afa60cee..e4fb8d792 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomBizSpecifyAssigneeToTaskCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomBizSpecifyAssigneeToTaskCmd.java @@ -6,6 +6,7 @@ import cn.axzo.workflow.core.common.exception.WorkflowEngineException; import cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper; import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; @@ -18,6 +19,7 @@ import java.util.List; import java.util.Objects; import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_ID; +import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT; import static cn.axzo.workflow.core.common.code.BpmnTaskRespCode.ACTIVITY_BIZ_SET_ASSIGNEE_ERROR; import static cn.axzo.workflow.core.common.code.BpmnTaskRespCode.ACTIVITY_CANT_SET_ASSIGNEE; @@ -46,21 +48,44 @@ public class CustomBizSpecifyAssigneeToTaskCmd implements Command, Seri Task task = taskService.createTaskQuery().executionId(executionId) .taskAssignee(DUMMY_ASSIGNEE_ID) .singleResult(); + validTask(task); + changeAssigneeSnapshot(commandContext, task); + addAssignee(commandContext, taskService, task); return true; } + private void changeAssigneeSnapshot(CommandContext commandContext, Task task) { + ProcessEngineConfigurationImpl processEngineConfiguration = + CommandContextUtil.getProcessEngineConfiguration(commandContext); + RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); + + List originAssingeeList = runtimeService.getVariable(task.getProcessInstanceId(), + INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey(), List.class); + + for (BpmnTaskDelegateAssigner assigner : originAssingeeList) { + if (Objects.equals(assigner.buildAssigneeId(), DUMMY_ASSIGNEE_ID)) { + originAssingeeList.remove(assigner); + break; + } + } + originAssingeeList.addAll(addedAssigners); + runtimeService.setVariable(task.getProcessInstanceId(), + INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey(), + originAssingeeList); + } + private void addAssignee(CommandContext commandContext, TaskService taskService, Task task) { if (CollectionUtils.isEmpty(addedAssigners)) { return; } + addedAssigners.forEach(i -> { if (Objects.equals(task.getAssignee(), DUMMY_ASSIGNEE_ID)) { - task.setAssignee(i.buildAssigneeId()); - taskService.saveTask(task); + taskService.setAssignee(task.getId(), i.buildAssigneeId()); } else { CustomTaskHelper.addMultiTask(commandContext, (TaskEntity) task, i); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/annotation/RepeatSubmit.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/annotation/RepeatSubmit.java index ff8f05c8c..0de59ffcb 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/annotation/RepeatSubmit.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/annotation/RepeatSubmit.java @@ -22,7 +22,7 @@ public @interface RepeatSubmit { /** * 间隔时间(ms),小于此时间视为重复提交 */ - int interval() default 30000; + int interval() default 3000; TimeUnit timeUnit() default TimeUnit.MILLISECONDS; diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/MessagePushTaskEventListener.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/MessagePushTaskEventListener.java index f06f4d86f..f7815bd1f 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/MessagePushTaskEventListener.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/MessagePushTaskEventListener.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_ID; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_ASSIGNEE_SKIP_FLAT; @@ -59,6 +60,10 @@ public class MessagePushTaskEventListener implements BpmnTaskEventListener, Orde pendingComplete(delegateTask); return; } + if (Objects.equals(DUMMY_ASSIGNEE_ID, delegateTask.getAssignee())) { + // 业务指定审批人, 不用发待办 + return; + } pendingPush(delegateTask); if (log.isDebugEnabled()) { log.debug("MessagePushTaskEventListener#onAssigned...end: {}", delegateTask.getTaskDefinitionKey());