For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 补齐应用管理低代码平台能力,使采购仓储模块可以用 0 代码完成可上线业务闭环,而不是只完成页面演示。
Architecture: 以现有应用中心、动态 CRUD、Flowable 绑定、触发器、公式和主子表为基础,新增“动作编排引擎”和“库存台账引擎”两个平台能力。按钮、触发器、流程回调统一调用动作引擎;采购入库、出库、调拨统一调用库存台账引擎,保证幂等、锁库存和库存流水一致。
Tech Stack: Java 17, Spring Boot 3.2, MyBatis-Plus, MySQL 8, Vue 3.5, Naive UI, Flowable, existing forge-plugin-generator dynamic CRUD runtime.
本计划覆盖采购仓储完整落地所需的平台级能力:
本计划不把采购、仓库、供应商、物料写成固定业务代码;采购仓储业务对象仍由应用管理建模,平台只补通用能力。
forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.javaBusinessObjectActionService.javaBusinessTriggerExecutor.java, BusinessTriggerSchedulerService.javaBusinessFlowService.javaforge-admin-ui/src/components/ai-form/AiCrudPage.vueforge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vueBusinessRelationDesigner.vue, BusinessFormDesigner.vueforge-admin-ui/src/components/page-templates/ChildTableEditor.vue采购仓储模块建议使用以下低代码对象:
material: 物料supplier: 供应商supplier_material_price: 供应商物料报价purchase_order: 采购单purchase_order_item: 采购明细purchase_quote: 采购供应商报价/比价单warehouse: 仓库stock_out_order: 出库单stock_out_item: 出库明细stock_transfer_order: 调拨单stock_transfer_item: 调拨明细库存余额、库存流水、库存锁定建议由平台库存引擎维护,不放到普通低代码对象里手工维护。
Files:
forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessActionExecuteDTO.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessActionExecuteResultVO.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessActionExecutionController.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessActionExecutionService.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectActionService.javaforge-server/db/migration/V1.0.xx__add_business_action_execution_log.sqlBehavior:
POST /ai/business/action/execute.objectCode, recordId, actionCode, formData, context.UPDATE_FIELD: update current or target record fields.CREATE_RECORD: create related record.START_FLOW: start main or specified flow.SEND_MESSAGE: send internal message.INVENTORY_OPERATION: call stock engine after Phase 4.Acceptance:
Verification:
cd forge-server && mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTestsBusinessActionExecutionServiceTest covering successful multi-step action and rollback.Files:
forge-admin-ui/src/components/ai-form/AiCrudPage.vueforge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vueforge-admin-ui/src/api/business-app.jsBehavior:
COMMAND.COMMAND, runtime opens action form when actionConfig.formSchema exists./ai/business/action/execute.successBehavior: refreshList, refreshDetail, closeModal, goBack.Acceptance:
Verification:
cd forge-admin-ui && pnpm buildCOMMAND action on one object and execute it from row/detail.Files:
forge-admin-ui/src/components/ai-form/AiRecordSelectorModal.vueforge-admin-ui/src/components/ai-form/record-selector-utils.jsforge-admin-ui/src/components/page-templates/ChildTableEditor.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vueBehavior:
targetConfigKey, searchFields, displayColumns, valueField, mapping.materialId <- idmaterialCode <- materialCodematerialName <- materialNamespecification <- specificationunit <- unitprice <- referencePriceAcceptance:
Verification:
cd forge-admin-ui && pnpm buildFiles:
forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.javaforge-admin-ui/src/components/page-templates/ChildTableEditor.vueBehavior:
replace mode and merge mode.replace mode keeps current behavior: delete by parent key and reinsert.merge mode updates rows with id, inserts rows without id, deletes rows marked _deleted=true.Acceptance:
Verification:
cd forge-admin-ui && pnpm buildFiles:
forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerExecutor.javaforge-admin-ui/src/views/app-center/components/designer/BusinessFlowBindingPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vueBehavior:
onApprovedActionCodeonRejectedActionCodeonCanceledActionCodeBusinessFlowService calls BusinessActionExecutionService with the business record context.Acceptance:
Verification:
Files:
forge-server/db/migration/V1.0.xx__add_business_stock_engine.sqlforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessStockBalance.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessStockLedger.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessStockLock.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessStockService.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessStockOperationDTO.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessStockOperationResultVO.javaTables:
ai_business_stock_balance: tenant_id, warehouse_id, material_id, batch_no, quantity, locked_quantity, available_quantity, unique key on tenant/warehouse/material/batch.ai_business_stock_ledger: immutable ledger with operation type IN/OUT/TRANSFER_IN/TRANSFER_OUT/ADJUST/LOCK/RELEASE/COMMIT_LOCK.ai_business_stock_lock: lock records for approval-in-progress outbound/transfer.Behavior:
inbound: increase balance and write IN ledger.lockOutbound: increase locked quantity, prevent available quantity below zero.releaseLock: reduce locked quantity and mark lock released.commitOutbound: reduce quantity and locked quantity, write OUT ledger.transfer: source outbound + target inbound in one transaction.sourceObjectCode + sourceRecordId + operationType.Acceptance:
Verification:
Files:
BusinessActionExecutionService.javaBusinessActionDesigner.vueTriggerActionConfigPanel.vueBehavior:
INVENTORY_OPERATION action step.operationType: INBOUND, LOCK_OUTBOUND, RELEASE_LOCK, COMMIT_OUTBOUND, TRANSFERwarehouseFieldtargetWarehouseFielditemsPathmaterialFieldquantityFieldbatchFieldBusinessStockService.Acceptance:
Verification:
Files:
forge-server/db/migration/V1.0.xx__add_business_reminder_profile.sqlBusinessReminderProfileService.javaBusinessTriggerSchedulerService.javaforge-admin-ui/src/views/app-center/components/designer/BusinessReminderRulePanel.vueBehavior:
amountGtedaysBeforereceiverRuletemplateCodeoverdueDaysrowClassreceiverRulerepeatIntervalDaysAcceptance:
Verification:
cd forge-admin-ui && pnpm buildFiles:
forge-server/db/migration/V1.0.xx__add_supplier_price_version_template.sqlBusinessFormDesigner.vue.Behavior:
supplierIdmaterialIdpriceeffectiveStarteffectiveEndpreviousPricechangeReasonstatusAcceptance:
lowcode-action-orchestration: Phase 1.lowcode-selector-master-detail: Phase 2.lowcode-flow-callback-actions: Phase 3.lowcode-stock-ledger-engine: Phase 4.lowcode-reminder-price-history: Phase 5.tenant_id = 1 for built-in data.Backend:
cd forge-server
mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test
Frontend:
cd forge-admin-ui
pnpm build
Full build:
cd forge-server
mvn clean install -DskipTests