springboot项目集成activiti工作流引擎
作者:mmseoamin日期:2024-01-19

1、目前我所了解到的activiti工作流想要在项目中使用分为两种:

一、一种较为简单,只需要使用idea的插件来画流程图。(我所使用的的插件是Activiti BPMN visualizer)

springboot项目集成activiti工作流引擎,第1张

二、另一种就是可以使用(在线流程设计器)或者(页面设计器部署到自己项目中)来画流程图

本文是将流程设计页面部署到了项目中

2、先来看看两种方式的效果吧,是否满足您所需要的结果。

一、使用idea的插件来画流程图。

springboot项目集成activiti工作流引擎,第2张

 二、流程设计页面画流程图。 springboot项目集成activiti工作流引擎,第3张

springboot项目集成activiti工作流引擎,第4张

3、那么现在开始实现上面两种流图以及部署启动流程

一、先来第一种方式(比较简单)好入手,对于第一次接触的可以很好的去了解到这个Activiti流程引擎的过程。

首先你需要了解activiti的 25张表(这里就不多说了,网上很好找到)

1)、先导入相关的activiti依赖(一定要注意版本号)


        
            org.activiti
            activiti-spring-boot-starter-basic
            5.22.0
        
        
            org.activiti
            activiti-rest
            5.22.0
        
        
            org.activiti
            activiti-diagram-rest
            5.22.0
        
        
            org.activiti
            activiti-spring
            5.22.0
        
        
            org.activiti
            activiti-json-converter
            5.22.0
        
    

2)、配置相关 activiti.xml 文件连接数据库,用来生成 25张表

        需要注意(xml文件名和xml中id="processEngineConfiguration"不要乱改)



    
    
        
        
        
        
        
        
    
    
        
        
    

3)、配置好需要测试类启动生成表

package com.atxinxin;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.jupiter.api.Test;
/**
 * @author weixinxin 2023-06-28
 **/
public class TestCreateTable {
    @Test
    public void testCreat(){
        ProcessEngineConfiguration processEngineConfiguration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.xml","processEngineConfiguration");
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        System.out.println("processEngine = " + processEngine);
    }
}

 4)、结构目录

springboot项目集成activiti工作流引擎,第5张

 5)、生成的数据表

springboot项目集成activiti工作流引擎,第6张

 6)、接下来需要画流程图,插件开头已经提过,这里不说了,在resources包下创建一个bpmn包用来放流程图的xml文件和bpmn文件,右键新建一个文件例如(activiti.bpmn20.xml)

springboot项目集成activiti工作流引擎,第7张

 7)、右键最下面打开Diagram界面

springboot项目集成activiti工作流引擎,第8张

springboot项目集成activiti工作流引擎,第9张

8)、再空白页面右键有各个事件(介绍三个必不可少的)启动、节点、结束

 springboot项目集成activiti工作流引擎,第10张

 springboot项目集成activiti工作流引擎,第11张

 springboot项目集成activiti工作流引擎,第12张

 10)、到这里会玩的大概也差不多了,怎么画就不详细说了,我这里把我的 evection.bpmn20.xml 放出来。对于png文件把后缀名改成png就可以

springboot项目集成activiti工作流引擎,第13张



  
    
    
    
    
    
    
    
    
    
    
    
  
  
    
      
        
      
      
        
      
      
        
        
      
      
        
      
      
        
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
      
    
  

springboot项目集成activiti工作流引擎,第14张

 这里 创建申请-zhansan  经理-lisi  总经理-wangwu  财务-zhaoliu

11)、部署流程图 部署完成查看act_re_deployment表

@Test
    public void testDeployment(){
        // 1.创建processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RepositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 3.使用service进行流程部署 ,定义流程名,把 bpmn 和 png 部署到数据库
        Deployment deployment = repositoryService.createDeployment()
                .name("出差申请流程")
                .addClasspathResource("bpmn/evection.bpmn20.xml")
                .addClasspathResource("bpmn/evection.png")
                .deploy();
        System.out.println("流程部署id = " + deployment.getId());
        System.out.println("流程部署name = " + deployment.getName());
    }

 12)、启动流程实例

/**
    *@Description 启动流程实例
    *@author weixinxin
    *@Date   17:17 2023/6/28
    **/
    @Test
    public void testStartProcess(){
        // 1. 创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2. 获取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 3. 根据流程定义的id启动流程
        ProcessInstance myEvection = runtimeService.startProcessInstanceByKey("evection");
        System.out.println("流程定义id = " + myEvection.getProcessDefinitionId());
        System.out.println("流程实例id = " + myEvection.getId());
        System.out.println("当前活动id = " + myEvection.getActivityId());
    }

 13)、查询个人待办任务

/**
    *@Description 查询个人待执行的任务
    *@author weixinxin
    *@Date   17:33 2023/6/28
    **/
    @Test
    public void testFindPersonalTaskList(){
        // 1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取taskService
        TaskService taskService = processEngine.getTaskService();
        // 3.根据流程key 和 任务负责人 查询任务
        List list = taskService.createTaskQuery()
                .processDefinitionKey("evection")
                .taskAssignee("zhangsan")
                .list();
        for (Task task : list) {
            System.out.println("流程实例id = " + task.getProcessInstanceId());
            System.out.println("任务id = " + task.getId());
            System.out.println("任务负责人id = " + task.getAssignee());
            System.out.println("任务名称 = " + task.getName());
        }
    }

 14)、完成个人任务,依次完成zhangsan、lisi、wangwu、zhaoliu的任务

/**
    *@Description 完成个人任务
    *@author weixinxin
    *@Date   17:45 2023/6/28
    **/
    @Test
    public void completTesk(){
        // 1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取taskService
        TaskService taskService = processEngine.getTaskService();
        
      /*Task task = taskService.createTaskQuery() //完成zhangsan任务
                .processDefinitionKey("evection")
                .taskAssignee("zhangsan")
                .singleResult();*/
        /*Task task = taskService.createTaskQuery() //完成lisi任务
                .processDefinitionKey("evection")
                .taskAssignee("lisi")
                .singleResult();*/
        /*Task task = taskService.createTaskQuery() //完成wangwu任务
                .processDefinitionKey("evection")
                .taskAssignee("wangwu")
                .singleResult();*/
        Task task = taskService.createTaskQuery() //完成zhaoliu任务
                .processDefinitionKey("evection")
                .taskAssignee("zhaoliu")
                .singleResult();
        System.out.println("流程实例id = " + task.getProcessInstanceId());
        System.out.println("任务id = " + task.getId());
        System.out.println("任务负责人id = " + task.getAssignee());
        System.out.println("任务名称 = " + task.getName());
        taskService.complete(task.getId());
    }

 以上是idea的插件简单的activiti工作引擎的使用过程

 (页面设计器部署到自己项目中)来画流程图。下篇文章http://t.csdnimg.cn/6WvS4