返回顶部
首页 > 资讯 > 前端开发 > html >怎么开发一个简单的工作流引擎
  • 847
分享到

怎么开发一个简单的工作流引擎

2024-04-02 19:04:59 847人浏览 薄情痞子
摘要

本篇内容介绍了“怎么开发一个简单的工作流引擎”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!NO.1.第 1

本篇内容介绍了“怎么开发一个简单的工作流引擎”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

NO.1.第 1 关

怎么开发一个简单的工作流引擎

我查了一天啥是工作流,然后做出了如上图版本:

  • 按顺序添加任意个审批人组成一个链表,最后加一个结束节点

  • 记录当前审批人,当审批完后,审批人向后移动一位

  • 当审批人对应结束节点时,流程结束

老板:简陋了点。

No.2.第 2 关

老板又来了:要支持会签节点。

我又查了一天啥是会签节点,发现会签节点就是一个大节点,里面有很多审批人,当这个大节点里的所有人都审批通过后,才能进入下一个节点。

我想了一个星期,推翻了原来的链表式设计:

怎么开发一个简单的工作流引擎

结构上我做了如下调整:

  • 把节点分为两大类:简单节点(上图中长方形)和复杂节点(上图中圆形)。

  • 用一棵树表示整个流程,其中叶子节点都是简单节点,简单节点都是叶子节点。

  • 每个简单节点里都有且仅有有一个审批人。

  • 复杂节点包含若干个子节点。

  • 加入会签节点:会签节点激活后,所有的子节点都可以审批,当所有的子节点都审批完毕后,会签节点完成。

  • 加入串行节点:子节点只能从左到右依次进行审批,当最后一个子节点审批完成后,串行节点完成。

  • 所有的工作流最外层都是一个串行节点,该节点完成后代表整个工作流完成。

为了控制审批流程,我设计了一些节点状态:

  • Ready:可以进行审批操作的简单节点是 Ready 状态。

  • Complete:已经审批完成的节点状态。

  • Future:现在还没有走到的节点状态。

  • Waiting:只有复杂节点有该状态,表示在等待子节点审批。

借助上述规则,一次带会签节点的工作流审批过程如下:

怎么开发一个简单的工作流引擎

怎么开发一个简单的工作流引擎

老板:有点意思。

No.3.第 3 关

老板来了:要支持并行节点。

我查了一下午啥是并行节点,发现并行节点是一个包含很多审批人的大节点,这个大节点里任何一个人审批通过,则该节点就完成。

然后很快就加入了并行节点:并行节点是一个复杂节点,该节点激活时,任何一个子节点都可以进行审批,且任何一个子节点是完成状态时,该节点完成。

加入新状态 Skip:当一个并行节点的子节点状态为非(Ready, Waiting)时,其它兄弟节点及其子节点的状态被置为 Skip。

举个栗子:

怎么开发一个简单的工作流引擎

老板:这个设计添加新节点还挺方便的。

No.4.第 4 关

老板又来了:节点要支持嵌套,比如会签节点里有个并行节点,并行节点里又有个复杂节点,要可以嵌套任意层的那种。

我:其实已经支持了~

怎么开发一个简单的工作流引擎

能无限扩展的树形结构可以支持任意复杂流程。

老板:小伙子有点东西!

No.5.第 5 关

老板又来了:要支持条件节点。

工作流附带一个表单,要根据表单的内容确定下一步进入哪个分支。

经过几天的冥思苦想,我加入了条件节点:条件节点类似并行节点,只不过只有满足条件的子节点才能进入接下来的审批。

怎么开发一个简单的工作流引擎

老板:已阅。

No.6.第 6 关

老板又来了:审批人多加两种类型,比如可以从表单中选择下一个审批人,还有根据发起人不同选择不同的审批人。

怎么开发一个简单的工作流引擎

经过一番考虑,我把简单节点分成了 3 类:

  • 第一种:审批人是写死的。

  • 第二种:审批人从表单中读取。

  • 第三种:根据发起人和一个映射函数,算出审批人。比如 get_主管("钱某") 得到钱某的主管 李某。

老板:嗯。

No.7.第 7 关

老板又来了:节点可以从前往后审批,那能不能从后往前驳回?

我:......

首先实现了驳回到发起人的功能,相当于一切从头开始:只有 Ready 状态的节点有权利驳回。(就像只有 Ready 状态的节点有权利审批一样)

怎么开发一个简单的工作流引擎

老板:你小子偷懒。

No.8.第 8 关

老板又来了:先实现驳回到上一个审批人吧。

驳回到上一个审批人其实是个很复杂的逻辑,因为工作流中的节点可以无限嵌套,所以如何确定上一个状态有哪些审批人并不简单。

牺牲了一些头发,我终于实现了驳回上一级的功能:

怎么开发一个简单的工作流引擎

老板:阅。

No.9.第 9 关

老板又来了:实现一个驳回到任意节点的功能。

我发现这个需求并不难实现:不断的驳回上一级,直到 Ready 状态的节点包含要驳回到的节点为止。

老板:嗯。

NO.10.第 10 关

老板又来了:在普通节点加一个时间限制,要是在规定时间内没完成就显示已超时。

我:还有这种需求?

怎么开发一个简单的工作流引擎

不过还是实现了。

此时我明白了需求和头发呈负相关,需求越多,头发越少。

NO.11.第 11 关

老板又来了:加一个代理功能,比如有件事让你审批,但是你拿不准,那就转给拿得准的人审批。

马上我发现这个需求跟以往有本质的不同,以往的工作流的节点关系一开始就是固定的,就是在发起流程之前确定的,但是现在要在审批过程中更改。

无非是加了一些班,掉了一些头发,最终设计了如下方案:

  • 代理操作的本质是,新建一个并行节点作为本节点的父节点,再新建一个兄弟节点放代理人,这样自己和代理人都能审批通过。

  • 代理操作可以无限嵌套,即代理人也可以找人代理。

怎么开发一个简单的工作流引擎

NO.12.第 12 关

老板又来了:能不能再加一个取消代理的功能?

......

我已经宠辱不惊了,加就加:

  • 取消代理是代理的逆操作

  • 如果代理人审批过了那就不能取消代理

怎么开发一个简单的工作流引擎

NO.13.第 13 关

老板又来了:给每个节点加个前后置条件吧,满足前置条件才能进入该节点,满足后置条件该节点才能审批完成。

我的内心:啊老板再见,啊老板再见吧再见吧再见吧!

我的嘴:好的老板,收到收到。

后来:后来我真的给每个节点加了前后置条件,与此同时审批逻辑的相关代码增加了一倍。

NO.14.第 14 关

老板又来了:现在有的工作流已经非常复杂了,审批起来耗时较长,能不能对每个进行中的工作流计算一个指标:直观的显示目前审批进行的百分比。

我:收到。

其实跟之前的需求比起来这个并不复杂,因为不涉及核心逻辑的改动,本质只是输入一棵树形结构然后根据不同节点的状态输出一个整数。

经过测试思考,最终敲定的方案如下:工作流完成的百分比指的是树中最右侧 Ready 状态的节点到最左侧节点的距离 / 最右侧节点的距离。

NO.15.第 15 关

老板又来了:能不能给每个节点挂两个可以执行的脚本,分别在开始审批该节点和审批完成该节点后执行?

我:收..到。

后来我当然实现了这个功能,同时也发现正值壮年的我已经秃了。

“怎么开发一个简单的工作流引擎”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么开发一个简单的工作流引擎

本文链接: https://lsjlt.com/news/83440.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么开发一个简单的工作流引擎
    本篇内容介绍了“怎么开发一个简单的工作流引擎”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!NO.1.第 1...
    99+
    2024-04-02
  • 工作流引擎开发前的准备
        对于有些对工作流好奇或者想自己开发个工作流引擎的朋友,今天我们来谈下开发一个工作流引擎需要做些什么,干事前咱得先知道要干些啥,所以得明白一个工作流引擎大体都需要包含哪些模块;那么首先,咱得提供一个流程建模的地方,...
    99+
    2023-06-02
  • 力软快速开发框架工作流引擎
    前言  提到工作流很多人都会想到OA,AO就是典型的工作流应用,但是工作流并不仅仅局限于OA,工作流应用该算是基础框架软件,主要用于流程的重组和优化,它有广阔的应用领域。在C#下我们自己研发工作流引擎等,在.net下却几乎找不到令...
    99+
    2023-06-03
  • 用React Native制作一个简单的游戏引擎
    目录简介开始吧对React Native游戏引擎的简单介绍让我们在React Native中建立一个蛇形游戏创建游戏实体游戏逻辑移动蛇头"游戏结束!"条件食用食物控制蛇尾巴功能结语简...
    99+
    2024-04-02
  • 工作流引擎,企业工作流管理系统二次开源开发框架
    工作流(Workflow),即“工作业务过程的部分或整体在计算机应用环境下的自动化”,能够完全自动执行的经营过程。工作流解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务,以达到提高工...
    99+
    2023-06-02
  • java工作流引擎怎么实现
    要实现Java工作流引擎,可以按照以下步骤进行: 确定需求:首先明确需要实现的工作流引擎的功能和要求,例如流程定义、流程实例管理...
    99+
    2023-10-26
    java
  • 如何使用React Native制作一个简单的游戏引擎
    这篇文章将为大家详细讲解有关如何使用React Native制作一个简单的游戏引擎,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。开始吧要制作任何游戏,我们需要一个循环,在我们玩的时候更新我们的游戏。这个循...
    99+
    2023-06-15
  • python工作流引擎框架怎么调用
    要调用Python工作流引擎框架,你需要按照以下步骤进行操作: 安装工作流引擎框架:首先,你需要在Python环境中安装所需的工作...
    99+
    2024-02-29
    python
  • 简述php开发网站的整个工作流程
    PHP作为服务器端脚本语言,已经成为了网站开发的重要工具之一。php具有简单易学、开发效率高等特点,让很多开发者都选择了它来进行网站开发。然而,网站的开发工作并不是单纯编写代码就可以完成的,它涉及的工作流程非常复杂。本文将为大家介绍php开...
    99+
    2023-05-14
    php
  • golang工作流引擎的原理是什么
    Golang工作流引擎的原理是通过定义和执行一系列工作流程来实现业务逻辑的自动化处理和流程管理。以下是工作流引擎的基本原理: 工...
    99+
    2024-02-29
    golang
  • java怎么实现简单工作流
    在Java中实现简单工作流可以使用以下步骤:1. 定义工作流的流程图:确定每个工作流程节点的顺序和条件。2. 创建工作流程节点的类:...
    99+
    2023-08-31
    java
  • 怎么用Python开发一个简单的猜数字游戏
    本篇文章给大家分享的是有关怎么用Python开发一个简单的猜数字游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何使用Python制作一个简单的猜数字游戏。游戏规则玩家将猜...
    99+
    2023-06-16
  • .Net Core快速开发平台,强大工作流引擎,多系统快速配置
    工作流引擎,是开发企业软件开发中的重要一部分。 所谓工作流引擎,是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方...
    99+
    2024-04-02
  • 一个简单的基于Debian的开发环境。
    这只是一个快速演练,描述了如何设置一个体面的开发环境,允许轻松设置多个站点。它已经假定您已经安装并配置了PHP,MySql和Apache已经运行的Debian或Ubuntu操作系统 。你还需要一个有效的sudo。虽然其中一些东西是...
    99+
    2023-06-03
  • php开发网站的整个工作流程是什么
    这篇文章主要介绍了php开发网站的整个工作流程是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php开发网站的整个工作流程是什么文章都会有所收获,下面我们一起来看看吧。一、需求分析网站开发前期需要进行需求分...
    99+
    2023-07-05
  • 如何用Go语言开发一个简单的物流管理系统
    如何用Go语言开发一个简单的物流管理系统随着电子商务的兴起,物流行业发展迅速。为了提高物流运输效率、优化配送流程和减少成本,许多物流公司开始使用信息技术来进行管理和操作。在这篇文章中,我们将介绍如何使用Go语言开发一个简单的物流管理系统。一...
    99+
    2023-11-20
    Go语言 物流管理系统 简单开发
  • Cassandra数据存储引擎是怎么工作的
    Cassandra数据存储引擎是一个分布式、高可用、支持水平扩展的NoSQL数据库引擎。它的工作原理主要包括以下几个方面: 数据...
    99+
    2024-04-09
    Cassandra
  • 怎么用HTML制作一个简单的页面
    这篇文章主要介绍“怎么用HTML制作一个简单的页面”,在日常操作中,相信很多人在怎么用HTML制作一个简单的页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用HTML制...
    99+
    2024-04-02
  • Django怎么创作一个简单的小程序
    这篇文章将为大家详细讲解有关Django怎么创作一个简单的小程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通过web框架搭建一个最简易的程序:第一步:新建一个web框架程序通过CMD进入到想要创建we...
    99+
    2023-06-15
  • 怎么用PHP制作一个简单的日历
    这篇“怎么用PHP制作一个简单的日历”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用PHP制作一个简单的日历”文章吧。实...
    99+
    2023-07-05
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作