您的位置:首页 > 其它

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

2015-10-04 17:52 381 查看
 

 先来整理下所学的目录结构吧!都是一些基础内容,但也正是这些基础的内容,才能对工作流有一个很好的认识。        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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: