update - 调整工作流的 Activity 事件整体的实现逻辑,由于多实例是多人审批,会意外的发送多次 Activity_start 及其他的Activity 事件,不符合预期
This commit is contained in:
parent
899978f843
commit
ec9986a6c9
@ -1,8 +1,15 @@
|
|||||||
package cn.axzo.workflow.core.converter.json;
|
package cn.axzo.workflow.core.converter.json;
|
||||||
|
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonNode;
|
import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonNode;
|
||||||
|
import org.flowable.bpmn.model.FlowableListener;
|
||||||
import org.flowable.bpmn.model.Process;
|
import org.flowable.bpmn.model.Process;
|
||||||
import org.flowable.bpmn.model.ReceiveTask;
|
import org.flowable.bpmn.model.ReceiveTask;
|
||||||
|
import org.flowable.engine.delegate.BaseExecutionListener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.flowable.bpmn.model.ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接收任务节点
|
* 接收任务节点
|
||||||
@ -19,6 +26,32 @@ public class ReceiveTaskJsonConverter extends AbstractBpmnJsonConverter<ReceiveT
|
|||||||
receiveTask.setId(node.getId());
|
receiveTask.setId(node.getId());
|
||||||
receiveTask.setName(node.getName());
|
receiveTask.setName(node.getName());
|
||||||
|
|
||||||
|
setExecutionListeners(receiveTask);
|
||||||
return receiveTask;
|
return receiveTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void setExecutionListeners(ReceiveTask receiveTask) {
|
||||||
|
|
||||||
|
List<FlowableListener> executionListeners = new ArrayList<>();
|
||||||
|
// 设置执行监听
|
||||||
|
FlowableListener executionListener = new FlowableListener();
|
||||||
|
executionListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
||||||
|
executionListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
executionListener.setImplementation("${engineAssigneeExecutionStartListener}");
|
||||||
|
executionListeners.add(executionListener);
|
||||||
|
|
||||||
|
FlowableListener activityStartListener = new FlowableListener();
|
||||||
|
activityStartListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
||||||
|
activityStartListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
activityStartListener.setImplementation("${engineActivityStartEventListener}");
|
||||||
|
executionListeners.add(activityStartListener);
|
||||||
|
|
||||||
|
FlowableListener activityEndListener = new FlowableListener();
|
||||||
|
activityEndListener.setEvent(BaseExecutionListener.EVENTNAME_END);
|
||||||
|
activityEndListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
activityEndListener.setImplementation("${engineActivityEndEventListener}");
|
||||||
|
executionListeners.add(activityEndListener);
|
||||||
|
|
||||||
|
receiveTask.setExecutionListeners(executionListeners);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,15 @@
|
|||||||
package cn.axzo.workflow.core.converter.json;
|
package cn.axzo.workflow.core.converter.json;
|
||||||
|
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonNode;
|
import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonNode;
|
||||||
|
import org.flowable.bpmn.model.FlowableListener;
|
||||||
import org.flowable.bpmn.model.Process;
|
import org.flowable.bpmn.model.Process;
|
||||||
import org.flowable.bpmn.model.ServiceTask;
|
import org.flowable.bpmn.model.ServiceTask;
|
||||||
|
import org.flowable.engine.delegate.BaseExecutionListener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.flowable.bpmn.model.ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务任务节点
|
* 服务任务节点
|
||||||
@ -16,6 +23,33 @@ public class ServiceTaskJsonConverter extends AbstractBpmnJsonConverter<ServiceT
|
|||||||
ServiceTask serviceTask = new ServiceTask();
|
ServiceTask serviceTask = new ServiceTask();
|
||||||
serviceTask.setId(node.getId());
|
serviceTask.setId(node.getId());
|
||||||
serviceTask.setName(node.getName());
|
serviceTask.setName(node.getName());
|
||||||
|
|
||||||
|
setExecutionListeners(serviceTask);
|
||||||
return serviceTask;
|
return serviceTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void setExecutionListeners(ServiceTask serviceTask) {
|
||||||
|
|
||||||
|
List<FlowableListener> executionListeners = new ArrayList<>();
|
||||||
|
// 设置执行监听
|
||||||
|
FlowableListener executionListener = new FlowableListener();
|
||||||
|
executionListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
||||||
|
executionListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
executionListener.setImplementation("${engineAssigneeExecutionStartListener}");
|
||||||
|
executionListeners.add(executionListener);
|
||||||
|
|
||||||
|
FlowableListener activityStartListener = new FlowableListener();
|
||||||
|
activityStartListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
||||||
|
activityStartListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
activityStartListener.setImplementation("${engineActivityStartEventListener}");
|
||||||
|
executionListeners.add(activityStartListener);
|
||||||
|
|
||||||
|
FlowableListener activityEndListener = new FlowableListener();
|
||||||
|
activityEndListener.setEvent(BaseExecutionListener.EVENTNAME_END);
|
||||||
|
activityEndListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
activityEndListener.setImplementation("${engineActivityEndEventListener}");
|
||||||
|
executionListeners.add(activityEndListener);
|
||||||
|
|
||||||
|
serviceTask.setExecutionListeners(executionListeners);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -241,9 +241,21 @@ public class UserTaskJsonConverter extends AbstractBpmnJsonConverter<UserTask> {
|
|||||||
FlowableListener executionListener = new FlowableListener();
|
FlowableListener executionListener = new FlowableListener();
|
||||||
executionListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
executionListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
||||||
executionListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
executionListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
executionListener.setImplementation("${engineExecutionStartListener}");
|
executionListener.setImplementation("${engineAssigneeExecutionStartListener}");
|
||||||
executionListeners.add(executionListener);
|
executionListeners.add(executionListener);
|
||||||
|
|
||||||
|
FlowableListener activityStartListener = new FlowableListener();
|
||||||
|
activityStartListener.setEvent(BaseExecutionListener.EVENTNAME_START);
|
||||||
|
activityStartListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
activityStartListener.setImplementation("${engineActivityStartEventListener}");
|
||||||
|
executionListeners.add(activityStartListener);
|
||||||
|
|
||||||
|
FlowableListener activityEndListener = new FlowableListener();
|
||||||
|
activityEndListener.setEvent(BaseExecutionListener.EVENTNAME_END);
|
||||||
|
activityEndListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
|
activityEndListener.setImplementation("${engineActivityEndEventListener}");
|
||||||
|
executionListeners.add(activityEndListener);
|
||||||
|
|
||||||
userTask.setExecutionListeners(executionListeners);
|
userTask.setExecutionListeners(executionListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package cn.axzo.workflow.core.engine.cmd;
|
package cn.axzo.workflow.core.engine.cmd;
|
||||||
|
|
||||||
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.listener.EngineExecutionStartListener;
|
import cn.axzo.workflow.core.engine.listener.EngineAssigneeExecutionStartListener;
|
||||||
import org.flowable.bpmn.model.UserTask;
|
import org.flowable.bpmn.model.UserTask;
|
||||||
import org.flowable.common.engine.impl.interceptor.Command;
|
import org.flowable.common.engine.impl.interceptor.Command;
|
||||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||||
@ -25,13 +25,13 @@ import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApprove
|
|||||||
public class CustomForecastUserTaskAssigneeCmd implements Command<List<BpmnTaskDelegateAssigner>>, Serializable {
|
public class CustomForecastUserTaskAssigneeCmd implements Command<List<BpmnTaskDelegateAssigner>>, Serializable {
|
||||||
private final String processInstanceId;
|
private final String processInstanceId;
|
||||||
private final UserTask userTask;
|
private final UserTask userTask;
|
||||||
private final EngineExecutionStartListener engineExecutionStartListener;
|
private final EngineAssigneeExecutionStartListener engineAssigneeExecutionStartListener;
|
||||||
|
|
||||||
public CustomForecastUserTaskAssigneeCmd(String processInstanceId, UserTask userTask,
|
public CustomForecastUserTaskAssigneeCmd(String processInstanceId, UserTask userTask,
|
||||||
EngineExecutionStartListener engineExecutionStartListener) {
|
EngineAssigneeExecutionStartListener engineAssigneeExecutionStartListener) {
|
||||||
this.processInstanceId = processInstanceId;
|
this.processInstanceId = processInstanceId;
|
||||||
this.userTask = userTask;
|
this.userTask = userTask;
|
||||||
this.engineExecutionStartListener = engineExecutionStartListener;
|
this.engineAssigneeExecutionStartListener = engineAssigneeExecutionStartListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -42,7 +42,7 @@ public class CustomForecastUserTaskAssigneeCmd implements Command<List<BpmnTaskD
|
|||||||
processEngineConfiguration.getRuntimeService().createExecutionQuery().processInstanceId(processInstanceId).list();
|
processEngineConfiguration.getRuntimeService().createExecutionQuery().processInstanceId(processInstanceId).list();
|
||||||
List<BpmnTaskDelegateAssigner> forecastAssigners = new ArrayList<>();
|
List<BpmnTaskDelegateAssigner> forecastAssigners = new ArrayList<>();
|
||||||
getApproverSpecify(userTask).ifPresent(specify -> {
|
getApproverSpecify(userTask).ifPresent(specify -> {
|
||||||
forecastAssigners.addAll(engineExecutionStartListener.approverSelect(specify.getType(), userTask,
|
forecastAssigners.addAll(engineAssigneeExecutionStartListener.approverSelect(specify.getType(), userTask,
|
||||||
(DelegateExecution) list.get(0), false));
|
(DelegateExecution) list.get(0), false));
|
||||||
});
|
});
|
||||||
return forecastAssigners;
|
return forecastAssigners;
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
package cn.axzo.workflow.core.engine.listener;
|
||||||
|
|
||||||
|
import cn.axzo.framework.jackson.utility.JSON;
|
||||||
|
import cn.axzo.workflow.core.listener.BpmnActivityEventListener;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.flowable.engine.delegate.DelegateExecution;
|
||||||
|
import org.flowable.engine.delegate.ExecutionListener;
|
||||||
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动节点结束事件监听器
|
||||||
|
*
|
||||||
|
* @author wangli
|
||||||
|
* @since 2023/12/21 16:55
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class EngineActivityEndEventListener implements ExecutionListener {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
ObjectProvider<List<BpmnActivityEventListener>> activityListeners;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notify(DelegateExecution execution) {
|
||||||
|
String currentActivityId = execution.getCurrentActivityId();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<BpmnActivityEventListener> getOrderedListeners() {
|
||||||
|
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
||||||
|
activityListeners.ifAvailable(orderListeners::addAll);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Order Lists: {}", JSON.toJSONString(orderListeners));
|
||||||
|
}
|
||||||
|
return orderListeners;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,109 +0,0 @@
|
|||||||
package cn.axzo.workflow.core.engine.listener;
|
|
||||||
|
|
||||||
import cn.axzo.framework.jackson.utility.JSON;
|
|
||||||
import cn.axzo.workflow.core.listener.BpmnActivityEventListener;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
|
|
||||||
import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
|
|
||||||
import org.flowable.engine.delegate.event.FlowableActivityCancelledEvent;
|
|
||||||
import org.flowable.engine.delegate.event.FlowableActivityEvent;
|
|
||||||
import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityCancelledEvent;
|
|
||||||
import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityCompletedEvent;
|
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.ACTIVITY_CANCELLED;
|
|
||||||
import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.ACTIVITY_COMPLETED;
|
|
||||||
import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.ACTIVITY_STARTED;
|
|
||||||
import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_CANCELLED;
|
|
||||||
import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_COMPLETED;
|
|
||||||
import static org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_COMPLETED_WITH_CONDITION;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 活动节点完成事件
|
|
||||||
*
|
|
||||||
* @author wangli
|
|
||||||
* @since 2023/7/24 17:36
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@Component
|
|
||||||
public class EngineActivityEventListener extends AbstractFlowableEngineEventListener {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
ObjectProvider<List<BpmnActivityEventListener>> activityListeners;
|
|
||||||
|
|
||||||
public static final Set<FlowableEngineEventType> PROCESS_INSTANCE_EVENTS =
|
|
||||||
ImmutableSet.<FlowableEngineEventType>builder()
|
|
||||||
.add(ACTIVITY_STARTED)
|
|
||||||
.add(ACTIVITY_COMPLETED)
|
|
||||||
.add(MULTI_INSTANCE_ACTIVITY_COMPLETED_WITH_CONDITION)
|
|
||||||
.add(MULTI_INSTANCE_ACTIVITY_COMPLETED)
|
|
||||||
.add(MULTI_INSTANCE_ACTIVITY_CANCELLED)
|
|
||||||
.add(ACTIVITY_CANCELLED)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
public EngineActivityEventListener() {
|
|
||||||
super(PROCESS_INSTANCE_EVENTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void activityStarted(FlowableActivityEvent event) {
|
|
||||||
log.info("activityStarted: activityId: {} activityName: {}", event.getActivityId(), event.getActivityName());
|
|
||||||
getOrderedListeners().forEach(i -> i.onStarted(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过?
|
|
||||||
*
|
|
||||||
* @param event
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void activityCompleted(FlowableActivityEvent event) {
|
|
||||||
log.info("activityCompleted: activityId: {} activityName: {}", event.getActivityId(), event.getActivityName());
|
|
||||||
getOrderedListeners().forEach(i -> i.onCompleted(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 多实例 UserTask 条件通过
|
|
||||||
*
|
|
||||||
* @param event
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void multiInstanceActivityCompletedWithCondition(FlowableMultiInstanceActivityCompletedEvent event) {
|
|
||||||
log.info("multiInstanceActivityCompletedWithCondition: activityId: {} activityName: {}", event.getActivityId(), event.getActivityName());
|
|
||||||
getOrderedListeners().forEach(i -> i.onCompleted(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void multiInstanceActivityCompleted(FlowableMultiInstanceActivityCompletedEvent event) {
|
|
||||||
log.info("multiInstanceActivityCompleted: activityId: {} activityName: {}", event.getActivityId(), event.getActivityName());
|
|
||||||
getOrderedListeners().forEach(i -> i.onCompleted(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void activityCancelled(FlowableActivityCancelledEvent event) {
|
|
||||||
log.info("activityCancelled: activityId: {} activityName: {}", event.getActivityId(), event.getActivityName());
|
|
||||||
getOrderedListeners().forEach(i -> i.onCancelled(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void multiInstanceActivityCancelled(FlowableMultiInstanceActivityCancelledEvent event) {
|
|
||||||
log.info("multiInstanceActivityCancelled: activityId: {} activityName: {}", event.getActivityId(), event.getActivityName());
|
|
||||||
getOrderedListeners().forEach(i -> i.onCancelled(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<BpmnActivityEventListener> getOrderedListeners() {
|
|
||||||
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
|
||||||
activityListeners.ifAvailable(orderListeners::addAll);
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Order Lists: {}", JSON.toJSONString(orderListeners));
|
|
||||||
}
|
|
||||||
return orderListeners;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
package cn.axzo.workflow.core.engine.listener;
|
||||||
|
|
||||||
|
import cn.axzo.framework.jackson.utility.JSON;
|
||||||
|
import cn.axzo.workflow.core.listener.BpmnActivityEventListener;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.flowable.engine.delegate.DelegateExecution;
|
||||||
|
import org.flowable.engine.delegate.ExecutionListener;
|
||||||
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动节点开始事件监听器
|
||||||
|
*
|
||||||
|
* @author wangli
|
||||||
|
* @since 2023/12/21 16:55
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class EngineActivityStartEventListener implements ExecutionListener {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
ObjectProvider<List<BpmnActivityEventListener>> activityListeners;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notify(DelegateExecution execution) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<BpmnActivityEventListener> getOrderedListeners() {
|
||||||
|
List<BpmnActivityEventListener> orderListeners = new ArrayList<>();
|
||||||
|
activityListeners.ifAvailable(orderListeners::addAll);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Order Lists: {}", JSON.toJSONString(orderListeners));
|
||||||
|
}
|
||||||
|
return orderListeners;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -53,7 +53,7 @@ import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getProcess
|
|||||||
@Component
|
@Component
|
||||||
@RefreshScope
|
@RefreshScope
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class EngineExecutionStartListener implements ExecutionListener {
|
public class EngineAssigneeExecutionStartListener implements ExecutionListener {
|
||||||
@Resource
|
@Resource
|
||||||
private ObjectProvider<BpmnTaskDelegate> bpmTaskDelegate;
|
private ObjectProvider<BpmnTaskDelegate> bpmTaskDelegate;
|
||||||
@Resource
|
@Resource
|
||||||
@ -4,7 +4,7 @@ import org.flowable.common.engine.api.delegate.event.FlowableEngineEvent;
|
|||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户审批任务节点完成事件, 供外部引入 jar 包方式使用的钩子
|
* 用户活动节点的事件, 供外部引入 jar 包方式使用的钩子
|
||||||
* <p>
|
* <p>
|
||||||
* 与 BpmTaskEventListener 的区别: 一个 Activity 可以有多个 Task, Task 有多个实例; 而本接口是针对这个节点的, 就算该审批节点是多人审批, 只有一次该节点的生命周期事件
|
* 与 BpmTaskEventListener 的区别: 一个 Activity 可以有多个 Task, Task 有多个实例; 而本接口是针对这个节点的, 就算该审批节点是多人审批, 只有一次该节点的生命周期事件
|
||||||
* <p>
|
* <p>
|
||||||
@ -16,23 +16,23 @@ import org.springframework.core.Ordered;
|
|||||||
public interface BpmnActivityEventListener extends Ordered {
|
public interface BpmnActivityEventListener extends Ordered {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点已启动
|
* 节点已 TODO
|
||||||
*
|
*
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
default void onStarted(FlowableEngineEvent event) {}
|
default void onStart(FlowableEngineEvent event) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点已完成
|
* 节点已完成
|
||||||
*
|
*
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
default void onCompleted(FlowableEngineEvent event) {}
|
default void onTake(FlowableEngineEvent event) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点已取消
|
* 节点已取消
|
||||||
*
|
*
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
default void onCancelled(FlowableEngineEvent event) {}
|
default void onEnd(FlowableEngineEvent event) {}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
|
|||||||
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
|
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
|
||||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
||||||
import cn.axzo.workflow.core.engine.cmd.CustomForecastUserTaskAssigneeCmd;
|
import cn.axzo.workflow.core.engine.cmd.CustomForecastUserTaskAssigneeCmd;
|
||||||
import cn.axzo.workflow.core.engine.listener.EngineExecutionStartListener;
|
import cn.axzo.workflow.core.engine.listener.EngineAssigneeExecutionStartListener;
|
||||||
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
|
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
|
||||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricProcessInstanceConverter;
|
import cn.axzo.workflow.core.service.converter.BpmnHistoricProcessInstanceConverter;
|
||||||
@ -118,7 +118,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
@Resource
|
@Resource
|
||||||
private FlowNodeForecastService forecastService;
|
private FlowNodeForecastService forecastService;
|
||||||
@Resource
|
@Resource
|
||||||
private EngineExecutionStartListener engineExecutionStartListener;
|
private EngineAssigneeExecutionStartListener engineAssigneeExecutionStartListener;
|
||||||
@Resource
|
@Resource
|
||||||
private SpringProcessEngineConfiguration springProcessEngineConfiguration;
|
private SpringProcessEngineConfiguration springProcessEngineConfiguration;
|
||||||
|
|
||||||
@ -598,7 +598,8 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
}
|
}
|
||||||
// 推测当前节点的审批人
|
// 推测当前节点的审批人
|
||||||
List<BpmnTaskDelegateAssigner> forecastAssigners = springProcessEngineConfiguration.getCommandExecutor()
|
List<BpmnTaskDelegateAssigner> forecastAssigners = springProcessEngineConfiguration.getCommandExecutor()
|
||||||
.execute(new CustomForecastUserTaskAssigneeCmd(processInstanceId, userTask, engineExecutionStartListener));
|
.execute(new CustomForecastUserTaskAssigneeCmd(processInstanceId, userTask,
|
||||||
|
engineAssigneeExecutionStartListener));
|
||||||
node.setForecastAssigners(forecastAssigners);
|
node.setForecastAssigners(forecastAssigners);
|
||||||
} else if (i instanceof ReceiveTask) {
|
} else if (i instanceof ReceiveTask) {
|
||||||
ReceiveTask receiveTask = (ReceiveTask) i;
|
ReceiveTask receiveTask = (ReceiveTask) i;
|
||||||
|
|||||||
@ -58,7 +58,7 @@ public class RocketMqBpmActivityEventListener implements BpmnActivityEventListen
|
|||||||
private Boolean sendMQ;
|
private Boolean sendMQ;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStarted(FlowableEngineEvent event) {
|
public void onStart(FlowableEngineEvent event) {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("RocketMqBpmActivityEventListener#onStarted...activityId: {}", ((FlowableActivityEvent) event).getActivityId());
|
log.debug("RocketMqBpmActivityEventListener#onStarted...activityId: {}", ((FlowableActivityEvent) event).getActivityId());
|
||||||
}
|
}
|
||||||
@ -87,7 +87,7 @@ public class RocketMqBpmActivityEventListener implements BpmnActivityEventListen
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCompleted(FlowableEngineEvent event) {
|
public void onTake(FlowableEngineEvent event) {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("RocketMqBpmActivityEventListener#onCompleted...activityId: {}", ((FlowableActivityEvent) event).getActivityId());
|
log.debug("RocketMqBpmActivityEventListener#onCompleted...activityId: {}", ((FlowableActivityEvent) event).getActivityId());
|
||||||
}
|
}
|
||||||
@ -119,7 +119,7 @@ public class RocketMqBpmActivityEventListener implements BpmnActivityEventListen
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCancelled(FlowableEngineEvent event) {
|
public void onEnd(FlowableEngineEvent event) {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("RocketMqMessagePushEventListener#onCancelled...activityId: {}", ((FlowableActivityEvent) event).getActivityId());
|
log.debug("RocketMqMessagePushEventListener#onCancelled...activityId: {}", ((FlowableActivityEvent) event).getActivityId());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user