工作流引擎架构设计

一个应用MIS的系统的架构离不开工作流引擎,具有流程引擎思维的架构人员设计系统的时候就有流程的思维,他区别于过程思维,过程思维开发出来的系统,用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待办、在途、查询、近期等菜单,用户使用起来比较清爽、容易培训、学习成本低。比如:我们做一个工单系统,如果采用流程思维则创建通过创建一个工单流程,然后设计表单即可,如下图:

(流程引擎:流程设计器)

(表单引擎:表单设计器)

所有说软件系统的架构需要一个工作流引擎支撑系统的开发,您设计的系统就是面向流程的系统,在业务变化的时候,您可以随时调整,使用较小的成本来开发您的系统。

但随着同类需求不断增多,于是开始了工作流引擎的开发之路。查找了一些资料之后,开发了现阶段的工作流引擎,文章后面会有介绍。

虽然现在基本上能满足日常的需求,但感觉还不够智能,还有很多的优化空间,所以正好借此机会,详细了解了一些完善的工作流引擎框架,以及在架构设计上需要注意的点,形成了这篇文章,分享给大家。

  1. 什么是工作流

先看一下维基百科对于工作流的定义:

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。

工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

简单来说,工作流就是对业务的流程化抽象。WFMC(工作流程管理联盟) 给出了工作流参考模型如下:

举一个例子,比如公司办公的 OA 系统,就存在大量的申请审批流程。而在处理这些流程时,如果每一个流程都对应一套代码,显然是不现实的,这样会造成很大程度上的代码冗余,而且开发工作量也会骤增。

这个时候就需要一个业务无关的,高度抽象和封装的引擎来统一处理。通过这个引擎,可以灵活配置工作流程,并且可以自动化的根据配置进行状态变更和流程流转,这就是工作流引擎。

  1. 简单的工作流

那么,一个工作流引擎需要支持哪些功能呢?

这个问题并没有一个标准答案,需要根据实际的业务场景和需求来分析。在这里,我通过一个工单流程的演进,从简单到复杂,循序渐进地介绍一下都需要包含哪些基础功能。

  1. 最简单流程:

最简单的一个流程工单,申请人发起流程,每个节点审批人逐个审批,最终流程结束, 在ccflow看来,属于线性流程,每个节点都是线性节点,他是一条线。流程启动后,在一个时间点上,只有一个节点是活跃的。

  1. 会签定义

在这个过程中,节点分成了两大类:简单节点和复杂节点。简单节点处理逻辑不变,依然是处理完之后自动到下一个节点。复杂节点比如说会签节点,则不同,需要其下的所有子节点都处理完成,才能到下一个节点,在ccflow的概念里,属于同表单分合流、或者异表单分合流。

  1. 并行定义

如下并行流程图:

同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。在ccflow概念中节点上多人处理规则中的协作模式,当前节点所有的人都完成后,由最后一个人发送到下一个节点上去,我们称为会签节点。

  1. 条件判断定义

需要根据不同的表单内容进入不同的分支流程,举一个例子,比如在进行休假申请时,请假一天需要直属领导审批,如果大于三天则需要部门领导审批。

在ccflow的概念中,方向条件分为表单字段、用户身份、用户部门、API、流程系统参数等,一个灵活高可配置的系统,需要支持多中场景,才能减少代码的开发。

  1. 动态审批人定义

审批节点的审批人需要动态获取,并且可配置。

审批人的获取方式可以分以下几种:

  1. 固定审批人
  2. 从申请表单中获取
  3. 根据组织架构,动态获取
  4. 从配置的角色组或者权限组中获取
  1. 撤销和驳回

节点状态变更可以有申请人撤回,审批人同意,审批人驳回。那么在驳回时,可以直接驳回到开始节点,流程结束,也可以到上一个节点。更复杂一些,甚至可以到前面流程的任意一个节点。在ccflow的概念中,撤销是发送人主动执行的动作,驳回责任处理人退回的动作。

  1. 自动化节点

有一些节点是不需要人工参与的,比如说联动其他系统自动处理,或者审批节点有时间限制,超时自动失效,自动化节点需要服务来支持,在ccflow的概念中,可以在节点属性的谁执行它,可以设置机器执行节点。

  1. 个性化通知

节点审批之后,可以配置不同的通知方式来通知相关人。

以上是我列举的一些比较常见的需求点,还有像加签,代理,脚本执行等功能,如果都实现的话,应该会是一个庞大的工作量。当然了,如果目标是做一个商业化产品的话,功能还是需要更丰富一些的。但把这些常见需求点都实现的话,应该基本可以满足大部分的需求了,至少对于我们系统的工单流程来说,目前是可以满足的。

  1. 工作流引擎对比

既然这是一个常见的需求,那么需要我们自己来开发吗?市面上有开源项目可以使用吗?答案是肯定的,目前,市场上比较有名的开源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda, CCFlow,JFlow 等等。其中:Jbpm、Activiti、Flowable、Camunda 四个框架同宗同源,属于国外的工作流引擎。CCFlow,JFlow是国产的工作流引擎,它集成的自己研发的表单引擎,融合了MIS系统开发中,业务流程、公文流程、工业流程下的多种业务规则,让其设计更具有适应性。流程引擎、表单引擎、数据、用户之间的关系,类似于车的控制系统、车厢、数据、操作员,如下图所示。

(图:流程引擎、表单引擎、业务数据、操作员的关系)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/166324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SELinux refpolicy详解(2)

接前一篇文章:SELinux refpolicy详解(1) 本文内容引自: Documentation SELinuxProject/refpolicy Wiki GitHub 4. 入门指南 文档是参考策略的主要目标之一。入门指南(https://github.com/SELinuxProject/refpolicy/wiki/GettingStarted)提供了有关编写参考策略模块的…

关于vue3项目中 vite.config.js项目配置 多个请求地址代理配置

关于VUE3 vite.config.js文件配置相关 提示:本文记录了我们项目中使用到了多个不同的接口请求前缀地址配置代理,如果有更好的优化方案欢迎大佬指点呀: 以下是我最近项目中的vite.config.js文件配置,由于刚开始vue3不久&#xff…

JS 类型转换机制

这篇写得不错: 百度安全验证 包括显示转换(就是调用函数)、隐式转换(运算符 - 时自动转换成数字/字符串) 注意到: abc-1 //NaN 非法字符转换为数字 结果是NaN

LeetCode 1410. HTML 实体解析器:字符串匹配

【LetMeFly】1410.HTML 实体解析器:字符串匹配 力扣题目链接:https://leetcode.cn/problems/html-entity-parser/ 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。…

【点云surface】基于多项式重建的平滑和法线估计

1 介绍 基于多项式重建的平滑和法线估计(Smoothing and normal estimation based on polynomial reconstruction)是一种常用的点云处理方法,用于平滑点云数据并估计每个点的法线信息。 该方法基于Moving Least Squares(MLS&…

docker安装nacos,实现和mysql容器的通信

1.下载nacos镜像 docker pull nacos/nacos-server2. 启动nacos 启动命令如下: docker run -d -p 8848:8848 --name nacos \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e SPRING_DATASOURCE_PLATFORMmysql \ -e MYSQL_SERVICE_HOST192.168.131.223…

连接的原理(待修改)

搞数据库⼀个避不开的概念就是Join,翻译成中⽂就是连接。 相信很多⼩伙伴在初学连接的时候有些⼀脸懵逼,理解了连接的语义之后⼜可能不明⽩各个表中的记 录到底是怎么连起来的,以⾄于在使⽤的时候常常陷⼊下边两种误区: 误区⼀&…

linux磁盘清理

目录 排查过程1、查看磁盘占用情况2. 按照占用大小进行倒排-当前目录及其子目录3.当前目录磁盘占用情况 清理命令 排查过程 1、查看磁盘占用情况 df -hdf -h 命令用于显示磁盘空间的使用情况,以人类可读的方式呈现,其中:df 是 “disk free”…

“AI就绪”新计划,亚马逊云科技到2025年向200万人提供免费AI技能培训

AI就绪(AI Ready)计划 到2025年为全球200万人提供 免费人工智能(AI)技能培训和教育资源 亚马逊云科技宣布启动“AI就绪(AI Ready)”计划,旨在到2025年为全球200万人提供免费人工智能&#xff08…

Python与设计模式--适配器模式

7-Python与设计模式–适配器模式 一、外包人员系统兼容 假设某公司A与某公司B需要合作,公司A需要访问公司B的人员信息,但公司A与公司B协议接口不同, 该如何处理?先将公司A和公司B针对各自的人员信息访问系统封装了对象接口。cla…

易点易动固定资产管理系统:全生命周期管理的理想选择

在现代企业中,固定资产管理是一项至关重要的任务。为了确保企业的资产安全、提高资产利用率,全面管理固定资产的生命周期至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案,实现了从固定资产申购、采购、入库、领用、退库、…

linux 内存回收mglru算法代码注释2

mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru,可参考linux 内存回收代码注释(未实现多代lru版本)-CSDN博客 新的算法在引入4代lru的同时,还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…

ELK企业级日志分析平台——elasticsearch

集群部署 文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html 下载:https://elasticsearch.cn/download/ 主机 ip 角色 k8s1 192.168.92.11 cerebro elk1 192.168.92.31 elasticsearch elk2 192.168.92.32 elasti…

数据库实验五 数据库设计

数据库实验五 数据库设计 一、实验目的二、实验内容三、实验内容四、验证性实验五、设计性实验 一、实验目的 1.了解E-R图构成要素以及各要素图元。 2.掌握概念模型E-R图的绘制方法。 3.掌握概念模型向逻辑模型的转换原则和步骤。 4.运用sql编程实现 二、实验内容 1.选取一个…

线段树---数据结构学习

线段树的教程可以参照线段树 这里推荐 https://oi-wiki.org/ 这个网站,数据结构讲的非常透。 线段树学了很多次忘了很多次,这次打算记录一下以后方便回顾(leetcode这类题遇见的不算特别多)。 样板例题 leltcode-307 #题目样板 class NumArray {private …

医院手术麻醉信息系统全套源码,自主版权,支持二次开发

医院手术麻醉信息系统全套商业源码,自主版权,支持二次开发 手术麻醉信息系统是HIS产品的中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与…

人工智能中的文本分类:技术突破与实战指导

在本文中,我们全面探讨了文本分类技术的发展历程、基本原理、关键技术、深度学习的应用,以及从RNN到Transformer的技术演进。文章详细介绍了各种模型的原理和实战应用,旨在提供对文本分类技术深入理解的全面视角。 关注TechLead,分…

Hadoop发行版 Cloudera CDH 6.3.2及CM 安装包下载(阿里云盘 不限速)

CDH(全称Cloudera’s Distribution, including Apache Hadoop)是由Cloudera公司构建的Hadoop稳定发行版,不仅含有 Apache Hadoop,还整合了Hive、Spark等组件。 由于CDH已停止维护,且Cloudera不再为CDH提供免费的下载服…

git 使用过程错误集合

文章目录 1、git-credential-manager-core was renamed to git-credential-manager2、credential-manager-core is not a git command. See git --help. 1、git-credential-manager-core was renamed to git-credential-manager 出现以下提示建议尽快更新您的 Git 配置以使用新…

回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测

回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现SCN随机配置网络多变量回归预测 1.data为数据集,7个输入特征&#xff0…