首页 > 其他分享 >01-工作流 workflow

01-工作流 workflow

时间:2023-07-19 22:24:04浏览次数:32  
标签:status 请假 01 流程图 workflow 流程 BPMN 工作 审批

title: 01-工作流 workflow
date: 2023-7-19 22:06:43
tags:
- Flowable

状态机解决流程问题

工作流:就是一个可以处理复杂情况的状态机。

例如,员工请假这个流程:首先员工提交请假申请,假设有项目经理进行审批,审批有两种结果:通过或者拒绝。

实现上面这个需求:

  1. 创建一张请假表,表中有员工的 id,请假的天数、请假的理由、项目经理的 id、请假的状态 status。
  2. 当员工请假的时候,就自动向这张表中添加一条记录。
  3. 然后,当项目经理登录到 OA 的时候,就来这张表中查询自己需要审批的请假申请,查到之后,可以选择批准或者拒绝。
  4. 接下来,员工登录之后,就可以查询到自己的请假申请的审批结果。

在这样的实现思路中,请假的流程我们是通过 status 这个字段来控制的。例如:

  • status=0:表示待审批
  • status=1:表示审批通过
  • status=2:表示拒绝

上面这个例子,status 就是状态码,通过这个字段的值来控制流程的状态,这种方式我们可以称之为使用状态机来解决流程问题,但是,这种思路,只能解决非常简单的流程问题。

一些复杂的流程

报销审批流程

img

在这个流程中,已经没法使用 status 去描述这个请假走到哪一步了。如果非要用 status,那么 status 可能会有很多取值:

  • 0:表示员工提交报销申请
  • 1:表示部门经理审批通过
  • 2:表示部门经理审批不通过,员工需要重新提交
  • 3:表示大区经理审批通过
  • 4:表示大区经理审批不通过
  • ...

笔记本电脑生产流程

img

这个流程中,不仅有串行任务,也有并行任务。虽然技术上来说,status 也还能做,但是,用 status 字段去描述这个流程,会非常非常复杂。

三大工作流

三大主流工作流,只要掌握其中一个,另外两个可以非常容易的上手。

最早的工作流是 jBPM,目前市面上大部分工作流的共同祖先。

  • Activiti:当 jBPM 发展到 jBPM4 这个版本的时候,内部发生了分歧,然后一波人出来单干,基于 jBPM4 开发出来了 Activiti5;留下来的人,继续开发 jBPM5 的时候,几乎完全重写了 jBPM4 的代码。目前 Activiti 的设计侧重于云,即更靠拢 Spring Cloud、Docker、K8s 等。
  • Flowable:Activiti5 在发展了一段时间之后,又从中分离出来一个团队,开发出来了 Flowable。Flowable 目前的核心思路还是做一个功能非常非常完善的流程引擎工具。除了常用的最最基本的工作流之外,Flowable 还提供了很多扩展点。
  • Camunda:Activiti5 发展没多久,从 Activiti5 中分离中的团队,开发的 Camunda。在这三个主流的流程引擎中,Camunda 是最为轻量级的一个,如果我们的系统,当用户在使用的过程中,需要动态的绘制流程图,那么可以使用 Camunda,这是一个小巧的工具,可以非常的方便的嵌入到我们自己的系统中。Camunda 还提供了一个 bpmn.js 的工具,可以非常方便的实现流程图的绘制。

流程图

工作流执行的基础是流程图。

一个完整的流程,要干嘛,先得画出来一个完整的流程图。

上面介绍了三种不同的工作流,那么三种不同的工作流的流程图绘制方式是否一样?

其实,流程图的绘制,有一套统一的标准:BPMN(Business Process Model And Notation),中文译作业务流程模型和标记法。

BPMN 就是一套图形化表示法,用图形来绘制、梳理业务流程模型。就是说,BPMN 其实是一套非常古老的流程图规范,Activiti、Flowable 以及 Camunda 都是支持这个规范的。所以,无论使用哪一个流程图,都可以依照 BPMN 规范去绘制流程图。

虽然 BPMN 大家都支持,但是,在具体的使用细节上,不同的流程引擎还是有差别的。

BPMN 流程图绘制规范

标签:status,请假,01,流程图,workflow,流程,BPMN,工作,审批
From: https://www.cnblogs.com/BNTang/p/17566931.html

相关文章

  • JavaScript学习笔记01(包含ES6语法)
    Js简介什么是Js?Js最初被创建的目的是“使网页更生动”。Js写出来的程序被称为脚本,Js是一门脚本语言。被直接写在网页的HTML中,在页面加载的时候自动执行脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JINcompiler)Js不仅可以在浏览器中执行,也可以......
  • 百度2015年笔试题:简述大端小端的概念并写出一个小程序来判断是大端还是小端
    首先我们来说一下大端小端的概念:大端存储和小端存储是计算机中数据存储的两种不同方式。在大端存储中,数据的高位字节被存储在内存的低地址处,而数据的低位字节被存储在内存的高地址处。这种存储方式类似于书写方式,先写高位字节,后写低位字节。例如,十六进制数0x12345678在大端存储中被......
  • LeetCode 1201. Ugly Number III 数学+二分答案
    Anuglynumberisapositiveintegerthatisdivisibleby\(a\),\(b\),or\(c\).Givenfourintegers\(n\),\(a\),\(b\),and\(c\),returnthe\(n\)thuglynumber.Solution考虑如何二分答案,假设一个函数\(f(num,a,b,c)\)会得到\([1,num]\)中uglynumb......
  • [SUCTF 2019]EasySQL
    [SUCTF2019]EasySQL题目来源:buuctf题目类型:web涉及考点:SQL注入、堆叠注入1.题目给了一个输入框,先随便传点东西进去传入数字回显如下:传入flag回显如下:传入字符无回显没什么其他线索了,还是爆破一下看看过滤了哪些字符:返回长度为507的字符都是被过滤了的,包括uni......
  • CS5466 Type-c to HDMI2.1_8K拓展坞方案芯片|低成本替代GSV6201方案
    GSV6201是一款高性能、低功耗、高性能的,USBType-C备用模式显示端口1.4至HDMI2.1转换器。通过集成增强型微控制器,GSV6201创造了一个经济高效的解决方案提供了上市时间优势。显示端口接收机支持高达32.4Gbps(HBR3,4通道)和HDMI发射机支持高达48Gbps(FRL,12G4Lane)。集成PowerDelivery3......
  • LeetCode 1011. Capacity To Ship Packages Within D Days 二分答案
    Aconveyorbelthaspackagesthatmustbeshippedfromoneporttoanotherwithindaysdays.Theithpackageontheconveyorbelthasaweightof\(weights[i]\).Eachday,weloadtheshipwithpackagesontheconveyorbelt(intheordergivenby\(wei......
  • maven 中deploy命令报401错误的原因及解决方案
    在mac版idea使用过程中有时候会出现deploy时候报401错误,如图: 经过详细的论证分析,找到如下原因及解决方案:原因一、pom文件李配置的私服仓库地址和settings.xml里配置的用户名和密码没有匹配上1、pom.xml里的仓库配置:<!--项目分发信息,在执行mvndeploy后表示要发布的位置。......
  • [SDOI2010] 代码拍卖会 题解
    [SDOI2010]代码拍卖会题解题目描述一个\(n,n\le10^{18}\)位数,仅由\(1\sim9\)组成,后一位数字一定大于等于前一位数字。求这些数中可以被\(m,m\le500\)整除的有多少,对\(999911659\)取模。解析这个数一定形如\(112334455677788999\)可以把它拆成\[\begin{aligned}......
  • 说说携程准备推出的「3+2」工作模式。
    阅读本文大概需要1.9分钟。开头忍不住先提下最近我们星球开展的视频号二期挑战计划,发现有球友居然一不小心就能做出爆款视频。要知道在此之前,他们连咋剪辑咋拍摄都摸不透,可见组局搞的这些挑战计划还是效果不错的。所以,如果你想做短视频,今年必须赶上,后续很难做成了。想参加之后新......
  • android transaction failed 29201/-1, size 0-0 line 3009
    解决"androidtransactionfailed29201/-1,size0-0line3009"错误引言在Android开发中,我们经常会遇到各种错误和异常。其中一个常见的错误是"androidtransactionfailed29201/-1,size0-0line3009"。这个错误通常与Fragment事务相关,并且可能会导致应用崩溃或功能异常......