工作流API使用Demo
package activity.demo.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
public class ActivitiApiTest {
ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定义 方式一:加载单个的流程定义文件 方式二:加载zip文件(建议)
*
* @throws Exception
*
*/
@Test
public void testDeployProcess() throws Exception {
DeploymentBuilder createDeployment = pe.getRepositoryService()
.createDeployment();
// 方式一:加载单个的流程定义文件
/*
* createDeployment.addClasspathResource("bxlc.bpmn");
* createDeployment.addClasspathResource("bxlc.png"); Deployment
* deployment = createDeployment.deploy();
* System.out.println(deployment.getId());
*/
// 方式二:加载zip文件(建议)----zip文件在类路径下
/*
* ZipInputStream zipInputStream = new ZipInputStream(this.getClass()
* .getClassLoader().getResourceAsStream("process.zip"));
*/
// 方式二:加载zip文件(建议)----zip文件不在类路径下
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(
new File("e:\\process.zip")));
createDeployment.addZipInputStream(zipInputStream);
createDeployment.name("报销流程");// 指定部署的名称
Deployment deployment = createDeployment.deploy();
System.out.println(deployment.getId());
}
/**
* 查询部署列表
*/
@Test
public void testQueryDeploymentInfo() {
// 部署查询对象----查询部署表act_re_deployment
DeploymentQuery query = pe.getRepositoryService()
.createDeploymentQuery();
query.orderByDeploymenTime().desc();
List<Deployment> list = query.list();
for (Deployment deployment : list) {
String id = deployment.getId();
String name = deployment.getName();
Date deploymentTime = deployment.getDeploymentTime();
System.out.println(id + " " + name + " " + deploymentTime);
}
}
/**
* 删除部署信息
*/
@Test
public void testDeleteDeploymentData() {
String deploymentId = "301";
// 参数一:部署id
// 参数二:是否级联删除
pe.getRepositoryService().deleteDeployment(deploymentId, true);
}
/**
* 删除流程定义
*/
@Test
public void testDeleteProcessDefinition() {
String deploymentId = "101";
pe.getRepositoryService().deleteDeployment(deploymentId, true);
}
/**
* 查询流程定义列表(最新版本的流程定义列表)
*/
@Test
public void testQueryProcessDefinition() {
ProcessDefinitionQuery query = pe.getRepositoryService()
.createProcessDefinitionQuery();
query.latestVersion();
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId() + " " + pd.getVersion());
}
}
/**
* 查询流程定义列表(最新版本的流程定义列表)
*/
@Test
public void testQueryProcessDefinitionList() {
ProcessDefinitionQuery query = pe.getRepositoryService()
.createProcessDefinitionQuery();
// 根据version升序
query.orderByProcessDefinitionVersion().asc();
List<ProcessDefinition> list = query.list();
Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
for (ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
System.out.println(pd.getId() + " " + pd.getVersion());
}
List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(
map.values());
System.out.println(map);
}
/**
* 查询一次部署对应的流程定义文件名称和输入流
*
* @throws Exception
*/
@Test
public void testQueryDeloymentFileAndInputstream() throws Exception {
String deploymentId = "701";
List<String> names = pe.getRepositoryService()
.getDeploymentResourceNames(deploymentId);
for (String name : names) {
System.out.println(name);
InputStream in = pe.getRepositoryService().getResourceAsStream(
deploymentId, name);
File destFile = new File("e:\\" + name);// 目标文件
FileUtils.copyInputStreamToFile(in, destFile);
in.close();
}
}
/**
* 查询一次部署对应的png图片的输入流
*
* @throws Exception
*/
@Test
public void testGetDeploymentPic() throws Exception {
String processDefinitionId = "bxlc:1:704";
InputStream pngIn = pe.getRepositoryService().getProcessDiagram(
processDefinitionId);
File destFile = new File("e:\\my.png");// 目标文件
FileUtils.copyInputStreamToFile(pngIn, destFile);
}
/**
* 启动流程实例 方式一:根据流程定义的id启动 方式二:根据流程定义的key启动(建议)----可以自动选择最新版本的流程定义
*/
@Test
public void testStartProcessInstance() {
// 方式一:根据流程定义的id启动
// String processDefinitionId = "bxlc:1:704";
// ProcessInstance pi =
// pe.getRuntimeService().startProcessInstanceById(processDefinitionId
// );
// System.out.println(pi.getId());
// 方式二:根据流程定义的key启动(建议)----可以自动选择最新版本的流程定义
String processDefinitionKey = "bxlc";
ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(
processDefinitionKey);
System.out.println(pi.getId());
}
/**
* 查询流程实例列表
*/
@Test
public void testQueryProcessInstanceList() {
// 流程实例查询对象,查询执行表act_ru_execution
ProcessInstanceQuery query = pe.getRuntimeService()
.createProcessInstanceQuery();
List<ProcessInstance> list = query.list();
for (ProcessInstance pi : list) {
System.out.println(pi.getActivityId() + " " + pi.getId() + " "
+ pi.getProcessDefinitionId());
}
}
/**
* 删除流程实例
*/
@Test
public void testDeleteProcessInstance() {
String processInstanceId = "1201";// 流程实例id
String deleteReason = "不请假了";// 删除原因
pe.getRuntimeService().deleteProcessInstance(processInstanceId,
deleteReason);
}
/**
* 查询任务列表
*/
@Test
public void testQueryTaskList(){
TaskQuery query = pe.getTaskService().createTaskQuery();
String assignee = "王五";
query.taskAssignee(assignee);
query.orderByTaskCreateTime().desc();
List<Task> list = query.listPage(0, 6);//分页查询
System.out.println(list.size());
for (Task task : list) {
System.out.println(task.getId());
}
}
/**
* 办理任务
*/
@Test
public void testExecuteTask(){
String taskId = "1502";
pe.getTaskService().complete(taskId );
}
}