1、Jbpm4.0工作流的例子 借款申请 流程
关键字: jbpm4 例子 借款申请 流程 工作流
正在学习jbpm4, 于是就写了个例子
这个例子的流程就用借款申请的流程, 因为学jbpm3的时候对这个例子比较熟悉.
流程图如下:
流程定义:
Xml代码
1.
2.
2、
4. 3、"部门经理审批">
12.
4、 5、"150,286,100,52" name="总经理审批">
26. 6、end" />
32. 8、 expr="#{money>=5000?'>=5000元':'<5000元'}"
g="301,205,48,48" name="金额判断">
10、name="完成拨款" to="end" />
11、 package loan; 11. 12. import java.util.HashMap; 13. import java.util.List; 14. import java.util.Map; 15. 16. import org.jbpm.api.ProcessInstance; 17. import org.jbpm.api.history.HistoryProcessInstance; 18. import org.jbpm.api.task.Task; 19. import org.jbpm.test.J
12、bpmTestCase; 20. 21. /** 22. * @author yeyong 23. */ 24. public class LoanTest extends JbpmTestCase { 25. String deploymentId; 26. 27. @Override 28. protected void setUp() throws Exception { 29. super.setUp(); 30. deploymentId = repositoryServi
13、ce.createDeployment().addResourceFromClasspath("loan/loan.jpdl.xml") 31. .deploy(); 32. } 33. 34. @Override 35. protected void tearDown() throws Exception { 36. repositoryService.deleteDeploymentCascade(deploymentId); 37. super.tearDown(); 38. }
14、 39. 40. /** 41. * 测试用例 42. *
43. * 张三 申请4000元, 部门经理驳回 44. */ 45. public void test4000ButManagerDisapprove() { 46. String curUser = "Zhang San"; 47. ProcessInstance pi = startLoanProcess(curUser); 48. String piId = pi.getId(); 49
15、 filloutApplication(piId, curUser, 4000); 50. 51. curUser = "manager"; 52. managerApprove(piId, curUser, false, "最近资金紧张,暂不同意."); // 部门经理不同意 53. 54. pi = executionService.findProcessInstanceById(piId); 55. assertNull(pi); // 流程结束 56. 57. Histor
16、yProcessInstance hpi = getHistoryProcessInstanceByProcessInstanceId(piId); 58. assertEquals(hpi.getState(), "cancel"); // 流程结束状态是cancel , 取消 59. } 60. 61. /** 62. * 测试用例 63. *
64. * 李四 申请4000元,部门经理同意 65. */ 66. public void test4000AndManagerAp
17、prove() { 67. String curUser = "Li si"; 68. ProcessInstance pi = startLoanProcess(curUser); 69. String piId = pi.getId(); 70. filloutApplication(piId, curUser, 4000); 71. 72. curUser = "manager"; 73. managerApprove(piId, curUser, true, "同意."); // 部
18、门经理同意 74. 75. pi = executionService.findProcessInstanceById(piId); 76. assertNotNull(pi); // 流程未结束 77. assertNotNull(pi.findActiveExecutionIn("财务拨款")); // 财务拨款处于活动状态 78. 79. curUser = "finance"; 80. earmark(piId, curUser, piId); // 拨款 81. 82.
19、 pi = executionService.findProcessInstanceById(piId); 83. assertNull(pi); //流程结束 84. 85. HistoryProcessInstance hpi = getHistoryProcessInstanceByProcessInstanceId(piId); 86. assertEquals(hpi.getState(), "ended"); // 流程结束状态是ended, 正常结束 87. } 88. 89. /**
20、 90. * 测试用例 91. *
92. * 王五 申请6000元,部门经理驳回 93. */ 94. public void test6000ButManagerDisapprove() { 95. String curUser = "Wang Wu"; 96. ProcessInstance pi = startLoanProcess(curUser); 97. String piId = pi.getId(); 98. filloutApplication(pi
21、Id, curUser, 6000); 99. 100. curUser = "manager"; 101. managerApprove(piId, curUser, false, "最近资金紧张,暂不同意."); 102. 103. pi = executionService.findProcessInstanceById(piId); 104. assertNull(pi); 105. 106. HistoryProcessInstance hpi = getHistoryProces
22、sInstanceByProcessInstanceId(piId); 107. assertEquals(hpi.getState(), "cancel"); 108. } 109. 110. /** 111. * 测试用例 112. *
113. * 赵六 申请6000元,部门经理同意,总经理驳回 114. */ 115. public void test6000AndManagerApproveButCeoDisapprove() { 116. String
23、curUser = "Zhao Liu"; 117. ProcessInstance pi = startLoanProcess(curUser); 118. String piId = pi.getId(); 119. filloutApplication(piId, curUser, 6000); 120. 121. curUser = "manager"; 122. managerApprove(piId, curUser, true, "同意. manager"); 123. pi
24、 executionService.findProcessInstanceById(piId); 124. assertNotNull(pi); 125. assertNotNull(pi.findActiveExecutionIn("总经理审批")); 126. 127. curUser = "ceo"; 128. ceoApprove(piId, curUser, false, "不同意.等资金周转过来再说吧"); 129. 130. pi = executionService.findPro
25、cessInstanceById(piId); 131. assertNull(pi); 132. 133. HistoryProcessInstance hpi = getHistoryProcessInstanceByProcessInstanceId(piId); 134. assertEquals(hpi.getState(), "cancel"); 135. } 136. 137. /** 138. * 测试用例 139. *
140. * 孙七 申请6
26、000元,部门经理同意,总经理也同意 141. */ 142. public void test6000AndManagerApproveAdnCeoApprove() { 143. String curUser = "Sun Qi"; 144. ProcessInstance pi = startLoanProcess(curUser); 145. String piId = pi.getId(); 146. filloutApplication(piId, curUser, 6000); 147.
27、 148. curUser = "manager"; 149. managerApprove(piId, curUser, true, "同意. manager"); 150. pi = executionService.findProcessInstanceById(piId); 151. assertNotNull(pi); 152. assertNotNull(pi.findActiveExecutionIn("总经理审批")); 153. 154. curUser = "ceo";
28、 155. ceoApprove(piId, curUser, true, "同意. ceo"); 156. pi = executionService.findProcessInstanceById(piId); 157. 158. assertNotNull(pi); 159. assertNotNull(pi.findActiveExecutionIn("财务拨款")); 160. 161. curUser = "finance"; 162. earmark(piId, curU
29、ser, piId); 163. pi = executionService.findProcessInstanceById(piId); 164. assertNull(pi); 165. 166. HistoryProcessInstance hpi = 167. getHistoryProcessInstanceByProcessInstanceId(piId); 168. assertEquals(hpi.getState(), "ended"); 169.
30、 }
170.
171. /**
172. * 用户发起借款申请
173. *
174. * @param userId
175. * @return
176. */
177. protected ProcessInstance startLoanProcess(String user) {
178. Map
31、oposer", user); 180. return executionService.startProcessInstanceByKey("loan", variables); 181. } 182. 183. /** 184. * 填写借款申请 185. * 186. * @param piId 187. * @param user 188. * @param money 189. */ 190. protected void filloutApplicat
32、ion(String piId, String user, double money) {
191. List
33、 break;
197. }
198. }
199. assertNotNull(filloutTask);
200. Map
34、ask.getId()); 204. } 205. 206. /** 207. * 经理审批 208. * 209. * @param piId 210. * @param user 211. * @param isPass 212. * @param comment 213. */ 214. protected void managerApprove(String piId, String user, boolean isPass, String comment)
35、{
215. List
36、 223. assertNotNull(approveTask); 224. 225. taskService.addTaskComment(approveTask.getId(), comment); 226. taskSpleteTask(approveTask.getId(), 227. isPass ? "部门经理审批通过" : "部门经理驳回"); 228. 229. } 230. 231. /** 232. * 总经理审批 233.
37、
234. * @param piId
235. * @param user
236. * @param isPass
237. * @param comment
238. */
239. protected void ceoApprove(String piId, String user, boolean isPass, String comment) {
240. List
38、Task approveTask = null; 242. for (Task task : tasks) { 243. if (task.getExecutionId().equals(piId)) { 244. approveTask = task; 245. break; 246. } 247. } 248. assertNotNull(approveTask); 249. 250. taskService.addTaskComm
39、ent(approveTask.getId(), comment); 251. taskSpleteTask(approveTask.getId(), 252. isPass ? "总经理审批通过" : "总经理驳回"); 253. } 254. 255. /** 256. * 拨款 257. * 258. * @param piId 259. * @param user 260. * @param isPass 261. * @para
40、m comment
262. */
263. /**
264. * @param piId
265. * @param user
266. * @param comment
267. */
268. protected void earmark(String piId, String user, String comment) {
269. List
41、kask = null; 271. for (Task task : tasks) { 272. if (task.getExecutionId().equals(piId)) { 273. earmarkask = task; 274. break; 275. } 276. } 277. assertNotNull(earmarkask); 278. 279. taskService.addTaskComment(earmarkask
42、getId(), comment); 280. 281. // HistoryProcessInstance hpi = 282. getHistoryProcessInstanceByProcessInstanceId(piId,"填写借款申请"); 283. 284. String proposer =(String) executionService.getVariable(piId,"proposer"); 285. taskSpleteTask(earmarkask.getId()
43、); 286. 287. // 通知借款申请人 288. System.err.println(">> to " + proposer +", 财务科已经给你拨款."); 289. } 290. 291. public HistoryProcessInstance 292. getHistoryProcessInstanceByProcessInstanceId(String piId) { 293. return historyService.createHistoryProcessInstanceQuery(). 294. processInstanceId(piId).uniqueResult(); 295. }






