SpringBoot+Flowable 审批候选人策略设计:十余种 Strategy + Invoker,一次讲清下一关谁审

发布时间:2026/8/3 16:27:36

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小时限制到永久免费的完整解决方案

2026/8/3 16:27:36

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

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

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

2026/8/3 16:27:36

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

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

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

2026/8/3 16:27:36

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

A-47为何仅做AEC+ENC:22mA功耗预算下的DSP算力分配策略

A-47为何仅做AEC+ENC:22mA功耗预算下的DSP算力分配策略

2026/8/3 17:47:39

背景与问题:DSP语音处理模块的功耗与功能边界的工程约束 在免提通话DSP芯片设计中,算力(通常以MIPS或MMAC/s衡量)和功耗是一对核心矛盾。同样的DSP内核在更高功耗下可以运行更复杂的神经网络模型,但当产品定位为低成本…

A-29P LINE OUT 1.5Vrms输出与后级ADC输入阻抗匹配设计分析

A-29P LINE OUT 1.5Vrms输出与后级ADC输入阻抗匹配设计分析

2026/8/3 17:47:39

背景与问题:LINE OUT输出幅度与系统音频链路增益预算在免提通话系统中,语音处理模块的输出幅度直接影响后级音频链路(ADC采集、软件编解码、网络传输、DAC播放)的有效动态范围。当模块输出幅度过低时,后级ADC输入可能工…

AI设计接单资源包泄露事件:2024上半年Top 50高转化客户关键词库+平台搜索权重词表(仅开放48小时)

AI设计接单资源包泄露事件:2024上半年Top 50高转化客户关键词库+平台搜索权重词表(仅开放48小时)

2026/8/3 17:47:39

更多请点击: https://intelliparadigm.com 第一章:AI设计接单资源包泄露事件深度复盘 2024年6月,某垂直领域AI设计服务平台的内部资源包(含客户原始需求文档、定制化Prompt模板库、交付标准SOP及未脱敏的项目截图)被意…

AI模型逆向攻击实录:仅用200条样本还原用户原始医疗记录,防御方案已通过ISO/IEC 27001认证

AI模型逆向攻击实录:仅用200条样本还原用户原始医疗记录,防御方案已通过ISO/IEC 27001认证

2026/8/3 17:47:39

更多请点击: https://codechina.net 第一章:AI模型逆向攻击实录:仅用200条样本还原用户原始医疗记录,防御方案已通过ISO/IEC 27001认证 近期在某三甲医院联合实验室的红队测试中,研究人员利用梯度反演(Gra…

AI审合同总漏掉“不可抗力”隐藏陷阱?资深律所合伙人首次公开12类语义歧义识别矩阵

AI审合同总漏掉“不可抗力”隐藏陷阱?资深律所合伙人首次公开12类语义歧义识别矩阵

2026/8/3 17:47:39

更多请点击: https://kaifayun.com 第一章:AI合同审查的核心挑战与范式迁移 传统合同审查高度依赖法律专家的经验直觉与人工比对,面对海量非结构化文本、跨法域条款变体及动态监管更新,其可扩展性与一致性正面临系统性瓶颈。AI驱…

C++Builder VCL GUI组件深度解析:从原理到高级应用实践

C++Builder VCL GUI组件深度解析:从原理到高级应用实践

2026/8/3 17:37:39

1. 项目概述:为什么我们需要一本CBuilder GUI组件的“百科全书”? 在桌面应用开发的江湖里,CBuilder一直是个独特的存在。它不像Visual C那样需要你从零开始搭建一切,也不像纯粹的C#那样完全拥抱托管环境。它提供了一套名为VCL&am…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/3 4:49:52

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/2 0:04:43

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/2 0:04:43

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

从提示词小白到AI内容架构师(20年技术老兵的6阶能力跃迁图谱,仅剩最后87个免费解读名额)

从提示词小白到AI内容架构师(20年技术老兵的6阶能力跃迁图谱,仅剩最后87个免费解读名额)

2026/8/3 0:06:20

更多请点击: https://codechina.net 第一章:AI写作能力跃迁的认知革命 过去五年,AI写作已从“模板填充”迈入“语义共建”阶段——模型不再仅复述训练数据中的句式,而是基于跨文档推理、意图锚定与风格自适应,动态构建…

AU-48八米拾音的信噪比衰减与降噪门限耦合分析

AU-48八米拾音的信噪比衰减与降噪门限耦合分析

2026/8/3 0:06:20

一、"拾音 8 米"这个指标该怎么读AU-48 的规格里,麦克风拾取范围写的是 10cm-800cm,配合 T1/T2 参数切换可选四档:中距离 0.5-2m、近距离 0.1-0.2m、远距离 0.5-5m、超远距离 0.5-8m。"能拾音 8 米"这句话本身没错&#…

LangChain 从 Demo 到团队落地,真正卡壳的是哪一步?

LangChain 从 Demo 到团队落地,真正卡壳的是哪一步?

2026/8/3 0:06:20

聊《LangChain并不难,难的是知道什么时候不该用》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。 摘要 摘要:很多人学 LangChain 都是从调个 API 开始,跑通一个 Demo 觉得挺简单…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/2 17:06:42

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/3 7:25:44

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/3 2:41:27

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…