From f0c1b53acc39e9f1f65bb6755e4d221699f3acbb Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Tue, 30 Apr 2024 15:39:07 +0800 Subject: [PATCH] =?UTF-8?q?update=20-=20=E8=B0=83=E6=95=B4=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=93=8D=E4=BD=9C=E4=BA=8B=E4=BB=B6=E4=B8=AD,?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8B=92=E7=BB=9D=E6=97=B6,=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=AE=8C=E6=95=B4=E5=8A=9F=E8=83=BD=E7=9A=84=20Delete?= =?UTF-8?q?ProcessInstanceOperation=20=E6=93=8D=E4=BD=9C=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeleteProcessInstanceOperation.java | 13 +++++++- .../task/AutoOperatorEvent_101_Listener.java | 30 ++++++++++--------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/operation/DeleteProcessInstanceOperation.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/operation/DeleteProcessInstanceOperation.java index 5f33c07c7..df7346997 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/operation/DeleteProcessInstanceOperation.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/operation/DeleteProcessInstanceOperation.java @@ -10,6 +10,7 @@ import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.List; import java.util.Objects; @@ -25,6 +26,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.HIDDEN_ASSIGNEE_ID; public class DeleteProcessInstanceOperation extends AbstractOperation { private final String processInstanceId; private final ExtAxHiTaskInstService extAxHiTaskInstService; + private String customDeleteReason; public DeleteProcessInstanceOperation(CommandContext commandContext, String processInstanceId, ExtAxHiTaskInstService extAxHiTaskInstService) { @@ -33,6 +35,15 @@ public class DeleteProcessInstanceOperation extends AbstractOperation { this.extAxHiTaskInstService = extAxHiTaskInstService; } + public DeleteProcessInstanceOperation(CommandContext commandContext, String processInstanceId, + ExtAxHiTaskInstService extAxHiTaskInstService, + String customDeleteReason) { + super(commandContext, null); + this.processInstanceId = processInstanceId; + this.extAxHiTaskInstService = extAxHiTaskInstService; + this.customDeleteReason = customDeleteReason; + } + @Override public void run() { ProcessEngineConfigurationImpl processEngineConfiguration = @@ -54,7 +65,7 @@ public class DeleteProcessInstanceOperation extends AbstractOperation { } RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); - runtimeService.deleteProcessInstance(processInstanceId, HIDDEN_ASSIGNEE_ID); + runtimeService.deleteProcessInstance(processInstanceId, StringUtils.hasText(customDeleteReason) ? customDeleteReason : HIDDEN_ASSIGNEE_ID); // 将结束流程实例的原因记录下来 // runtimeService.deleteProcessInstance(processInstanceId, reason); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java index 44575776a..1bbdd0ccb 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java @@ -8,6 +8,7 @@ import cn.axzo.workflow.core.common.context.TaskOperationContext; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskCmd; import cn.axzo.workflow.core.engine.job.AsyncApproveTaskJobHandler; +import cn.axzo.workflow.core.engine.operation.DeleteProcessInstanceOperation; import cn.axzo.workflow.core.listener.AbstractBpmnEventListener; import cn.axzo.workflow.core.listener.BpmnTaskEventListener; import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst; @@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.UserTask; +import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandExecutor; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -28,17 +30,14 @@ import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntity; import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.job.service.JobService; import org.flowable.job.service.impl.persistence.entity.JobEntity; -import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.service.delegate.DelegateTask; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; @@ -268,7 +267,6 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener historyTaskList = - historyService.createHistoricTaskInstanceQuery().unfinished().list(); - if (!CollectionUtils.isEmpty(historyTaskList)) { - historyTaskList.stream().filter(i -> Objects.isNull(i.getExecutionId())) - .forEach(i -> taskService.complete(i.getId())); - } - // 删除流程实例,以实现驳回任务时,中止整个审批流程 - runtimeService.deleteProcessInstance(delegateTask.getProcessInstanceId(), REJECTION_AUTO_COMPLETED.getDesc()); - +// List historyTaskList = +// historyService.createHistoricTaskInstanceQuery() +// .processInstanceId(delegateTask.getProcessInstanceId()) +// .unfinished() +// .list(); +// if (!CollectionUtils.isEmpty(historyTaskList)) { +// historyTaskList.stream().filter(i -> Objects.isNull(i.getExecutionId())) +// .forEach(i -> taskService.complete(i.getId())); +// } +// // 删除流程实例,以实现驳回任务时,中止整个审批流程 +// runtimeService.deleteProcessInstance(delegateTask.getProcessInstanceId(), REJECTION_AUTO_COMPLETED.getDesc()); + CommandContext commandContext = CommandContextUtil.getCommandContext(); + CommandContextUtil.getAgenda(commandContext).planOperation(new DeleteProcessInstanceOperation(commandContext, + delegateTask.getProcessInstanceId(), extAxHiTaskInstService, REJECTION_AUTO_COMPLETED.getDesc())); log.info("AutoOperatorEventListener#autoReject...end: {}", delegateTask.getTaskDefinitionKey()); } private void autoPass(DelegateTask delegateTask) { - // TODO 用异步任务实现 ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(); CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor(); BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(