flowable 全局監聽 監聽流程的啓動和流程的結束

1. Flowable全局監聽配置

package com.gblfy.flowable.config;

import com.gblfy.flowable.listener.global.GlobalProcistEndListener;
import com.gblfy.flowable.listener.global.GlobalProcessStartedListener;
import com.gblfy.flowable.listener.global.GlobalTaskCompletedListener;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;

/**
 * Flowable全局監聽配置
 * 用途:在任務特殊節點或者流程的特殊節點做一些自定義操作
 **/
@Configuration
public class FlowableGlobListenerConfig implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private SpringProcessEngineConfiguration configuration;

    @Autowired
    private GlobalTaskCompletedListener globalTaskCompletedListener;
    @Autowired
    private GlobalProcessStartedListener globalProcessStartedListener;
    @Autowired
    private GlobalProcistEndListener globalProcistEndListener;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        FlowableEventDispatcher dispatcher = configuration.getEventDispatcher();
        //任務創建全局監聽
        dispatcher.addEventListener(globalTaskCompletedListener, FlowableEngineEventType.TASK_COMPLETED);

        //流程開始全局監聽
        dispatcher.addEventListener(globalProcessStartedListener, FlowableEngineEventType.PROCESS_STARTED);

        //流程結束全局監聽
        dispatcher.addEventListener(globalProcistEndListener, FlowableEngineEventType.PROCESS_COMPLETED);
    }

}

2. 流程啓動的監聽器

package com.gblfy.flowable.listener.global;

import org.flowable.engine.delegate.event.impl.FlowableEntityEventImpl;
import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
import org.flowable.engine.delegate.event.FlowableProcessStartedEvent;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 全局的流程啓動的監聽器
 */
@Component
public class GlobalProcessStartedListener extends AbstractFlowableEngineEventListener {
    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    protected void processStarted(FlowableProcessStartedEvent event) {
        logger.info("進入流程開始監聽器------------------------Start---------------------->");

        String eventName = event.getType().name();

        FlowableEntityEventImpl flowableEntityEvent = (FlowableEntityEventImpl) event;
        ExecutionEntityImpl processInstance = (ExecutionEntityImpl) flowableEntityEvent.getEntity();

        Date startTime = processInstance.getStartTime();
        String processDefinitionKey = processInstance.getProcessDefinitionKey();
        String processInstanceId = processInstance.getProcessInstanceId();
        String processInstanceBusinessKey = processInstance.getProcessInstanceBusinessKey();
        int suspensionState = processInstance.getSuspensionState();

        logger.info("流程事件類型->{}", eventName);
        logger.info("流程開始時間->{}", startTime);
        logger.info("流程定義Key->{}", processDefinitionKey);
        logger.info("流程實例ID->{}", processInstanceId);
        logger.info("流程業務key->{}", processInstanceBusinessKey);
        logger.info("流程是否掛起標誌->{}", suspensionState);

        logger.info("流程開始監聽器------------------------End---------------------->");

    }
}

3. 流程結束的監聽器

package com.gblfy.flowable.listener.global;

import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
import org.flowable.engine.delegate.event.impl.FlowableEntityEventImpl;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 流程結束全局監聽器
 */
@Component
public class GlobalProcistEndListener extends AbstractFlowableEngineEventListener {
    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    protected void processCompleted(FlowableEngineEntityEvent event) {
        logger.info("進入流程完成監聽器------------------------Start---------------------->");
        String eventName = event.getType().name();

        FlowableEntityEventImpl flowableEntityEvent = (FlowableEntityEventImpl) event;
        ExecutionEntityImpl processInstance = (ExecutionEntityImpl) flowableEntityEvent.getEntity();

        Date startTime = processInstance.getStartTime();
        String processDefinitionKey = processInstance.getProcessDefinitionKey();
        String processInstanceId = processInstance.getProcessInstanceId();
        String processInstanceBusinessKey = processInstance.getProcessInstanceBusinessKey();
        int suspensionState = processInstance.getSuspensionState();


        logger.info("流程事件類型->{}", eventName);
        logger.info("流程開始時間->{}", startTime);
        logger.info("流程定義Key->{}", processDefinitionKey);
        logger.info("流程實例ID->{}", processInstanceId);
        logger.info("流程業務key->{}", processInstanceBusinessKey);
        logger.info("流程是否掛起標誌->{}", suspensionState);

        logger.info("流程完成監聽器------------------------End---------------------->");
    }
}

注意:FlowableEntityEventImpl類的包路徑 import org.flowable.engine.delegate.event.impl.FlowableEntityEventImpl;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章