fix - 调整因为修复自动过审卡节点导致MQ 事件无法正确发出的问题

This commit is contained in:
wangli 2024-08-08 16:27:15 +08:00
parent aba60920c8
commit f5b8f66a39
4 changed files with 34 additions and 22 deletions

View File

@ -7,6 +7,7 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.common.engine.impl.interceptor.CommandContext; 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.RuntimeService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
@ -94,7 +95,7 @@ public class CustomApproveTaskCmd extends AbstractCommand<Void> implements Seria
this.approver = dto.getApprover(); this.approver = dto.getApprover();
this.nextApprover = dto.getNextApprover(); this.nextApprover = dto.getNextApprover();
this.nodeTypes = dto.getNodeTypes(); this.nodeTypes = dto.getNodeTypes();
if (Objects.nonNull(operationDesc)) { if (StringUtils.hasText(operationDesc)) {
this.operationDesc = operationDesc; this.operationDesc = operationDesc;
} }
} }
@ -118,6 +119,7 @@ public class CustomApproveTaskCmd extends AbstractCommand<Void> implements Seria
@Override @Override
public Void execute(CommandContext commandContext) { public Void execute(CommandContext commandContext) {
log.warn("CustomApproveTaskCmd current transaction status :{}", TransactionContextHolder.isTransactionContextActive());
ProcessEngineConfigurationImpl processEngineConfiguration = ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext); CommandContextUtil.getProcessEngineConfiguration(commandContext);
HistoricTaskInstanceQuery taskQuery = HistoricTaskInstanceQuery taskQuery =

View File

@ -5,11 +5,11 @@ import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskCmd;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.impl.cfg.TransactionListener; 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.CommandConfig;
import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.common.engine.impl.interceptor.CommandExecutor; 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 org.flowable.task.service.delegate.DelegateTask;
import java.util.Collections; import java.util.Collections;
@ -35,6 +35,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELAT
@Slf4j @Slf4j
@AllArgsConstructor @AllArgsConstructor
public class AutoPassTransactionListener implements TransactionListener { public class AutoPassTransactionListener implements TransactionListener {
private final ProcessEngineConfiguration processEngineConfiguration;
private final DelegateTask delegateTask; private final DelegateTask delegateTask;
private final String advice; private final String advice;
@ -42,17 +43,15 @@ public class AutoPassTransactionListener implements TransactionListener {
public void execute(CommandContext commandContext) { public void execute(CommandContext commandContext) {
log.info("exec auto pass transaction listener start, processInstanceId: {}, taskId: {}", delegateTask.getProcessInstanceId(), delegateTask.getId()); log.info("exec auto pass transaction listener start, processInstanceId: {}, taskId: {}", delegateTask.getProcessInstanceId(), delegateTask.getId());
// 必须开启新的事务 RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
CommandConfig commandConfig = new CommandConfig(false, TransactionPropagation.REQUIRED); BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(
CommandExecutor commandExecutor = commandContext.getCommandExecutor(); runtimeService.getVariable(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId()));
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(commandExecutor.execute(getVariableCmd())); CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
CommandConfig commandConfig = new CommandConfig().transactionRequiresNew();
commandExecutor.execute(commandConfig, new CustomApproveTaskCmd(delegateTask.getId(), advice, "自动通过", commandExecutor.execute(commandConfig, new CustomApproveTaskCmd(delegateTask.getId(), advice, "自动通过",
Collections.emptyList(), assigner, null)); Collections.emptyList(), assigner, null));
log.info("exec auto pass transaction listener end"); log.info("exec auto pass transaction listener end");
} }
private GetExecutionVariableCmd getVariableCmd() {
return new GetExecutionVariableCmd(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(), false);
}
} }

View File

@ -7,9 +7,11 @@ import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.impl.cfg.TransactionListener; 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.CommandConfig;
import org.flowable.common.engine.impl.interceptor.CommandContext; 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; import org.flowable.task.service.delegate.DelegateTask;
/** /**
@ -26,20 +28,24 @@ import org.flowable.task.service.delegate.DelegateTask;
@Slf4j @Slf4j
@AllArgsConstructor @AllArgsConstructor
public class AutoRejectTransactionListener implements TransactionListener { public class AutoRejectTransactionListener implements TransactionListener {
private final ProcessEngineConfiguration processEngineConfiguration;
private final DelegateTask delegateTask; private final DelegateTask delegateTask;
private final ExtAxHiTaskInstService extAxHiTaskInstService; private final ExtAxHiTaskInstService extAxHiTaskInstService;
private final TransactionState transactionState;
@Override @Override
public void execute(CommandContext commandContext) { public void execute(CommandContext commandContext) {
log.info("exec auto reject transaction listener start, processInstanceId: {}, taskId: {}", log.info("exec auto reject transaction listener start, processInstanceId: {}, taskId: {}, transaction: {}",
delegateTask.getProcessInstanceId(), delegateTask.getId()); delegateTask.getProcessInstanceId(), delegateTask.getId(), transactionState);
// 必须开启新的事务
CommandConfig commandConfig = new CommandConfig(false, TransactionPropagation.REQUIRED); CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
BpmnTaskAuditDTO taskAudit = new BpmnTaskAuditDTO(); BpmnTaskAuditDTO taskAudit = new BpmnTaskAuditDTO();
taskAudit.setTaskId(delegateTask.getId()); taskAudit.setTaskId(delegateTask.getId());
taskAudit.setApprover(new BpmnTaskDelegateAssigner("系统", "system", delegateTask.getTenantId())); 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"); log.info("exec auto reject transaction listener end");
} }

View File

@ -21,6 +21,7 @@ import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask; import org.flowable.bpmn.model.UserTask;
import org.flowable.common.engine.impl.cfg.TransactionState; import org.flowable.common.engine.impl.cfg.TransactionState;
import org.flowable.common.engine.impl.context.Context; 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.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
@ -138,10 +139,10 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
.ifPresent(approverEmptyHandleTypeEnum -> { .ifPresent(approverEmptyHandleTypeEnum -> {
switch (approverEmptyHandleTypeEnum) { switch (approverEmptyHandleTypeEnum) {
case autoPassed: case autoPassed:
autoPass(delegateTask, TransactionState.COMMITTING); autoPass(delegateTask, TransactionState.COMMITTED);
break; break;
case autoRejection: case autoRejection:
autoReject(delegateTask, TransactionState.COMMITTING); autoReject(delegateTask, TransactionState.COMMITTED);
break; break;
case autoSkipped: case autoSkipped:
// autoReject(delegateTask); // autoReject(delegateTask);
@ -165,10 +166,10 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
.ifPresent(approvalMethodEnum -> { .ifPresent(approvalMethodEnum -> {
switch (approvalMethodEnum) { switch (approvalMethodEnum) {
case autoPassed: case autoPassed:
autoPass(delegateTask, TransactionState.COMMITTING); autoPass(delegateTask, TransactionState.COMMITTED);
break; break;
case autoRejection: case autoRejection:
autoReject(delegateTask, TransactionState.COMMITTING); autoReject(delegateTask, TransactionState.COMMITTED);
break; break;
case bizSpecify: case bizSpecify:
break; break;
@ -187,7 +188,9 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
* @param delegateTask 自动操作的任务 * @param delegateTask 自动操作的任务
*/ */
private void autoReject(DelegateTask delegateTask, TransactionState transactionState) { private void autoReject(DelegateTask delegateTask, TransactionState transactionState) {
Context.getTransactionContext().addTransactionListener(transactionState, new AutoRejectTransactionListener(delegateTask, extAxHiTaskInstService)); log.warn("autoReject current transaction status :{}", TransactionContextHolder.isTransactionContextActive());
Context.getTransactionContext().addTransactionListener(transactionState,
new AutoRejectTransactionListener(CommandContextUtil.getProcessEngineConfiguration(), delegateTask, extAxHiTaskInstService, TransactionState.COMMITTED));
} }
/** /**
@ -199,7 +202,9 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
* @param advice 添加自动操作任务时的额外意见 * @param advice 添加自动操作任务时的额外意见
*/ */
private void autoPass(DelegateTask delegateTask, TransactionState transactionState, @Nullable String advice) { private void autoPass(DelegateTask delegateTask, TransactionState transactionState, @Nullable String advice) {
Context.getTransactionContext().addTransactionListener(transactionState, new AutoPassTransactionListener(delegateTask, advice)); log.warn("autoPass current transaction status :{}", TransactionContextHolder.isTransactionContextActive());
Context.getTransactionContext().addTransactionListener(transactionState,
new AutoPassTransactionListener(CommandContextUtil.getProcessEngineConfiguration(), delegateTask, advice));
} }
/** /**