status: review_fix_completed created: 2026-07-02 complexity: 🔴复杂
当前应用管理已经具备业务对象、字段、表单、列表、详情、关系、公式、单据编号、流程绑定、触发器、消息、导入导出等基础能力。采购仓储原型评估暴露的问题不是某一个业务页面缺字段,而是平台还缺少一批通用能力:
本变更目标是补齐“通用平台能力底座”,使不同业务域都能通过应用管理和流程能力完成真实可用的业务闭环。采购仓储只作为验收样例之一,不允许在平台代码里硬编码采购、仓库、供应商、物料等业务对象。
完成后,平台应支持:
forge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vue:已有对象动作配置入口,动作类型包括打开页面、调用 API、发起主流程、执行触发器、外部链接。forge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vue:列表设计器会把对象动作转换为运行态列表按钮配置。forge-admin-ui/src/components/ai-form/AiCrudPage.vue:运行态支持行按钮、确认、START_FLOW、CALL_API、站内路由、外部链接和按钮 loading。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectActionService.java:保存对象动作配置到 designerOptions.actions,目前偏配置管理,不负责执行复杂动作。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/DynamicCrudController.java:动态 CRUD 新增、修改、删除后发布业务事件。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessEventPublisher.java:发布记录创建、更新、删除、状态变更和流程结果事件。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerExecutor.java:触发器执行动作,支持 START_FLOW、SEND_MESSAGE、CREATE_RECORD、UPDATE_FIELD、WEBHOOK,其中 Webhook 仍为 TODO。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerSchedulerService.java:定时触发器每 5 分钟扫描到期字段并去重执行。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java:承载业务对象流程发起、状态回写、节点字段权限、流程结果事件发布。DynamicCrudService 已支持普通单表增删改查、导入导出、自动编号、单据编号、STORED/VIRTUAL 公式、运行时数据源上下文、主子表 children 查询和保存。ChildTableEditor.vue 已支持运行态子表明细增删行、基础组件渲染和必填校验。BusinessTriggerExecutor 已能复用 DynamicCrudService.insertInternal 和 updateFieldsInternal 做内部创建/更新字段。BusinessFlowBindingPanel.vue 和流程相关配置已有字段权限、流程启动方式、变量映射等能力。AiCrudPage.vue 已有行按钮 loading、全局流程发起 loading、确认弹窗和自定义动作事件。BusinessTriggerExecutor.executeWebhookAction 中仍是 TODO,动作引擎需要为异步/外部动作预留 TODO 与重试状态。replace 风格保存,缺少稳定行级合并、字段映射选择器和服务端行级规则校验。UPDATE_FIELD,必须通过领域服务保证幂等、防重复、并发一致性和审计。tenant_id=1。| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 新增 | ai_business_action_execution_log |
tenant_id, object_code, record_id, action_code, execute_status, request_digest, step_result, error_message, correlation_id, duration_ms |
通用动作执行日志 |
| 新增 | ai_business_quantity_balance |
tenant_id, account_code, item_code, dimension_key, quantity, locked_quantity, 唯一索引 |
通用数量余额,不命名为库存 |
| 新增 | ai_business_quantity_ledger |
tenant_id, account_code, item_code, operation_type, quantity_delta, source_object_code, source_record_id, idempotency_key |
通用数量流水 |
| 新增 | ai_business_quantity_lock |
tenant_id, account_code, item_code, lock_quantity, lock_status, source_object_code, source_record_id, idempotency_key |
通用数量锁定 |
| 可选新增 | ai_business_reminder_profile |
tenant_id, profile_code, object_code, rule_config, status |
分层提醒规则配置 |
| 扩展 | ai_business_trigger_log |
复用已有 correlation_id, todo_code |
动作引擎与触发器链路关联 |
| 扩展 | ai_business_flow_instance_link |
不优先加字段 | 流程回调优先通过动作配置引用 |
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 新增 | /ai/business/action/execute |
POST | 执行业务动作 |
| 新增 | /ai/business/action/logs |
GET | 查询动作执行日志 |
| 新增 | /ai/business/action/preview |
POST | 预览动作步骤、权限和字段映射有效性 |
| 新增 | /ai/business/selector/query |
POST | 按运行对象配置查询选择器数据 |
| 新增 | /ai/business/quantity/operation |
POST | 执行通用数量台账动作,首期只允许动作引擎内部调用 |
| 扩展 | /ai/business/trigger/* |
- | 触发器执行改为复用动作引擎 |
| 扩展 | /ai/business/flow/* |
- | 流程结果回调可绑定动作编码 |
forge-plugin-generator 动态业务应用、触发器、流程绑定、动作配置、数量台账。AiCrudPage、子表编辑器、选择器组件。⚠️ 本变更涉及状态流转、库存/数量扣减、未来可承载资金核销,属于高风险平台能力。
CALL_API 不能绕过权限和审计成为后门;对内部平台动作优先使用动作步骤,不鼓励业务人员配置裸 API。/apply 是否只实现 Phase 1「通用动作执行引擎」,后续 Phase 2/3/4 单独变更推进。建议:是。quantity,库存仅作为应用配置样例。建议:是。UPDATE_FIELD、CREATE_RECORD、START_FLOW、SEND_MESSAGE、DOMAIN_ACTION、WEBHOOK。accountCode/itemCode/dimensionKey 表达仓库、物料、批次等维度。CREATE_RECORD、UPDATE_FIELD 后续迁移为动作步骤,兼容旧配置。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| SDD proposal | completed | spec.md, tasks.md, test-spec.md |
已创建通用平台能力变更,不进入编码 |
| Apply start | in_progress | spec.md, tasks.md, execution-log.md |
用户执行 apply lowcode-platform-capability-foundation,第一轮编码范围锁定为 Phase 1 |
| Task 1 | completed | V1.0.87__add_business_action_execution_log.sql, BusinessActionExecuteDTO.java, BusinessActionStepDTO.java, BusinessActionLogQueryDTO.java, BusinessActionExecuteResultVO.java, BusinessActionStepResultVO.java, AiBusinessActionExecutionLog.java, BusinessActionExecutionLogMapper.java, BusinessActionExecutionLogMapper.xml |
已新增通用动作协议与执行日志表 |
| Task 2 | completed | BusinessActionExecutionService.java, BusinessActionStepExecutor.java, UpdateFieldActionStepExecutor.java, CreateRecordActionStepExecutor.java, StartFlowActionStepExecutor.java, SendMessageActionStepExecutor.java, BusinessObjectActionService.java, BusinessObjectMapper.java, BusinessObjectMapper.xml |
已实现动作配置解析、权限校验、幂等命中、事务执行和失败日志 |
| Task 3 | completed | BusinessActionExecutionController.java, business-app.js, V1.0.87__add_business_action_execution_log.sql |
已新增动作执行、预览和日志接口及权限资源 |
| Task 4 | completed | BusinessActionDesigner.vue, BusinessListDesigner.vue, AiCrudPage.vue, business-app.js |
已支持 COMMAND 动作设计、列表运行态映射、动作弹窗表单、执行 loading 和成功刷新 |
| Phase 1 validation | completed | 后端 Maven 编译、前端 pnpm build、git diff --check、Flyway placeholder 扫描 |
后端/前端构建通过;首次后端编译因 shell JDK 非 17 失败,指定 Java 17 后通过 |
| Phase 2 start | completed | tasks.md, execution-log.md |
用户要求继续,进入通用记录选择器能力 |
| Task 5 | completed | BusinessRecordSelectorController.java, BusinessRecordSelectorService.java, BusinessRecordSelectorQueryDTO.java, BusinessRecordSelectorResultVO.java, BusinessObjectMapper.java, BusinessObjectMapper.xml, business-app.js |
已新增通用记录选择器查询接口,复用动态 CRUD 查询、运行配置、数据权限和字段白名单,Long ID 返回前端前字符串化 |
| Task 6 | completed | AiRecordSelectorModal.vue, record-selector-utils.js, AiFormItem.vue, ChildTableEditor.vue, BusinessFieldPropertyPanel.vue, BusinessFormDesigner.vue, ForgeFieldShelf.vue, ForgePropertyPanel.vue, formDesignerSchema.js, autoFieldRegistry.js, BusinessFieldSchemaService.java, BusinessObjectDesignerService.java, LowcodeRuntimeConfigBuilder.java, LowcodeSchemaValidator.java |
已支持记录选择器字段配置、运行态单选回填、字段映射、多选批量追加子表;服务端主子表 merge 保存仍归 Task 7 |
| Phase 2 validation | completed | 后端 Maven 编译、前端 pnpm build、git diff --check、Flyway placeholder 扫描 |
后端/前端构建通过;前端仅有既有 CSS // 注释和 chunk warning;placeholder 扫描无输出 |
| Task 7 | completed | DynamicCrudService.java, BusinessObjectDesignerService.java, LowcodeRuntimeConfigBuilder.java, ChildTableEditor.vue, BusinessRelationDesigner.vue |
已支持主子表 saveMode=merge 行级新增、修改、删除;默认仍为 replace;前端已有子行删除使用 _deleted 标记;后端做子行归属、字段白名单、必填和数值范围校验 |
| Task 7 validation | completed | 后端 Maven 编译、前端 pnpm build、git diff --check、Flyway placeholder 扫描 |
后端/前端构建通过;前端仅有既有 CSS // 注释、chunk warning 和 UserSelectModal 命名冲突 warning |
| Task 8 | completed | BusinessFlowService.java, BusinessFlowBindingPanel.vue, BusinessFlowAppConfigPanel.vue |
已支持流程通过/驳回/取消后按 options.callbackActions 执行对象动作;动作执行复用通用动作引擎、幂等键和动作日志;流程绑定面板可选择对象动作并展示回调动作数量 |
| Task 8 validation | completed | 后端 Maven 编译、前端 pnpm build、git diff --check、Flyway placeholder 扫描 |
后端/前端构建通过;前端仅有既有 CSS // 注释、chunk warning 和 UserSelectModal 命名冲突 warning |
| Task 9 | completed | BusinessTriggerExecutor.java, TriggerActionConfigPanel.vue, trigger.vue |
已支持触发器新动作类型 BUSINESS_ACTION 选择并执行对象动作编码;后端优先调用通用动作引擎,旧 START_FLOW、SEND_MESSAGE、CREATE_RECORD、UPDATE_FIELD、WEBHOOK 动作仍保持兼容 |
| Task 9 validation | completed | 后端 Maven 编译、前端 pnpm build、git diff --check、Flyway placeholder 扫描 |
后端/前端构建通过;本轮补充格式检查和 placeholder 扫描通过;前端仅有既有 CSS // 注释、chunk warning 和 UserSelectModal 命名冲突 warning |
| Task 10 | completed | BusinessDomainActionExecutor.java, BusinessDomainActionRegistry.java, DomainActionStepExecutor.java |
已新增领域动作 SPI、注册中心和 DOMAIN_ACTION 步骤执行器;未注册领域动作返回明确业务异常,执行结果进入动作步骤日志 |
| Task 11 | completed | V1.0.88__add_business_quantity_ledger.sql, AiBusinessQuantityBalance.java, AiBusinessQuantityLedger.java, AiBusinessQuantityLock.java, BusinessQuantityBalanceMapper.java, BusinessQuantityLedgerMapper.java, BusinessQuantityLockMapper.java, 对应 Mapper XML |
已新增通用数量余额、流水、锁定表;余额维度唯一,流水和锁定支持幂等键唯一约束 |
| Task 12 | completed | BusinessQuantityLedgerService.java, BusinessQuantityOperationDTO.java, BusinessQuantityOperationResultVO.java |
已实现入账、锁定、释放、扣减、转移、幂等短路、可用数量不足拒绝和事务内流水写入 |
| Task 13 | completed | BusinessQuantityDomainActionExecutor.java, DomainActionStepExecutor.java, BusinessActionDesigner.vue, BusinessQuantityLedgerServiceTest.java |
已将数量台账注册为 QUANTITY 领域动作,动作步骤可通过 DOMAIN_ACTION 调用;动作设计器提供数量台账步骤模板 |
| Task 14 | completed | BusinessTriggerSchedulerService.java, BusinessTriggerExecutor.java, trigger.vue |
已在现有定时触发器上支持 schedule.tierRules 分层提醒,按指标区间、提前天数和接收人规则匹配;触发器消息动作可读取分层接收人覆盖 |
| Task 15 | completed | 后端 Maven 编译、前端 pnpm build、BusinessQuantityLedgerServiceTest.java, git diff --check, Flyway placeholder 扫描 |
后端/前端构建通过;已新增数量台账单测,但根 POM 固定跳过测试导致 Maven 未实际执行测试类,已在执行日志记录 |
| Task 16 | completed | spec.md, tasks.md, test-spec.md, execution-log.md |
SDD 状态、验证记录、跳过项和遗留风险已回填,可进入 /review lowcode-platform-capability-foundation |
| Review Fix | completed | BusinessActionExecutionService.java, BusinessRecordSelectorService.java, BusinessQuantityLedgerService.java, BusinessQuantityDomainActionExecutor.java, BusinessTriggerExecutor.java, forge-server/pom.xml, 三个业务应用服务单测, SDD 文档 |
已修复审查发现的动作幂等并发、选择器权限/字段泄漏、数量台账幂等/转移流水和测试未实际执行问题 |
| Review Fix validation | completed | 后端 Maven 编译、Maven 定向单测、git diff --check, Flyway placeholder 扫描、历史方法名扫描 |
编译通过;8 个定向单测全部实际执行通过;未引入 ${...} placeholder;未保留旧 Mapper 方法名或 valueText 调用 |
Review 发现项已修复:
RUNNING 预占日志和唯一键防并发,重复幂等键不会并发执行步骤。VIEW 权限、响应字段收口和排序字段收口。enable-tests profile 修复,本变更 8 个定向单测已实际执行通过。遗留风险:未启动本地后端/前端和数据库做真实低代码配置联调;需要在具备 MySQL、Redis 和前端运行环境时做一次端到端验收。
apply lowcode-platform-capability-foundation;确认本变更必须按通用平台能力实现,采购仓储仅作为验收样例;第一轮编码范围锁定为 Phase 1「通用动作执行引擎」。