史上最简单的activiti工作流入门教程,还看不懂你打我。

什么是工作流

在我刚学习软件开发时,都会接触到程序流程图。在这里我们先复习一下程序流程图

处理框、判断框、起止框、连接点、流程线、注释框等构成,结合相应的算法,构成整个程序流程图。
史上最简单的activiti工作流入门教程,还看不懂你打我。_第1张图片
任何复杂的算法。都可以由顺序结构、分子结构和循环结构这三种基本结构组成

  • 顺序结构
    顺序结构是简单的线性结构,各框按顺序执行。其流程图的基本形态如图所示,语句的执行顺序为
    史上最简单的activiti工作流入门教程,还看不懂你打我。_第2张图片

  • 选择(分支)结构
    这种结构是对某个给定条件进行判断,条件为真或假时分别执行不同的框的内容。其基本形状有两种
    在这里插入图片描述

  • 循环结构
    循环结构有两种基本形态: while型循环和do - while型循环。a. while 型循环:其执行序列为:当条件为真时,反复执行A,一旦条件为假,跳出循环,执行循环紧后的语句。b. do-while型循环:执行序列为:首先执行A,再判断条件,条件为真时,一直循环执行A,一旦条件为假,结束循环,执行循环紧后的下一条语句
    在这里插入图片描述

  • 实例分析
    计算长方形面积的问题:
    可分为以下几个步骤:
    (1)设置num1和num2两个变量,接收用户输入的长度和宽度,并存储到num1和num2两个变量;
    (2)判断num1和num2是否大于0,如果大于0,继续下一个步骤,否则提示用户长度和宽度输入错误,算法结束;
    (3)计算num1和num2的乘积,并将乘积结果存储到result变量;
    (4)显示result变量的值到屏幕。
    其计算流程图为:

史上最简单的activiti工作流入门教程,还看不懂你打我。_第3张图片
代码如下:

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入长方形的长:");
        int num1 = sc.nextInt();

        System.out.println("请输入长方形的宽:");
        int  num2 =  sc.nextInt();

        if(num1 == 0 || num2 ==0){
            System.out.println("长方形长,宽必须大于0");
        }else{
            int result = areaFunction(num1,num2);
            System.out.println("长方形面积是"+result);
        }
    }

    public static  int areaFunction(int num1,int num2){
        return num1 * num2;
    }
}

我们总结下程序流程图,它包含一个开始节点,多个中间处理结点,多个结束节点。

处理节点可以是等待用户输入(scanf),实际处理(areaFunction),判断(if/else),
输出(println),变量(num1,num2,result)。

等待用户输入是和外部的交互,输出是告诉外部处理结果。
num1、num2是用户外部的输入变量,result是中间变量

上面的代码定义了逻辑,我们可以执行代码,根据输入变量(num1,num2)会得到不同的结果

讲了这么多程序流程图,他和工作流什么关系呢?我认为实际上,工作流是一种特殊的程序流程图

Activiti工作流

我这里我就不介绍工作流的书面定义,它只考虑了严谨性,很难理解
现在我们使用activiti工作流实现一下长方形面积求和算法

史上最简单的activiti工作流入门教程,还看不懂你打我。_第4张图片
下面是activiti工作流和程序结构流程图的对比

程序结构流程图元素 activiti工作流元素 说明
Java的运行环境Jre 流程引擎
代码 流程定义/流程模型/流程图
代码执行 流程执行实例
启动事件 启始框
结束任务 终止框
用户活动 等待用户输入(scanf)
互斥网关 判断(if/else) 只有一个执行路径
并行网关 多线程 多个执行路径
子流程 子函数(areaFunction)
变量num1,num2 变量在activiti中无需定义,可以在发起流程和用户活动处理时传入

上面关于activity工作流的介绍。实际上涵盖了我们实际工作中80%的业务情况。

下面我着重介绍一下用户活动。
在我们的工作流使用当中。接触最多的就是流程审批,而流程审批中,最重要的就是用户活动。
什么是用户活动呢?需要用户参与的活动,如果一个节点需要用户参与,我们需要

  1. 定义节点审批人
  2. 提供页面、按钮供审批人操作
  3. 根据审批人操作驱动流程执行

一.定义节点审批人方式

编号 方式 优缺点 举例
1 具体人 简单、容易理解;当人员变动时都需要修改流程定义,对业务人员要求比较高;流程带版本,修改流程后,执行中流程还会到原审批人 总经理
2 单岗位单审批人 简单、容易理解;当人员变动时无需修改流程定义,修改流程后,执行中流程还会到新审批人,是【1】中版本的优化,推荐 总经理岗位
3 每个部门岗位类别单审批人 部门助理
4 单岗位多审批人,需要签收,签收后任务认领到具体人 副总裁
5 单岗位多审批人,会签,任意一人审批即可 和【3】类似,但不需要签收
6 单岗位多审批人,会签,所有人都审批后进入下一节点
7 单岗位多审批人,会签,投票,比例审批人同意进入下一节点 【5】,【6】是【7】的特殊情况
8 定义变量,通过外部程序传入流程 最灵活,满足所有情况

二.提供页面、按钮供审批人操作。

编号 方式 优缺点 举例
1 内置页面设计器 业务人员可以自己设计、修改页面,适用于简单页面
2 外置页面 程序员开发页面、灵活、工作量大
3 外置页面,提供页面设计功能 兼具【1】,【2】优点,工作量大
  • 用户活动举例

史上最简单的activiti工作流入门教程,还看不懂你打我。_第5张图片
史上最简单的activiti工作流入门教程,还看不懂你打我。_第6张图片

  • 服务活动举例史上最简单的activiti工作流入门教程,还看不懂你打我。_第7张图片

标题更多内容可参考我开发的

Java Spring boot activiti前后端分离,流程审批,权限管理框架

你可能感兴趣的:(spring,boot,activiti)