【activiti】模拟activiti流引擎的流程

流程图如下:




接下来我们通过代码方式来模拟一下基本流程

1.简历流程图bpmn:

assignee:代理人、指定人、处理人

2.创建流程引擎以及工作流数据表:

创建工作流数据表

数据库及表可以自动创建,可以在配置数据库连接时,实现自动创建数据库和表

3.部署流程:

所影响的表

-- 部署表:id是由act_ge_property的 next_dbid决定
SELECT * FROM act_re_deployment;  

-- 流程定义表:该表的key属性是bpmn的id决定
--  该表的name属性  是bpmn 的name 属性决定
SELECT * FROM act_re_procdef;   

-- 通用属性表
SELECT * FROM act_ge_property; 

-- 开启流程: 执行对象,流程实例,流程对象
SELECT * FROM act_ru_execution;
-- 任务表
SELECT * FROM act_ru_task;

首先获取默认activiti.cfg.xml文件:

private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

文件配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
 <!-- 配置 ProcessEngineConfiguration  -->
 <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
   	 <!-- 配置数据库连接 -->
	 <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
	 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activitiDB?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8"></property>
	 <property name="jdbcUsername" value="root"></property>
	 <property name="jdbcPassword" value="aini1314"></property>
	  <!-- 配置创建表策略 :没有表时,自动创建 -->
	  <property name="databaseSchemaUpdate" value="true"></property>
 
 </bean>

</beans>

然后我们部署流程:

/**
 * 部署流程定义
 */
@Test
public void deploy(){
	//取得路程引擎对象
	//获取仓库服务:管理流程定义
	RepositoryService repositoryService = processEngine.getRepositoryService();
	Deployment deployment = repositoryService.createDeployment()    //创建一个部署服务器
			.addClasspathResource("diagrams/LevalBill.bpmn")		//从类路径中添加资源,一次只能添加一个资源
			.addClasspathResource("diagrams/LevalBill.png")
			.name("请假单流程")		//设置部署的名称
			.category("办公类型")
			.deploy();
	
	System.out.println("部署的id:" + deployment.getId());
	System.out.println("部署的名字:" + deployment.getName());
	System.out.println("部署的类型:" + deployment.getCategory());
}

这时我们可以发现以上那几张表上便有了数据:

创建了

4.执行流程:

接下来我们开始执行流程:一开始会到第一个流程上去

/**
 * 执行流程
 */
@Test
public void startProcess(){
	String processDefiKey="myProcess";
	//取运行时服务
	RuntimeService runtimeService = processEngine.getRuntimeService();
	//取得流程实例
	ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefiKey);
	System.out.println("流程实例id:" + pi.getId());
	System.out.println("流程定义id:" + pi.getProcessDefinitionId());
	
}

5.查询任务:

我们可以查询任务,看看任务的进度:

/**
 * 查询任务
 */
@Test
public void queryTask(){
	//任务代理人
	String assignee = "王五";
	//取得任务服务
	TaskService taskService = processEngine.getTaskService();
	//创建一个任务查询对象
	TaskQuery taskQuery = taskService.createTaskQuery();
	//办理人的任务列表
	List<Task> list = taskQuery.taskAssignee(assignee)	//指定代理人
	.list();
	//遍历任务列表
	for (Task task : list) {
		System.out.println("任务的id:" + task.getId());
		System.out.println("任务的代理人:" + task.getAssignee());
		System.out.println("任务的名字:" + task.getName());
	}
}


同时我们在数据库中查找任务表:



由于我之前执行过了,所以流程是走到了这里。

接下来我们允许任务通过:

6.完成任务:

/**
 * 完成任务
 */
@Test
public void compileTask(){
	String taskId = "302";
	//task:任务的id
	processEngine.getTaskService().complete(taskId);
	System.out.println("任务" + taskId + "执行完毕");
}

我们的流程通过了:

所以任务表的数据也没了



如果不是最后一个流程,那么它会继续往下一个流程走


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值