首先导入jar包,这个网上多得是。,然后使用@Autowired完成自动装配
demo前提是已经生成bpmn文件和png流程图。
@Autowired
private ProcessEngine processEngine;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private HistoryService historyService;
**********************************发布流程*************************************
// 1 发布流程
InputStream inputStreamBpmn = this.getClass().getClassLoader().getResourceAsStream("bpmn/demo001.bpmn");
InputStream inputStreamPng = this.getClass().getClassLoader().getResourceAsStream("bpmn/demo001.png");
processEngine.getRepositoryService()
.createDeployment()
.addInputStream("demo001.bpmn", inputStreamBpmn)
.addInputStream("demo001.png", inputStreamPng)
.deploy();
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("demo001");
System.out.println("pid:" + pi.getId());
**************************部署流程***********************************
//部署流程定义方法-1
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment()//创建一个部署对象
.name("流程定义")//添加部署的名称
.addClasspathResource("bpmn/demo001.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("bpmn/demo001.png")//从classpath的资源中加载,一次只能加载一个文件
.deploy();//完成部署
//部署流程定义方法-2
InputStream in = this.getClass().getClassLoader().getResourceAsStream("bpmn/hello.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment()//创建一个部署对象
.name("流程定义")//添加部署的名称
.addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名称:"+deployment.getName());
*****************************查询流程定义*********************************
List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createProcessDefinitionQuery()//创建一个流程定义的查询
*//**指定查询条件,where条件*//*
// .deploymentId(deploymentId)//使用部署对象ID查询
// .processDefinitionId(processDefinitionId)//使用流程定义ID查询
// .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
// .processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询
*//**排序*//*
.orderByProcessDefinitionVersion().asc()//按照版本的升序排列
// .orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列
*//**返回的结果集*//*
.list();//返回一个集合列表,封装流程定义
// .singleResult();//返回惟一结果集
// .count();//返回结果集数量
// .listPage(firstResult, maxResults);//分页查询
if(list!=null && list.size()>0){
for(ProcessDefinition pd:list){
System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:"+pd.getName());//对应hello.bpmn文件中的name属性值
System.out.println("流程定义的key:"+pd.getKey());//对应hello.bpmn文件中的id属性值
System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
System.out.println("资源名称bpmn文件:"+pd.getResourceName());
System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
System.out.println("部署对象ID:"+pd.getDeploymentId());
System.out.println("*********************************************");
}
}
***********************************删除流程定*************************************
//使用部署ID,完成删除,指定部署对象id为2501删除
String deploymentId = "10001";
*//**
* 不带级联的删除
* 只能删除没有启动的流程,如果流程启动,就会抛出异常
*//*
// processEngine.getRepositoryService()//
// .deleteDeployment(deploymentId);
*//**
* 级联删除
* 不管流程是否启动,都能可以删除
*//*
processEngine.getRepositoryService()//
.deleteDeployment(deploymentId, true);
System.out.println("删除成功!");*/
**********************查看流程图(下载流程图)******************
/**将生成图片放到文件夹下*/
String deploymentId = "15001";
//获取图片资源名称
List<String> list = processEngine.getRepositoryService()//
.getDeploymentResourceNames(deploymentId);
//定义图片资源的名称
String resourceName = "";
if (list != null && list.size() > 0) {
for (String name : list) {
if (name.indexOf(".png") >= 0) {
resourceName = name;
}
}
}
//获取图片的输入流
InputStream in = processEngine.getRepositoryService()//
.getResourceAsStream(deploymentId, resourceName);
//将图片生成到F盘的目录下
File file = new File("F:/" + resourceName);
//将输入流的图片写到磁盘
try{
FileUtils.copyInputStreamToFile(in, file);
}catch (Exception e){
}
***************************查询最新版本的流程定义*******************************
List<ProcessDefinition> list = processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
.orderByProcessDefinitionVersion().asc()//使用流程定义的版本升序排列
.list();
*//**
map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
*//*
Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
if (list != null && list.size() > 0) {
for (ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
}
}
List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
if (pdList != null && pdList.size() > 0) {
for (ProcessDefinition pd : pdList) {
System.out.println("流程定义ID:" + pd.getId());//流程定义的key+版本+随机生成数
System.out.println("流程定义的名称:" + pd.getName());//对应hello.bpmn文件中的name属性值
System.out.println("流程定义的key:" + pd.getKey());//对应hello.bpmn文件中的id属性值
System.out.println("流程定义的版本:" + pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
System.out.println("资源名称bpmn文件:" + pd.getResourceName());
System.out.println("资源名称png文件:" + pd.getDiagramResourceName());
System.out.println("部署对象ID:" + pd.getDeploymentId());
System.out.println("*********************************************************************************");
}
}
****************************启动流程实例*******************************
//1、流程定义的key,通过这个key来启动流程实例
String processDefinitionKey = "demo001";
//2、与正在执行的流程实例和执行对象相关的Service
// startProcessInstanceByKey方法还可以设置其他的参数,比如流程变量。
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:"+pi.getId());//流程实例ID
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID
***************************查询当前人的个人任务*********************************
String assignee = "sihai";
List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
.createTaskQuery()//创建任务查询对象
*//**查询条件(where部分)*//*
.taskAssignee(assignee)//指定个人任务查询,指定办理人
// .taskCandidateUser(candidateUser)//组任务的办理人查询
// .processDefinitionId(processDefinitionId)//使用流程定义ID查询
// .processInstanceId(processInstanceId)//使用流程实例ID查询
// .executionId(executionId)//使用执行对象ID查询
*//**排序*//*
.orderByTaskCreateTime().asc()//使用创建时间的升序排列
*//**返回结果集*//*
// .singleResult()//返回惟一结果集
// .count()//返回结果集的数量
// .listPage(firstResult, maxResults);//分页查询
.list();//返回列表
if(list!=null && list.size()>0){
for(Task task:list){
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("********************************************");
}
}
****************************办理个人任务(根据任务ID)*************************
//任务ID,上一步查询得到的。
String taskId = "25005";
processEngine.getTaskService()//与正在执行的任务管理相关的Service
.complete(taskId);
System.out.println("完成任务:任务ID:" + taskId);
System.out.println("********************************************");
***************查询流程状态(判断流程走到哪一个节点)*************************
String processInstanceId = "20005";
ProcessInstance pi = processEngine.getRuntimeService()//表示正在执行的流程实例和执行对象
.createProcessInstanceQuery()//创建流程实例查询
.processInstanceId(processInstanceId)//使用流程实例ID查询
.singleResult();
Task task = processEngine.getTaskService().createTaskQuery().processInstanceId("20005").singleResult();
if (pi == null) {
System.out.println("流程已经结束");
} else {
System.out.println("流程没有结束");
//获取任务状态
System.out.println("节点id:" + task.getTaskDefinitionKey());
System.out.println("审批人:" + task.getAssignee());
}
*************************历史活动查询接口**********************************
String processInstanceId = "25001";
List<HistoricActivityInstance> hais = processEngine.getHistoryService()//
.createHistoricActivityInstanceQuery()
.processInstanceId(processInstanceId)
.list();
for (HistoricActivityInstance hai : hais) {
System.out.println("活动id:" + hai.getTaskId()
+ " 审批人:" + hai.getAssignee()
+ " 任务id:" + hai.getExecutionId());
System.out.println("************************************");
}
/**查询历史流程实例(实例创建后就有历史记录)*/
HistoricProcessInstance hpi = processEngine.getHistoryService()// 与历史数据(历史表)相关的Service
.createHistoricProcessInstanceQuery()// 创建历史流程实例查询
.processInstanceId(processInstanceId)// 使用流程实例ID查询
.orderByProcessInstanceStartTime().asc().singleResult();
System.out.println(hpi.getId() + " " + hpi.getProcessDefinitionId() + " " + hpi.getStartTime() + " "
+ hpi.getEndTime() + " " + hpi.getDurationInMillis());