前言
随着信息技术的快速发展,企业和组织越来越依赖于高-效的业务流程管理来提升竞争力。然而,现有的工作流引擎往往存在一些痛点,比如配置复杂、灵活性不足、难以适应中国特色的审批流程等。那么,有没有一款软件能够处理这些问题呢?
答案是肯定的。今天,我们将为大家介绍一款真正适合国内企业和组织的工作流引擎——FlowLong。
介绍
FlowLong 是一款由国人自主研发的工作流引擎,它支持 JSON 格式的实例模型和简易审批流程设计器,专门为中国特色审批流程匠心打造。FlowLong 不仅具备强大的功能,还具有高度的灵活性和易用性,能够帮助企业高-效地管理和优化业务流程。
特点
-
国产化:完全自主开发,不受国外技术限制。
-
JSON 格式实例模型:简化数据存储,易于理解和维护。
-
简易审批流程设计器:图形化的界面,轻松设计复杂的审批流程。
-
中国特色审批支持:支持多种中国特色的审批操作,如顺序会签、并行会签、票签等。
-
丰富的功能:包括条件分支、并行分支、包容分支等多种流程控制机制。
-
灵活的集成能力:支持多种 ORM 框架和主流开发框架,如 MybatisPlus 和 SpringBoot。
技术架构
FlowLong 的项目结构清晰,模块化设计使得开发和维护更加方便。以下是项目的主干结构:
|- db 数据库文件存放目录
|- flowlong-core 工作流核心库
|- flowlong-mybatis-plus 数据访问层,默认 MybatisPlus 当然你可以适配其它 ORM
|- flowlong-solon-plugin Solon 启动插件
|- flowlong-spring-boot-example SpringBoot 演示案例
|- flowlong-spring-boot-starter SpringBoot 启动插件
|- build.gradle Gradle 依赖管理
|- pom.xml Maven 依赖管理
部署方式
本地开发
-
克隆仓库:
git clone https://gitee.com/aizuda/flowlong.git
-
导入 IDEA:
-
导入项目,选择 Gradle 或 Maven 方式管理依赖。
-
-
运行测试-用例:
-
初始化数据库:执行
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>
表结构说明
数据库脚本
引擎核心仅 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
字段 | 描述 |
---|---|
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
字段 | 描述 |
---|---|
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 |
开源协议
FlowLong 遵循 Apache License Version 2.0 协议开源。
即刻体验一波
功能展示
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 是一款真正适合国内企业和组织的工作流引擎,它不仅具备强大的功能和高度的灵活性,还特别针对中国特色的审批流程进行了优化。
源码:https://gitee.com/aizuda/flowlong
文档:https://doc.flowlong.com/