0基础学习Activiti工作流——入门

一、概念:

Activiti是工作流框架,是解决企业流程管理的解决方案。

二、特点:

Activiti是一个强大的业务流程管理(BPM)框架,他本身需要数据库支持,它使用了Mybatis作为持久化框架,对于数据库管理系统(DBMS)支持多个。并且它的数据库表名有一定的特征。

三、数据库表结构:

1.资源库流程规则表
1)act_re_deployment 	部署信息表
2)act_re_model  	流程设计模型信息表
3)act_re_procdef  	流程定义数据表
2.运行时数据库表
1)act_ru_execution	运行时流程执行实例表
2)act_ru_identitylink	运行时流程人员表,主要存储任务节点与参与者的相关信息
3)act_ru_task		运行时任务节点表
4)act_ru_variable	运行时流程变量数据表
3.历史数据库表
1)act_hi_actinst 		历史节点表
2)act_hi_attachment		历史附件表
3)act_hi_comment		历史意见表
4)act_hi_identitylink		历史流程人员表
5)act_hi_detail			历史详情表,提供历史变量的查询
6)act_hi_procinst		历史流程实例表
7)act_hi_taskinst		历史任务实例表
8)act_hi_varinst		历史变量表
4.组织机构表
1)act_id_group		用户组信息表 JBPM_ID_MEMBERSHIP 
2)act_id_info		用户扩展信息表
3)act_id_membership	用户与用户组对应信息表
4)act_id_user		用户信息表
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足 
5.通用数据表
1)act_ge_bytearray		二进制数据表
2)act_ge_property		属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。

四、示例数据库配置

   <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
    	<!-- 创建ProcessEngineConfiguration对象的bean -->
    	<bean id="processEngineConfiguration"
    		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    		<!-- 配置对象的配置信息 :连接数据库,使用MyBatis连接池 -->
    		<property name="jdbcUrl"
    			value="jdbc:mysql:///activiti?createDatabaseIfNotExist=true" />
    		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
    		<property name="jdbcUsername" value="root" />
    		<property name="jdbcPassword" value="root" />
    		<!--
    		 databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。 
    		false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
    		true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。
    		create-drop: 构建流程引擎时创建数据库表,关闭流程引擎时删除这些表。
    		 -->
    		<property name="databaseSchemaUpdate" value="true" />
    	</bean>

五、4个核心的api

ProcessEngine(核心--服务大管家),在Activiti中是最核心的类,其他的类都是由他而来。
最佳产生方式:
![ProcessEngine(流程引擎)最佳创建方式](https://img-blog.csdnimg.cn/2018112819265667.png)

1. // 查询部署信息列表和流程定义列表
 RepositoryService repositoryService =processEngine.getRepositoryService();
2.// 查询运行的实例的表
 RuntimeService runtimeService =processEngine.getRuntimeService();
3.// 查询任务表
 TaskService taskService =processEngine.getTaskService();
4.// 查询历史的表
 HistoryService historyService =processEngine.getHistoryService();

六、核心业务

1、绘制流程–定义(规则)流程 RepositoryService 接口 crud
1.部署发布流程(流程定义bpmn和流程图像)
2.查询流程定义和部署列表
3.删除(物理删除,流程的挂起和激活)
4.显示流程图像

 import static org.junit.Assert.*;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.List;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    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.apache.commons.io.IOUtils;
    import org.junit.Test;

/***
 * 1.流程定义 2.流程发布
 * 
 * @author Administrator
 *
 */
public class ProcessDefintionTest {
	// 添加发布部署
	@Test
	public void testDeloy() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		// 获取流程发布对象
		DeploymentBuilder createDeployment = repositoryService.createDeployment();
		// 上传资源
		createDeployment.addClasspathResource("MyProcess.bpmn");
		createDeployment.addClasspathResource("MyProcess.png");
		createDeployment.name("xxx");
		// 部署发布
		Deployment deploy = createDeployment.deploy();
		System.out.println(deploy);
	}

	// 删除部署(物理删数-真删)
	@Test
	public void testdeleteDeloy() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		repositoryService.deleteDeployment("2501");
		System.out.println();
	}
	
	// 假删除部署 (挂起和激活)
	@Test
	public void testUpdateDeleteDeloy() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		// 挂起
		//repositoryService.suspendProcessDefinitionByKey("myProcess");
		// 激活
		repositoryService.activateProcessDefinitionByKey("myProcess");
	}
	// 显示流程图片
	@Test
	public void testShowPng() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		// web项目输出到浏览器的输入流
		// 模拟输出本地硬盘
		// 获取png图片
		String deploymentId="5001";
		String resourceName="MyProcess.png";
		// 获取输入的流对象 读的字节
		InputStream resourceAsStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
		//模拟输出本地硬盘
		IOUtils.copy(resourceAsStream, new FileOutputStream("d:/a.png"));
	}
	
	
	// 查询部署列表
	@Test
	public void testQueryDeloy() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		// 查询对象
		DeploymentQuery createDeploymentQuery = repositoryService.createDeploymentQuery();
		// 设置查询条件
		// createDeploymentQuery.deploymentName(name)
		//createDeploymentQuery.deploymentId(deploymentId)
		//createDeploymentQuery.deploymentNameLike(nameLike)
		//createDeploymentQuery.listPage(firstResult, maxResults)
		//createDeploymentQuery.singleResult();
		List<Deployment> list = createDeploymentQuery.list();
		for (Deployment deployment : list) {
			System.out.println(deployment.getDeploymentTime());
		}
	}
	// 查询流程定义信息列表
	@Test
	public void testQueryProcessDef() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
	     // 获取查询对象
		 ProcessDefinitionQuery createProcessDefinitionQuery = repositoryService.createProcessDefinitionQuery();
		// 设置查询条件
		 //createProcessDefinitionQuery.listPage(firstResult, maxResults)
		 List<ProcessDefinition> list = createProcessDefinitionQuery.list();
		for (ProcessDefinition pd : list) {
			System.out.println(pd);
		}
	}
}

2、流程运行时管理–核心(ProcessInstance) RuntimeService
processInstance 的实例如果是单线的话processInstance对象就是excution对象
1、启动流程
2、查看任务
私有任务
公共任务
3、认领任务
4、办理任务
5、查看流程状态

  import java.util.List;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.DeploymentBuilder;
    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.junit.Test;

public class ProcessInstance_Test {

	// 添加发布部署
	@Test
	public void testDeloy() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RepositoryService 仓库
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		// 获取流程发布对象
		DeploymentBuilder createDeployment = repositoryService.createDeployment();
		// 上传资源
		createDeployment.addClasspathResource("codeProcess.bpmn");
		createDeployment.addClasspathResource("codeProcess.png");
		createDeployment.name("开发任务");
		// 部署发布
		Deployment deploy = createDeployment.deploy();
		System.out.println(deploy);
	}

	// 启动流程实例
	@Test
	public void testStartInstance() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// runtimeService 运行
		RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
		// 根据流程的定义key启动
		ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey("myProcess");
		System.out.println(startProcessInstanceByKey);
	}

	// 获取任务列表
	@Test
	public void testQueryTask() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// TaskService 任务
		TaskService taskService = defaultProcessEngine.getTaskService();
		// 获取查询对象
		TaskQuery createTaskQuery = taskService.createTaskQuery();
		List<Task> list = createTaskQuery.list();
		for (Task task : list) {
			System.out.println(task);
		}
	}

	// 获取某个人的任务列表
	@Test
	public void testQueryTaskByName() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// TaskService 任务
		TaskService taskService = defaultProcessEngine.getTaskService();
		// 获取查询对象
		TaskQuery createTaskQuery = taskService.createTaskQuery();
		// 设置查询条件
		createTaskQuery.taskAssignee("ls");
		List<Task> list = createTaskQuery.list();
		for (Task task : list) {
			System.out.println(task);
		}
	}

	// zs 办理完成任务 私有任务
	@Test
	public void testCompleTaskByName() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// TaskService 任务
		TaskService taskService = defaultProcessEngine.getTaskService();
		// 完成任务
		String taskId = "10004";
		taskService.complete(taskId);

	}
	// ww 办理完成任务 私有任务
	@Test
	public void testwwCompleTaskByName2() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// TaskService 任务
		TaskService taskService = defaultProcessEngine.getTaskService();
		// 完成任务
		String taskId = "5002";
		taskService.complete(taskId);
		
	}

	// zs 认领公有任务
	@Test
	public void testCaimTask() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// TaskService 任务
		TaskService taskService = defaultProcessEngine.getTaskService();
		// 完成任务
		String taskId = "2504";
		String userId="zs";
		// 要
		taskService.claim(taskId, userId);
	}

	// ls 办理完成任务 私有任务
	@Test
	public void testlsCompleTaskByName() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// TaskService 任务
		TaskService taskService = defaultProcessEngine.getTaskService();
		// 完成任务
		String taskId = "12502";
		taskService.complete(taskId);

	}

	// 查询流程是否结束
	@Test
	public void testIsEnd() throws Exception {
		// 获取核心对象 服务大管家
		ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
		// RuntimeService 运行
		RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
		// 查询对象
		ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery();
		// 根据id
		ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId("2501").singleResult();
		// 如果singleResult找到说明流程还没有结束
		if (singleResult != null) {
			System.out.println("流程未结束或不存在");
		} else {
			System.out.println("流程结束");
		}
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值