新手學習記錄。寫在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