package com.rainyhon;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.zip.ZipInputStream;
@SpringBootTest
class ActivitiApplicationTests {
@Resource
private RepositoryService repositoryService;
@Resource
private RuntimeService runtimeService;
@Resource
private HistoryService historyService;
@Resource
private TaskService taskService;
//流程的部署,获取部署id,name等信息
//用bpmn文件完成部署
@Test
public void createProcess1() {
String path = "process/MyProcess.bpmn";//bpmn文件路径
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource(path)
// .addClasspathResource(".png")//可以部署对应的png图片
.name("报销流程")
.deploy();
System.out.println("部署id:"+deployment.getId());
System.out.println("部署名字:"+deployment.getName());
}
//用zip文件完成部署
@Test
public void createProcess2() throws Exception{
//zip包路径
String path = "D:\\WorkSpace\\Project\\activiti\\src\\main\\resources\\process\\MyProcess.zip";
Deployment deployment = repositoryService.createDeployment()
.addZipInputStream(new ZipInputStream(new FileInputStream(path)))
.name("报销流程zip")
.deploy();
System.out.println("部署id:"+deployment.getId());
System.out.println("部署名字:"+deployment.getName());
}
//删除单个流程(根据部署id删除)
@Test
public void deleteDeployment() {
/*
* 参数1:流程部署id
* 参数2:流程中有流程实例在运行时,用true强制删除流程,此时流程实例全部被删除
* */
repositoryService.deleteDeployment("2501",true);
}
//删除流程实例
@Test
public void deleteInstance() {
String instanceId = "5001";//流程实例id
runtimeService.deleteProcessInstance(instanceId,"");
}
//流程的挂起
@Test
public void pauseProcess() {
//根据流程部署id查询流程
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId("5001")
.singleResult();
//获取流程定义id
String definitionId = processDefinition.getId();
//获取当前流程是什么状态
boolean suspended = processDefinition.isSuspended();
if(suspended) {
//是挂起状态,则执行激活
/*
* 这里将流程下的所有实例全部激活
* 参数1:流程部署id
* */
repositoryService.activateProcessDefinitionById(definitionId,true,null);
}else {
/*
* 这里将流程下的所有实例全部挂起
* 参数1:流程部署id
* */
repositoryService.suspendProcessDefinitionById(definitionId,true,null);
}
}
//单个流程的挂起
@Test
public void pauseOne() {
//流程实例id
String instanceId = "65001";
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(instanceId)
.singleResult();
//获取当前实例状态
boolean suspended = processInstance.isSuspended();
if(suspended) {
//是挂起状态,则执行激活
runtimeService.activateProcessInstanceById(instanceId);
}else {
runtimeService.suspendProcessInstanceById(instanceId);
}
}
//查询部署的流程
@Test
public void selectProcess() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
.orderByProcessDefinitionVersion()//根据什么字段进行排序
.asc()//升序asc,降序desc
.listPage(1, 100);//显示第1页的内容,一页显示100条
for(ProcessDefinition processDefinition : list) {
System.out.println("流程定义id:"+processDefinition.getId());
System.out.println("流程名字:"+processDefinition.getName());
System.out.println("流程部署id:"+processDefinition.getDeploymentId());
}
}
//启动流程实例,获取流程定义id、流程实例的id等
@Test
public void startProcessInstant() {
/*
* 设置流程变量,key就是${assignee1},value就是要设置的变量的值
* */
HashMap<String, Object> map = new HashMap<>();
map.put("assignee1","小明1号");
map.put("assignee2","部门经理小红");
map.put("assignee3","总经理小张");
map.put("count","130");
/*
* 一般用ByKey启动流程,key一致,就会启动版本最新的流程,startProcessInstanceByKey这个方法有3个参数
* 参数1:流程key
* 参数2:业务表id
* 参数3:指定流程变量map
* */
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("key","id",map);
System.out.println("流程定义id:"+processInstance.getProcessDefinitionId());
System.out.println("实例id:"+processInstance.getId());
}
//查询用户的任务
@Test
public void selectTask() {
/*
* 查询用户任务,这里有很多种查询方式,如:根据流程实例id查询、根据用户id查询等等
* processInstanceId("20001")是根据实例id查询
* taskAssignee("1")是根据用户id查询
* */
List<Task> list = taskService.createTaskQuery().processInstanceId("85001").list();
for(Task task : list) {
System.out.println("流程定义id:"+task.getProcessDefinitionId());
System.out.println("流程实例id:"+task.getProcessInstanceId());
System.out.println("当前节点名字:"+task.getName());
System.out.println("流程节点id:"+task.getId());
}
}
//用户处理任务
//任务审批:(我们设置了分支条件,所以在执行流程时,会自动判断是走哪个节点,不用我们管)
@Test
public void userTask() {
String instance = "87502";//流程节点id
/*
* 设置流程变量,key就是${status},value就是要设置的变量的值
* */
HashMap<String, Object> map = new HashMap<>();
map.put("status","error");
/*
* 通过审批,complete这个方法有两个参数
* 参数1:流程节点id
* 参数2:指定流程变量,用map
* */
taskService.complete(instance,map);
}
//查询流程实例历史信息
@Test
public void selectHistory() {
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
.orderByHistoricActivityInstanceStartTime()//排序字段
.asc()//升序asc,降序desc
.listPage(1, 100);//显示第1页的内容,一页显示100条
for(HistoricActivityInstance historicActivityInstance : list) {
System.out.println("实例id:" + historicActivityInstance.getProcessInstanceId());
System.out.println("流程名字:"+historicActivityInstance.getActivityName());
System.out.println("流程结束时间:"+historicActivityInstance.getEndTime());
}
}
//从数据库读取bpmn和png文件到本地
@Test
public void readWrite() throws Exception{
String deploymentId = "62501";//流程部署id
String bpmnName = "process/MyProcess.bpmn";//bpmn文件的名字,数据库存的包含路径,那就这样写
InputStream InputStream = repositoryService.getResourceAsStream(deploymentId, bpmnName);
OutputStream outputStream = new FileOutputStream("D:\\WorkSpace\\Project\\"+bpmnName);
byte[] bytes = new byte[1024];
while (InputStream.read(bytes) > 0) {
outputStream.write(bytes, 0, bytes.length);
}
InputStream.close();
outputStream.close();
}
}
activiti基本操作
猜你喜欢
转载自blog.csdn.net/weixin_52877849/article/details/115032659
今日推荐
周排行