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 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<Void> 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<Void> implements Seria
@Override
public Void execute(CommandContext commandContext) {
log.warn("CustomApproveTaskCmd current transaction status :{}", TransactionContextHolder.isTransactionContextActive());
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
HistoricTaskInstanceQuery taskQuery =

View File

@ -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);
}
}

View File

@ -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");
}

View File

@ -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<Ta
.ifPresent(approverEmptyHandleTypeEnum -> {
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<Ta
.ifPresent(approvalMethodEnum -> {
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<Ta
* @param delegateTask 自动操作的任务
*/
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 添加自动操作任务时的额外意见
*/
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));
}
/**