diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/InitiatorAsyncApprovedListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/InitiatorAsyncApprovedListener.java new file mode 100644 index 000000000..268b817f9 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/InitiatorAsyncApprovedListener.java @@ -0,0 +1,65 @@ +package cn.axzo.workflow.core.engine.listener; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.impl.cfg.TransactionListener; +import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.common.engine.impl.interceptor.CommandContextCloseListener; +import org.flowable.common.engine.impl.interceptor.CommandExecutor; +import org.flowable.job.service.impl.asyncexecutor.AsyncExecutor; + +/** + * TODO + * + * @author wangli + * @since 2024/4/28 21:59 + */ +@Slf4j +public class InitiatorAsyncApprovedListener implements TransactionListener, CommandContextCloseListener { + protected AsyncExecutor asyncExecutor; + protected CommandExecutor commandExecutor; + + public InitiatorAsyncApprovedListener(AsyncExecutor asyncExecutor) { + this.asyncExecutor = asyncExecutor; + } + + public InitiatorAsyncApprovedListener(AsyncExecutor asyncExecutor, CommandExecutor commandExecutor) { + this(asyncExecutor); + this.commandExecutor = commandExecutor; + } + + @Override + public void execute(CommandContext commandContext) { + // TODO + asyncExecutor.executeAsyncJob(); + } + + @Override + public void closing(CommandContext commandContext) { + + } + + @Override + public void afterSessionsFlush(CommandContext commandContext) { + + } + + @Override + public void closed(CommandContext commandContext) { + execute(commandContext); + } + + @Override + public void closeFailure(CommandContext commandContext) { + + } + + @Override + public Integer order() { + return 10; + } + + @Override + public boolean multipleAllowed() { + return true; + } +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/InternalExtAxTaskInstEvent_lo_Listener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/InternalExtAxTaskInstEvent_lo_Listener.java index a92041eb8..94fff4f25 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/InternalExtAxTaskInstEvent_lo_Listener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/InternalExtAxTaskInstEvent_lo_Listener.java @@ -52,9 +52,8 @@ public class InternalExtAxTaskInstEvent_lo_Listener extends AbstractBpmnEventLis INTERNAL_INITIATOR))); if (Objects.isNull(assigner)) { // 兼容历史数据 - assigner = - BpmnTaskDelegateAssigner.toObjectCompatible(runtimeService.getVariable(delegateTask.getProcessInstanceId(), - OLD_INTERNAL_INITIATOR)); + assigner = getContext().getInitiator(() -> + BpmnTaskDelegateAssigner.toObjectCompatible(runtimeService.getVariable(delegateTask.getProcessInstanceId(), OLD_INTERNAL_INITIATOR))); } assignee = assigner.buildAssigneeId(); } else { 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 0c0891fdc..2e14d285f 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 @@ -1,15 +1,18 @@ package cn.axzo.workflow.server.controller.listener.task; import cn.axzo.workflow.common.enums.BpmnFlowNodeType; +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.ExtHiTaskSearchDTO; import cn.axzo.workflow.core.common.context.TaskOperationContext; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; import cn.axzo.workflow.core.engine.cmd.CustomApproveTaskCmd; +import cn.axzo.workflow.core.engine.job.AsyncApproveTaskJobHandler; import cn.axzo.workflow.core.listener.AbstractBpmnEventListener; import cn.axzo.workflow.core.listener.BpmnTaskEventListener; import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst; import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; +import cn.hutool.json.JSONUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.FlowElement; @@ -23,6 +26,8 @@ import org.flowable.engine.TaskService; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntity; import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.job.service.JobService; +import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.service.delegate.DelegateTask; import org.springframework.core.Ordered; @@ -81,15 +86,47 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR))); if (Objects.nonNull(initiator)) { delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(), initiator.toJson()); } + dto.setApprover(initiator); + // 携带自定义的数据 + job.setCustomValues(JSONUtil.toJsonStr(dto)); + + // 创建异步任务并调度 + jobService.createAsyncJob(job, false); + jobService.scheduleAsyncJob(job); + + + + /*BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR))); + if (Objects.nonNull(initiator)) { + delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(), + initiator.toJson()); + } + delegateTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + delegateTask.getId(), APPROVED.getStatus()); // 直接完成 - taskService.complete(delegateTask.getId(), runtimeService.getVariables(delegateTask.getExecutionId())); + taskService.complete(delegateTask.getId(), runtimeService.getVariables(delegateTask.getExecutionId()));*/ return; } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/RocketMqBpmnTaskEvent_102_Listener.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/RocketMqBpmnTaskEvent_102_Listener.java index 134bbd4c7..03b5f1e47 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/RocketMqBpmnTaskEvent_102_Listener.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/RocketMqBpmnTaskEvent_102_Listener.java @@ -99,7 +99,7 @@ public class RocketMqBpmnTaskEvent_102_Listener extends AbstractBpmnEventListene } public ProcessTaskDTO build(DelegateTask delegateTask, ProcessTaskEventEnum type) { - Process mainProcess = repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId()).getMainProcess(); + Process mainProcess = getContext().getProcess(() -> repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId()).getMainProcess()); ProcessTaskDTO dto = new ProcessTaskDTO() .setType(type) .setCategory(getDeployment(delegateTask.getProcessInstanceId()).getCategory())