Activiti审批汇总流程.docx
- 文档编号:6263805
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:16
- 大小:342.95KB
Activiti审批汇总流程.docx
《Activiti审批汇总流程.docx》由会员分享,可在线阅读,更多相关《Activiti审批汇总流程.docx(16页珍藏版)》请在冰豆网上搜索。
Activiti审批汇总流程
activiti5学习笔记
(二)伪审批汇总流程
伪汇总审批,就是每一条流程都是独立的,这些独立的流程在走到某个节点的时候,这个节点的审批人可以一次性进行多个任务的审批。
开发环境
JDK1.6
Activiti5.13
Eclipse
MYSQL5
简单起见,这里没有做一个web的项目,只是一个Java程序。
业务场景
预算填报员填写本单位的预算,预算提交到本单位的上级进行审批,上级审批后提交到总公司进行审批。
有多少个预算到了总公司审批人处,就可以对多少的预算同时进行审批,这些流程都是相对独立的。
业务数据存储在单独的报表系统中,节点可以配置打开报表的方式,表单ID,及节点是否汇总审批。
程序模拟
为方便起见
1)所有单位的预算员,审批人,汇总审批人都用三个人,kermit,fozzie,admin直接配在流程图中,实际上kermit和fozzie应会是不同的人,可以动态传入流程启动流程
2)节点是否需要汇总,可以根据在节点的参数isSum来进行动态的判定,是否执行汇总审批,程序只是展示效果,具体没有实现动态的,实现起来并不困难。
3)为了直观,节点参数都使用了中文,实际开发中肯定是编码形式
流程参数说明:
流程实例级别的参数有两个,一个填报期间period一个填报单位fillAccount
节点级别的配置参数有四个,三个固定的报表唯一编码sheetId,报表打开方式fillType和是否汇总isSum,一个在流程实例中动态生成的,当前节点的操作单位accountCode
1.绘制流程图
总体配置
填写预算配置
审批预算配置
汇总审批预算配置
2.测试程序
[java] viewplaincopy
1. rgb(255,255,255)">import java.util.ArrayList; 2.import java.util.HashMap; 3.import java.util.List; 4.import java.util.Map; 5.import org.activiti.engine.FormService; 6.import org.activiti.engine.ProcessEngine; 7.import org.activiti.engine.RepositoryService; 8.import org.activiti.engine.RuntimeService; 9.import org.activiti.engine.TaskService; 10.import org.activiti.engine.form.FormProperty; 11.import org.activiti.engine.task.Task; 12.import org.springframework.context.support.ClassPathXmlApplicationContext; 13.public class TestFormData { 14. /** 15. * @param args 16. */ 17. public static void main(String[] args) { 18. // 加载spring配置 19. ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( 20. "applicationContext.xml"); 21. RuntimeService runtimeService = (RuntimeService) ctx 22. .getBean("runtimeService"); 23. ProcessEngine processEngine = (ProcessEngine) ctx 24. .getBean("processEngine"); 25. FormService formService = (FormService) ctx.getBean("formService"); 26. TaskService taskService = (TaskService) ctx.getBean("taskService"); 27. // 发布流程 28. RepositoryService repositoryService = processEngine 29. .getRepositoryService(); 30. repositoryService.createDeployment() 31. .addClasspathResource("diagrams/formDataTest.bpmn").deploy(); 32. fill(runtimeService, formService, taskService); 33. singleCheck(formService, taskService); 34. sum(taskService, formService); 35. } 36. /** 37. * 填报预算 38. * 39. * @param runtimeService 40. * @param formService 41. * @param taskService 42. */ 43. private static void fill(RuntimeService runtimeService, 44. FormService formService, TaskService taskService) { 45. // 流程开始参数,设置填报期间 46. Map 47. p.put("period", "2013-07"); 48. // 生成3家单位填报 49. for (int i = 0; i < 3; i++) { 50. // 开始流程 51. runtimeService.startProcessInstanceByKey("formDataTest", p); 52. System.out 53. .println("=====================kermit开始填报======================="); 54. // query kermit's tasks; 55. List 56. .taskAssignee("kermit").list(); 57. for (Task task : tasks) { 58. if ("fill".equals(task.getTaskDefinitionKey())) { 59. // 设置填报人单位编码记录在节点 60. taskService.setVariableLocal(task.getId(), "accoutCode", 61. "A110" + i); 62. // 设置该流程实例的填报单位 63. taskService.setVariable(task.getId(), "fillAccount", "A110" 64. + i); 65. Map 66. .getTaskFormData(task.getId()).getFormProperties()); 67. // 获取节点报表打开类型 68. String fillType = (String) propMap.get("fillType") 69. .getValue(); 70. // 获取节点报表表单ID 71. String sheetId = (String) propMap.get("sheetId").getValue(); 72. // 获取节点是否需要汇总参数 73. String isSum = (String) propMap.get("isSum").getValue(); 74. // 获取节点填报单位编码 75. String accoutCode = (String) taskService.getVariableLocal( 76. task.getId(), "accoutCode"); 77. // 获取流程填报单位编码 78. String fillAccount = (String) taskService.getVariable( 79. task.getId(), "fillAccount"); 80. // 获取流程填报期间 81. String period = (String) taskService.getVariable( 82. task.getId(), "period"); 83. // 打印填报信息 84. System.out.println("\t打开报表类型: " + fillType); 85. System.out.println("\t填报表单: " + sheetId); 86. System.out.println("\t填报期间: " + period); 87. System.out.println("\t是否汇总: " + isSum); 88. System.out.println("\t当前节点账号: " + accoutCode); 89. System.out.println("\t提交审批表单填报单位: " + fillAccount); 90. // 节点任务结束 91. taskSplete(task.getId()); 92. System.out 93. .println("=============kermit填写预算单任务已完成====================="); 94. System.out.println(); 95. } 96. } 97. } 98. } 99. /** 100. * 单个审核 101. * 102. * @param formService 103. * @param taskService 104. */ 105. private static void singleCheck(FormService formService, 106. TaskService taskService) { 107. System.out 108. .println("=====================fozzie开始单个审核======================="); 109. // query fozzie's tasks; 110. List 111. .taskAssignee("fozzie") 112. .processVariableValueEquals("period", "2013-07") 113. .processDefinitionKey("formDataTest").list(); 114. int count = 1; 115. for (Task task : tasks2) { 116. if ("check".equals(task.getTaskDefinitionKey())) { 117. System.out.println("\t审核第" + count + "个"); 118. // 设置节点审批人单位编码 119. taskService.setVariableLocal(task.getId(), "accoutCode", 120. "A1199"); 121. Map 122. .getTaskFormData(task.getId()).getFormProperties()); 123. // 获取节点报表打开类型 124. String fillType = (String) propMap.get("fillType").getValue(); 125. // 获取节点报表表单ID 126. String sheetId = (String) propMap.get("sheetId").getValue(); 127. // 获取节点是否需要汇总参数 128. String isSum = (String) propMap.get("isSum").getValue(); 129. // 获取节点填报单位编码 130. String accoutCode = (String) taskService.getVariableLocal( 131. task.getId(), "accoutCode"); 132. // 获取流程填报单位编码 133. String fillAccount = (String) taskService.getVariable( 134. task.getId(), "fillAccount"); 135. // 获取流程填报期间 136. String period = (String) taskService.getVariable(task.getId(), 137. "period"); 138. // 打印填报信息 139. System.out.println("\t报表打开类型: " + fillType); 140. System.out.println("\t填报表单: " + sheetId); 141. System.out.println("\t填报期间: " + period); 142. System.out.println("\t是否汇总: " + isSum); 143. System.out.println("\t当前节点账号: " + accoutCode); 144. System.out.println("\t提交审批表单填报单位: " + fillAccount); 145. // 节点任务结束 146. taskSplete(task.getId()); 147. System.out.println("\t审核第" + count + "个完成"); 148. System.out.println(); 149. count++; 150. } 151. } 152. System.out 153. .println("===================fozzie审批预算单任务已完成==================="); 154. System.out.println(); 155. } 156. /** 157. * 汇总审核 158. * 159. * @param taskService 160. * @param formService 161. */ 162. private static void sum(TaskService taskService, FormService formService) { 163. System.out 164. .println("=======================admin开始汇总审核====================="); 165. List 166. .taskAssignee("admin") 167. .processVariableValueEquals("period", "2013-07") 168. .processDefinitionKey("formDataTest").list(); 169. // 批量审批列表 170. List 171. // 获取节点报表打开类型 172. String fillType = ""; 173. // 获取节点报表表单ID 174. String sheetId = ""; 175. // 获取节点是否需要汇总参数 176. String isSum = ""; 177. // 获取流程填报期间 178. String period = ""; 179. for (Task task : tasks3) { 180. if ("sum".equals(task.getTaskDefinitionKey())) { 181. // 设置节点审
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Activiti 审批 汇总 流程