先来整理下所学的目录结构吧!都是一些基础内容,但也正是这些基础的内容,才能对工作流有一个很好的认识。 Activiti入门教程一(初步认识Activiti)
Activiti入门教程二(熟悉数据库设计)
Activiti入门教程三(详解流程引擎配置)
Activiti入门教程四(自定义Activiti命令拦截器)
Activiti入门教程五(详解ProcessEngine的创建)
Activiti入门教程六(详解Activiti中的查询API)
Activiti入门教程七(玩转存储引擎API)
Activiti入门教程八(玩转Task任务API)
Activiti入门教程九(玩转RuntimeService流程控制API)
Activiti入门教程十(详解历史服务组件HistoryService)
以上就是本系列博客目前的全部内容,关于工作流高级的部分,比如事件、任务等内容,会在后续章节中补全。
看了这么多,都是在讲解组件,还没有一个完整的流程,下面来开始一个完整的流程来尝尝鲜吧!
先看一下,整体的流程结构图。
上述就是接下来要分析的整个流程,就是一个公司内部一个接口开发的审批过程,估计大家也看到明白。
废话也不多说了,直接上代码吧!如果把上面的文章看完的话,下面的代码就是So Easy了。
<span style="font-family:Comic Sans MS;font-size:18px;">package com.test; import java.util.HashMap; public class TestInterfaceSystem { // ProcessEngineConfiguration // config=ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault(); ProcessEngine config = ProcessEngines.getDefaultProcessEngine(); /* * 部署流程 */ @Test public void Test1() { RepositoryService repositoryService = config.getRepositoryService(); DeploymentBuilder deploymentBuilder = repositoryService .createDeployment(); deploymentBuilder.addClasspathResource("bpmn/system.bpmn"); Deployment deployment = deploymentBuilder.deploy(); System.out.println(deployment.getId()); System.out.println(deployment.getName()); } /* * 通过流程实例的id,来启动实例 */ @Test public void test2() { RuntimeService runtimeService = config.getRuntimeService(); ProcessInstance processInstance = runtimeService .startProcessInstanceByKey("myProcess"); // System.out.println(processInstance.getActivityId()); } /* * 創建接口的任務操作 */ @Test public void test3() { TaskService taskService = config.getTaskService(); Task task = taskService.createTaskQuery().taskId("104").singleResult(); task.setOwner("李四"); taskService.saveTask(task); System.out.println("--------------------"); } /* * 组员完成任务,需要把接口信息提交给组长,李四提交任务 */ @Test public void test4() { Map<String , Object> map=new HashMap<String , Object>(); map.put("InterfaceName", "Student"); map.put("canshu", "参数有id,并且是int类型,有name,并且是String类型"); map.put("fanhuizhi", "返回信息"); String taskid="104"; TaskService taskService=config.getTaskService(); taskService.complete(taskid,map); System.out.println("组员提交任务"); // -----------------------------------------------李四查看自己已经提交的信息 /* HistoryService historyService = config.getHistoryService(); HistoricTaskInstance historicTaskInstance = historyService .createHistoricTaskInstanceQuery().taskId("8").singleResult(); System.out.println(historicTaskInstance.getExecutionId()); System.out.println(historicTaskInstance.getProcessInstanceId()); Map<String, Object> map = config.getRuntimeService().getVariables( historicTaskInstance.getExecutionId()); for (String key : map.keySet()) { System.out.print("key=" + key); System.out.println("value=" + map.get(key)); } */ System.out.println(); } /* * 组长获取组员传递过来的接口信息,进行查看后,进行判断开始下一步 */ @Test public void test5() { //设置组长的任务中的name名称 TaskService taskService = config.getTaskService(); Task task = taskService.createTaskQuery().taskId("305").singleResult(); task.setOwner("组长一"); taskService.saveTask(task); System.out.println("--------------------"); //组长先查看接口的参数信息 // -----------------------------------------------李四查看自己已经提交的信息 HistoryService historyService = config.getHistoryService(); //根据名称来查看当前的任务信息,因为id在流程中是不确定的 HistoricTaskInstance historicTaskInstance2 = historyService .createHistoricTaskInstanceQuery().taskId("205").singleResult(); HistoricTaskInstance historicTaskInstance=historyService.createHistoricTaskInstanceQuery().taskOwner("组长一").singleResult(); System.out.println(historicTaskInstance.getExecutionId()); System.out.println(historicTaskInstance.getProcessInstanceId()); Map<String, Object> map = config.getRuntimeService().getVariables( historicTaskInstance.getExecutionId()); for (String key : map.keySet()) { System.out.print("key=" + key); System.out.println("value=" + map.get(key)); } System.out.println(); //开始审批接口信息 //组长一首先拒绝,把信息再次打回去,需要添加拒绝的理由 Map<String, Object> canshu=new HashMap<String, Object>(); canshu.put("days", 1); String taskid="305"; taskService.complete(taskid,canshu); System.out.println("组长拒绝任务提交"); } @Test public void test6(){ //把拒绝的信息给组员来看 //设置组长的任务中的name名称 TaskService taskService = config.getTaskService(); Task task = taskService.createTaskQuery().taskId("604").singleResult(); task.setOwner("张三"); taskService.saveTask(task); System.out.println("--------------------"); //根据任务的name属性,来进行判断,是系统提醒,还是需要开发的任务,并且也可以判断是拒绝的信息,还是接口完成后提醒的信息 } @Test public void test7(){ //组员只看一下拒绝的信息,然后直接点击关闭按钮,则此流程进行结束 String taskid="604"; TaskService taskService=config.getTaskService(); taskService.complete(taskid); System.out.println("组员查看拒绝系统消息后,结束此流程"); } //组长二开始审批,可以查看接口任务信息,查看完后,进行拒绝 或者向下分配,拒绝就不多说了,参考上一个组长 //向下分配任务方法 @Test public void test8(){ //首先根据名称来查询需要的处理的任务 //组长同意申请 TaskService taskService=config.getTaskService(); Map<String, Object> canshu=new HashMap<String, Object>(); canshu.put("days", 1); String taskid="405"; taskService.complete(taskid,canshu); System.out.println("组长二同意后,进行分配任务"); //每一个任务,都需需要为任务添加人员名称(在此代码省略……………………) } //组员开发任务 @Test public void test9(){ //组员开发接口,最后提交任务,此时把组员开发完的信息,添加到自己设计的库中,并且此时变量为局部变量 Map<String, Object> kaifa=new HashMap<String, Object>(); kaifa.put("canshuyi", "canshuyi"); kaifa.put("canshuer", "canshuer"); TaskService taskService=config.getTaskService(); taskService.setVariablesLocal("503",kaifa); taskService.complete("503"); System.out.println("组员开发完任务后,把接口的详情,写入到系统参数中区"); } //组员查看别人已经写好的接口信息,这时查看的时候,去变量表中查看, @Test public void test10(){ //组员开发接口,最后提交任务,此时把组员开发完的信息,添加到自己设计的库中,并且此时变量为局部变量 Map<String, Object> kaifa=new HashMap<String, Object>(); kaifa.put("canshuyi", "canshuyi"); kaifa.put("canshuer", "canshuer"); TaskService taskService=config.getTaskService(); taskService.setVariablesLocal("604",kaifa); // taskService.complete("503"); System.out.println("组员开发完任务后,把接口的详情,写入到系统参数中区"); } } </span>