新手学习记录。写在springboot test 示例 示例代码地址看结尾。后面有带页面的示例。
SpringBoot Test无页面简单示例
员工请假流程
- 员工发起申请,附带请假信息(请假几天)
- 单位领导审批,如果通过,交付经理审批,不通过,重新申请
- 经理审批,如果请假天数不超过三天,经理1审批
- 如果请假天数在3-5天,经理3审批
- 超过5天,经理2审批
- 经理审批通过,流程结束,经理审批不通过,员工重新申请
流程图
代码
activiti.cfg.xml为必须文件且数据库连接正确,否则ProcessEngines.getDefaultProcessEngine()会报空指针。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
复制代码
<?xml version= "1.0" encoding= "UTF-8" ?>
<beans xmlns= "http://www.springframework.org/schema/beans"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" >
<!-- Activity 的引擎配置管理器 -->
<bean id= "processEngineConfiguration" class = "org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration" >
<!-- 指定数据源 -->
<property name= "jdbcUrl" value= "jdbc:mysql://localhost:3306/activity?serverTimezone=UTC&characterEncoding=UTF-8" />
<property name= "jdbcDriver" value= "com.mysql.cj.jdbc.Driver" />
<property name= "jdbcUsername" value= "root" />
<property name= "jdbcPassword" value= "111111" />
<property name= "databaseSchemaUpdate" value= "true" />
</bean>
</beans>
|
测试类
三个方法可合并在一起运行,拆开是自己为了方便查看代码步骤。
1. 先运行deploymentProcess()部署一个流程。
2. 运行startLeaveProcess() 开启流程。
3. 运行getTaskAndComplete()走流程。循环一次性整个流程走完。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
package com.blackcat.activity;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.Map;
/**
* @Title 申请测试
* @Description
* @author zhanghui
* @date 2020年07月17日 15:06
* @version V1.0
* @see
* @link https://blog.csdn.net/fly_fly_fly_pig/article/details/81700820 参考该博客
* @since V1.0
*/
@SpringBootTest
class LeaveProcessTest {
// 获取默认的流程引擎
private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 实例流程id,用来记录流程,以便获取当前任务
private String processInstanceId;
// 部署一个流程
@Test
void deploymentProcess(){
RepositoryService rs = engine.getRepositoryService();
Deployment deploy = rs.createDeployment().addClasspathResource( "processes/LeaveProcess.bpmn" ).deploy();
rs.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
}
// 开启流程
@Test
void startLeaveProcess(){
// 获取runtimeservice对象
RuntimeService runtimeService = engine.getRuntimeService();
// 根据流程key值,获取流程
String processKey = "leaveProcess" ;
// 将信息加入map,以便传入流程中
Map<String, Object> variables = new HashMap<>();
variables.put( "employeeName" , "张三" );
variables.put( "day" , 10 );
// 开启流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey, variables);
// 将得到的实例流程id值赋给之前设置的变量
processInstanceId = processInstance.getId();
System.out.println( "流程开启成功.......实例流程id:" +processInstanceId);
}
// 开始走流程
// 1.获取当前任务,并且完成
@Test
void getTaskAndComplete(){
// processInstanceId = "12501";
// 获取taskservice实例
TaskService taskService = engine.getTaskService();
// 开始进行流程
while (engine.getRuntimeService()
.createProcessInstanceQuery() // 获取查询对象
.processInstanceId(processInstanceId) // 根据id查询流程实例
.singleResult() // 获取查询结果,如果为空,说明这个流程已经执行完毕,否则,获取任务并执行
!= null ){
Task task = taskService.createTaskQuery() // 创建查询对象
.processInstanceId(processInstanceId) // 通过流程实例id来查询当前任务
.singleResult(); // 获取单个查询结果
String taskName = task.getName();
if (taskName.equals( "发起申请" )){ // 职员节点
completeEmployeeTask(task);
} else if (taskName.equals( "领导审批" )){ // 领导节点
completeLeaderTask(task);
} else { // 经理节点
completeJingliTask(task);
}
}
System.out.println( "审核结束.........." );
}
// 职员提交申请
void completeEmployeeTask(Task task){
// 获取任务id
String taskId = task.getId();
// 完成任务
engine.getTaskService().complete(taskId);
System.out.println( "职员已经提交申请......." );
}
// 领导审批
void completeLeaderTask(Task task){
// 获取任务id
String taskId = task.getId();
// 领导意见
Map<String, Object> variables = new HashMap<>();
variables.put( "leaderResult" , 1 );
// 完成任务
engine.getTaskService().complete(taskId, variables);
System.out.println( "领导审核完毕........" );
}
// 经理审批
void completeJingliTask(Task task){
// 获取任务id
String taskId = task.getId();
String name = task.getName();
// 经理意见
// 领导意见和经理意见,用0和1表示,0表示未通过,1表示通过
// 任一环节设置不同意,陷入死循环
Map<String, Object> variables = new HashMap<>();
variables.put( "result" , 1 );
// 完成任务
engine.getTaskService().complete(taskId, variables);
System.out.println( "经理审核完毕........,审核经理:" +name);
}
|
参考博客:https://blog.csdn.net/fly_fly_fly_pig/article/details/81700820
源码地址:https://gitee.com/kylin_lawliet/springboot-demos/tree/master/springboot-activity3
SpringBoot含页面完整示例
流程方面与上方示例代码差不多,加了页面与mybatis plus。就不贴上代码,直接放示例代码吧。
流程图
效果图
源码地址:https://gitee.com/kylin_lawliet/springboot-demos/tree/master/springboot-activity4
到此这篇关于springboot2.2 集成 activity6实现请假完整流程示例详解的文章就介绍到这了,更多相关springboot2.2集成activity6请假内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/Kylin-lawliet/p/13389375.html