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());