activiti工作流

首先需要先学习下bpmn,学会如何画工作流程图(idea需要安装好bpmn插件)
在这里插入图片描述
对于整个流程,需要写出id和name,这个name指的是流程定义的名称
在这里插入图片描述
对于每一个任务,需要写出name和节点负责人(assignee或者candidate user或者candidate groups,这里可以直接写死,也可以在程序运行中写入)
在这里插入图片描述
网关:
1.排他网关
条件判断直接连接到排他网关,排他网关只允许一个通过
在这里插入图片描述
2.并行网关
并行网管会忽略分支上的所有条件,走每一个分支,然后汇总完成后,才会继续向下执行
在这里插入图片描述
3.包含网关
包含网关会使用分支上的条件,执行满足条件的分支,并在最后汇总后,继续向下执行
在这里插入图片描述
一、引入activiti的相关依赖
这里需要说明下,在activiti-spring依赖中已经引入了大部分spring的相关依赖

<properties>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
        <activiti.version>7.0.0.Beta1</activiti.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn 模型处理 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn 转换 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn json数据转换 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn 布局 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- activiti 云支持 -->
        <dependency>
            <groupId>org.activiti.cloud</groupId>
            <artifactId>activiti-cloud-services-api</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- 链接池 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

二、编写activiti配置文件activiti.cfg.xml
配置数据源,可配置为直接更新生成数据库25张activiti相关表,需要注意的是,我们这里采用的是默认的方式,所以activiti.cfg.xml文件的名称不能改变

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">


    <!--dbcp链接池-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///activiti"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="maxActive" value="3"/>
        <property name="maxIdle" value="1"/>
    </bean>

    <!--在默认方式下 bean的id  固定为 processEngineConfiguration-->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!--配置数据库相关的信息-->
        <!--数据库驱动
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>-->
        <!--数据库链接
        <property name="jdbcUrl" value="jdbc:mysql:///activiti"/>-->
        <!--数据库用户名
        <property name="jdbcUsername" value="root"/>-->
        <!--数据库密码
        <property name="jdbcPassword" value="123456"/>-->
        <!--直接引用上面配置的链接池-->
        <property name="dataSource" ref="dataSource"/>
        <!--actviti数据库表在生成时的策略
        true - 如果数据库中已经存在相应的表,那么直接使用,
               如果不存在,那么会创建-->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

三、简单介绍及使用
activiti数据库一共涉及到25张表
在这里插入图片描述
而操作这些数据库表并不需要我们自己来变写代码,而是使用由acitiviti帮我们封装的serivice
在这里插入图片描述
获取ProcessEngine

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

之前的那些service的获取我们可以通过ProcessEngine来获取
在这里插入图片描述
我们通常使用以下service
在这里插入图片描述
1.部署流程,这里的name设置的是
在这里插入图片描述
在部署流程阶段,会在[ACT_RE_DEPLOYMENT]表中插入一条部署信息
在这里插入图片描述

2.启动流程
在这里插入图片描述
会在[ACT_RE_PROCDEF]中新增一条流程定义(同一种事务流程只会添加一次)
在这里插入图片描述
并在[ACT_HI_PROCINST]中添加本次流程实例
在这里插入图片描述

然后会根据流程的分支情况在ACT_RU_EXECUTION表中添加执行实例注意这里的流程执行实例和上面的流程实例不同,所谓执行实例就是一般来讲一个流程实例都有一条主线,如果一个流程由多个主线,则就会由多个执行实例。
在这里插入图片描述
并会把走到的每一个节点都记录在ACT_HI_ACTINST表中作为历史
在这里插入图片描述
流程启动以后会按照流程产生task任务,当前待执行任务会放入[ACT_RU_TASK]表
在这里插入图片描述
同时也会在[ACT_HI_TASKINST]表中添加
在这里插入图片描述
3.查询个人任务
在这里插入图片描述
完成个人节点任务
在这里插入图片描述
查询流程定义
在这里插入图片描述
删除流程,如果是普通删除,则前提是该部署的所有流程实例全部完结,如果需要强制删除,则可以采用级联删除
在这里插入图片描述
以流程为主,查询该流程的进程历史信息:
在这里插入图片描述

以负责人为主,查询该负责人已审批的任务:
在这里插入图片描述

四、高阶功能
(一)关联流程实例和业务实例
在这里插入图片描述
(二)流程的挂起与激活
1.全部流程实例挂起与激活
在这里插入图片描述
会操作[ACT_RU_TASK][ACT_RU_EXECUTION][ACT_RE_PROCDEF]表中SUSPENSION_STATE字段的状态

2.单个流程实例挂起与激活
在这里插入图片描述
会操作[ACT_RU_TASK][ACT_RU_EXECUTION]表中SUSPENSION_STATE字段的状态

(三)动态分配项目负责人
方式1:使用UEL表达式,${assignee0}
在这里插入图片描述
在这里插入图片描述
方式2:通过监听器的方式
在这里插入图片描述

编写监听器类MyTaskListener继承TaskListener(上面图片里选择的是All,所以还需要判断event类型,如果选择CREAT,则不需要判断)
在这里插入图片描述
(四)流程变量
在这里插入图片描述
1.global变量-案例
global可以加在连线上,点击连线,在condition中添加条件,可以使用uel-value也可以使用uel-方法,这里使用${evection.num}
在这里插入图片描述
创建Evection继承Serializable
在这里插入图片描述
启动流程
在这里插入图片描述
当然上述在启动的时候如果没有设置evection,也能在完成任务的时候设置global变量,如下:
在这里插入图片描述
或者也能使用TaskService来增添变量,前提是任务ID为未完成任务(这里由于可能存在多个流程实例的多个任务,所以在为某一个流程实例添加全局变量的时候需要指定其下的任务ID)
在这里插入图片描述

或者也能在流程实例设置global变量,前提是当前流程实例没有结束
在这里插入图片描述
以上设置的global变量都能通过该方法processInstance.getProcessVariables()查询到,已完成的流程实例也能通过下面的方法查询到
在这里插入图片描述
能通过下面的方法查询
taskService.getVariable()和task.getProcessVariables();

2.local变量-案例,local变量只能在任务节点设置
在这里插入图片描述
local变量查询方法
taskService.getVariableLocal()和task.getTaskLocalVariables();

已完成的任务能查到用过的变量
在这里插入图片描述
(五)组任务-一个任务节点能有多个人审批,这里可以直接写死,也可以使用uel表达式动态设置,需要注意的是uel设置users的时候,不同的组员用逗号分科开,格式为字符串
在这里插入图片描述
1.查询组任务
在这里插入图片描述
2.候选人拾取任务
在这里插入图片描述
3.任务的归还
在这里插入图片描述
4.任务的交接
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值