政务工作流实战(二)——BPMN画不出来的七个设计决策(综述)

📅 2026/8/15 11:21:06
政务工作流实战(二)——BPMN画不出来的七个设计决策(综述)
政务工作流实战二BPMN画不出来的七个设计决策非科班野生程序员深耕政务信息化20年。上一个系列写了《突破Activiti的五个关键决策》——任意跳转、流程图追踪、外挂会签、分支条件注入、事务统一——全是后端啃源码啃出来的。这个系列换个角度从前端到后端一起看BPMN画得出来的那部分Activiti帮你做了BPMN画不出来的那部分才是政务场景真正要命的。政务审批不是按图走线那么简单。同一个审批人换个部门身份就变了、审批到一半临时想拉人商量、预算批完要自动关联到采购、一个人同时兼三个岗位——这些需求BPMN标准不支持Activiti引擎也管不了。我的方案不追概念追问题。每个设计决策都是在项目里被需求锁逼出来的。最后感谢豆包、智谱、OpenCode决策是我做的代码是我搓的文字是他们总结的。系列导览一、一个JSP打天下47KB万能表单引擎所有流程的所有任务前端只走一个JSP文件。表单定义存在数据库运行时动态生成HTML。每个表单还能通过script_列注入自己的JavaScript插件——searchothers()、saveothers()、setothers()三个钩子万能表单调你不用你改万能表单。关闭窗口自动清理孤儿流程非工作时间弹窗提醒——细节里全是政务场景的坑。关键词元数据驱动表单、onlyFrom.jsp、script_插件钩子、孤儿清理、工作时间校验二、数据库配拦截器不用改BPMNActiviti有Listener但Listener写死在BPMN里改一次要重新部署。我的做法是在数据库里配beforeId/afterId运行时通过BeanFactory.getBean()动态实例化。前置拦截器做数据校验后置拦截器做通知和外部系统同步。税务系统的后置拦截器还单独起了线程异步执行不阻塞主流程。7个调用点一套拦截器链数据库改了立即生效。关键词task_interceptor表、BeanFactory.getBean()、before/after接口、异步拦截器、execTax三、“相对部门”政务OA最绕的审批路由审批人怎么找Activiti的candidateUsers写死在BPMN里。政务场景下审批人是个动态概念——同一个科长角色在省厅和在地市完全是不同的人。系统用10种limitType码解决这个问题2001根据参保人所在地找人1001根据当前用户顶级部门找人1003在组织架构里往上爬两层定位到处。同一个getdusers()方法通吃海关的3层垂直管理和社保的5级行政层级。关键词getdusers()、limitType码、getMyTop()、特定部门vs相对部门、组织架构遍历四、随时会签审批人临时拉人商量Activiti的multiInstance要求预定义参与者运行时不能改。政务场景下处长审批到一半觉得需要问一下纪检科的意见——这种临时起意的会签BPMN里根本画不出来。前端一个会签按钮后端启动一个独立流程实例用T_HJS_s关联表链接父子流程。会签发起人选择参与者每个参与者独立审批主流程等所有人签完才能继续。加签减签改关联表就行不动BPMN。关键词Ad-hoc会签、独立子流程、T_HJS_s关联表、hqControl.starthq()、会签意见汇总五、流程串流程父子关联与数据回填预算审批走完了采购流程要引用预算审批的结果。两个独立的流程定义怎么串起来前端用pre_proc_inst_id_字段关联前置流程后端binddataByIns()通过实例ID反查表单数据把上一个流程的审批结果自动填到当前表单里。支持多个前置流程用户选择要看哪一个。流程和流程之间的数据通道靠的是数据库字段而不是BPMN的信号事件。关键词pre_proc_inst_id_、binddataByIns()、多前置流程、数据回填、流程链六、一人多岗审批顺序可调政府里一个人兼多个岗位是常态——张三既是办公室副主任又是党支部委员。待办列表里要按身份过滤审批时要知道现在是哪个身份在签。前端在打开表单前先弹身份选择对话框后端用,userId,roleId#areaNo,复合字符串做多身份匹配。审批顺序也不能写死——今天科长先签再处长签明天可能反过来——管理界面用上下箭头调优先级运行时动态生效。关键词多身份选择、复合身份字符串、candidateUsers、优先级排序、userset/roleset七、allbytaskid一个接口扛六个DataStore打开一个审批表单要请求多少次表单数据、字段权限、流程进度、下一步选项、会签意见、审批历史——如果每个单独请求就是6次网络往返。我的做法是一个allbytaskid接口把这6组数据一次全返回。前端search()一调6个DataStore全部到齐common表单数据、frole字段权限、next下一步、hqyj会签意见、tasks审批历史外加一个lcmx参数流程进度条。这个接口后来在前端圈叫BFFBackend For Frontend我当时不知道这个词只知道一次拿完比请求6次快。关键词BFF模式、allbytaskid()、6个DataStore、一次请求拿完、lcmx流程进度一句话总结BPMN画得出来的是标准流程画不出来的是政务现实。万能表单、数据库拦截器、相对部门、临时会签、流程链、多身份路由、BFF聚合——七个决策一个原则BPMN是工具不是约束画不出来的就自己画。关联系列政务工作流实战一突破Activiti的五个关键决策综述 —— 后端源码级突破Java Web自研框架18年架构决策复盘系列文 —— 框架整体设计作者许彰午| 非科班野生程序员深耕政务信息化20年标签#Java #Activiti #工作流 #政务OA #BPMN #BFF #政务信息化 #技术复盘