1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【Activiti工作流】Activiti 并行子流程

【Activiti工作流】Activiti 并行子流程

时间:2018-09-06 21:27:18

相关推荐

【Activiti工作流】Activiti 并行子流程

【Activiti工作流】Activiti 并行子流程

业务场景

流程发起后需要多个部门同时处理,部门数根据业务数据来定。一笔业务申请涉及到多个部门,发起岗提交给各个部门处理人,处理人处理后由各个部门的负责人审核,等待所有部门处理完提交给汇总岗汇总,最后交给汇总岗负责人确认,流程结束。流程图绘制

子流程绘制

部门处理人,取传入的list中的元素部署流程

@Testpublic void deploy() {// 获取仓库服务 :管理流程定义RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deploy = repositoryService.createDeployment()// 创建一个部署的构建器.addClasspathResource("diagrams/WorkPlan.bpmn")// 从类路径中添加资源,一次只能添加一个资源.name("WorkPlan")// 设置部署的名称.category("办公类别")// 设置部署的类别.deploy();System.out.println("部署的id" + deploy.getId());System.out.println("部署的名称" + deploy.getName());}

启动流程

流程正常启动,activiti 会根据传入的集合大小,创建对应个数的子流程。

@Testpublic void startProcess() {// 指定执行我们刚才部署的工作流程String processDefiKey = "WorkPlan";// 业务流水号String businessKey = "SQ1109052000001";// 取运行时服务RuntimeService runtimeService = processEngine.getRuntimeService();// 流程变量Map<String, Object> variables = new HashMap<>();List<String> list = new ArrayList<String>();list.add("张三");list.add("李四");variables.put("userList", list);// 取得流程实例ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefiKey, businessKey, variables);// 通过流程定义的key来执行流程System.out.println("流程实例id:" + pi.getId());// 流程实例idSystem.out.println("流程定义id:" + pi.getProcessDefinitionId());// 输出流程定义的id// 查询所有的子流程List<Task> taskList = processEngine.getTaskService().createTaskQuery().processInstanceId(pi.getProcessInstanceId()).list();variables.clear();variables.put("approve_status", "111");// 完成当前节点for (Task task : taskList) {// 设置当前办理人为发起人processEngine.getTaskService().setAssignee(task.getId(), "发起人");// 完成当前子流程第一个节点processEngine.getTaskService().complete(task.getId(), variables);}}

这里list传入两个值,启动流程后,成功提交到两个节点。

至此可以正常走流程,等待所有子流程处理完,流程才会提交到汇总岗。

其他代码

流程提交的方法

// 完成任务@Testpublic void compileTask() {String taskId = "47532";Task task = processEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult();// taskId:任务idMap<String, Object> variables = new HashMap<>();variables.put("approve_status", "111");processEngine.getTaskService().complete(taskId, variables);Task nexttask = processEngine.getTaskService().createTaskQuery().processInstanceBusinessKey("SQ1109052000001")//业务流水号.executionId(task.getExecutionId())//当前执行ID.singleResult();if (nexttask != null) {switch (nexttask.getName()) {case "部门负责人":processEngine.getTaskService().setAssignee(nexttask.getId(), task.getAssignee() + "负责人");break;case "发起岗":processEngine.getTaskService().setAssignee(nexttask.getId(), task.getAssignee() + "发起岗");break;}}System.out.println(nexttask.getId());System.out.println("当前任务执行完毕" + taskId);}

查询处理人任务的方法

/** 查询当前的个人任务(实际就是查询act_ru_task表) */@Testpublic void findMyPersonalTask() {String assignee = "张三";// 获取事务ServiceTaskService taskService = processEngine.getTaskService();List<Task> taskList = taskService.createTaskQuery()// 创建任务查询对象.taskAssignee(assignee)// 指定个人任务查询,指定办理人.list();// 获取该办理人下的事务列表if (taskList != null && taskList.size() > 0) {for (Task task : taskList) {System.out.println("#############################################");System.out.println("任务ID:" + task.getId());System.out.println("任务名称:" + task.getName());System.out.println("任务的创建时间:" + task.getCreateTime());System.out.println("任务办理人:" + task.getAssignee());System.out.println("流程实例ID:" + task.getProcessInstanceId());System.out.println("执行对象ID:" + task.getExecutionId());System.out.println("流程定义ID:" + task.getProcessDefinitionId());System.out.println("#############################################");}} else {System.out.println(assignee + "没有正在处理的任务");}}

yusys

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。