import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 *
 * @author 芋道源码
 */
@RestController
@Component
@Validated
public class BpmProcessInstanceResultEventPublisher {

    @Resource
    private ApplicationEventPublisher publisher;

    @GetMapping("publishEvent")
    public void test(String processDefinitionKey){
        ExecutionEntityImpl executionEntity = new ExecutionEntityImpl();
        executionEntity.setProcessDefinitionKey(processDefinitionKey);
        this.sendProcessInstanceResultEvent(executionEntity);
    }

    /**
     * 发布事件
     * @param event
     */
    public void sendProcessInstanceResultEvent(@Valid ProcessInstance event) {
        publisher.publishEvent(event);
    }

    /**
     * 根据不通的条件进行监听
     * @param event
     */
    @EventListener(condition = "#event.processDefinitionKey=='P_20230329'")
    public void handleEvent(ProcessInstance event){
        System.out.println("1");
    }

    /**
     * 异步监听执行事件
     * 需要在启动类上启用异步执行,添加注解:@EnableAsync
     * @param event
     */
    @Async
    @EventListener(condition = "#event.processDefinitionKey=='P_20230330'")
    public void handleEvent2(ProcessInstance event){
        System.out.println("2");
    }
}

 

最后修改于 2023-04-10 15:08:31
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇