Activiti的Hello World——请假流程

本文介绍了如何使用Activiti在Eclipse中创建请假流程,从配置数据库连接、绘制流程图,到编写Java测试类逐步执行请假流程,包括任务的部署、启动、查询及完成,直至流程结束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,eclipse添加activiti插件,操作自行百度。

新建一个activiti project,添加activiti.cfg.xml,设置数据库连接,注意MySQL中应已有activiti数据库:

<?xml version="1.0" encoding="UTF-8"?>
 
<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">
 
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
 
        <property name="databaseSchemaUpdate" value="true"/>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useSSL=false"></property>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="password" />
</bean>
 
</beans>

画请假流程图MyProcess.bpmn:

张三提交请假申请:

项目经理李四审批申请:

部门经理王五审批申请:

eclipse自动按流程图生成PNG。

接下来在数据库中建表,新建createTable.java:

package activitiTest_03;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;

public class createTable {
 
	/** 使用配置文件创建工作流需要的25张表 */
	@Test
	public void creteTable_2() {
		ProcessEngine processEngine = ProcessEngineConfiguration
				.createProcessEngineConfigurationFromResource(
						"activiti.cfg.xml").buildProcessEngine();
	}
}

数据库中新增25张表:

项目结构如下:

接下来新建ActivitiTest.java来测试流程,每次替换@test内容,通过run as->Junit Test运行。

1. 按照MyProcess.bpmn部署一个新流程:

    @Test
    public void creatActivitiTask() throws FileNotFoundException{
    	FileInputStream bpmnStream = new FileInputStream("/home/cxy/eclipse-workspace/activitiTest_03/src/main/resources/diagrams/MyProcess.bpmn");
        //得到流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRepositoryService()
                .createDeployment()
                .addInputStream("MyProcess.bpmn", bpmnStream)
                .deploy();
        System.out.println("部署");
    } 

输出:部署

表act_re_procdef:

表act_re_deployment:

 

2. 启动刚刚部署的流程:

    @Test
    public void testStartProcessInstance(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRuntimeService()
                .startProcessInstanceById("myProcess:1:4");  //这个是act_re_procdef表ID
        System.out.println("启动");
    }

输出:启动

表act_ru_execution:usertask1是流程节点id

表act_ru_task:

 

3. 申请者查询当前正在执行任务

    @Test
    public void testQueryTask(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        List<Task> tasks = processEngine.getTaskService()
                .createTaskQuery()
                .taskAssignee("zhangsan")
                .list();
        for (Task task : tasks) {
            System.out.println(task.getName());
            System.out.println("代办任务ID:"+task.getId());
            System.out.println("代办任务name:"+task.getName());
            System.out.println("代办任务创建时间:"+task.getCreateTime());
            System.out.println("代办任务办理人:"+task.getAssignee());
            System.out.println("流程实例ID:"+task.getProcessInstanceId());
            System.out.println("执行对象ID:"+task.getExecutionId());
        }
    }

输出:

tijiao
代办任务ID:12504
代办任务name:tijiao
代办任务创建时间:Fri May 17 17:43:55 CST 2019
代办任务办理人:zhangsan
流程实例ID:12501
执行对象ID:12501

 

4. 申请者完成任务

    @Test
    public void testFinishTask_manager(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getTaskService()
                .complete("12504"); //查看act_ru_task数据表id

        System.out.println("完成任务,到李四");
    }

输出:完成任务,到李四

 

5. 项目经理李四查询任务

    @Test
    public void testQueryTask(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        List<Task> tasks = processEngine.getTaskService()
                .createTaskQuery()
                .taskAssignee("lisi")
                .list();
        for (Task task : tasks) {
            System.out.println(task.getName());
            System.out.println("代办任务ID:"+task.getId());
            System.out.println("代办任务name:"+task.getName());
            System.out.println("代办任务创建时间:"+task.getCreateTime());
            System.out.println("代办任务办理人:"+task.getAssignee());
            System.out.println("流程实例ID:"+task.getProcessInstanceId());
            System.out.println("执行对象ID:"+task.getExecutionId());
        }
    }

输出:
projectLeader
代办任务ID:17502
代办任务name:projectLeader
代办任务创建时间:Mon May 20 15:12:42 CST 2019
代办任务办理人:lisi
流程实例ID:12501
执行对象ID:12501

表act_ru_task:

 

6. 项目经理完成任务

    @Test
    public void testFinishTask_manager(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getTaskService()
                .complete("17502"); //查看act_ru_task数据表
        System.out.println("完成任务,到王五");
    }

输出:完成任务,到王五

 

7. 部门经理查询任务

    @Test
    public void testQueryTask(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        List<Task> tasks = processEngine.getTaskService()
                .createTaskQuery()
                .taskAssignee("wangwu")
                .list();
        for (Task task : tasks) {
            System.out.println(task.getName());
            System.out.println("代办任务ID:"+task.getId());
            System.out.println("代办任务name:"+task.getName());
            System.out.println("代办任务创建时间:"+task.getCreateTime());
            System.out.println("代办任务办理人:"+task.getAssignee());
            System.out.println("流程实例ID:"+task.getProcessInstanceId());
            System.out.println("执行对象ID:"+task.getExecutionId());
        }
    }

输出:

department
代办任务ID:20002
代办任务name:department
代办任务创建时间:Mon May 20 15:17:35 CST 2019
代办任务办理人:wangwu
流程实例ID:12501
执行对象ID:12501

表act_ru_task:

 

8. 部门经理结束任务:

    @Test
    public void testFinishTask_Boss(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getTaskService()
                .complete("20002");  //查看act_ru_task数据表
    } 

请假流程结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值