FlowLong工作流
随着信息技术的飞速发展,企业和组织日益依赖高效的业务流程管理(BPM)来提升核心竞争力。然而,在实践中,许多现有的工作流引擎往往存在一些普遍的痛点:配置复杂、灵活性不足、难以适配充满“中国特色”的复杂审批场景(如会签、加签、驳回等)。那么,是否存在一款能够优雅解决这些问题的工具呢?
答案是肯定的。今天,给大家介绍一款真正为国内企业和组织量身打造的开源工作流引擎——FlowLong。
介绍
FlowLong 是一款由国人自主研发的轻量级、高性能工作流引擎。它采用 JSON 格式来定义流程模型,并配备了简洁直观的流程设计器,使得流程定义与维护变得前所未有的简单。其设计的初衷,就是为了精准解决国内企业在流程审批中遇到的各种复杂需求。
工作流引擎在需要自动化、管理和优化业务流程的场景中扮演着至关重要的角色,尤其适用于复杂的跨部门协作、自动化任务决策、流程监控与报告、变更管理以及跨系统集成等。通过引入 FlowLong 这样的工作流引擎,企业能够显著提升应用的自动化水平、优化业务流程、提高工作效率与质量,并有效降低人为错误,从而创造更大的商业价值。
特点
纯国产化: 完全自主研发,技术自主可控,不受国外技术限制。
JSON 流程模型: 流程定义以 JSON 格式存储,结构清晰,易于理解、维护和进行版本控制。
可视化流程设计器: 提供图形化设计界面,用户可通过拖拉拽的方式轻松设计出复杂的业务流程。
适配中国特色审批: 原生支持多种国内常见的审批操作,如顺序会签、并行会签、或签、票签、驳回、转办、加签等。
丰富的功能支持: 内置条件分支、并行分支、包容分支等多种标准 BPMN 流程控制机制。
灵活的集成能力: 提供对 Mybatis-Plus 等主流 ORM 框架和 Spring Boot 等开发框架的无缝支持。
功能展示
FlowLong 支持多种标准 BPMN 功能,同时针对中国特色的审批流程进行了优化。以下是部分功能及其描述:
支持功能 | 功能描述 | 完成程度 |
---|---|---|
条件分支 | 排它分支用于在流程中实现决策,即根据条件选择一个分支执行。也用于处理异常情况,将流程路由到特定的异常处理分支。 | ✅ |
并行分支 | 并行分支允许将流程分成多条分支,也可以把多条分支汇聚到一起。其功能是基于进入和外出顺序流的,即可以分叉(fork)成多个并行分支,也可以汇聚(join)多个并行分支。 | ✅ |
包容分支 | 包容分支可以看做是排它分支和并行分支的结合体。它允许基于条件选择多条分支执行,但如果没有任何一个分支满足条件,则可以选择默认分支。 | ✅ |
路由分支 | 根据条件选择一个分支执行(重定向到指定配置节点),也可以选择默认分支执行(继续往下执行)。 | ✅ |
父子流程 | 主流程节点设置子流程,子流程节点会自动进入子流程,子流程结束后,主流程节点会自动跳转。 | ✅ |
顺序会签 | 指同一个审批节点设置多个人,如 A、B、C 三人,三人按顺序依次收到待办,即 A 先审批,A 提交后 B 才能审批,需全部同意之后,审批才可到下一审批节点。 | ✅ |
并行会签 | 指同一个审批节点设置多个人,如 A、B、C 三人,三人会同时收到待办任务,需全部同意之后,审批才可到下一审批节点。 | ✅ |
或签 | 一个流程审批节点里有多个处理人,任意一个人处理后就能进入下一个节点。 | ✅ |
票签 | 指同一个审批节点设置多个人,如 A、B、C 三人,分别定义不同的权重,当投票权重比例大于 50% 就能进入下一个节点。 | ✅ |
抄送 | 将审批结果通知给抄送列表对应的人,同一个流程实例默认不重复抄送给同一人。 | ✅ |
驳回 | 将审批重置发送给某节点,重新审批。驳回也叫退回,也可以分退回申请人、退回上一步、任意退回等。 | ✅ |
分配 | 允许用户自行决定任务转办、委派、主办 及其它。 | ✅ |
转办 | A 转给其 B 审批,B 审批后,进入下一节点。 | ✅ |
委派 | A 转给其 B 审批,B 审批后,转给 A,A 审批后进入下一节点。 | ✅ |
代理 | A 指定代理人 B 之后,就不用做任何操作了。B 完成任务后,A 和 B 都能查到这个任务,A 完成任务,B 就看不到任务了。 | ✅ |
跳转 | 可以将当前流程实例跳转到任意办理节点。 | ✅ |
拿回 | 在当前办理人尚未处理文件前,允许上一节点提交人员执行拿回。 | ✅ |
唤醒 | 历史任务唤醒,重新进入审批流程。 | ✅ |
撤销 | 流程发起者可以对流程进行撤销处理。 | ✅ |
加签 | 允许当前办理人根据需要自行增加当前办理节点的办理人员(前置节点,后置节点)。 | ✅ |
减签 | 在当前办理人操作之前减少办理人。 | ✅ |
追加 | 发起流程动态追加修改节点处理人,更灵活的实例级动态调整节点处理人的可伸缩处理方案。 | ✅ |
认领 | 公共任务认领。 | ✅ |
已阅 | 任务是否查看状态显示。 | ✅ |
催办 | 通知当前活动任务处理人办理任务。 | ✅ |
沟通 | 与当前活动任务处理人沟通。 | ✅ |
终止 | 在任意节点终止流程实例。 | ✅ |
定时 | 设置时间节点定时执行任务进入下一步。 | ✅ |
触发 | 执行流程触发器业务逻辑实现,结束执行进入下一步,支持【立即触发】【定时触发】两种实现。 | ✅ |
动态构建 | 根据当前任务动态构建执行新任务,并且不体现在流程图中。 | ✅ |
超时审批 | 根据设置的超时审批时间,超时后自动审批【自动通过或拒绝】。 | ✅ |
自动提醒 | 根据设置的提醒时间,提醒审批人审批【可设定提醒次数】实现接口任意方式提醒【短信,Email ,微-信,钉钉等】。 | ✅ |
快速开始
技术架构
FlowLong 采用清晰的模块化设计,项目结构一目了然,便于二次开发与维护。
|- db # 数据库脚本目录
|- flowlong-core # 工作流核心库
|- flowlong-mybatis-plus # 数据访问层 (默认 Mybatis-Plus, 可适配其他ORM)
|- flowlong-solon-plugin # Solon 框架启动插件
|- flowlong-spring-boot-example # Spring Boot 示例项目
|- flowlong-spring-boot-starter # Spring Boot 启动插件
|- build.gradle # Gradle 配置文件
|- pom.xml # Maven 配置文件
核心概念
概念 | 说明 |
---|---|
模型 | 流程模型是对业务流程进行抽象和描述的模型,由流程图、活动、参与者等要素组成。用于展示业务流程中各个环节的顺序和逻辑,是设计和优化业务流程管理的关键环节。 |
实例 | 流程实例基于特定的流程模型启动,代表了一次具体的执行过程,包含流程定义、状态、执行路径、变量及参与者信息等。它记录了流程执行的全过程,并支持实时监控和管理。 |
任务 | 流程任务是在业务流程中需要由参与者完成的具体工作或操作,分为人工任务、自动任务或服务任务等类型。每个任务都有责任人指派、执行条件、结果以及可能的任务流转机制。 |
本地开发
1. 克隆仓库:
git clone https://gitee.com/aizuda/flowlong.git
2. 导入 IDEA:
导入项目,选择 Gradle 或 Maven 方式管理依赖。
3. 运行测试-用例:
初始化执行
db/flowlong-mysql.sql
数据库脚本找到
flowlong-spring-boot-starter
模块,目录test
部分java/test
找到
mysql
相关测试类Test...java
执行观察数据库中表数据变化
安装集成
Maven:
<dependency><groupId>com.aizuda</groupId><artifactId>flowlong-spring-boot-starter</artifactId><version>最新版本</version>
</dependency>
Gradle:
//Gradle Version:<4.1
compile group: 'com.aizuda', name: 'flowlong-spring-boot-starter', version: '最新版本'//Gradle Version:>=4.1
implementation 'com.aizuda:flowlong-spring-boot-starter:最新版本'
表结构说明
引擎核心仅 8 张表实现逻辑数据存储,采用 JSON 数据格式存储模型结构简洁直观。
流程定义表 flw_process
用于存储流程模型信息。
字段 | 描述 |
---|---|
id | 主键 ID |
tenant_id | 租户 ID |
create_id | 创建人 ID |
create_by | 创建人名称 |
create_time | 创建时间 |
process_key | 流程定义 key 唯一标识 |
process_name | 流程定义名称 |
process_icon | 流程图标地址 |
process_type | 流程类型 |
process_version | 流程版本,默认 1 |
instance_url | 实例地址(外置表单发起地址) |
remark | 备注说明 |
use_scope | 使用范围 0,全员 1,指定人员(业务关联) 2,均不可提交 |
process_state | 流程状态 0,不可用 1,可用 2,历史版本 |
model_content | 流程模型定义 JSON 内容 |
sort | 排序 |
流程实例表 flw_instance
记录每一次启动执行流程模型的具体实例信息。
字段 | 描述 |
---|---|
id | 主键 ID |
tenant_id | 租户 ID |
create_id | 创建人 ID |
create_by | 创建人名称 |
create_time | 创建时间 |
process_id | 流程定义 ID |
parent_instance_id | 父流程实例 ID |
priority | 优先级 |
instance_no | 流程实例编号 |
business_key | 业务 KEY |
variable | 变量 json |
current_node_name | 当前所在节点名称 |
current_node_key | 当前所在节点 key |
expire_time | 期望完成时间 |
last_update_by | 上次更新人 |
last_update_time | 上次更新时间 |
历史流程实例表 flw_his_instance
流程实例表的历史记录,每次生成实例信息同时记录该表,该表继承流程实例表字段的基础上增加 状态``结束时间``处理耗时
字段。
字段 | 描述 |
---|---|
instance_state | 状态 0,审批中 1,审批通过 2,审批拒绝 3,撤销审批 4,超时结束 5,强制终止 |
end_time | 结束时间 |
duration | 处理耗时 |
扩展流程实例表 flw_ext_instance
扩展流程实例功能表,例如 modelContent
用于支持动态添加节点存储临时模型。
字段 | 描述 |
---|---|
id | 主键 ID |
tenant_id | 租户 ID |
process_id | 流程定义 ID |
instance_id | 流程实例 ID |
process_name | 流程名称 |
process_type | 流程类型 |
model_content | 流程模型定义 JSON 内容 |
任务表 flw_task
流程实例执行阶段的具体执行任务信息。
字段 | 描述 |
---|---|
id | 主键 ID |
tenant_id | 租户 ID |
create_id | 创建人 ID |
create_by | 创建人名称 |
create_time | 创建时间 |
instance_id | 流程实例 ID |
parent_task_id | 父任务 ID |
task_name | 任务名称 |
task_key | 任务 key 唯一标识 |
task_type | 任务类型 |
perform_type | 参与类型 |
action_url | 任务处理的 url |
variable | 变量 json |
assignor_id | 委托人 ID |
assignor | 委托人 |
expire_time | 任务期望完成时间 |
remind_time | 提醒时间 |
remind_repeat | 提醒次数 |
viewed | 已阅 0,否 1,是 |
历史任务表 flw_his_task
流程实例执行任务表的历史记录,每次生成任务信息同时记录该表,该表继承流程任务表字段的基础上增加 完成时间``任务状态``处理耗时
字段。
字段 | 描述 |
---|---|
call_process_id | 调用外部流程定义 ID |
call_instance_id | 调用外部流程实例 ID |
finish_time | 完成时间 |
task_state | 任务状态 0,活动 1,跳转 2,完成 3,拒绝 4,撤销审批 5,超时 6,终止 7,驳回终止 |
duration | 处理耗时 |
任务参与者表 flw_task_actor
流程实例执行任务具体任务参与者信息,用于存储实时任务参与者关联信息。
字段 | 描述 |
---|---|
id | 主键 ID |
tenant_id | 租户 ID |
instance_id | 流程实例 ID |
task_id | 任务 ID |
actor_id | 参与者 ID |
actor_name | 参与者名称 |
actor_type | 参与者类型 0,用户 1,角色 2,部门 |
weight | 权重,票签任务时,该值为不同处理人员的分量比例 |
agent_id | 代理人 ID |
agent_type | 代理人类型 0,代理 1,被代理 2,认领角色 3,认领部门 |
extend | 扩展 json |
历史任务参与者表 flw_his_task_actor
流程实例执行任务具体任务参与者信息历史表,该表和表 flw_task_actor
的表结构一致,用于存储历史任务参与者关联信息。
字段 | 描述 |
---|---|
id | 主键 ID |
tenant_id | 租户 ID |
instance_id | 流程实例 ID |
task_id | 任务 ID |
actor_id | 参与者 ID |
actor_name | 参与者名称 |
actor_type | 参与者类型 0,用户 1,角色 2,部门 |
weight | 权重,票签任务时,该值为不同处理人员的分量比例 |
agent_id | 代理人 ID |
agent_type | 代理人类型 0,代理 1,被代理 2,认领角色 3,认领部门 |
extend | 扩展 json |
开源协议
项目采用双协议授权:
默认采用 Apache-2.0 协议开源 完全开放 遵守附加协议 的前提下允许任何目的商用。 如果违反附加协议自动升级为 AGPL-3.0 协议。
附加协议:使用方在项目介绍中显著位置必须标注版权信息(链接仓库地址),不允许删除源码注释申明,不允许山寨换皮商用与官方企业版竞争,否则视为侵权(索赔 100 万)。
总结
FlowLong 是一款功能强大、高度灵活且真正适合国内使用场景的开源工作流引擎。它通过简洁的 JSON 模型和对中国特色审批流程的深度支持,为企业提供了一个现代化、易于集成和维护的业务流程管理解决方案。
源码地址: https://gitee.com/aizuda/flowlong
官方网站: https://flowlong.aizuda.com/