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