业务表单开发
给已有业务单据接审批:自己建表、自己写 list / info,流程引擎只推进节点。formType = 20。读完能对上 processDefinitionKey、两条自定义路径,并实现 FlowBillService 回写。拖控件、数据只进流程变量,见 流程表单设计。四步向导见 流程配置。
合同、回款、用印、用车都走业务表单:单据还要改库存、台账、附件,不能只活在流程里。
示意图:页面改业务模块;引擎改 yudao-module-bpm;状态回写走 FlowBillService。
案例:用印申请
菜单 OA → 印章管理 → 用印申请单。列表 /oa/seal/seal-apply-list,新建 / 详情 /oa/seal/seal-apply-info。官方菜单 id:列表 5113,创建按钮 5115。单据枚举 code 103,流程 key oa_seal_apply_bill。

本系统截图:单据编号、单据状态、印章、用印类型。操作列主要是删除。

本系统截图:info 页。底部提交 / 保存 / 关闭;附件走 AttachmentList。
示意图:用印单与 Flowable 历史实例互指。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| Controller | @RequestMapping("/oa/seal-apply-bill") | ruoyi-office/yudao-module-oa/.../controller/admin/seal/SealApplyBillController.java |
| Service | 保存、提交、实现 FlowBillService | .../service/seal/SealApplyBillServiceImpl.java |
| 表 / DO | @TableName("oa_seal_apply_bill") | SealApplyBillDO.java |
| 单据枚举 | key oa_seal_apply_bill | yudao-module-oa-api/.../OaBillTypeEnum.java |
| 列表 / info | views/oa/seal/sealapply/ | ruoyi-office-vben/apps/web-antd/src/views/oa/seal/sealapply/ |
| 提交路由 | Vue 路由 | /oa/seal/seal-apply-info |
| 查看地址 | 组件路径 | oa/seal/sealapply/info/index |
用车同构:key oa_car_apply_bill,列表 /oa/car/car-apply-list,info /oa/car/car-apply-info。
业务行用 process_instance_id 指向实例。实例用 BUSINESS_KEY_ 指向单据主键。提交时先把 process_status 写成审批中(RUNNING = 1),再调 submitProcessInstance,最后把实例 id 写回。
info 点「提交」走 POST /oa/seal-apply-bill/submit。processDefinitionKey 取枚举,不要手写字符串。variables 给网关条件用,用印把 useMode 映射成 sealUseMode。
OA 共用 OaLocalNotificationListener,按流程 Key 找 FlowBillService。用印的 updateProcessStatus 回写 process_status;通过时再把用印状态设为待处理。
不要用目录名猜流程 Key
Key 只认三处,且必须一致:单据枚举的 getProcessDefinitionKey()、创建按钮的 system_menu.process_definition_key、已发布模型的 key。用印是 oa_seal_apply_bill,不是 sealapply。
发起有两条路,落到同一张 info:业务列表新增,或大厅 formType === CUSTOM 时 router.push(formCustomCreatePath)。审批详情用 formCustomViewPath 动态加载。info 要认 embedded / isApproval,暴露 getFormValues、validate、submit。

本系统截图:用印申请第二步。业务表单已锁定;提交路由 /oa/seal/seal-apply-info,查看地址指向 info 组件。
二开清单
新单据对照用印,按商业版业务表单规范一次出齐。规范原文在提示词工程 ruoyi-office-prompt/业务流程表单-代码生成规范.md,生成时走技能 bpm-business-form-codegen。下面是对外可执行清单,不替代规范全文。
| 层级 | 产物 |
|---|---|
| SQL | 主表、菜单、字典、单据类型 |
| 枚举 | 模块 XxxBillTypeEnum、错误码 |
| 后端 | DO / SaveReqVO / RespVO / PageReqVO / Mapper / Service(含 FlowBillService)/ Controller |
| 前端 | api/、list/index.vue + data.ts、info/index.vue + data.ts |
| 流程 | 模型 CUSTOM,key 等于枚举,发布 |
主表通用字段:bill_code、process_instance_id、process_status、创建人、公司 / 部门、备注、tenant_id。菜单:列表带 mobile_path,创建按钮绑 process_definition_key。列表操作列只留删除。附件用 AttachmentList。多行文本 col-span-full items-start。待办摘要 cause 默认同备注。查询接口不要在原先无注解的方法上新增 @PreAuthorize。
提交后 loadData 结束再 refreshAllData(),审批进度和流程图才会回显。
模型不要手动画。用技能 bpm-process-model-generator 按配置创建并发布,再按 流程配置 核验两条路径和激活定义。
配置与操作
管理员在 流程模型 把标识写成枚举 key,表单类型选业务表单,填提交路由和查看地址,保存后发布。开发在业务模块写 list / info,实现 FlowBillService。员工从业务列表或发起大厅进同一张 info。
