某局工作流引擎方案
作者:毫末科技
邮箱:hxg@haomo-studio.com
1 功能架构
本工作流引擎采用微服务架构,兼容主流的BPMN2.0工作流规范,提供基于事件驱动的流程流转,打通系统、人、数据等要素的自动/人工相结合的任务管理体系。为给使用者提供便利、简介的操作过程,本工作流引擎提供了可视化的服务流程编辑器,以及可视化的决策规则编辑器。工作流引擎作为整套系统流程流转的核心部分,制定了统一服务总线规范,可以方便的集成其他应用模块,并提供了丰富的开放式接口供其他模块调用。系统整体采用插拔式微应用架构,可以基于低代码平台,方便的扩展基于工作流引擎的新功能模块。
工作流引擎的功能架构图如下:
1.1 工作流引擎作用说明
工作流引擎在整套系统中起到重要的作用。它既可以起到人工业务流转的作用,又可以将各个功能模块的功能与工作流模块打通,实现模块和模块间、模块和人工操作间、人和人间的操作互通。如下图可以表示工作流引擎的各个部分与各模块之间的关系:
对上图的说明如下:
- 模块A和模块B,指的是整个系统中的各个功能模块,例如视频模块、地图服务模块等;
- 每个模块都可能包含界面部分和服务API接口两个部分;
- 工作流引擎的工作,是打通各个模块的界面交互和服务API接口之间的交互;
- 模块间交互的形式四大类:
- 应用界面与应用界面的交互:可以通过流程引擎的配置,在流程流转的环节中,不同的人执行不同的表单任务(界面)来完成交互;
- 应用界面触发API的交互:可以通过界面直接调用API的方式完成,也可以通过触发工作流、再由工作流调用API的方式完成;
- API触发应用界面的交互:可以通过流程引擎完成。例如API触发启动流程,流程中存在人工操作的表单界面。
- API与API间的直接交互:可以通过API服务编排模块完成,实现API与API之间的直接打通;
1.2 工作流引擎与警务中台对接
警务中台作为一个集成的大模块,里面有很多细分的小模块。从技术层面来说,警务中台的界面组件跟工作流引擎部分不存在互通,主要是API接口层面进行打通。具体来说,涉及到的警务中台API包括:
- 图表API
- 计算API
- 应用服务API
- 其他API应用市场内的API
警务中台的API,与工作流引擎的打通,有两种形式:
- 通过流程引擎中配置API服务任务的方式,作为流程节点互通;
- 通过API服务编排引擎,实现API与API之间、API与流程之间的互通;
2 功能特色
2.1 可视化服务流程编排
本工作流引擎提供了丰富的可视化流程编排功能,具体来说包括三部分:
- 可视化API服务编排:打通中台的相关接口,并与工作流的接口产生接口层面的互动,并产生相关的任务指令下发等功能。包含以下子概念:
- 接口端子:每个接口端子配置一个单独的API连接参数;
- 数据流图:接口端子及接口端子之间的连线,组成一张数据流图;
- 可视化工作流编排:实现工作流程编辑的功能,是该工作流引擎的核心部分。
- 可视化表单编辑器;实现与人交互的表单的配置。
2.2 事件驱动流转
本工作流提供了基于事件驱动的流程流转触发机制,可以由中台的机器学习生成事件、流程事件、人工触发的事件等触发流程的启动与流转。
2.3 统一服务总线规范
为方便与业务中台、应用、其他模块进行互动操作,本工作流引擎提供统一服务的总线规范,在此规范基础上,可以在可视化编辑器中进行服务编排与调度配置。
2.4 开放式API
本平台提供了丰富的开放式API功能,涵盖流程的配置、流程的启动与管理、任务的配置、任务的启动与管理、流程监控、流程日志监控等功能。
2.5 插拔式微应用配置
本工作流引擎提供了丰富的开放式API接口及前端界面组件,依托于低代码平台,可以配置出丰富的微应用,涵盖PC、小程序、Android、H5等各端;
3 功能详述
工作流引擎在整套系统中起到重要的作用,下连警务中台、上接低代码平台,承载关键业务的流转功能。整个系统的功能框图如下图所示:
工作流引擎主要包括两大功能:
- 流程引擎:指的是传统意义上的BPM流程引擎相关的内容。
- API服务编排引擎:指的是模块API与模块API之间的服务编排的引擎。
基于工作流引擎提供的能力,系统将提供强大的开发层能力支持:
- 无代码开发:主要是面向民警端的微应用开发。系统将内置丰富的业务组件,每个业务组件将配置好便捷的属性,方便民警进行无代码拖拽开发和配置,便可以配置出丰富的基于工作流引擎的临时应用模块;
- 低代码开发:主要是面向开发人员的微应用开发。低代码平台提供了大量组件,开发人员可以基于已有的组件,编写复杂的业务逻辑代码,实现更加丰富的功能。
- 服务编排开发:主要是面向开发人员的服务API之间的交互开发。服务编排引擎将基于统一的服务规范,连接中台、工作流引擎、低代码平台和其他系统模块,打通API与API之间的数据交互;
3.1 流程引擎
流程引擎包括的功能如下:
- 流程设计:指的是传统意义上的支持BPMN2.0规范的流程引擎。包含以下子功能:
- 提供了可视化流程建模界面。建模界面包括流程节点、流程图编辑、节点或连线属性设置等功能;
- 支持与常见的Java后端框架的集成;
- 提供Rest API接口与第三方应用集成;
- 支持外部表单设计器,从而可以集成丰富的表单设计组件;
- 提供了丰富的工作流元素,如任务、事件、网关等,具体如下:
- 事件:支持定时器事件、启动事件、结束事件、消息事件、信号事件、边界事件等丰富类型。
- 网关:网关支持下列类型:
- 排他网关:也叫异或网关,或者基于数据的排他网关,用于对流程中的决策建模。
- 并行网关:并行网关不计算条件,如果连接到并行网关的顺序流上定义了条件,会直接忽略该条件。并行网关可以将执行分支为多条路径,也可以合并多条入口路径的执行,并行网关的功能取决于其入口与出口顺序流。
- 包容网关:可看做排他网关与并行网关的组合。与排他网关一样,可以在包容网关的出口顺序流上定义条件,包容网关会计算条件。然而主要的区别是,包容网关与并行网关一样,可以同时选择多于一条出口顺序流。
- 任务:工作流引擎支持的任务类型超过十五种。
- 用户任务:用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。用户任务允许标识到期日期以及直接指派给用户。
- 邮件任务:工作流引擎引擎可以向一个或多个收信人发送邮件,使用支持 SMTP 的外部邮件服务器发送邮件。
- 其他的任务类型还有脚本任务、服务任务等。
- 表单设计:用来配置流程与人员互动的相关表单内容。表单配置模块主要由表单设计器完成。包括以下几个部分:
- 表单组件库:提供了大量常用的表单组件
- 布局组件:栅格布局组件、分割线组件等;
- 基础组件:单行文本输入框、多行文本输入框、下拉选择器、单选框、复选框、日期选择器、文件上传组件、计数器、按钮等;
- 复杂组件:富文本编辑器、表格、日历组件等;
- 业务组件:部门组件、人员组件等;
- 表单设计器:可以从表单组件库中拖拽到表单设计器中,可以在表单设计器中拖拽表单字段的位置;
- 表单和字段属性配置:可以设置表单的属性和单个字段的属性;
- 表单组件库:提供了大量常用的表单组件
- 流程执行:流程执行产生了每个流程执行过程的相关数据。包括以下内容:
- 执行中任务数据:查看正在执行的任务
- 执行中流程实例:查看正在执行的流程实例
- 流程管理:流程建模产生的数字化内容就是流程模型;流程模型是业务开展的重要指导原则;流程模型的数字化资产是业务的重要资产。流程模型的数字化资产内容包括:
- 流程模型:每个流程模型由多个流程节点和节点间的连线组成;
- 流程节点:每个流程节点,可以是事件、任务、网关等多种类型;每个节点都有丰富的属性配置功能。
- 流程管理门户,可以方便用户清晰的看到整个工作流引擎的工作状况,实现以下内容:
- 模型报表:统计每天、每周的模型创建数量、每个模型的实例创建数量;
- 流程报表:统计当前所有流程各种状态任务数量、统计各类流程数量占比等;
- 任务办理统计:统计任务的处理量、处理耗时、办事达人统计、任务办理排行等;
- 流程分析:对每个流程的流转数据进行详细细致的分析,主要从几个层面进行数据分析:
- 数量统计分析:如流程模型数量、流程实例数量、各种任务实例数量等;
- 耗时统计分析:如流程实例平均耗时、任务实例平均耗时、任务实例耗时直方图等;
- 流程运维:工作流引擎在运行过程中,将产生大量历史数据,主要包括:
- 历史流程实例;
- 历史任务实例;
- 流程监控:提供对流程的全方位监控,包括:
- 引擎服务资源监控:如CPU、内存的消耗情况,JVM的运行时长等监控;
- 流程实例监控:监控所有运行中的流程实例;
- 流程任务监控:监控所有运行中的流程任务;
- 流程日志监控:生成流程流转产生的日志,并存储到日志系统中,允许用户对流程的流转过程进行日志层面的监控和分析;
- 流程优化:基于以上对流程的全方位监控、分析、管理功能,本引擎为流程优化的工作提供了详实的数据支撑。流程优化是一件长期、持续的工作,目的是未来加速组织内部的协作流程,方便工作人员快速完成相关工作。流程的优化主要可以从以下几个方面入手:
- 优化慢流程的流转配置:支持基于流程效率的监控和分析,完成对流程流转配置的优化;
- 简化人工任务处理:支持对任务节点处理效率的监控和分析,为优化任务节点提供数据分析支撑;
- 决策引擎:由决策和其他东西组成,决策由表达式描述。提供了基于决策表类型的表达式,为输入表达式与输出表达式两个主要区域。在决策表编辑界面,可以选择命中策略。决策配置可以被流程引擎中定义的流程调用:在流程中引入一个决策任务,并选中引用决策表,来使用新创建的选择表。共有两大类(单命中、多命中)七种命中策略可选:
- (1)单命中、第一命中:多个规则允许交叉,执行从上到下的第一条命中项。
- (2)单命中、唯一命中:多个规则不允许交叉,执行从上到下的第一条唯一命中项。
- (3)单命中、任一命中:规则允许交叉,但是所有输出的优先级相同,随机执行一条命中项。
- (4)单命中、优先级:多个命中规则的优先级不同,执行优先级最高的那条。
- (5)多命中、输出优先级排序:按照输出优先级递减的顺序返回所有命中。
- (6)多命中、规则顺序排序:按照规则顺序返回所有命中。
- (7)多命中、聚合:按照随机顺序返回所有命中。
- 流程开放API:包括以下API
- 服务编排相关API
- 服务接口端子配置API,如增删改查服务接口端子等;
- 数据流图配置API,如数据流图新增接口端子、新增处理节点、新增连线等;
- 数据流流转管理API,如数据流触发、停止等;
- 工作流相关API
- 流程配置定义相关API,如增删改查流程定义;
- 流程实例管理API,如启动流程、结束流程等;
- 任务定义相关API,如人工任务定义、服务编排任务定义、API调用任务定义等;
- 任务实例管理API,如任务提交、任务撤回等;
- 表单定义相关API,如增删改查表单、增删改查表单字段等;
- 表单实例相关API,如表单内容提交等;
- 服务编排相关API
- 流程低代码平台界面组件:用户可以结合低代码平台、流程相关的API及流程相关的界面组件,组装丰富的流程微应用。提供PC Web端、小程序端、移动端、大屏可视化端的各类相关组件,包括以下组件:
- 流程配置定义相关组件。如:流程定义、流程节点配置、流程流转配置等界面组件;
- 流程实例管理相关组件。如:进行中流程、已结束流程等;
- 任务。如:代办列表、已办列表、办结列表等;
(1) 新增流程
- 支持拖拽式生成工作流图;
- 支持多种流程节点元素,如用户人物、脚本任务、决策任务、启动事件、结束事件、定时启动事件、排他网关、并行网关等,并支持每种节点的属性配置;
(2) 新增流程表单
- 支持拖拽式生成各种复杂布局的表单页面;
- 支持多种表单组件,如单行文本输入框、多行文本输入框、下拉选择器、单选框、复选框、日期选择器、文件上传组件、计数器、按钮等;
(3) 发布流程
- 支持流程与表单绑定的操作,一个表单可以绑定到多个流程中;
- 支持流程的发布版本管理;
(4) 启动流程
- 支持应用内手动点击事件和流程接口触发启动流程流转;
(7) 流程审批
- 支持流程的人工审批操作,审批动作支持同意、拒绝等;
- 支持审批节点的意见提交、表单字段内容更改等;
(5) 结束流程
- 支持流程流转到终点后自动结束和手动强制结束流程;
(6) 归档流程
- 支持归档已经结束的历史流程,所有已归档流程不能再启动流程实例;
(7) 监控流程状态
- 支持对流程后台服务的CPU/内存等资源情况进行监控;
- 支持对各个流程的运行状态进行监控,如各种流程的流转时长、当前流程的状态、各个节点的处理时长等;
(8) 分析流程
- 支持对流程的运行状况进行统计分析,为流程优化提供详实的支持数据;
- 支持数量、耗时等维度的统计分析,如流程模型数量、流程实例数量、各种任务实例数量、流程实例平均耗时、任务实例平均耗时、任务实例耗时直方图等;
(9) 流程运维-归档历史数据
- 支持对已经办结且历史久远的流程数据归档操作,所有归档的历史数据不再呈现给最终用户;
(10) 流程运维-对产生错误的流程模型、流程实例数据进行直接清除操作;
- 支持对错误的流程模型进行删除、数据清除操作;
(11) 低代码平台使用流程组件和API
- 支持在低代码平台上调用工作流相关的页面组件,例如工作流表单组件、工作流任务列表、工作流流程图、工作流任务详情等组件;
- 支持在低代码平台上直接调用工作流相关的API接口,并将启动流程等接口封装成特定的业务组件;
(12) 流程配置打通警务中台
- 支持在流程配置中,配置脚本/服务任务节点,该种类型节点可以实现直接调用警务中台API、或调用服务编排中的流图api的功能;
(13) 警务中台触发流程流转
- 流程引擎开放的API,为警务中台提供了丰富的接口进行调用;
- 警务中台在完成计算后,可以触发流程的启动、关闭等操作;
3.2 API服务编排引擎
服务编排,指的是API服务编排。一张流图指的是由端子及其连线组成的流图。
服务编排引擎,起到的作用是实现各个模块(包括流程引擎)的API之间的编排执行工作。主要包括以下三大部分:
- 服务编排编辑器:提供在Web端的可视化服务编排操作。编排编辑器包括以下内容:
- 端子组件:例如接口端子组件、工作流端子组件、脚本端子组件等。其中接口端子指的是各种服务的API配置组件;工作流端子指的是工作流服务的API配置组件;脚本端子指的是执行计算的脚本;
- 可视化服务数据流图编辑器:提供了可视化的端子放置和端子组件间连线功能;
- 流图及端子组件属性配置:提供了流图和端子的属性配置功能,例如配置接口端子的URL和连接参数等;
- 服务编排代码生成器:将编排生成的编排流图,编译成可以供程序员阅读的可执行代码。
- 编排代码执行器:执行代码生成器生成的代码,真正执行编排的流程。它主要运行在服务器端。
- 服务编排流图管理:提供增删改查服务编排流图的功能;
- 服务编排流图监控:提供服务编排流图的监控功能;
- 服务编排流图分析:提供服务编排流图的数据统计分析功能;
- 服务编排流图运维:提供服务编排流图的运维操作功能;
(1) 新增流图
- 支持新增服务编排流图,新增流图中的接口端子及其之间的连线;
- 支持编辑流图中各个接口端子的配置;
(2) 保存流图
- 支持保存流图到数据库中,并支持流图的版本管理;
- 支持流图在保存之后的重新编辑操作;
(3) 生成后端代码
- 支持一键生成流图对应的后端代码,代码具有良好的可读性;
- 支持流程生成代码的手动编辑;
(4) 部署服务流图
- 支持部署流图生成的代码到服务器端;
- 支持修改流图后重新部署流图代码到服务器端;
(5) 执行服务流图
- 支持执行流图生成的代码,并查看流图成代码的结果;
- 支持服务流图代码执行过程的查看;
(6) 监控流图执行状态
- 支持查看流图代码的运行状态,且支持以可视化的方式查看流图的执行状态;
- 支持每个流图端子的执行时长、执行结果查看;
(7) 分析流图相关数据
- 支持对路途的运行状况进行统计分析,为流图优化提供详实的支持数据;
- 支持数量、耗时等维度的统计分析,如流图模型数量、流图实例数量、各种端子组件实例数量、流图实例平均耗时、端子组件实例平均耗时、端子组件耗时直方图等;
(8) 服务编排运维
- 支持对服务编排流图的强制停止操作,关闭特定执行中流图;
(9) 打通服务编排流图与特定流程
- 支持将流程引擎的API端口,以API接口端子的方式配置到编排流图中;
- 单个服务流图里的流程的数量可以是一个甚至多个;
(10) 流程触发服务编排流图执行
- 支持在流程引擎的流程中,配置与服务编排流图的打通;
- 每个流图提供了对应的API,在流程中可以配置脚本/服务任务的方式进行连接;
(11) 低代码平台使用服务编排流图组件和API
- 支持在低代码平台上调用流图相关的页面组件,例如流图模型的列表、流图的实例列表等组件;
- 支持在低代码平台上直接调用流图相关的API接口,并将启动服务编排流图流转等接口封装成特定的业务组件;