SpringBoot+Flowable 审批候选人策略设计:十余种 Strategy + Invoker,一次讲清下一关谁审
SpringBootFlowable 审批候选人策略设计十余种 Strategy Invoker一次讲清下一关谁审演示地址http://ruoyioffice.com | 源码1·GitHubruoyi-office | 源码2·GitCoderuoyi-office | 源码3·Giteeruoyi-office | 微信17156169080备注「RuoYi Office」流程画得再漂亮下一关「没人可审」就全废。硬编码assignee只能应付 demo真实企业要的是按角色、按部门负责人、按发起人自选、按表单里填的「项目经理」……正确姿势是策略模式每个规则一个 StrategyInvoker 统一注册、计算与部署校验。▲ 一屏看清Invoker 注册/分发/校验 → 四类策略组织 · 发起人 · 表单 · 兜底→ candidateStrategy / candidateParam / validateBpmnConfig引言下一关谁审才是流程真正的难题朴素做法后果BPMN 写死 userId换人就改图、发版只支持「指定角色」发起人自选、表单字段全做不了运行时算不出人再报错单据卡死运维救火每种规则 if-else 堆在监听器三个月后无法扩展目标架构一句话设计器写 strategyparam运行时 Invoker 算人部署前先校验。一、策略枚举把「人从哪来」编码化BpmTaskCandidateStrategyEnum用整型策略码区分规则例如分类策略示例组织类角色、部门成员、部门负责人、岗位、用户、用户组发起人相关发起人自己、发起人自选、发起人部门负责人、连续多级负责人审批中自选当前审批人指定下一节点审批人表单类表单内用户字段、表单内部门负责人表达式 / 兜底流程表达式、审批人为空设计器侧把candidateStrategy/candidateParam写入 UserTask 扩展属性运行时再解析。▲ 流程模型是策略配置的入口每个审批节点选一种候选人规则而不是写死工号二、Strategy 接口统一契约publicinterfaceBpmTaskCandidateStrategy{BpmTaskCandidateStrategyEnumgetStrategy();voidvalidateParam(Stringparam);defaultbooleanisParamRequired(){returntrue;}SetLongcalculateUsersByTask(DelegateExecutionexecution,Stringparam);SetLongcalculateUsersByActivity(BpmnModelmodel,StringactivityId,Stringparam,LongstartUserId,StringprocessDefinitionId,MapString,ObjectprocessVariables);}每个策略一个 Spring Bean构造BpmTaskCandidateInvoker时注入ListBpmTaskCandidateStrategy放进strategyMap重复策略码直接 Assert 失败——避免两个实现抢同一个码。三、Invoker计算链路与三道保险运行时核心是calculateUsersByTaskIntegerstrategyBpmnModelUtils.parseCandidateStrategy(flowElement);StringparamBpmnModelUtils.parseCandidateParam(flowElement);SetLonguserIdsgetCandidateStrategy(strategy).calculateUsersByTask(execution,param);removeDisableUsers(userIds);// 去掉禁用账号if(CollUtil.isEmpty(userIds)){// 候选人为空 → 走 ASSIGN_EMPTY 兜底策略userIdsgetCandidateStrategy(ASSIGN_EMPTY).calculateUsersByTask(execution,param);}removeStartUserIfSkip(userIds,flowElement,startUserId);// 发起人跳过配置三道保险值得抄DataPermission(enable false)算候选人时关掉数据权限避免「权限过滤导致找不到审批人」禁用用户剔除账号停用不能继续占坑为空兜底 / 发起人跳过空了走「审批人为空」配置若配置了发起人与审批人相同时跳过则从集合移除只剩一人时不删避免无人可审自动通过 / 自动拒绝的节点直接返回空集合不再算人。▲ 设计器节点配置把策略落到模型部署前 Invoker.validateBpmnConfig 会扫所有 UserTask四、部署前校验宁可发不出去也不要跑到一半卡住userTaskList.forEach(userTask-{// 自动通过/拒绝跳过IntegerstrategyBpmnModelUtils.parseCandidateStrategy(userTask);StringparamBpmnModelUtils.parseCandidateParam(userTask);if(strategynull){throwexception(MODEL_DEPLOY_FAIL_TASK_CANDIDATE_NOT_CONFIG,userTask.getName());}if(candidateStrategy.isParamRequired()StrUtil.isBlank(param)){throwexception(MODEL_DEPLOY_FAIL_TASK_CANDIDATE_NOT_CONFIG,userTask.getName());}getCandidateStrategy(strategy).validateParam(param);});这是产品体验关键错配在发布时报错而不是员工提交后卡在待办黑洞。▲ 策略算对了待办才会落到真人算错了再漂亮的时间轴也救不了五、四类策略怎么选产品视角场景更合适的策略财务岗固定审报销角色 / 岗位「谁的单子谁领导批」发起人部门负责人 / 连续多级提交时指定审批人发起人自选表单选了项目经理表单内用户字段规则很绕、要脚本流程表达式组织变动导致暂时无人审批人为空转管理员/跳过等扩展新规则时加枚举码 → 实现 Strategy Bean → 设计器下拉加一项。Invoker 不用改。六、技术亮点总结设计要点实现方式价值策略模式Strategy Invoker Map新规则可插拔双参数strategy param配置与计算解耦部署校验validateBpmnConfig防无人可审上线算人关数据权限DataPermission(false)避免过滤过头空人兜底ASSIGN_EMPTY流程不僵死发起人跳过removeStartUserIfSkip减少「自己批自己」七、快速体验在线演示http://ruoyioffice.com/web/账号admin/admin123打开流程管理 → 流程模型编辑一个简单流程。点开审批节点切换「指定角色 / 发起人自选 / 发起人部门负责人」等策略并保存发布。故意清空某节点审批人配置再发布确认被校验拦住。发起业务单到待办核对任务是否落到预期人。源码仓库GitHub | GitCode | Gitee常见问题FAQ为什么算候选人要关闭数据权限候选人计算是「系统找谁该审」不是「当前登录人能看哪些数据」。若带着数据权限过滤部门负责人可能被滤掉流程直接断。候选人为空一定会失败吗不一定。会再走「审批人为空」策略转交管理员、自动通过等取决于配置。兜底策略计算时不再剔除禁用用户防止二次清空。发起人自选和审批人自选有什么区别发起人自选提交申请时选本节点审批人。审批人自选当前节点审批时指定下一节点审批人。时机不同。表单内用户字段策略的 param 是什么通常是表单字段名运行时从流程变量里取出用户 ID 再解析。适合「项目经理」「对接人」等随单变化的角色。新策略要改 Flowable 引擎吗不用。扩展属性仍是 strategy/param新增一个实现BpmTaskCandidateStrategy的 Bean 即可被 Invoker 自动注册。结语候选人策略的本质是把「下一关谁审」从硬编码变成可配置、可校验、可扩展的策略族。Invoker 负责注册与兜底设计器负责把规则写进模型——流程才能在组织变动中活下去。你们项目里审批人是写死的还是已经策略化了有没有踩过「部署成功但无人可审」欢迎评论区交流。想要体验 RuoYi Office 的强大功能在线演示http://ruoyioffice.com/web/账号 admin / admin123源码仓库GitHub | GitCode | Gitee技术咨询添加微信17156169080备注「RuoYi Office」⭐如果觉得不错请给个 Star 支持一下

相关新闻

终极Wand-Enhancer解锁指南:从每日2小时限制到永久免费的完整解决方案

终极Wand-Enhancer解锁指南:从每日2小时限制到永久免费的完整解决方案

终极Wand-Enhancer解锁指南:从每日2小时限制到永久免费的完整解决方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你是否厌倦了Wan…

2026/8/3 16:27:36 阅读更多 →
5分钟实战指南:掌握ViGEmBus虚拟手柄驱动从入门到精通

5分钟实战指南:掌握ViGEmBus虚拟手柄驱动从入门到精通

5分钟实战指南:掌握ViGEmBus虚拟手柄驱动从入门到精通 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows系统上实现专业级的游戏控制…

2026/8/3 16:27:36 阅读更多 →
视频提取文字免费工具有哪些?2026免费工具推荐,无需付费本地离线多端可用

视频提取文字免费工具有哪些?2026免费工具推荐,无需付费本地离线多端可用

想从视频里把语音、字幕提取成可编辑的文字,但不想为各种付费套餐纠结——2026年这类免费工具已经足够丰富,覆盖了从微信小程序、手机APP到电脑软件和在线网站。我一般先用「提词匠」这个小程序,提词匠免安装、免注册,粘贴视频链接…

2026/8/3 16:27:36 阅读更多 →

最新新闻

职场进阶必备!OpenClaw 2.9.0智能桌面自动化工具落地实操指南

职场进阶必备!OpenClaw 2.9.0智能桌面自动化工具落地实操指南

🔥前言:Win11 环境运行 OpenClaw 必读说明 OpenClaw(因其图标酷似小龙虾,在社区中常被昵称为“小龙虾”)是一款备受关注的本地优先 AI 智能体项目。它基于开源协议开发,能够通过自然语言指令驱动计算机完成…

2026/8/3 20:09:43 阅读更多 →
3步掌握PUBG-Logitech:开源智能识别压枪工具的完整教程

3步掌握PUBG-Logitech:开源智能识别压枪工具的完整教程

3步掌握PUBG-Logitech:开源智能识别压枪工具的完整教程 【免费下载链接】PUBG-Logitech PUBG罗技鼠标宏自动识别压枪 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-Logitech PUBG-Logitech是一款基于图像识别技术的开源罗技鼠标宏压枪工具,…

2026/8/3 20:09:43 阅读更多 →
YOLOv11改进 | 主干/Backbone篇 | 目标检测网络FasterNeT轻量化网络助力yolov11改进(提高FPS和检测效率)

YOLOv11改进 | 主干/Backbone篇 | 目标检测网络FasterNeT轻量化网络助力yolov11改进(提高FPS和检测效率)

一、本文介绍 本文给大家带来的改进机制是FasterNet网络,将其用来替换我们的特征提取网络,其旨在提高计算速度而不牺牲准确性,特别是在视觉任务中。它通过一种称为部分卷积(PConv)的新技术来减少冗余计算和内存访问。这种方法使得FasterNet在多种设备上运行速度比其他网络…

2026/8/3 20:09:42 阅读更多 →
Vue Router导航守卫重定向死循环:原理、调试与最佳实践

Vue Router导航守卫重定向死循环:原理、调试与最佳实践

1. 项目概述:导航守卫中的重定向死循环 在Vue.js的单页应用开发中, vue-router 的导航守卫(Navigation Guards)是实现路由权限控制、数据预加载和页面跳转逻辑的核心机制。然而,许多开发者,包括我自己&am…

2026/8/3 20:09:42 阅读更多 →
嵌入式开发

嵌入式开发

文章目录零、学习大纲一、嵌入式驱动开发1.具体情况2.RTOS:FreeRTOS二、Linux驱动开发零、学习大纲 了解GPIO协议、I2C协议、SPI Flash、WatchDog、FreeRTOS、CAN总线、串口编程 一、嵌入式驱动开发 1.具体情况 1.就业单位: (1)主控芯片原厂&#xff…

2026/8/3 20:09:42 阅读更多 →
python的工业过程控制场景模拟第四十八篇:分析前馈—反馈控制历史数据,量化前馈补偿降低的参数波动幅度。

python的工业过程控制场景模拟第四十八篇:分析前馈—反馈控制历史数据,量化前馈补偿降低的参数波动幅度。

前馈—反馈控制历史数据分析系统 —— 量化前馈补偿效果的实战工具"前馈控制的道理谁都懂——扰动还没影响到被控量之前就先动手。但问题是:你怎么向领导证明前馈真的有用?我感觉有了前馈之后稳多了——这不是工程师该说的话。你需要的是数据&#…

2026/8/3 20:08:26 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

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

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

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

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

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

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

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

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

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

2026/8/3 4:36:35 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/3 5:19:38 阅读更多 →
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/3 8:27:36 阅读更多 →