Activiti学习笔记

相关依赖:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>6.0.0</version>
            <!--<version>7.1.0.M5</version>-->
            
			  <!-- 去除自带的MyBatis版本 -->
			<exclusions>
			  <exclusion>
				  <groupId>org.mybatis</groupId>
				  <artifactId>mybatis</artifactId>
			 </exclusion>
		  </exclusions>
        </dependency>
        <!--数据库相关依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

在这里插入图片描述

生成表格使用默认的配置,须要配置 activiti.cfg.xml 配置文件

    <!--创建流程引擎配置对象-->
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://192.168.25.128:3306/activiti"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="root"/>
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>

相关流程Demo:

package com.zelin;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.*;
import org.activiti.engine.repository.*;
import org.activiti.engine.runtime.ExecutionQuery;
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.apache.commons.io.FileUtils;
import org.junit.Test;


import java.io.*;
import java.util.List;

/**
 * @ClassName TestDemo
 * @Description TODO
 * @Author zhenglanlan
 * @Date 2020/8/30 21:45
 * @Version 1.0
 **/

// 创建表格的三种方式
public class TestDemo {

    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    // 1

    // 3 使用默认配置创建28张表格
    @Test
    public void test01(){
    	// 运行可自动生成28张表(先配置依赖和 activiti.cfg.xml 文件)
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
    }

    // 部署流程定义
    // RepositoryService
    // 数据库表:
    // ACT_RE_DEPLOYMENT
    // ACT_RE_PROCDEF
    // ACT_GE_BYTEARRAY(通用表格)


    @Test
    public void test02(){
        // 获得一个构造器对象,用于加载流程定义的文件,完成流程定义的部署
        DeploymentBuilder deployment = defaultProcessEngine.getRepositoryService().createDeployment();

        // 加载定义流程的文件
        deployment.addClasspathResource("Process-1.bpmn");
        deployment.addClasspathResource("Process-1.png");

        deployment.name("请假流程");

        // 读取打包的单个文件(压缩包.zip)
        // deployment.addZipInputStream(new ZipInputStream())


        // 部署流程定义文件
        Deployment deploy = deployment.deploy();
        System.out.println("deployID = " + deploy.getId());
    }


    // 查询部署列表
    @Test
    public void test03(){
        // 查询部署对象,查询的表:ACT_RE_DEPLOYMENT
        DeploymentQuery deploymentQuery = defaultProcessEngine.getRepositoryService().createDeploymentQuery();
        List<Deployment> list = deploymentQuery.list();

        for (Deployment deployment : list) {
            String id = deployment.getId();
            String name = deployment.getName();
            System.out.println("id = " + id);
            System.out.println("name = " + name);

        }
    }

    // 查询流程定义列表
    // 查询表:ACT_RE_PROCDEF
    @Test
    public void test04(){
        ProcessDefinitionQuery processDefinitionQuery = defaultProcessEngine.getRepositoryService().createProcessDefinitionQuery();
        List<ProcessDefinition> list = processDefinitionQuery.list();
        for (ProcessDefinition processDefinition : list) {
            String id = processDefinition.getId();
            String name = processDefinition.getName();
            System.out.println("id = " + id);
            System.out.println("name = " + name);
        }

    }

    // 删除部署信息
    // 表:ACT_RE_DEPLOYMENT
    @Test
    public void test05(){
        // 删除部署(删除多表的部署信息) 参数为部署表ID 字符串类型
        defaultProcessEngine.getRepositoryService().deleteDeployment("10001"); // 一般删除
        defaultProcessEngine.getRepositoryService().deleteDeployment("10001",true);  // 强制删除 true代表级联删除,即强制删除,无论是否开启实例,都删除四张表的信息
        /**
         * 注意:
         * 启动一个实例之后,流程删除报持久异常
         * 强制删除方法:级联删除(主键和外键全部删除)参考以上的强制删除部署信息
         * ACT_RU_EXECUTION
         * ACT_RE_DEPLOYMENT
         * ACT_RE_PROCDEF
         * ACT_GE_BYTEARRAY
         *
         */
    }

    /**
     * 启动流程的方式(两种)
     * 1 根据流程定义的ID启动
     * 2 根据流程定义的key启动(自动选择最新版本的流程定义启动实例)
     */

    // 根据流程定义的ID启动一个实例(一次请假)
    // RuntimeService
    // ACT_RU_EXECUTION 表
    @Test
    public void test06(){
        ProcessInstance processInstance = defaultProcessEngine.getRuntimeService().startProcessInstanceById("qjlc:2:12504");
        String id = processInstance.getId();
        System.out.println("id = " + id);
    }

     // 2 根据流程定义的key启动(自动选择最新版本的流程定义启动实例)
    /**
     * ACT_RU_EXECUTION 表
     */
    @Test
    public void test10(){
        String key = "qjlc";
        ProcessInstance processInstance = defaultProcessEngine.getRuntimeService().startProcessInstanceByKey(key);
        System.out.println("processInstance = " + processInstance.getId());
    }

    /**
     * 查询流程实例列表
     * ACT_RU_EXECUTION
     */
    @Test
    public void test11(){
        ProcessInstanceQuery processInstanceQuery = defaultProcessEngine.getRuntimeService().createProcessInstanceQuery();
        List<ProcessInstance> list = processInstanceQuery.list();
        // 增加过滤查询条件
        // processInstanceQuery.processDefinitionKey(""); //查询指定key
        // processInstanceQuery.orderByProcessDefinitionId().desc();   //排序
        processInstanceQuery.listPage(0,2);     // 分页
        for (ProcessInstance processInstance : list) {
            System.out.println("processInstance = " + processInstance.getId() + ":" + processInstance.getActivityId());
        }
    }

    /**
     * 结束流程实例(删除流程实例)
     *  表: ACT_RU_EXECUTION 的 ID 来删除
     */
    @Test
    public void test12(){
        String processInstanceId = "15001";
        defaultProcessEngine.getRuntimeService().deleteProcessInstance(processInstanceId,"结束流程描述");
    }

    /**
     * 查询任务列表
     * 表: ACT_RU_TASK
     * 根据用户名来查询 Assignee 这个字段来过滤
     */
    @Test
    public void test13(){
        String assignee = "张三";
        TaskQuery taskQuery = defaultProcessEngine.getTaskService().createTaskQuery();
        taskQuery.taskAssignee(assignee); // 查询条件用户名字段
        taskQuery.orderByTaskCreateTime().desc(); //按照创建时间倒叙排序
        List<Task> list = taskQuery.list();
        for (Task task : list) {
            System.out.println("task.getName() = " + task.getExecutionId());
        }

    }


    /**
     * 办理任务
     * 表: ACT_RU_TASK 根据ID 来办理
     * 一级一级办理。
     */
    @Test
    public void test14(){
        defaultProcessEngine.getTaskService().complete("20002");

    }



    // 查询一次部署文件对应的输入流(bpmn png 都下载到指定位置 )
    // RepositoryService
    @Test
    public void test07() throws IOException {
        List<String> deploymentResourceNames = defaultProcessEngine.getRepositoryService().getDeploymentResourceNames("12501");
        for (String deploymentResourceName : deploymentResourceNames) {
            System.out.println("deploymentResourceName = " + deploymentResourceName);

            // 将文件保存到本地磁盘
            InputStream inputStream = defaultProcessEngine.getRepositoryService().getResourceAsStream("12501", deploymentResourceName);
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d://" + deploymentResourceName));
            byte[] bytes = new byte[1024]; // 每次输入1024个字节
            int reads = 0;
            while ((reads = inputStream.read(bytes)) != -1){ // 只要下标不为-1 就一直读
                fileOutputStream.write(bytes,0,reads); // 从 0 开始,reads 结束
            }
            fileOutputStream.close();
        }
    }

    /**
     * 获取文件的输入流
     * 下载png到指定文件位置
     *
     */
    @Test
    public void test08() throws IOException {
        String processDiagramId = "qjlc:2:12504";
        InputStream processDiagram = defaultProcessEngine.getRepositoryService().getProcessDiagram("qjlc:2:12504");
        FileUtils.copyInputStreamToFile(processDiagram,new File("d:\\my.png"));
    }

    /**
     * 查询历史办理完成的实例数据
     * 表: ACT_HI_PROCINST
     *
     *
     */
    @Test
    public void test09(){
        HistoricProcessInstanceQuery query = defaultProcessEngine.getHistoryService().createHistoricProcessInstanceQuery();
        List<HistoricProcessInstance> list = query.list();
        for (HistoricProcessInstance instance : list) {
            System.out.println("instance.getId() = " + instance.getId());
        }
    }



    /**
     * 创建历史活动实例查询
     * 表: ACT_HI_ACTINST
     *
     *
     */
    @Test
    public void test15(){
        HistoricActivityInstanceQuery query = defaultProcessEngine.getHistoryService().createHistoricActivityInstanceQuery();
        query.orderByProcessInstanceId().desc();
        query.orderByHistoricActivityInstanceEndTime().asc();
        List<HistoricActivityInstance> list = query.list();
        for (HistoricActivityInstance instance : list) {
            System.out.println("instance.getActivityName() + \":\" + instance.getActivityType() = " + instance.getActivityName() + ":" + instance.getActivityType());
        }
    }

    /**
     * 查询历史任务数据库
     * 表: ACT_HI_TASKINST
     */
    @Test
    public void test16(){
        HistoricTaskInstanceQuery query = defaultProcessEngine.getHistoryService().createHistoricTaskInstanceQuery();
        query.orderByProcessInstanceId().asc();
        query.orderByHistoricTaskInstanceEndTime().desc();
        List<HistoricTaskInstance> list = query.list();
        for (HistoricTaskInstance instance : list) {
            System.out.println("开始时间:" + instance.getClaimTime() + "   =====  结束时间:" + instance.getEndTime());
        }
    }
}


Activities 框架提供的 Service 对象:

RepositoryService:操作静态资源(流程定义、bpmn、png)
TaskService:操作的是任务(查询、办理)
RuntimeService:操作流程实例(启动、查询、结束)
HistoryService:操作的是历史数据

Activiti 框架提供的对象:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值