update - 调整发起人的自动通过的执行逻辑,未测试

This commit is contained in:
wangli 2024-04-28 22:13:25 +08:00
parent b02d59382a
commit 2abd8050ad
4 changed files with 106 additions and 5 deletions

View File

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

View File

@ -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 {

View File

@ -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<Ta
log.info("AutoOperatorEventListener#onCreated...{}", delegateTask.getTaskDefinitionKey());
if (Objects.equals(NODE_STARTER.getType(), delegateTask.getTaskDefinitionKey())) {
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
JobService jobService = processEngineConfiguration.getJobServiceConfiguration().getJobService();
JobEntity job = jobService.createJob();
// 这里的 executionId 可为 null
job.setExecutionId(delegateTask.getExecutionId());
job.setProcessInstanceId(delegateTask.getProcessInstanceId());
job.setProcessDefinitionId(delegateTask.getProcessDefinitionId());
job.setElementId(delegateTask.getTaskDefinitionKey());
job.setElementName(delegateTask.getName());
job.setJobHandlerType(AsyncApproveTaskJobHandler.TYPE);
job.setTenantId(delegateTask.getTenantId());
BpmnTaskAuditDTO dto = new BpmnTaskAuditDTO();
dto.setTaskId(delegateTask.getId());
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());
}
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;
}

View File

@ -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())