diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java new file mode 100644 index 0000000..0b8a6f4 --- /dev/null +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java @@ -0,0 +1,44 @@ +package org.jeecg.modules.extbpm.listener.task; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.task.service.delegate.DelegateTask; +import org.jeecg.common.util.SpringContextUtils; + +/** + * Save the current task assignee as an execution local variable. + */ +@Slf4j +public class SaveCurrentTaskAssigneeLocalListener implements TaskListener { + private static final long serialVersionUID = 1L; + private static final String VARIABLE_NAME = "subApproveLeader"; + + private static RuntimeService runtimeService; + + static { + runtimeService = SpringContextUtils.getBean(RuntimeService.class); + } + + @Override + public void notify(DelegateTask delegateTask) { + if (delegateTask == null) { + return; + } + String assignee = delegateTask.getAssignee(); + if (StringUtils.isBlank(assignee)) { + log.warn("SaveCurrentTaskAssigneeLocalListener skipped, taskId={}, taskDefinitionKey={}, assignee is blank", + delegateTask.getId(), delegateTask.getTaskDefinitionKey()); + return; + } + if (StringUtils.isBlank(delegateTask.getExecutionId())) { + log.warn("SaveCurrentTaskAssigneeLocalListener skipped, taskId={}, taskDefinitionKey={}, executionId is blank", + delegateTask.getId(), delegateTask.getTaskDefinitionKey()); + return; + } + runtimeService.setVariableLocal(delegateTask.getExecutionId(), VARIABLE_NAME, assignee); + log.info("SaveCurrentTaskAssigneeLocalListener success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}", + delegateTask.getId(), delegateTask.getTaskDefinitionKey(), VARIABLE_NAME, assignee); + } +}