1、目前我所了解到的activiti工作流想要在项目中使用分为两种:
一、一种较为简单,只需要使用idea的插件来画流程图。(我所使用的的插件是Activiti BPMN visualizer)
二、另一种就是可以使用(在线流程设计器)或者(页面设计器部署到自己项目中)来画流程图。
本文是将流程设计页面部署到了项目中
2、先来看看两种方式的效果吧,是否满足您所需要的结果。
一、使用idea的插件来画流程图。
二、流程设计页面画流程图。
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)、结构目录
5)、生成的数据表
6)、接下来需要画流程图,插件开头已经提过,这里不说了,在resources包下创建一个bpmn包用来放流程图的xml文件和bpmn文件,右键新建一个文件例如(activiti.bpmn20.xml)
7)、右键最下面打开Diagram界面
8)、再空白页面右键有各个事件(介绍三个必不可少的)启动、节点、结束
10)、到这里会玩的大概也差不多了,怎么画就不详细说了,我这里把我的 evection.bpmn20.xml 放出来。对于png文件把后缀名改成png就可以
这里 创建申请-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.csdn.cn/r5XmO