idea环境搭建
安装插件,搜索安装actiBPM,如果受限于网络,就访问https://plugins.jetbrains.com/plugin/7429-actibpm/versions下载安装
pom文件
activiti6,demo项目
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
<!--排除自带的mybatis-->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
activiti7,demo项目
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M4</version>
<exclusions>
<!-- 需要排除自带的mybatis -->
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
绘制流程图
绘制完bpm文件后另存为xml文件,并删除 xmlns=""
根据xml生成图片
再将xml文件改回bpm文件
service介绍
servic | 解释 |
---|---|
RepositoryService | 仓储服务,用于管理流程仓库,例如:部署,删除,读取流程资源 |
RuntimeService | 运行时服务,可以处理所有正在运行状态的流程实例,任务等 |
TaskService | 任务服务,用于管理,查询任务,例如:签收,办理,指派等 |
HistoryService | 历史服务,可以查询所有历史数据,例如:流程实例,任务,活动,变量,附件等 |
IdentityService | 唯一服务,可以管理,查询用户,组之间的关系 |
ManagementService | 引擎管理服务,和具体业务无关,主要是可以查询引擎配置,数据库,作业等 |
简单实例
部署
/**
* 创建流程部署
* 在3张表中产生数据
* act_ge_bytearray 流程资源文件(2条数据)
* act_re_deployment 流程部署(1条数据)
* act_re_procdef 流程实例(1条数据)
*/
@Test
public void deployProcess() throws Exception{
//创建部署环境配置对象
DeploymentBuilder deployment = repositoryService.createDeployment();
//为本次部署命名
deployment.name("公共任务请假流程");
//添加流程规则文件和流程规则图片
deployment.addClasspathResource("processes/commontask.bpmn").addClasspathResource("processes/commontask.png");
//部署
deployment.deploy();
}
/**
* 查询流程定义信息
* ProcessDefinition有4大属性要关注:
* id {key}:{version}:{随机序列}
* name 流程规则文件process节点的name属性
* key 流程规则文件process节点的id属性
* version 流程版本,如果key存在,则在当前最高版本上加1;如果key不存在,从1开始
*/
@Test
public void queryProcessDefinition() throws Exception{
//创建查询对象
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
//添加查询条件
//执行查询
List<ProcessDefinition> list = query.list();
//查询数量 query.count();
//分页查询 query.listPage(firstResult, maxResults);
//返回唯一结果,查询结果为多个则报错 query.singleResult();
for (ProcessDefinition processDefinition : list) {
System.out.println("id: " + processDefinition.getId() + ", name: " + processDefinition.getName()
+ ", key: " + processDefinition.getKey() + ", version: " + processDefinition.getVersion());
}
}
/**
* 删除流程部署
*/
@Test
public void deleteProcess() throws Exception{
//流程部署id,act_re_deployment表id
String deploymentId = "17501";
//普通删除,会删除部署所产生的3张表信息
repositoryService.deleteDeployment(deploymentId);
//级联删除,会删除部署规则相关的所有信息,甚至包括历史
// repositoryService.deleteDeployment(deploymentId, true);
}
/**
* 查询流程规则文件
*/
@Test
public void queryProcessImage() throws Exception{
//流程部署id,act_re_deployment表id
String deploymentId = "5001";
//部署资源名称
List<String> resourceNames = repositoryService.getDeploymentResourceNames(deploymentId);
//获取指定文件类型的文件
String imageName = null;
for (String resourceName : resourceNames) {
if (resourceName.indexOf(".png") >= 0) {
imageName = resourceName;
}
}
//获取指定文件
if (StringUtils.isNotBlank(imageName)) {
try (InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName);
OutputStream out = new FileOutputStream(new File("E:\\a.png"))) {
IOUtils.copy(in, out);
} catch (Exception e) {
e.printStackTrace();
}
}
}
启动流程
/**
* 1.启动流程
* 关注2张表:
* act_ru_execution : 所有流程按照规则指定到活动节点时,都会产生一个对应的Execution
* act_ru_task : 只针对人工任务,针对Execution做的扩展信息描述
*/
@Test
public void startProcess() throws Exception{
//流程定义的key
String processDefinitionKey = "commontask";
//根据流程定义的id启动流程
//runtimeService.startProcessInstanceById(processDefinitionKey);
//根据流程定义act_re_deployment表key启动最新版本的流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("processInstance: "+processInstance);
}
/**
* 2.查看私有任务
*/
@Test
public void queryPersonalTask() throws Exception{
//流程实例id
String processInstanceId = "2501";
//代理人(办理人)
String assignee = "副经理";
//创建任务服务查询对象
TaskQuery query = taskService.createTaskQuery();
//通过流程实例id查询 query.processInstanceId(processInstanceId);
//根据代理人(办理人)查询
List<Task> taskList = query.taskAssignee(assignee).list();
System.out.println("=====["+assignee+"]私有任务列表=====");
taskList.forEach(task -> {
System.out.println("id: "+task.getId()+" ,name: "+task.getName()+" ,assignee: "+
task.getAssignee()+" ,createTime:"+task.getCreateTime());
});
}
/**
* 2.查看公共任务
*/
@Test
public void queryCommonTask() throws Exception{
//公共任务候选人
String candidateuser = "副经理";
//创建任务服务查询对象
TaskQuery query = taskService.createTaskQuery();
//根据候选人查询
List<Task> taskList = query.taskCandidateUser(candidateuser).list();
System.out.println("=====["+candidateuser+"]公共任务列表=====");
taskList.forEach(task -> {
System.out.println("id: "+task.getId()+" ,name: "+task.getName()+" ,assignee: "+
task.getAssignee()+" ,createTime:"+task.getCreateTime());
});
}
/**
* 3.认领任务
*/
@Test
public void claimTask() throws Exception{
//待认领的公共任务id
String taskId = "30002";
//认领的用户名
String userId = "副经理";
taskService.claim(taskId, userId);
}
/**
* 4.完成任务
*/
@Test
public void completeTask() throws Exception{
//任务id(act_ru_task表id)
String taskId = "30002";
taskService.complete(taskId);
}
/**
* 5.查询流程实例
*/
@Test
public void queryProcessInstancd() throws Exception{
//流程实例id(act_ru_execution表id)
String processInstanceId = "27501";
//创建运行时服务查询对象
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
//查询流程实例
ProcessInstance processInstance = query.processInstanceId(processInstanceId).singleResult();
if (null == processInstance) {
System.out.println("流程已经结束");
} else {
System.out.println("获取到流程: "+processInstance);
}
}