一、概述
本文将详细介绍如何在IDEA里使用Activiti插件(actiBPM)绘制流程图,并实现简易流程,内容包含,绘制流程图,部署流程定义,启动流程,查询任务,办理任务,查询流程状态。
二、绘制流程图
- 画流程图
项目工程【resources】目录下,新建【processes】目录,Spring Boot 启动时会加载该目录下.bpmn文件及.png文件,自动部署流程。
依次点击 File --> New -->BPMN File,创建流程文件并绘制流程。
打开开BPMN编辑窗口:点击View–> Tool Windows --> BPMN Editor在这里插入图片描述
- 设置任务办理人
- 设置流程的ID和NAME
- 生成流程png图片
将文件【helloWord.bpmn】重命名为【helloWord.bpmn20.xml】
右键该文件,菜单下面找到 Diagrams -->Show BPMN 2.0 Designer…
三、部署流程定义
application.yml文件添加配置
Spring:
activiti:
database-schema-update: true
history-level: audit
db-history-used: true
async-executor-activate: true
启动项目自动部署流程,成功后可在下面三张表查到数据。
部署阶段影响的表:
SELECT * FROM `act_ge_bytearray`; #二进制文件表
SELECT * FROM `act_re_deployment`;#流程部署表
SELECT * FROM `act_re_procdef`;#流程定义
四、启动流程
根据流程id启动流程
@Resource
private RuntimeService runtimeService;
/**
* 启动流程
*/
@Test
public void startProcess(){
runtimeService.startProcessInstanceByKey("helloWord");
System.out.println("启动成功");
}
五、查询任务
根据办理人查询其任务,根据查询结果:taskId,完成任务。
@Resource
private TaskService taskService;
/**
* 查询任务
*/
@Test
public void queryTask(){
String assignee="刘亦菲";
// String assignee="于帅";
List<Task> list= taskService.createTaskQuery().taskAssignee(assignee).list();
list.parallelStream().forEach(task->{
System.out.println("任务id:"+task.getId());
System.out.println("流程实例id:"+task.getProcessInstanceId());
System.out.println("执行实例id:"+task.getExecutionId());
System.out.println("流程定义id:"+task.getProcessDefinitionId());
System.out.println("名称:"+task.getName());
System.out.println("办理人:"+task.getAssignee());
System.out.println("------------");
});
}
控制台打印:
任务id:35002
流程实例id:22508
执行实例id:22509
流程定义id:helloWord:2:22507
名称:求婚申请
办理人:刘亦菲
------------
六、办理任务
根据上步查询的带办理任务Id完成任务
@Resource
private TaskService taskService;
/**
* 处理任务
*/
@Test
public void completeTask(){
String taskId="10002";
taskService.complete(taskId);
}
五、查询流程状态
判断流程是否结束
@Resource
private RuntimeService runtimeService;
/**
* 查询流程状态
*/
@Test
public void completeTassk(){
String processInstanceId="22508";
ProcessInstance processInstance =runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
if(processInstance==null){
System.out.println("刘亦菲同意嫁给我了!马上举办婚礼!");
return;
}
System.out.println("我还没同意她嫁给我");
}
控制台打印,流程已完成,运行时表的数据会清除。
刘亦菲同意嫁给我了!马上举办婚礼!