Skip to content

Repository files navigation

LicenseMaven CentralBuildCodecov

Flow Engine

企业级流程引擎 - 可视化流程设计、动态表单配置、多节点类型流转

简介

Flow Engine 是一个基于 Java 17 和 Spring Boot 3.5.9 构建的企业级工作流引擎,提供完整的流程管理能力,包括可视化流程设计、动态表单配置、多节点类型流转和脚本扩展。采用前后端分离架构,同时支持 PC 端和移动端。

核心特性

  • 19 种节点类型 - 开始、结束、审批、办理、通知、人工、条件控制、条件分支、条件Else分支、并行控制、并行分支、路由、包容控制、包容分支、包容Else分支、子流程、延迟、触发节点、人工分支
  • 8 种动作类型 - 通过、拒绝、保存、加签、委派、退回、转办、自定义
  • 策略驱动配置 - 所有关键配置通过策略实现,支持动态扩展
  • Groovy 脚本扩展 - 支持发起人动态匹配、审批人加载、条件判断、自定义操作等
  • 多人审批模式 - 顺序审批、会签审批(可配置比例)、或签审批、随机审批
  • 层次化节点结构 - 通过blocks属性实现节点间的层次关系,不再使用独立的边关系
  • 线程安全 - 脚本运行时使用细粒度同步锁,支持不同脚本并发执行
  • 自动资源清理 - 双重清理机制(阈值触发 + 定时清理)避免内存泄漏
  • 完善的异常体系 - 基于 RuntimeException 的框架异常层次结构

项目结构

flow-engine
├── flow-engine-framework # 核心流程引擎框架
│ └── src/main/java/com/codingapi/flow
│ ├── action # 动作层
│ │ ├── actions # 动作实现(8个类)
│ │ │ ├── PassAction # 通过动作
│ │ │ ├── RejectAction # 拒绝动作
│ │ │ ├── SaveAction # 保存动作
│ │ │ ├── ReturnAction # 退回动作
│ │ │ ├── TransferAction # 转办动作
│ │ │ ├── AddAuditAction # 加签动作
│ │ │ ├── DelegateAction # 委派动作
│ │ │ └── CustomAction # 自定义动作
│ │ ├── factory # FlowActionFactory 动作工厂
│ │ ├── ActionDisplay # 动作显示元数据
│ │ ├── ActionType # 动作类型枚举(8种)
│ │ ├── BaseAction # 动作抽象基类
│ │ └── IFlowAction # 动作接口
│ ├── builder # 构建器(6种)
│ │ ├── ActionBuilder # 动作构建器
│ │ ├── BaseNodeBuilder # 节点构建器基类
│ │ ├── FormFieldPermissionsBuilder # 字段权限构建器
│ │ ├── NodeMapBuilder # 节点映射构建器
│ │ ├── NodeStrategyBuilder # 节点策略构建器
│ │ └── WorkflowStrategyBuilder # 工作流策略构建器
│ ├── common # 通用接口
│ │ ├── ICopyAbility # 复制能力接口
│ │ └── IMapConvertor # Map转换接口
│ ├── context # 上下文
│ │ ├── GatewayContext # 网关上下文
│ │ ├── RepositoryHolderContext # 仓储持有者上下文
│ │ ├── ActionResponseContext # 动作响应上下文
│ │ └── LoopTriggerTraceContext # 循环触发跟踪上下文
│ ├── domain # 领域对象
│ │ ├── DelayTask # 延迟任务
│ │ ├── DelayTaskManager # 延迟任务管理器
│ │ ├── UrgeInterval # 催办间隔
│ │ ├── SubProcessContext # 子流程上下文
│ │ └── SubProcessRecord # 子流程记录
│ ├── error # 错误处理
│ │ └── ErrorThrow # 错误抛出器
│ ├── event # 事件系统(7种)
│ │ ├── IFlowEvent # 事件接口
│ │ ├── FlowRecordStartEvent # 流程开始事件
│ │ ├── FlowRecordTodoEvent # 待办事件
│ │ ├── FlowRecordDoneEvent # 已办事件
│ │ ├── FlowRecordFinishEvent # 流程完成事件
│ │ ├── FlowRecordUrgeEvent # 催办事件
│ │ ├── FlowRecordRevokeEvent # 流程撤销事件
│ │ └── FlowRecordDeleteEvent # 流程删除事件
│ ├── exception # 异常系统(6种)
│ │ ├── FlowException # 异常基类
│ │ ├── FlowValidationException # 参数验证异常
│ │ ├── FlowNotFoundException # 资源未找到异常
│ │ ├── FlowStateException # 状态异常
│ │ ├── FlowPermissionException # 权限异常
│ │ └── FlowExecutionException # 执行异常
│ ├── form # 表单系统
│ │ ├── permission # 字段权限
│ │ │ ├── FormFieldPermission # 字段权限实体
│ │ │ └── PermissionType # 权限类型枚举
│ │ ├── FlowForm # 表单元数据
│ │ ├── FlowFormBuilder # 表单构建器
│ │ ├── FormData # 表单数据容器
│ │ ├── FormDataVerify # 表单数据校验
│ │ ├── FormField # 字段定义
│ │ ├── FieldAttribute # 字段属性
│ │ ├── DataType # 数据类型枚举
│ │ ├── IValueConvertor # 值转换接口
│ │ └── ValueConvertorContext # 值转换上下文
│ ├── gateway # 网关接口防腐层
│ │ └── FlowOperatorGateway # 操作者网关
│ ├── manager # 管理器层
│ │ ├── ActionManager # 动作管理器
│ │ ├── NodeStrategyManager # 节点策略管理器
│ │ ├── OperatorManager # 操作者管理器
│ │ ├── FlowNodeManager # 节点管理器
│ │ ├── FlowNodeState # 节点状态分类
│ │ └── WorkflowStrategyManager # 工作流策略管理器
│ ├── node # 节点层
│ │ ├── nodes # 节点实现(19种)
│ │ │ ├── StartNode # 开始节点
│ │ │ ├── EndNode # 结束节点
│ │ │ ├── ApprovalNode # 审批节点
│ │ │ ├── HandleNode # 办理节点
│ │ │ ├── NotifyNode # 通知节点
│ │ │ ├── ManualNode # 人工节点(块节点)
│ │ │ ├── ManualBranchNode # 人工分支节点
│ │ │ ├── ConditionNode # 条件控制节点(块节点)
│ │ │ ├── ConditionBranchNode # 条件分支节点
│ │ │ ├── ConditionElseBranchNode # 条件Else分支节点
│ │ │ ├── ParallelNode # 并行控制节点(块节点)
│ │ │ ├── ParallelBranchNode # 并行分支节点
│ │ │ ├── RouterNode # 路由节点
│ │ │ ├── InclusiveNode # 包容控制节点(块节点)
│ │ │ ├── InclusiveBranchNode # 包容分支节点
│ │ │ ├── InclusiveElseBranchNode # 包容Else分支节点
│ │ │ ├── SubProcessNode # 子流程节点
│ │ │ ├── DelayNode # 延迟节点
│ │ │ └── TriggerNode # 触发节点
│ │ ├── factory # NodeFactory 节点工厂
│ │ ├── helper # 节点助手
│ │ │ ├── BackNodeHelper # 退回节点助手
│ │ │ └── ParallelNodeRelationHelper # 并行关系助手
│ │ ├── IBlockNode # 块节点接口
│ │ ├── BaseFlowNode # 节点抽象基类
│ │ ├── BaseAuditNode # 审批节点抽象基类
│ │ ├── IFlowNode # 节点接口
│ │ └── NodeType # 节点类型枚举
│ ├── operator # 操作者接口
│ │ └── IFlowOperator # 操作者接口
│ ├── pojo # 数据对象
│ │ ├── body # FlowAdviceBody 请求体
│ │ ├── request # 请求对象
│ │ │ ├── FlowActionRequest # 动作请求
│ │ │ ├── FlowCreateRequest # 创建请求
│ │ │ ├── FlowRevokeRequest # 撤回请求
│ │ │ ├── FlowDeleteRequest # 删除请求
│ │ │ ├── FlowUrgeRequest # 催办请求
│ │ │ ├── FlowDetailRequest # 详情请求
│ │ │ └── FlowProcessNodeRequest # 流程节点请求
│ │ └── response # 响应对象
│ │ ├── FlowOperator # 流程操作者
│ │ ├── FlowContent # 流程内容
│ │ ├── ActionResponse # 动作响应
│ │ ├── FlowRecordContent # 流程记录内容
│ │ ├── NodeOption # 节点选项
│ │ └── ProcessNode # 流程节点
│ ├── record # 流程记录
│ │ ├── FlowRecord # 执行记录(TODO/DONE状态)
│ │ ├── FlowTodoRecord # 待办记录
│ │ └── FlowTodoMerge # 待办合并记录
│ ├── repository # 仓储接口(持久化抽象)
│ │ ├── WorkflowRepository
│ │ ├── WorkflowVersionRepository
│ │ ├── WorkflowRuntimeRepository
│ │ ├── FlowRecordRepository
│ │ ├── FlowTodoRecordRepository
│ │ ├── FlowTodoMergeRepository
│ │ ├── FlowOperatorAssignmentRepository
│ │ ├── NodeViewJavaScriptRepository
│ │ ├── ParallelBranchRepository
│ │ ├── SubProcessRepository
│ │ ├── DelayTaskRepository
│ │ └── UrgeIntervalRepository
│ ├── script # 脚本系统
│ │ ├── node # 节点脚本(9种)
│ │ │ ├── OperatorMatchScript # 发起人匹配脚本
│ │ │ ├── OperatorLoadScript # 审批人加载脚本
│ │ │ ├── NodeTitleScript # 节点标题脚本
│ │ │ ├── ConditionScript # 条件判断脚本
│ │ │ ├── RouterNodeScript # 路由脚本
│ │ │ ├── SubProcessScript # 子流程脚本
│ │ │ ├── SubProcessResultScript # 子流程结果脚本
│ │ │ ├── TriggerScript # 触发脚本
│ │ │ └── ErrorTriggerScript # 异常触发脚本
│ │ ├── runtime # 脚本运行时
│ │ │ ├── FlowScriptRuntimeContext # Groovy脚本执行环境
│ │ │ ├── FlowScriptContext # 脚本上下文
│ │ │ └── IBeanFactory # Bean工厂接口
│ │ └── action # 动作脚本(3种)
│ │ ├── ActionRejectScript # 拒绝动作脚本
│ │ ├── ActionCustomScript # 自定义动作脚本
│ │ └── ActionDisplayScript # 动作展示脚本
│ ├── service # 服务层
│ │ ├── impl # 服务实现
│ │ │ ├── FlowCreateService # 流程创建服务
│ │ │ ├── FlowActionService # 流程动作服务
│ │ │ ├── FlowDelayTriggerService # 延迟触发服务
│ │ │ ├── FlowRevokeService # 流程撤回服务
│ │ │ ├── FlowDeleteService # 流程删除服务
│ │ │ ├── FlowUrgeService # 流程催办服务
│ │ │ ├── FlowDetailService # 流程详情服务
│ │ │ ├── FlowProcessNodeService # 流程节点服务
│ │ │ ├── FlowSubProcessResultService # 子流程结果服务
│ │ │ └── OperatorAssignmentService # 操作者分配服务
│ │ ├── FlowService # 流程门面服务(@Transactional 具体类)
│ │ ├── FlowRecordSaveService # 流程记录批量保存服务
│ │ ├── FlowRecordService # 流程记录服务
│ │ ├── WorkflowService # 流程定义服务
│ │ └── WorkflowGroovyScriptUtils # 流程脚本工具
│ ├── session # 会话层
│ │ ├── FlowSession # 执行上下文
│ │ └── FlowAdvice # 审批参数(意见、签名、退回节点等)
│ ├── strategy # 策略层(17种:15种节点策略 + 2种工作流策略)
│ │ ├── node # 节点策略
│ │ │ ├── MultiOperatorAuditStrategy # 多人审批策略
│ │ │ ├── TimeoutStrategy # 超时策略
│ │ │ ├── SameOperatorAuditStrategy # 同一操作者审批策略
│ │ │ ├── RecordMergeStrategy # 记录合并策略
│ │ │ ├── ResubmitStrategy # 重新提交策略
│ │ │ ├── AdviceStrategy # 审批意见策略
│ │ │ ├── OperatorLoadStrategy # 审批人加载策略
│ │ │ ├── ErrorTriggerStrategy # 异常触发策略
│ │ │ ├── NodeTitleStrategy # 节点标题策略
│ │ │ ├── FormFieldPermissionStrategy # 字段权限策略
│ │ │ ├── DelayStrategy # 延迟策略
│ │ │ ├── TriggerStrategy # 触发策略
│ │ │ ├── RouterStrategy # 路由策略
│ │ │ ├── SubProcessStrategy # 子流程策略
│ │ │ ├── RevokeStrategy # 撤回策略
│ │ │ ├── NodeStrategyFactory # 节点策略工厂
│ │ │ ├── BaseStrategy # 节点策略抽象基类
│ │ │ └── INodeStrategy # 节点策略接口
│ │ └── workflow # 工作流策略
│ │ ├── InterfereStrategy # 干预策略
│ │ ├── UrgeStrategy # 催办策略
│ │ ├── WorkflowStrategyFactory # 工作流策略工厂
│ │ ├── BaseStrategy # 工作流策略抽象基类
│ │ └── IWorkflowStrategy # 工作流策略接口
│ ├── utils # 工具类
│ │ └── Base64Utils # Base64 编解码工具
│ └── workflow # 流程层
│ ├── Workflow # 流程对象
│ ├── WorkflowBuilder # 流程构建器
│ └── runtime # 运行时快照
│ └── WorkflowRuntime # 流程运行时快照
│ └── src/test/java # 测试代码
├── flow-engine-starter # Spring Boot 自动配置入口
├── flow-engine-starter-api # REST API 层(FlowRecordController、WorkflowController)
├── flow-engine-starter-infra # 持久化层(JPA 实体、11个仓储实现)
├── flow-engine-starter-query # 查询层(FlowRecordQueryController、WorkflowQueryController)
├── flow-engine-example # 示例项目(H2/达梦数据库、JWT 认证、端口 8090)
└── flow-frontend # 前端项目(独立 Git 仓库)
├── apps
│ ├── app-pc # PC 端应用
│ └── app-mobile # 移动端应用
└── packages
├── flow-core # 核心框架库(HTTP、Hooks、Presenter 等)
├── flow-types # TypeScript 类型定义库
├── flow-icons # 图标库
├── flow-approval-presenter # 审批展示器框架
├── flow-design # 流程设计器组件库
├── flow-pc # PC 端组件库
│ ├── flow-pc-ui # PC 端基础 UI 组件库
│ ├── flow-pc-form # PC 端表单组件库
│ └── flow-pc-approval # PC 端审批组件库
└── flow-mobile # 移动端组件库
├── flow-mobile-ui # 移动端基础 UI 组件库
├── flow-mobile-form # 移动端表单组件库
└── flow-mobile-approval # 移动端审批组件库

技术栈

后端

  • Java 17 - 编程语言
  • Spring Boot 3.5.9 - 应用框架
  • Spring Data JPA - 数据持久化
  • Groovy - 脚本引擎(动态脚本扩展)
  • Lombok - 代码简化
  • Fastjson 2 - JSON 处理
  • JJWT - JWT 令牌认证(示例应用)
  • Apache Commons - 工具库(IO / Lang3 / Crypto)
  • H2 / 达梦数据库 - 数据库支持

前端

  • React 18 - UI 框架
  • TypeScript - 类型安全
  • Rsbuild/Rslib - 构建工具
  • pnpm - 包管理器
  • Ant Design - PC 端 UI 组件库
  • Ant Design Mobile - 移动端 UI 组件库
  • Redux Toolkit - 状态管理
  • Flowgram - 流程设计器底层框架
  • CodeMirror - 代码编辑器
  • Groovy - 脚本语言支持

前端模块架构

模块划分原则

  • flow-core:全局框架依赖,只包含与 UI 无关的基础能力(HTTP、状态管理、工具函数等)
  • flow-types:全局类型定义,包含流程审批相关的业务类型(移动端和 PC 端共用)
  • flow-icons:图标库,提供统一的图标组件
  • flow-approval-presenter:审批展示器框架,基于 Redux 的状态管理
  • flow-design:流程设计器功能,包含节点配置、属性面板、脚本配置等
  • flow-pc-*:PC 端专用组件库,依赖 Ant Design
  • flow-mobile-*:移动端专用组件库,依赖 Ant Design Mobile

前端模块依赖关系

flow-core (无 UI,基础框架)
↑ ↑
│ └── flow-icons (图标库)
│ └── flow-approval-presenter (审批展示器框架)
│
flow-types (类型定义)
↑ ↑
│ └── flow-pc-form
│ ↑
└───────→ flow-pc-ui ──→ flow-pc-approval
↑
flow-design ──→ app-pc
flow-mobile-ui ──→ flow-mobile-form ──→ flow-mobile-approval ──→ app-mobile

前端模块说明

核心模块

模块描述依赖
flow-core核心框架库(HTTP、Hooks、Presenter 等),不包含 UI 组件
flow-typesTypeScript 类型定义(流程实例、表单、审批等业务类型)flow-core
flow-icons图标库flow-core
flow-approval-presenter审批展示器框架(基于 Redux 的状态管理)flow-core, flow-types
flow-design流程设计器组件库(节点配置、属性面板、脚本配置等)flow-core, flow-types, flow-icons, flow-pc-ui

PC 端模块

模块描述依赖
flow-pc-uiPC 端基础 UI 组件库(按钮、输入框等原子组件)flow-core
flow-pc-formPC 端表单组件库(表单设计器、表单渲染等)flow-core, flow-types
flow-pc-approvalPC 端审批组件库(待办/已办/审批处理等)flow-core, flow-types, flow-icons, flow-approval-presenter, flow-pc-ui, flow-pc-form

移动端模块

模块描述依赖
flow-mobile-ui移动端基础 UI 组件库flow-core
flow-mobile-form移动端表单组件库flow-core, flow-types
flow-mobile-approval移动端审批组件库flow-core, flow-types, flow-icons, flow-approval-presenter, flow-mobile-ui, flow-mobile-form

快速开始

后端

# 克隆项目
git clone https://github.com/codingapi/flow-engine.git
cd flow-engine
# 构建项目
./mvnw clean install
# 运行示例项目cd flow-engine-example
mvn spring-boot:run

前端

cd flow-frontend
# 安装依赖
pnpm install
# 构建所有包
pnpm run build
# 构建 PC 端所有组件库
pnpm run build:flow-pc
# 构建移动端所有组件库
pnpm run build:flow-mobile
# 构建特定包
pnpm run build:flow-core # 核心框架库
pnpm run build:flow-types # 类型定义库
pnpm run build:flow-icons # 图标库
pnpm run build:flow-approval-presenter # 审批展示器框架
pnpm run build:flow-design # 流程设计器组件库
pnpm run build:flow-pc-ui # PC 端基础 UI 组件库
pnpm run build:flow-pc-form # PC 端表单组件库
pnpm run build:flow-pc-approval # PC 端审批组件库
pnpm run build:flow-mobile-ui # 移动端基础 UI 组件库
pnpm run build:flow-mobile-form # 移动端表单组件库
pnpm run build:flow-mobile-approval # 移动端审批组件库# 构建 PC 端应用
pnpm run build:app-pc
# 构建移动端应用
pnpm run build:app-mobile
# 启动 PC 端应用(开发模式)
pnpm run dev:app-pc
# 启动移动端应用(开发模式)
pnpm run dev:app-mobile

核心架构

八层架构

  1. 流程层 (Workflow Layer) - 流程定义层
  2. 节点层 (Node Layer) - 节点层(19种节点类型)
  3. 动作层 (Action Layer) - 动作层(8种动作类型)
  4. 记录层 (Record Layer) - 记录层
  5. 会话层 (Session Layer) - 会话层
  6. 管理器层 (Manager Layer) - 管理器层
  7. 策略层 (Strategy Layer) - 策略层
  8. 脚本层 (Script Layer) - 脚本层

设计模式

  • 建造者模式 (Builder Pattern) - WorkflowBuilder、BaseNodeBuilder、FlowFormBuilder
  • 工厂模式 (Factory Pattern) - FlowActionFactory、NodeFactory、NodeStrategyFactory
  • 策略模式 (Strategy Pattern) - INodeStrategy、IWorkflowStrategy
  • 模板方法模式 (Template Method Pattern) - BaseAction、BaseFlowNode
  • 责任链模式 (Chain of Responsibility Pattern) - 动作执行链
  • 组合模式 (Composite Pattern) - 带 blocks 属性的块节点层级结构

节点类型

基础节点 (9种)

节点类型描述NODE_TYPE
StartNode开始节点START
EndNode结束节点END
ApprovalNode审批节点APPROVAL
HandleNode办理节点HANDLE
NotifyNode通知节点NOTIFY
RouterNode路由分支ROUTER
SubProcessNode子流程节点SUB_PROCESS
DelayNode延迟节点DELAY
TriggerNode触发节点TRIGGER

块节点/容器节点 (4种) - 包含子节点(blocks)

节点类型描述NODE_TYPE
ManualNode人工节点MANUAL
ConditionNode条件控制节点CONDITION
ParallelNode并行控制节点PARALLEL
InclusiveNode包容控制节点INCLUSIVE

分支节点 (6种) - 作为块节点的子节点

节点类型描述NODE_TYPE
ManualBranchNode人工分支节点MANUAL_BRANCH
ConditionBranchNode条件分支节点CONDITION_BRANCH
ConditionElseBranchNode条件Else分支节点CONDITION_ELSE_BRANCH
ParallelBranchNode并行分支节点PARALLEL_BRANCH
InclusiveBranchNode包容分支节点INCLUSIVE_BRANCH
InclusiveElseBranchNode包容Else分支节点INCLUSIVE_ELSE_BRANCH

动作类型

动作类型描述ActionType
PassAction通过PASS
RejectAction拒绝REJECT
SaveAction保存SAVE
ReturnAction退回RETURN
TransferAction转办TRANSFER
AddAuditAction加签ADD_AUDIT
DelegateAction委派DELEGATE
CustomAction自定义CUSTOM

多人审批模式

模式描述完成条件
SEQUENCE顺序审批按顺序全部完成
MERGE会签审批配置比例的人员完成
ANY或签审批任意一人完成
RANDOM_ONE随机审批随机选中的人完成

异常码格式

所有框架异常使用字符串形式的错误码,格式如下:

category.subcategory.errorType

示例:

  • notFound.workflow.definition - 流程定义未找到
  • validation.field.readOnly - 字段只读
  • state.record.alreadyDone - 记录已完成
  • state.record.notSupportDelete - 记录不允许删除
  • state.node.notStart - 记录不在开始节点
  • validation.field.required - 必填字段为空
  • execution.script.error - 脚本执行错误

所有异常消息使用英文。

示例应用

示例应用(flow-engine-example)提供了一个开箱即用的完整演示环境:

  • 默认数据库:H2(文件数据库,默认落地 example.db
  • 可选数据库:达梦(--spring.profiles.active=dm
  • 认证:JWT Token 认证
  • 访问端口:8090
  • 管理员账号:启动时由 AdminInitializer 自动初始化

文档

测试

后端测试

# 运行所有测试
./mvnw test# 运行指定模块测试
./mvnw test -pl flow-engine-framework
# 运行指定测试类
./mvnw test -Dtest=ScriptRuntimeContextTest

前端测试

cd flow-frontend
# 运行所有测试
pnpm run test# 运行特定包的测试
pnpm run test:flow-core # 核心框架库测试
pnpm run test:flow-design # 流程设计器测试
pnpm run test:flow-pc # PC 端组件测试
pnpm run test:flow-pc-ui # PC 端 UI 组件测试
pnpm run test:flow-pc-form # PC 端表单组件测试
pnpm run test:flow-pc-approval # PC 端审批组件测试
pnpm run test:flow-mobile # 移动端组件测试

许可证

LICENSE

贡献

欢迎提交 Issue 和 Pull Request!

About

企业级流程引擎 - 可视化流程设计、动态表单配置、多节点类型流转

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages