fix - 完善自动驳回功能处理

This commit is contained in:
wangli 2024-08-08 18:52:44 +08:00
parent 182174e70d
commit 90a3c0cf71
4 changed files with 21 additions and 12 deletions

View File

@ -50,8 +50,7 @@ public class CustomRejectionTaskAsyncCmd extends AbstractCommand<String> impleme
validTask(historicTaskInstance, (TaskEntity) task, dto.getApprover(), null); validTask(historicTaskInstance, (TaskEntity) task, dto.getApprover(), null);
startAsync(processEngineConfiguration, task); return startAsync(processEngineConfiguration, task);
return null;
} }
private String startAsync(ProcessEngineConfigurationImpl processEngineConfiguration, Task task) { private String startAsync(ProcessEngineConfigurationImpl processEngineConfiguration, Task task) {

View File

@ -6,6 +6,7 @@ import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskAsyncCmd;
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.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.RuntimeService; import org.flowable.engine.RuntimeService;
@ -17,6 +18,7 @@ import org.flowable.task.service.delegate.DelegateTask;
import java.util.Collections; import java.util.Collections;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO;
import static org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG;
/** /**
* 自动过审的事务监听器 * 自动过审的事务监听器
@ -37,7 +39,6 @@ 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 SpringProcessEngineConfiguration springProcessEngineConfiguration;
private final DelegateTask delegateTask; private final DelegateTask delegateTask;
private final String advice; private final String advice;
@ -45,21 +46,25 @@ 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());
SpringProcessEngineConfiguration springProcessEngineConfiguration = (SpringProcessEngineConfiguration) commandContext
.getEngineConfigurations().get(KEY_PROCESS_ENGINE_CONFIG);
RuntimeService runtimeService = springProcessEngineConfiguration.getRuntimeService(); RuntimeService runtimeService = springProcessEngineConfiguration.getRuntimeService();
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible( BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(
runtimeService.getVariable(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId())); runtimeService.getVariable(delegateTask.getProcessInstanceId(), INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId()));
CommandConfig commandConfig = new CommandConfig().transactionRequired();
CommandExecutor commandExecutor = springProcessEngineConfiguration.getCommandExecutor(); CommandExecutor commandExecutor = springProcessEngineConfiguration.getCommandExecutor();
BpmnTaskAuditDTO pass = new BpmnTaskAuditDTO(); BpmnTaskAuditDTO pass = new BpmnTaskAuditDTO();
pass.setTaskId(delegateTask.getId()); pass.setTaskId(delegateTask.getId());
pass.setAdvice(advice); pass.setAdvice(advice);
pass.setApprover(assigner); pass.setApprover(assigner);
pass.setOperationDesc("自动通过"); pass.setOperationDesc("自动通过");
String jobId = commandExecutor.execute(new CustomApproveTaskAsyncCmd(pass)); String jobId = commandExecutor.execute(commandConfig, new CustomApproveTaskAsyncCmd(pass));
// 重置任务因为上面的 cmd 和这个 cmd lock 对象不一致 // 重置任务因为上面的 cmd 和这个 cmd lock 对象不一致
JobServiceConfiguration jobServiceConfiguration = springProcessEngineConfiguration.getJobServiceConfiguration(); JobServiceConfiguration jobServiceConfiguration = springProcessEngineConfiguration.getJobServiceConfiguration();
commandExecutor.execute(new ResetExpiredJobsCmd(Collections.singletonList(jobId), jobServiceConfiguration.getJobEntityManager(), jobServiceConfiguration)); commandExecutor.execute(commandConfig, new ResetExpiredJobsCmd(Collections.singletonList(jobId), jobServiceConfiguration.getJobEntityManager(), jobServiceConfiguration));
log.info("exec auto pass transaction listener end"); log.info("exec auto pass transaction listener end");
} }

View File

@ -3,10 +3,10 @@ package cn.axzo.workflow.core.engine.tx.listener;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.engine.cmd.CustomRejectionTaskAsyncCmd; import cn.axzo.workflow.core.engine.cmd.CustomRejectionTaskAsyncCmd;
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.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.job.service.JobServiceConfiguration; import org.flowable.job.service.JobServiceConfiguration;
@ -16,6 +16,8 @@ import org.flowable.task.service.delegate.DelegateTask;
import java.util.Collections; import java.util.Collections;
import static org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG;
/** /**
* 自动拒绝的事务监听 * 自动拒绝的事务监听
* *
@ -30,25 +32,28 @@ import java.util.Collections;
@Slf4j @Slf4j
@AllArgsConstructor @AllArgsConstructor
public class AutoRejectTransactionListener implements TransactionListener { public class AutoRejectTransactionListener implements TransactionListener {
private final SpringProcessEngineConfiguration springProcessEngineConfiguration;
private final DelegateTask delegateTask; private final DelegateTask delegateTask;
private final ExtAxHiTaskInstService extAxHiTaskInstService;
@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: {}",
delegateTask.getProcessInstanceId(), delegateTask.getId()); delegateTask.getProcessInstanceId(), delegateTask.getId());
SpringProcessEngineConfiguration springProcessEngineConfiguration = (SpringProcessEngineConfiguration) commandContext
.getEngineConfigurations().get(KEY_PROCESS_ENGINE_CONFIG);
CommandConfig commandConfig = new CommandConfig().transactionRequired();
CommandExecutor commandExecutor = springProcessEngineConfiguration.getCommandExecutor(); CommandExecutor commandExecutor = springProcessEngineConfiguration.getCommandExecutor();
BpmnTaskAuditDTO reject = new BpmnTaskAuditDTO(); BpmnTaskAuditDTO reject = new BpmnTaskAuditDTO();
reject.setTaskId(delegateTask.getId()); reject.setTaskId(delegateTask.getId());
reject.setApprover(new BpmnTaskDelegateAssigner("系统", "system", delegateTask.getTenantId())); reject.setApprover(new BpmnTaskDelegateAssigner("系统", "system", delegateTask.getTenantId()));
reject.setOperationDesc("自动驳回"); reject.setOperationDesc("自动驳回");
String jobId = commandExecutor.execute(new CustomRejectionTaskAsyncCmd(reject)); String jobId = commandExecutor.execute(commandConfig, new CustomRejectionTaskAsyncCmd(reject));
// 重置任务因为上面的 cmd 和这个 cmd lock 对象不一致 // 重置任务因为上面的 cmd 和这个 cmd lock 对象不一致
JobServiceConfiguration jobServiceConfiguration = springProcessEngineConfiguration.getJobServiceConfiguration(); JobServiceConfiguration jobServiceConfiguration = springProcessEngineConfiguration.getJobServiceConfiguration();
commandExecutor.execute(new ResetExpiredJobsCmd(Collections.singletonList(jobId), jobServiceConfiguration.getJobEntityManager(), jobServiceConfiguration)); commandExecutor.execute(commandConfig,
new ResetExpiredJobsCmd(Collections.singletonList(jobId), jobServiceConfiguration.getJobEntityManager(), jobServiceConfiguration));
log.info("exec auto reject transaction listener end"); log.info("exec auto reject transaction listener end");
} }

View File

@ -190,7 +190,7 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
*/ */
private void autoReject(DelegateTask delegateTask, TransactionState transactionState) { private void autoReject(DelegateTask delegateTask, TransactionState transactionState) {
Context.getTransactionContext().addTransactionListener(transactionState, Context.getTransactionContext().addTransactionListener(transactionState,
new AutoRejectTransactionListener(processEngineConfiguration, delegateTask, extAxHiTaskInstService)); new AutoRejectTransactionListener(delegateTask));
} }
/** /**
@ -203,7 +203,7 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
*/ */
private void autoPass(DelegateTask delegateTask, TransactionState transactionState, @Nullable String advice) { private void autoPass(DelegateTask delegateTask, TransactionState transactionState, @Nullable String advice) {
Context.getTransactionContext().addTransactionListener(transactionState, Context.getTransactionContext().addTransactionListener(transactionState,
new AutoPassTransactionListener(processEngineConfiguration, delegateTask, advice)); new AutoPassTransactionListener(delegateTask, advice));
} }
/** /**