springbootplus 集成Activiti 工作流

1,326 阅读1分钟

maven设置(idea 2020 需要设置)

导入maven工程时大片cannot resolve的问题

IDEA2020.1导入开源Maven项目时,会默认勾选离线模式, 即下图红框. 修改设置, 不要勾选设置离线模式,如图, 重新同步, 导入maven依赖

image.png 设置好后重新导入

image.png

image.png

可参考博客blog.csdn.net/weixin_3997…

pom依赖

`

    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>6.0.0</version>
        <!-- 项目中已经有了mybatis  需要排除 再次引入 版本冲突 -->
        <exclusions>
            <exclusion>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 配置中用自定义主键 需引入-->
    <dependency>
        <groupId>com.fasterxml.uuid</groupId>
        <artifactId>java-uuid-generator</artifactId>
        <version>3.1.4</version>
    </dependency>
    <!--     activiti end   -->
    `
   

springboot启动项设置

// 需要在启动项排除spring SecurityAutoConfiguration 类   有冲突,我项目中未使用
@SpringBootApplication(exclude = org.activiti.spring.boot.SecurityAutoConfiguration.class,
     scanBasePackages = "io.geekidea.springbootplus.activiti")
public class ApplicationTestApplication {
}

config配置


import io.geekidea.springbootplus.framework.activiti.config.CustomActivitiEventListener;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.impl.persistence.StrongUuidGenerator;
import org.activiti.engine.impl.persistence.deploy.Deployer;
import org.activiti.engine.impl.rules.RulesDeployer;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;


@Component
public class ActivitiConfiguration implements ProcessEngineConfigurationConfigurer {

    @Override
    public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
        /* 
     小坑:监听器是自己写构造注入,没有加入spring管理,加入spring后,一些activiti的service 注入不进去 
        */
        TaskService taskService = processEngineConfiguration.getTaskService();
        CustomActivitiEventListener myEventListener = new CustomActivitiEventListener(taskService);
        processEngineConfiguration.setActivityFontName("宋体");
        processEngineConfiguration.setLabelFontName("宋体");
        processEngineConfiguration.setAnnotationFontName("宋体");

        List<Deployer> customPostDeployers = new ArrayList<>();
        customPostDeployers.add(new RulesDeployer());
        processEngineConfiguration.setCustomPostDeployers(customPostDeployers);
        processEngineConfiguration.setIdGenerator(new StrongUuidGenerator());
        List<ActivitiEventListener> eventListeners = new ArrayList<>();

        processEngineConfiguration.setEventListeners(eventListeners);
    }
}

监听类

import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.task.Task;
import org.springframework.util.CollectionUtils;

import java.util.List;

public class CustomActivitiEventListener implements ActivitiEventListener {

    private TaskService taskService;

    public CustomActivitiEventListener(TaskService taskService) {
        this.taskService = taskService;
    }

    /**
     * Called when an event has been fired
     *
     * @param event the event
     */
    @Override
    public void onEvent(ActivitiEvent event) {
        switch (event.getType()) {

            case TASK_COMPLETED:
                System.out.println("有任务执行人。。。");
                System.out.println(event.getProcessInstanceId());
                List<Task> list = taskService.createTaskQuery()
                        .processInstanceId(event.getProcessInstanceId())
                        .active()
                        .list();
                if (!CollectionUtils.isEmpty(list)) {
                    for (Task task : list) {
                        System.out.println(task.getName());
                        System.out.println(task.getAssignee());
                        /* 能查到任务,就能发送通知 */
                    }
                }
                break;
            case TASK_ASSIGNED:
                break;
            case TASK_CREATED:
                break;

            default:
//                System.out.println("Event received: " + event.getType());
        }
    }

    /**
     * @return whether or not the current operation should fail when this listeners execution throws an exception.
     */
    @Override
    public boolean isFailOnException() {
        return false;
    }
}