From f5b8f66a391dda612423ad7fee68dc8d09bc7e3b Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 8 Aug 2024 16:27:15 +0800 Subject: [PATCH] =?UTF-8?q?fix=20-=20=E8=B0=83=E6=95=B4=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=8A=A8=E8=BF=87=E5=AE=A1=E5=8D=A1?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=AF=BC=E8=87=B4MQ=20=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E5=8F=91=E5=87=BA=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/engine/cmd/CustomApproveTaskCmd.java | 4 +++- .../listener/AutoPassTransactionListener.java | 17 ++++++++--------- .../AutoRejectTransactionListener.java | 18 ++++++++++++------ .../task/AutoOperatorEvent_101_Listener.java | 17 +++++++++++------ 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java index 37c517892..eeae3326b 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomApproveTaskCmd.java @@ -7,6 +7,7 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import com.alibaba.fastjson.JSON; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.common.engine.impl.transaction.TransactionContextHolder; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; @@ -94,7 +95,7 @@ public class CustomApproveTaskCmd extends AbstractCommand implements Seria this.approver = dto.getApprover(); this.nextApprover = dto.getNextApprover(); this.nodeTypes = dto.getNodeTypes(); - if (Objects.nonNull(operationDesc)) { + if (StringUtils.hasText(operationDesc)) { this.operationDesc = operationDesc; } } @@ -118,6 +119,7 @@ public class CustomApproveTaskCmd extends AbstractCommand implements Seria @Override public Void execute(CommandContext commandContext) { + log.warn("CustomApproveTaskCmd current transaction status :{}", TransactionContextHolder.isTransactionContextActive()); ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext); HistoricTaskInstanceQuery taskQuery = diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoPassTransactionListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoPassTransactionListener.java index a2798cf58..03ff54278 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoPassTransactionListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoPassTransactionListener.java @@ -5,11 +5,11 @@ import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskCmd; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.flowable.common.engine.impl.cfg.TransactionListener; -import org.flowable.common.engine.impl.cfg.TransactionPropagation; import org.flowable.common.engine.impl.interceptor.CommandConfig; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandExecutor; -import org.flowable.engine.impl.cmd.GetExecutionVariableCmd; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.RuntimeService; import org.flowable.task.service.delegate.DelegateTask; import java.util.Collections; @@ -35,6 +35,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELAT @Slf4j @AllArgsConstructor public class AutoPassTransactionListener implements TransactionListener { + private final ProcessEngineConfiguration processEngineConfiguration; private final DelegateTask delegateTask; private final String advice; @@ -42,17 +43,15 @@ public class AutoPassTransactionListener implements TransactionListener { public void execute(CommandContext commandContext) { log.info("exec auto pass transaction listener start, processInstanceId: {}, taskId: {}", delegateTask.getProcessInstanceId(), delegateTask.getId()); - // 必须开启新的事务 - CommandConfig commandConfig = new CommandConfig(false, TransactionPropagation.REQUIRED); - CommandExecutor commandExecutor = commandContext.getCommandExecutor(); - BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(commandExecutor.execute(getVariableCmd())); + RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); + BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible( + runtimeService.getVariable(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId())); + CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor(); + CommandConfig commandConfig = new CommandConfig().transactionRequiresNew(); commandExecutor.execute(commandConfig, new CustomApproveTaskCmd(delegateTask.getId(), advice, "自动通过", Collections.emptyList(), assigner, null)); log.info("exec auto pass transaction listener end"); } - private GetExecutionVariableCmd getVariableCmd() { - return new GetExecutionVariableCmd(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(), false); - } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoRejectTransactionListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoRejectTransactionListener.java index b1235b28e..0945fe70f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoRejectTransactionListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/tx/listener/AutoRejectTransactionListener.java @@ -7,9 +7,11 @@ import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.flowable.common.engine.impl.cfg.TransactionListener; -import org.flowable.common.engine.impl.cfg.TransactionPropagation; +import org.flowable.common.engine.impl.cfg.TransactionState; import org.flowable.common.engine.impl.interceptor.CommandConfig; import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.common.engine.impl.interceptor.CommandExecutor; +import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.task.service.delegate.DelegateTask; /** @@ -26,20 +28,24 @@ import org.flowable.task.service.delegate.DelegateTask; @Slf4j @AllArgsConstructor public class AutoRejectTransactionListener implements TransactionListener { + private final ProcessEngineConfiguration processEngineConfiguration; private final DelegateTask delegateTask; private final ExtAxHiTaskInstService extAxHiTaskInstService; + private final TransactionState transactionState; @Override public void execute(CommandContext commandContext) { - log.info("exec auto reject transaction listener start, processInstanceId: {}, taskId: {}", - delegateTask.getProcessInstanceId(), delegateTask.getId()); + log.info("exec auto reject transaction listener start, processInstanceId: {}, taskId: {}, transaction: {}", + delegateTask.getProcessInstanceId(), delegateTask.getId(), transactionState); - // 必须开启新的事务 - CommandConfig commandConfig = new CommandConfig(false, TransactionPropagation.REQUIRED); + + CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor(); BpmnTaskAuditDTO taskAudit = new BpmnTaskAuditDTO(); taskAudit.setTaskId(delegateTask.getId()); taskAudit.setApprover(new BpmnTaskDelegateAssigner("系统", "system", delegateTask.getTenantId())); - commandContext.getCommandExecutor().execute(commandConfig, new CustomRejectionTaskCmd(taskAudit, extAxHiTaskInstService, "自动驳回")); + + CommandConfig commandConfig = new CommandConfig().transactionRequiresNew(); + commandExecutor.execute(commandConfig, new CustomRejectionTaskCmd(taskAudit, extAxHiTaskInstService, "自动驳回")); log.info("exec auto reject transaction listener end"); } 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 01f85f8f8..4ab9e2f1a 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 @@ -21,6 +21,7 @@ import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.UserTask; import org.flowable.common.engine.impl.cfg.TransactionState; import org.flowable.common.engine.impl.context.Context; +import org.flowable.common.engine.impl.transaction.TransactionContextHolder; import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; @@ -138,10 +139,10 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener { switch (approverEmptyHandleTypeEnum) { case autoPassed: - autoPass(delegateTask, TransactionState.COMMITTING); + autoPass(delegateTask, TransactionState.COMMITTED); break; case autoRejection: - autoReject(delegateTask, TransactionState.COMMITTING); + autoReject(delegateTask, TransactionState.COMMITTED); break; case autoSkipped: // autoReject(delegateTask); @@ -165,10 +166,10 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener { switch (approvalMethodEnum) { case autoPassed: - autoPass(delegateTask, TransactionState.COMMITTING); + autoPass(delegateTask, TransactionState.COMMITTED); break; case autoRejection: - autoReject(delegateTask, TransactionState.COMMITTING); + autoReject(delegateTask, TransactionState.COMMITTED); break; case bizSpecify: break; @@ -187,7 +188,9 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener