status: applied created: 2026-06-28 complexity: 🔴 复杂 related:
code-copilot/changes/business-flow-lowcode-integration/spec.md
当前业务模块与流程模块已经具备基础联动能力,但配置入口仍然分散:
BusinessCodeFormProvider 接入,但前台配置还没有把它作为“可选择的业务表单资产”呈现。flowable:formUrl="/business/purchase-order-test" 这类手写路径,对业务人员不可用,也容易与业务应用配置产生双写。本变更目标是把“表单/单据/流程/节点表单/字段权限/自动化触发/发布检查”收口成一套业务应用流程配置:
业务表单资产
-> 单据规则
-> 主流程绑定
-> 变量映射
-> 打开流程设计器
-> 选中节点
-> 节点配置(审批设置 / 表单权限 / 高级设置)
-> 自动化触发
-> 发布检查
-> 待办/已办/业务详情统一运行
首期不重写低代码表单设计器和动态 CRUD 底层,不新增独立审批引擎;重点是统一配置入口、统一运行契约,并把节点表单权限从“应用配置里的孤立配置项”收回到流程设计器节点配置。业务用户在应用中心完成流程关联和变量映射后,通过入口进入流程设计器配置节点,不再维护两份节点配置。
业务对象设计器当前把单据与流程拆成两个独立面板:
forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue:150 使用 BusinessDocumentPanel。forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue:164 使用 BusinessFlowBindingPanel。forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue:331 的闭环步骤仍把 document 和 flow 作为两个步骤。单据配置服务已经维护状态字段、编号规则和主流程摘要:
BusinessDocumentConfigService#getConfig:forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessDocumentConfigService.java:65BusinessDocumentConfigService#saveConfig:同文件 :123流程绑定面板已经具备流程模型、业务记录绑定、变量映射,节点配置需要跳转到流程设计器维护:
BusinessFlowBindingPanel.vue:33 选择流程模型。BusinessFlowBindingPanel.vue:64 配置业务记录绑定。BusinessFlowBindingPanel.vue:155 配置变量映射。BusinessFlowBindingPanel.vue 提供“打开流程设计器”入口。前端 API 已经拆成单据和流程两组:
businessDocumentConfig/saveBusinessDocumentConfig:forge-admin-ui/src/api/business-app.js:346businessFlowBinding/saveBusinessFlowBinding:forge-admin-ui/src/api/business-app.js:370businessFlowFormAssets:forge-admin-ui/src/api/business-app.js:382后端流程绑定接口已经存在,但尚未提供“单据 + 流程”的统一 Facade:
BusinessFlowController#getBinding:forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessFlowController.java:45BusinessFlowController#formAssets:同文件 :60BusinessFlowController#saveBinding:同文件 :88运行时待办表单应优先读取流程节点配置,并仅把 ai_business_binding.binding_config.nodeForms 作为历史兜底:
BusinessFlowService#buildTaskFormContext:forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java:454BusinessFlowService#resolveFlowNodeForm:读取 Flow 服务任务节点 formKey/formFieldPermissionsBusinessFlowService#findNodeForm:仅在流程节点没有配置时兜底读取历史 nodeFormsBusinessFlowService#saveTaskFormContext:同文件 :237代码优先复杂业务已有扩展点:
BusinessCodeFormProvider:forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessCodeFormProvider.java:16BusinessCodeFormProviderRegistry#listAssets:forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessCodeFormProviderRegistry.java:33采购单审批样例已经注册代码表单资产,但资产信息还不完整:
SamplePurchaseOrderCodeFormProvider#formAssets:forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/provider/SamplePurchaseOrderCodeFormProvider.java:38SamplePurchaseOrderCodeFormProvider#buildFields:同文件 :120flowable:formUrl:forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/support/SamplePurchaseOrderFlowBpmn.java:24标准 BPMN 流程设计器仍暴露节点表单配置:
NodePropertiesPanel.vue:357 显示“表单类型”。NodePropertiesPanel.vue:368 选择 formKey。NodePropertiesPanel.vue:443 输入 formUrl。钉钉样式流程设计器也有节点表单权限与条件配置:
DingFlowDesigner.vue:32 接收 formFieldCatalog。ApproverConfig.vue:76 显示“表单权限”页签。FormPermissionConfig.vue:3 根据流程全局动态表单字段配置权限。ConditionConfig.vue:7 支持业务字段条件,ConditionConfig.vue:77 支持同意/驳回等业务选项。业务流程配置页不应再维护节点表单列表:
BusinessFlowBindingPanel.vue 只展示流程节点配置入口,跳转 /flow/design 并携带 businessObjectCode/codeApp。发布检查已经检查单据闭环,但仍按分散面板定位修复入口:
BusinessObjectReadinessService#checkDocumentClosureStatus:forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectReadinessService.java:332panel=document,缺流程时跳转 panel=automation。BusinessFlowBindingDTO.BusinessBindingDTO,可作为简单业务表和低代码对象的最小集成能力。BusinessFlowService 统一待办表单上下文可以继续作为主链路,节点策略优先来自 BPMN 节点配置,历史 nodeForms 只作兜底。BusinessCodeFormProvider 注册表单资产、上下文和保存能力。formKey、formUrl、${approvalResult == 'reject'} 这类开发概念。objectCode,后端一次返回对象基础信息、单据配置、流程绑定、表单资产、发布检查摘要;前端不再分别拼接两套配置状态。panel=document、panel=automation 路由兼容跳转到新面板并定位到对应分区。审批设置 / 表单权限 / 高级设置 三个页签;审批人、会签、驳回、抄送等高频能力和节点字段权限在同一处配置。表单权限 页签按字段逐行展示字段名、字段编码、字段类型、系统字段标识、可见、可编辑、必填;只读/系统字段禁用可编辑和必填;提供“全部可见”“清空可编辑”等批量操作。formUrl 作为主要配置;用于验证部门负责人、工程经理、会签、驳回修改、已办只读展示。formKey/formUrl/formJson/formFieldPermissions;BusinessFlowBinding.nodeForms 只作为历史兼容兜底。审批设置:审批人、角色、部门、会签、抄送、驳回、退回、终止等业务化配置。表单权限:选择当前节点使用的业务表单资产,并用字段权限矩阵配置可见、可编辑、必填。高级设置:节点 ID、表达式、监听器、外部地址、Provider 技术信息等开发者兜底能力。 BPMN 节点 formKey/formUrl/formJson/formFieldPermissions
> BusinessFlowBinding.nodeForms 兼容兜底
> 流程默认表单
BusinessTaskFormContextVO,待办可编辑,已办/历史只读。| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 无 | ai_business_document_config |
无 | 首期继续保存单据配置。 |
| 新增内置数据 | ai_business_binding |
无结构变更 | 新增 V1.0.82__seed_sample_purchase_order_flow_binding.sql,为采购单代码业务内置默认 FLOW 绑定;nodeForms 仅作历史兼容兜底。 |
| 新增内置数据 | ai_business_suite / ai_business_object / ai_business_app |
无结构变更 | 新增 V1.0.83__seed_sample_purchase_order_app_center_entry.sql,把采购单审批测试作为“采购”业务域下的代码型业务对象和应用入口显示在应用中心。 |
| 更新内置数据 | ai_business_binding |
无结构变更 | 新增 V1.0.84__extend_sample_purchase_order_form_asset_fields.sql,为已存在采购单旧 nodeForms 兜底配置补充申请人修改节点 needDate 字段权限。 |
| 无 | sample_purchase_order |
无 | 采购单样例只调整配置和 Provider 资产,不新增表字段。 |
首期不新增 Flyway 表结构脚本。采购单样例新增的是可重复执行的 seed 数据脚本,用于内置业务流程绑定和历史 nodeForms 兜底;新节点配置以流程模型 BPMN 节点属性为准。若后续要做契约版本化,再单独设计 ai_business_flow_contract_version。
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 新增 | /ai/business/flow-app/config/{objectCode} |
GET | 返回统一业务流程应用配置。 |
| 新增 | /ai/business/flow-app/config/{objectCode} |
PUT | 事务保存单据配置和流程绑定。 |
| 增强 | /ai/business/flow/form-assets/{objectCode} |
GET | 表单资产补充 fields、providerKey、providerName、supportsSave、formMode。 |
| 增强 | /ai/business/flow/task-form-context |
GET | 代码表单和低代码表单统一返回字段权限与记录数据。 |
| 增强 | /ai/business/flow/task-form-context/readonly |
GET | 已办/历史统一只读展示业务表单内容。 |
| 增强 | /ai/business/flow/model/{modelKey}/variables |
GET | 保持变量和人工节点输出,供统一配置页同步节点表单。 |
| 可选新增 | /ai/business/flow/model/{modelKey}/business-bindings |
GET | 查询流程模型是否被业务应用绑定,供流程设计器识别业务上下文,并兼容流程管理中的独立流程场景。 |
forge-plugin-generator 业务应用流程配置、表单资产、待办表单上下文、发布检查。forge-business-core 采购单审批样例 Provider 与流程初始化数据。forge-admin-ui/src/api/business-app.jsforge-admin-ui/src/views/app-center/object-designer.[objectCode].vueforge-admin-ui/src/views/app-center/components/designer/BusinessDocumentPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFlowBindingPanel.vueforge-admin-ui/src/components/bpmn/NodePropertiesPanel.vueforge-admin-ui/src/components/flow-designer/*⚠️ 本变更涉及状态流转、字段权限和待办保存,必须重点验证:
BusinessFlowBinding.nodeForms 仅兜底。test-spec.md。审批办理 / 表单权限 / 高级设置 完成配置。ai_business_document_config 和 ai_business_binding.binding_config。flow-app/config Facade,不删除既有 document/config 和 flow/binding 接口,降低回归风险。BusinessFormAssetRegistry 思路渐进落地,首期扩展 BusinessFlowService#getFormAssets 和 BusinessCodeFormProviderRegistry#listAssets。BusinessCodeFormProvider,但资产必须包含字段目录,保存前由平台过滤字段权限。BusinessFlowBinding.nodeForms 只保留兼容兜底,不再作为新配置主路径。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Task 0 | completed | spec.md, tasks.md, test-spec.md, execution-log.md |
完成 SDD 提案,不涉及业务代码。 |
| Task 1 | completed | BusinessFlowAppConfigDTO.java, BusinessFlowAppConfigVO.java, BusinessFlowAppConfigService.java, BusinessFlowAppConfigController.java |
新增统一配置 Facade,事务保存单据配置和流程绑定。 |
| Task 2 | completed | business-app.js, BusinessFlowAppConfigPanel.vue, BusinessDocumentPanel.vue, BusinessFlowBindingPanel.vue |
统一面板已接入 flow-app/config 一次读取/保存。 |
| Task 3 | completed | object-designer.[objectCode].vue, BusinessObjectDesignerShell.vue, BusinessUnitCard.vue, ObjectCard.vue, BusinessActionDesigner.vue, BusinessObjectReadinessService.java |
入口合并为“业务流程配置”,旧 document/automation 路由兼容到 flow-app;代码型业务对象在应用中心默认打开“业务流程配置”。 |
| Task 4 | completed | BusinessFlowFormAssetSelect.vue, BusinessFlowBindingPanel.vue, BusinessFlowService.java, BusinessCodeFormProviderRegistry.java, SamplePurchaseOrderCodeFormProvider.java, BusinessFlowVariableResolver.java, FlowVariableMappingEditor.vue |
节点表单改为资产选择,代码表单资产暴露字段目录;代码业务没有低代码 configKey 时,变量映射字段候选项从 Provider 字段目录兜底读取。 |
| Task 5 | completed | BusinessFlowService.java |
低代码和代码表单都做后端字段权限过滤,已办/历史强制只读。 |
| Task 6 | completed | NodePropertiesPanel.vue, DingFlowDesigner.vue, NodeConfigDrawer.vue, ApproverConfig.vue, FormPermissionConfig.vue |
流程设计器节点抽屉恢复为节点配置主入口,支持表单资产和字段权限。 |
| Task 7 | completed | BusinessObjectReadinessService.java, BusinessFlowService.java |
发布检查修复入口统一到 flow-app,表单资产和代码 Provider 校验能力接入。 |
| Task 8 | completed | SamplePurchaseOrderCodeFormProvider.java, SamplePurchaseOrderFlowBpmn.java, SamplePurchaseOrderServiceImpl.java, BusinessFlowService.java, todo.vue, done.vue, V1.0.82__seed_sample_purchase_order_flow_binding.sql, V1.0.83__seed_sample_purchase_order_app_center_entry.sql, V1.0.84__extend_sample_purchase_order_form_asset_fields.sql |
采购单代码业务默认 nodeForms 已迁入业务流程绑定;BPMN 不再写死业务表单 URL/字段权限;待办/已办统一走业务表单上下文;应用中心显示“采购/采购申请/采购单审批测试”;字段目录和申请人修改节点 needDate 权限已补齐。 |
| Task 9 | completed | test-spec.md, execution-log.md |
已执行后端目标编译、前端 lint/build 和 git diff --check。 |
| Task 10 | completed | BusinessFlowBindingPanel.vue, flow/design.vue, DingFlowDesigner.vue, NodeConfigDrawer.vue, ApproverConfig.vue, FormPermissionConfig.vue, BusinessFlowService.java, FlowClient.java, SamplePurchaseOrderFlowBpmn.java |
应用配置页移除独立节点工作台,改为打开流程设计器;流程设计器节点抽屉承载审批办理、表单资产和字段权限;运行时优先读 Flow 节点表单信息,nodeForms 仅兜底。 |
尚未进入 /review。本轮 /apply 已完成实现和自动化验证;采购单“提交 -> 审批 -> 会签 -> 驳回修改 -> 已办只读”的完整人工流程仍需在本地服务与数据库环境验收。
apply unified-business-flow-app-config,确认进入编码实现阶段。