Activiti入门教程十一(来杯流程喝喝吧)

 

 先来整理下所学的目录结构吧!都是一些基础内容,但也正是这些基础的内容,才能对工作流有一个很好的认识。        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>




你可能感兴趣的:(Activiti入门教程十一(来杯流程喝喝吧))