我把一套 Flowable + Spring Boot + Vue 的 BPM 流程引擎整理开源了:从流程设计器到待办闭环
最近把一个 BPM 流程引擎项目单独整理成了开源版项目名叫 **Open BPM Flow Engine**。它的定位比较明确给 Java 后端、全栈工程师、技术负责人一个可以本地跑起来、能看懂核心链路、能二次开发接业务系统的 Flowable 工作流示例。项目地址https://gitee.com/luotianding/open-project项目目录open-project/bpm-project建议第一次打开仓库时按这个顺序看顺序文件作用1bpm-project/README.md看项目定位、启动方式和页面入口2bpm-project/docs/minimal-demo-flow.md跑通请假审批最小闭环3bpm-project/docs/secondary-development-guide.md学会把请假 Demo 改成采购、合同、报销等业务4bpm-project/docs/api-and-code-map.md查接口清单、关键类位置和新增接口方式很多开源流程项目只给流程设计器或者只给后端接口真正接业务时还要自己补发起页、待办页、申请记录、业务表单和回调逻辑。这个项目这次整理时重点补了运行入口所以它更像一个最小可用的流程引擎骨架。1. 技术栈后端Java 8 Spring Boot Flowable MyBatis Plus MySQL前端Vue 2.6 Vue Router Element UI Axios floweditor数据库MySQL 5.7整体并没有追求最新版本而是保留了一套比较典型的企业项目技术组合。好处是很多老系统、OA、ERP、CRM、SaaS 后台都能看懂也容易接入。2. 工程目录核心目录如下bpm-project bpm-service 后端流程引擎服务 bpm-portal 前端流程控制台 docs 开源说明文档和截图bpm-service 负责流程定义、实例、任务、按钮权限、角色授权、业务回调等能力。bpm-portal 负责流程设计器、流程配置、流程发起、待办办理和申请记录等页面。docs 放了图文说明、最小请假流程、质量报告和脱敏记录。3. 不只是流程设计器流程引擎最容易被低估的地方是大家以为“能画 BPMN 图”就够了。实际业务落地时至少还需要这些入口页面作用流程设计器画 BPMN、保存流程定义流程定义管理发布流程、查看版本流程属性配置配表单、处理人、按钮、条件、脚本发起流程选择已发布流程进入业务表单我的待办当前用户处理任务我的申请查看我发起的流程状态任务池处理组任务领取我的抄送查看抄送或转阅流程监控管理员看实例和任务明细正文配图建议插入bpm-project/docs/assets/screenshots/03-process-configuration.png4. 发起流程入口怎么做前端运行入口在bpm-portal/src/pages/runtime/StartProcess.vue发起流程的关键逻辑不是直接写死表单地址而是先查已发布流程再查流程关联业务配置。核心流程查询 /bpm/definition/list - 过滤已发布、未锁定流程 - 根据 actDefId 查询 /bpm/refBiz/list - 读取表单路由 roleType - 跳转业务表单代码里对应逻辑是this.$axios.get(/bpm/definition/list, { params: { current: this.page.current, size: this.page.size, staticConditions: [ { column: status, exp: , value: 1 }, { column: lockedStatus, exp: , value: 0 } ] } })加载发起表单配置this.$axios.get(/bpm/refBiz/list, { params: { current: 1, size: 10, actDefId: row.actDefId } })这个设计的好处是流程引擎不关心业务表单长什么样业务系统只要把表单路由配置进去就可以从统一发起入口进入。5. 业务回调怎么接开源版提供了一个请假申请 Demo回调类是cn.icepanda.bpm.demo.service.DemoLeaveFlowService关键代码Service public class DemoLeaveFlowService implements BpmBizInvokeDemoLeaveApply { private final IDemoLeaveApplyService leaveApplyService; Autowired public DemoLeaveFlowService(IDemoLeaveApplyService leaveApplyService) { this.leaveApplyService leaveApplyService; } public BpmResult before(FlowContext context, DemoLeaveApply apply) { if (apply null) { return BpmResult.failure(请假申请数据不能为空); } if (apply.getDays() null || apply.getDays() 0) { return BpmResult.failure(请假天数必须大于 0); } return BpmResult.success(); } public BpmResult after(FlowContext context, DemoLeaveApply apply) { return BpmResult.success(leaveApplyService.syncByFlowCallback(context, apply)); } }这里有一个比较重要的边界**回调类只处理业务数据校验和业务状态同步不负责推进流程。**流程推进仍然由 BPM 引擎负责。这样做可以避免业务代码和流程引擎互相缠在一起。6. 请假 Demo 的闭环开源版提供了一个最小业务表单bpm-portal/src/pages/demo/LeaveForm.vue访问路径http://localhost:8080/#/demo/leave-form建议配置的流程开始 - 填写请假申请 - 主管审批 - 结束关联业务配置配置项示例值流程 Keydemo_leave_process流程名称演示请假审批流程发起表单地址/demo/leave-form默认回调类cn.icepanda.bpm.demo.service.DemoLeaveFlowService这个 Demo 的价值不在“请假”本身而是提供了一个接入范式。你可以把请假单换成采购单、合同审批单、报销单、工单只要保持业务表单和回调类的边界清晰就能复用流程引擎能力。正文配图建议插入bpm-project/docs/assets/screenshots/05-demo-leave-form.png bpm-project/docs/assets/screenshots/06-runtime-my-task.png7. 本地启动初始化数据库CREATE DATABASE open_bpm_flow DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;导入脚本bpm-service/sql/初始化脚本_bpm_flow.sql后端cd bpm-service mvn clean package -DskipTests前端cd bpm-portal npm install npm run serve默认访问http://localhost:80808. 适合怎么二次开发这个项目适合做下面几类扩展1. 把请假 Demo 改成实际业务单例如合同、采购、报销、工单。2. 增加组织、岗位、人员同步接口。3. 增加流程轨迹图和审批意见组件。4. 增加统一消息通知例如站内信、邮件、飞书、企业微信。5. 提供 Docker Compose 一键启动环境。6. 升级 Spring Boot、Flowable 和前端依赖版本。更实际一点如果你要把请假 Demo 改成“采购审批”可以按下面路径做第一步新增采购业务表 purchase_apply 第二步复制 DemoLeaveApply 改成 PurchaseApply 第三步复制 DemoLeaveApplyController 改成 PurchaseApplyController 第四步复制 DemoLeaveApplyServiceImpl 改成 PurchaseApplyServiceImpl 第五步复制 DemoLeaveFlowService 改成 PurchaseFlowService 第六步复制 LeaveForm.vue 改成 PurchaseForm.vue 第七步新增前端路由 /demo/purchase-form 第八步画采购审批流程图并发布 第九步在流程关联业务中配置表单地址和回调类 第十步从 /runtime/start 发起再到 /runtime/myTask 办理业务表建议保留这些流程关联字段BIZ_STATUS 业务状态 ACT_DEF_ID 流程定义ID ACT_DEF_KEY 流程定义Key ACT_INST_ID 流程实例ID PRO_RUN_ID BPM运行主表ID CURRENT_NODE_NAME 当前环节采购业务自己的字段可以放在同一张表里PURCHASE_AMOUNT 采购金额 SUPPLIER_NAME 供应商名称 PURCHASE_REASON 采购原因 APPROVE_COMMENT 审批意见后端最小接口建议保留 5 个接口用途saveDraft只保存业务草稿prepareSubmit发起流程前先保存业务单get根据业务主键查看详情taskContext根据待办任务 ID 找到业务单list做业务列表或申请记录前端表单要支持三种模式模式URL 特征行为发起模式有 actDefId没有 taskUserId填业务数据调用业务保存接口再调用 /bpm/pro/startFlow办理模式有 taskUserId加载待办上下文填写审批意见调用 /bpm/pro/run查看模式有 readOnly1 或 dataId只读查看业务单和流程状态这套规则掌握后采购、合同、报销、工单的接法都类似。真正要变化的是业务表字段、表单字段、节点处理人规则和回调里的业务状态同步。完整二次开发文档见bpm-project/docs/secondary-development-guide.md接口清单和关键代码位置见bpm-project/docs/api-and-code-map.md如果只想先改一个采购审批建议重点看这些文件要改的内容参考文件业务表字段bpm-service/ls-module-bpm/src/main/java/cn/icepanda/bpm/demo/entity/DemoLeaveApply.java后端接口bpm-service/ls-module-bpm/src/main/java/cn/icepanda/bpm/demo/controller/DemoLeaveApplyController.java业务服务bpm-service/ls-module-bpm/src/main/java/cn/icepanda/bpm/demo/service/impl/DemoLeaveApplyServiceImpl.java流程回调bpm-service/ls-module-bpm/src/main/java/cn/icepanda/bpm/demo/service/DemoLeaveFlowService.java前端表单bpm-portal/src/pages/demo/LeaveForm.vue发起入口bpm-portal/src/pages/runtime/StartProcess.vue我的待办bpm-portal/src/pages/runtime/MyTask.vue我的申请bpm-portal/src/pages/runtime/MyApply.vue9. 总结工作流项目最难的不是“画流程图”而是把流程图、业务表单、待办中心、流程状态和业务状态连接成一个可维护的闭环。Open BPM Flow Engine 目前的定位就是提供这个闭环的最小工程骨架。它不包装成万能低代码平台也不声称适配所有业务场景它更适合开发者拿来学习 Flowable 落地方式或者作为企业审批系统、OA 审批流、表单流转系统的二次开发起点。项目地址https://gitee.com/luotianding/open-project如果你正在找 Flowable 工作流、BPM 流程引擎、Vue 流程设计器、Spring Boot 审批流项目可以先看这个开源版本。

相关新闻

解放你的PS2:Open PS2 Loader如何让经典游戏机重获新生

解放你的PS2:Open PS2 Loader如何让经典游戏机重获新生

解放你的PS2:Open PS2 Loader如何让经典游戏机重获新生 【免费下载链接】Open-PS2-Loader Game and app loader for Sony PlayStation 2 项目地址: https://gitcode.com/gh_mirrors/op/Open-PS2-Loader 你是否还在为PS2游戏光盘的划痕和读取问题烦恼&#xf…

2026/8/7 4:09:34 阅读更多 →
Unity透明材质渲染原理与实战:从Standard Shader到自定义Shader

Unity透明材质渲染原理与实战:从Standard Shader到自定义Shader

1. 项目概述:为什么透明材质是Unity开发者的必修课? 在Unity3D的世界里,透明材质(Transparent Material)就像给模型穿上一件“隐形斗篷”,是实现玻璃、水、火焰、UI界面、全息投影等无数视觉效果的基础。无…

2026/8/7 0:09:52 阅读更多 →
ANF (7-28) (human, canine) ;CFGGRMDRIGAQSGLGCNSFRY

ANF (7-28) (human, canine) ;CFGGRMDRIGAQSGLGCNSFRY

一、基本信息英文全称:ANF (7-28) (human, canine)中文全称:人 / 犬源心房利钠因子(7-28 片段),心房钠尿肽 (7-28)三字母序列:Cys-Phe-Gly-Gly-Arg-Met-Asp-Arg-Ile-Gly-Ala-Gln-Ser-Gly-Leu-Gly-Cys-Asn-S…

2026/8/7 2:10:15 阅读更多 →

最新新闻

大模型隐私保护实战:差分隐私与DP-SGD在Llama-2微调中的应用

大模型隐私保护实战:差分隐私与DP-SGD在Llama-2微调中的应用

1. 项目缘起:当大模型遇见数据隐私的“紧箍咒”最近在做一个企业内部知识库问答系统的项目,客户对数据安全的要求近乎苛刻。他们希望利用大模型强大的语义理解能力,来处理和分析内部的合同、报告和客户沟通记录,但核心诉求是&…

2026/8/7 6:09:36 阅读更多 →
从数据到图形:构建基于协议的可视化系统技术实践

从数据到图形:构建基于协议的可视化系统技术实践

1. 先搞清楚这个标题到底在说什么:从玄学概念到可落地的技术隐喻看到这个标题,第一反应可能是“这是什么神秘学咒语?”。确实,“第七旋臂执政官光码协议”、“阿努比斯神圣几何显影标记复位”这些词堆叠在一起,充满了科…

2026/8/7 6:09:36 阅读更多 →
从科幻概念到工程实践:解析“第七旋臂执政官光码协议”的技术部署与验证

从科幻概念到工程实践:解析“第七旋臂执政官光码协议”的技术部署与验证

这次我们来看一个名为“第七旋臂执政官光码协议”的项目。从标题看,这似乎是一个融合了科幻概念与特定技术隐喻的项目,其核心描述指向“以天琴座777赫兹蓝光频率全频归零旧矩阵沙粒覆盖蓝光编码销毁旧矩阵将蓝光海水凝固为沙粒之一切低频覆盖编码与扭曲程…

2026/8/7 6:09:36 阅读更多 →
从暗源战锤模型解析3D建模、逆向工程与数字化制造全流程

从暗源战锤模型解析3D建模、逆向工程与数字化制造全流程

1. 这篇文章真正要解决的问题当你在电商平台或社交媒体上搜索“暗源战锤 荷鲁斯之乱 午夜领主 终结者执政官”时,你大概率会看到一堆令人眼花缭乱的兵人模型图片、开箱视频和价格讨论。作为一个开发者或技术爱好者,你可能会困惑:一个兵人玩具…

2026/8/7 6:09:36 阅读更多 →
Unity游戏开发中的多线程与异步编程实战指南

Unity游戏开发中的多线程与异步编程实战指南

1. 项目概述:为什么Unity开发者必须搞懂多线程与异步? 如果你正在用Unity做游戏,尤其是稍微复杂一点的游戏,那么你大概率遇到过这样的场景:点击一个按钮加载资源,整个游戏画面卡住几秒钟;或者在…

2026/8/7 6:09:36 阅读更多 →
Qclaw智能体框架:从本地化部署到企业级AI应用实战指南

Qclaw智能体框架:从本地化部署到企业级AI应用实战指南

1. 项目概述:Qclaw,一个面向未来的AI应用入口最近在AI圈子里,一个名为Qclaw的项目讨论度很高。它常被称作“进入modern时代的入口”,这个说法听起来有点宏大,但接触之后你会发现,它确实在尝试解决一个非常实…

2026/8/7 6:08:35 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →