spec.md 16 KB

采购仓储低代码应用配置落地

status: apply created: 2026-07-03 complexity: 🔴复杂

1. 背景与目标

用户希望按原型图通过完全低代码方式 1:1 还原采购仓储模块的业务逻辑和 UI:

  • /Users/yaomindong/Desktop/project/mdframe/shenrong/shenrong-projman/code-copilot/docs/系统原型交互-采购仓储.html
  • /Users/yaomindong/Desktop/project/mdframe/shenrong/shenrong-projman/code-copilot/docs/系统原型交互.html

前置平台能力已经通过 lowcode-platform-capability-foundationlowcode-business-transaction-closure 补齐:通用动作、记录选择器、主子表 merge、流程回调、触发器复用动作、领域动作 SPI、数量台账、数量查询和详情数量区块。

本变更目标不是再写采购专用后端页面,而是沉淀一套可运行的低代码应用资产:

  • 采购仓储业务领域、业务套件、业务对象和应用入口。
  • 物料、供应商、供应商报价、仓库、采购单、采购明细、出库单、出库明细、调拨单、调拨明细的低代码模型和运行配置。
  • 第一阶段先完成基础 CRUD、主子表、列表/表单/详情结构和菜单入口。
  • 本轮继续补齐流程回调动作、数量台账动作、详情区块、演示数据和原型对照;像素级 UI 细节增强作为后续平台模板能力。

完成后,用户可以在应用中心看到采购仓储套件,并通过低代码运行页进入采购管理、仓储管理、供应商管理、物料管理等入口,继续在设计器里可视化调整。

2. 代码现状(Research Findings)

2.1 相关入口与链路

  • forge-server/db/migration/V1.0.7__add_lowcode_business_domain.sql:定义 ai_lowcode_domain,低代码领域通过 Flyway seed 初始化。
  • forge-server/db/migration/V1.0.9__add_lowcode_data_model.sql:定义 ai_lowcode_model,模型独立于应用,包含 model_schema
  • forge-server/db/migration/V1.0.26__add_business_app_platform_tables.sql:定义 ai_business_suiteai_business_objectai_business_object_relationai_business_app
  • forge-server/db/全量初始化SQL.sqlai_crud_config 为低代码运行配置表,包含 search_schemacolumns_schemaedit_schemaapi_configoptionsmodel_schemapage_schema
  • forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java:从模型和页面协议生成 AiCrudPage 运行配置。
  • forge-admin-ui/src/views/ai/crud-page.vue:低代码运行页通过 configKey 读取发布配置并渲染 AiCrudPage
  • forge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vue:对象动作可配置 COMMANDFOREACHDOMAIN_ACTION/QUANTITY
  • forge-admin-ui/src/components/page-templates/ChildTableEditor.vue:运行态子表支持选择器批量追加和 merge 保存。

2.2 现有实现

  • lowcode-platform-capability-foundation 已完成动作底座、记录选择器、流程回调、触发器动作、领域动作 SPI 和数量台账。
  • lowcode-business-transaction-closure 已完成 FOREACH 动作、选择器动态过滤、数量台账查询和详情数量区块。
  • 既有 CRM seed(如 V1.0.32__seed_crm_customer_runtime_link.sqlV1.0.37__seed_crm_runtime_crud_configs.sql)已经使用 Flyway 初始化低代码模型、运行配置和应用入口。
  • 现有采购审批样例 V1.0.83__seed_sample_purchase_order_app_center_entry.sql 是代码应用,不满足“完全低代码模式”,但可作为应用中心入口组织方式参考。

2.3 发现与风险

  • 如果只建业务对象、不写 ai_crud_config,用户仍需要手工发布才能访问运行页,不能作为可运行模块交付。
  • 如果把采购逻辑写成 Vue 页面或 Java Controller,会违背“完全低代码模式”。
  • 原型中的视觉 1:1 包含多区块详情、底部操作栏、局部统计和复杂表格排版;低代码运行态可先接近结构与业务逻辑,像素级 UI 需要后续补页面区块样式模板。
  • 采购入库、出库扣减、调拨转移涉及库存数量变化,属于高风险状态流转,必须通过通用动作引擎和数量台账,不能靠普通字段更新。

3. 功能点

  • 低代码应用骨架:初始化采购仓储低代码领域、业务套件、业务对象、应用入口和基础运行配置。
  • 基础模型与运行表:创建物料、供应商、供应商报价、仓库、采购单/明细、出库单/明细、调拨单/明细运行表,所有表包含标准审计字段和租户字段。
  • 基础 CRUD 页面:物料、供应商、供应商报价、仓库、采购单、出库单、调拨单具备运行配置,主入口全部走 /ai/crud/{configKey}
  • 主子表配置:供应商报价、采购单、出库单、调拨单通过低代码主子表配置维护明细行,明细保存使用 merge 模式。
  • 记录选择器配置:供应商报价选择物料,采购明细选择供应商报价,出库/调拨明细选择物料并透传当前仓库上下文;真实库存余额候选过滤留到数量动作联调阶段。
  • 流程与动作配置:采购审批通过后入库;出库审批通过后扣减,驳回释放;调拨审批通过后转移。
  • 数量详情区块:仓库详情展示数量余额、数量流水、数量锁定,以及采购/出库/调拨关联记录。
  • 演示数据:提供贴近原型的物料、供应商、仓库、采购单、出库单、调拨单样例数据。
  • 原型对照验收:逐页对照原型文档,记录已还原、低代码等价还原和暂不支持的 UI 细节。

4. 业务规则

  • 本变更允许 seed 采购仓储应用资产,但平台服务、组件和接口不能写采购专用逻辑。
  • 所有采购仓储业务页面必须通过低代码运行配置访问,不新增采购仓储专用 Vue 页面或 Java Controller。
  • 数量变化必须通过 DOMAIN_ACTION/QUANTITY,不能直接更新库存字段。
  • 采购、出库、调拨的明细动作必须使用 FOREACH 逐行执行,幂等键必须包含对象、记录、明细行和动作类型。
  • 金额字段存储单位为分,字段类型为 bigint
  • 所有 Long ID 前端按字符串处理。
  • 运行表 tenant_id 必须为 1 默认租户,业务表包含 id, tenant_id, create_by, create_time, create_dept, update_by, update_time, del_flag
  • Flyway seed 必须具备 IF NOT EXISTS / NOT EXISTS 防重复保护。

5. 数据变更

操作 表名 字段/索引 说明
新增 pw_material 物料编号、名称、规格、单位、预警数量、状态 物料主数据运行表
新增 pw_supplier 供应商编号、名称、联系人、电话、状态 供应商主数据运行表
新增 pw_supplier_material 供应商、物料、报价、有效期 供应商报价明细运行表
新增 pw_warehouse 仓库编号、名称、类型、关联项目、状态 仓库/库存账户运行表
新增 pw_purchase_order 采购单号、项目、仓库、采购人、金额、状态 采购单主表
新增 pw_purchase_order_item 采购单、物料、数量、单价、金额 采购明细表
新增 pw_outbound_order 出库单号、仓库、申请人、状态 出库单主表
新增 pw_outbound_order_item 出库单、物料、库存数量、出库数量 出库明细表
新增 pw_transfer_order 调拨单号、调出仓、调入仓、状态 调拨单主表
新增 pw_transfer_order_item 调拨单、物料、当前库存、调拨数量 调拨明细表
新增/更新 ai_lowcode_domain PROCUREMENT_WAREHOUSE 采购仓储低代码领域
新增/更新 ai_lowcode_model 10 个模型 低代码模型协议
新增/更新 ai_business_suite/object/app/relation 采购仓储业务套件与入口 应用中心资产
新增/更新 ai_crud_config 7 个运行配置 + 4 个主子表配置 低代码运行页配置;明细对象通过主子表运行
新增/更新 ai_business_document_config / ai_business_binding 3 类单据 采购/出库/调拨流程绑定和回调动作
新增/更新 ai_business_object.designer_options 3 类单据动作 提交审批、入库、锁定、扣减、释放、转移动作
新增/更新 ai_crud_config.options.detailPanels 仓库/物料/采购详情 数量区块和关联记录面板
新增 pw_* / ai_business_quantity_* demo 数据 原型验收用物料、供应商、仓库、单据和数量余额

6. 接口变更

操作 接口 方法 变更内容
复用 /ai/crud/{configKey}/page GET 采购仓储低代码列表
复用 /ai/crud/{configKey} POST/PUT 采购仓储低代码新增/修改
复用 /ai/crud/{configKey}/{id} GET/DELETE 详情/删除
复用 /ai/business/action/execute POST 后续用于采购入库、出库扣减、调拨转移
复用 /ai/business/selector/query POST 后续用于物料/库存记录选择
复用 /ai/business/quantity/query/* POST 后续用于仓库详情数量区块

7. 影响范围

  • 数据库:新增采购仓储低代码运行表和 seed 数据。
  • 应用中心:新增采购仓储业务套件、对象和应用入口。
  • 低代码运行态:新增 10 个已发布配置,菜单/入口走 AiCrudPage
  • 测试:SQL 防重复、前端构建、后端编译、低代码运行配置解析。

8. 风险与关注点

⚠️ 本变更涉及采购审批状态、出入库数量变化和调拨转移,属于高风险状态流转能力。

  • 已完成流程和数量动作配置,但本地未启动 MySQL/Redis/后端/Flow 服务实跑审批通过、驳回和扣库存链路;上线前必须做端到端人工验收。
  • V1.0.94 已将采购、出库、调拨从旧的 leave_multi 绑定修正为业务流程 key:pw_purchase_approvalpw_outbound_approvalpw_transfer_approval;目标环境仍需在 Flowable 中部署同名 BPMN 流程定义后才能端到端发起。
  • 出库提交动作已经配置为先锁定库存,审批通过扣减,驳回释放;如审批流程实例重复回调,数量台账依赖通用幂等键兜底。
  • 原型 UI 的像素级还原可能需要后续补低代码页面样式模板,本变更先保证完全低代码模式和业务结构闭环。
  • 如果目标环境没有配置独立 LOWCODE_RUNTIME 数据源,运行表先落在默认主库;后续可通过低代码发布流程迁移到专用数据源。
  • 出库/调拨明细选择器已配置仓库上下文参数,但当前仍使用物料对象作为候选源;真实“按仓库可用库存过滤候选物料”仍需后续补通用库存余额选择器对象。
  • 已通过 V1.0.92 给仓库和物料详情接入数量余额/流水/锁定展示;“按可用库存选择候选物料”仍建议后续补通用库存余额选择器对象。

8.5 测试策略

  • 测试范围:Flyway SQL 语法/防重复、运行表字段规范、低代码运行配置 JSON 结构、前端构建、后端编译。
  • 覆盖率目标:第一阶段以静态验证和构建为主;后续动作/数量流转必须增加服务单测或端到端手工验收。
  • 独立 Test Spec:是。

9. 待澄清

  • 是否按渐进式 SDD 先做低代码应用骨架,再逐步补动作、流程和数据。结论:是。
  • 是否使用 superpowers 开发模式。结论:否,按本项目 SDD 文档推进。

10. 技术决策

  • 第一阶段使用 Flyway seed 初始化低代码资产,复用 CRM seed 模式。
  • 运行入口统一使用 entry_mode=RUNTIMEconfig_key,不新增采购仓储专用前端页面。
  • 主子表在 page_schema.modelRefs[].props.saveMode=merge 表达,运行态复用 ChildTableEditor
  • 复杂副作用在后续阶段通过 BusinessActionDesigner 配置 FOREACH + DOMAIN_ACTION/QUANTITY

11. 执行日志

Task 状态 实际改动文件 备注
SDD init completed spec.md, tasks.md, test-spec.md, execution-log.md 用户确认开始 lowcode-procurement-warehouse-app 开发
Task 2 completed V1.0.90__seed_procurement_warehouse_lowcode_app.sql 新增 10 张 pw_* 采购仓储低代码运行表
Task 3 completed V1.0.90__seed_procurement_warehouse_lowcode_app.sql 新增采购仓储低代码领域、套件、10 个模型和业务对象
Task 4 completed V1.0.90__seed_procurement_warehouse_lowcode_app.sql 新增物料、供应商、仓库、采购、出库、调拨 6 个基础 CRUD 运行配置和应用入口
Task 5 completed V1.0.90__seed_procurement_warehouse_lowcode_app.sql 供应商、采购、出库、调拨升级为 master-detail-crud,子表 saveMode=merge
Task 6 partial V1.0.90__seed_procurement_warehouse_lowcode_app.sql 供应商报价/采购明细选择器完成;出库/调拨已透传仓库上下文,真实库存余额候选过滤后续联调
Task 7 completed V1.0.91__seed_procurement_warehouse_flow_actions.sql 三类单据绑定 leave_multi,运行页新增提交审批行按钮
Task 8 completed V1.0.91__seed_procurement_warehouse_flow_actions.sql 配置 FOREACH + DOMAIN_ACTION/QUANTITY 入库、锁定、扣减、释放、转移动作
Task 9 completed V1.0.92__seed_procurement_warehouse_detail_panels_demo_data.sql 仓库/物料/采购详情区块接入数量和关联记录面板
Task 10 completed V1.0.92__seed_procurement_warehouse_detail_panels_demo_data.sql Seed 主仓库、现场仓、物料、供应商、采购/出库/调拨单和数量台账演示数据
Task 11 completed test-spec.md, execution-log.md 完成 SQL 静态检查、后端 generator 编译、前端构建
Task 12 completed prototype-acceptance.md 完成采购、仓储、供应商、物料原型对照
Task 13 completed V1.0.93__fix_procurement_warehouse_lowcode_runtime_config.sql, validation-presets.js, AiCrudPage.vue, AiForm.vue, ChildTableEditor.vue, crud-page.vue, BusinessFieldPropertyPanel.vue, ForgePropertyPanel.vue, LowcodeRuntimeConfigBuilder.java, BusinessDocumentRuntimeService.java, DynamicCrudService.java, DynamicCrudServiceAutoGenerationTest.java 修复自动编号、字典状态、记录选择器业务对象编码、子表列宽、重复流程入口、字段长度和常用校验配置,并补齐运行态自动编号兜底
Task 14 completed V1.0.94__fix_procurement_warehouse_designer_flow_relation_config.sql, BusinessFieldPropertyPanel.vue, ForgePropertyPanel.vue, BusinessFormDesigner.vue, BusinessObjectDesignerShell.vue, ChildTableEditor.vue, BusinessObjectDesignerService.java 修复字段约束入口和常用校验同步、关系配置可见性、子表内部 ID 默认隐藏、采购仓储业务流程 key、字典类型保存兜底

12. 审查结论

采购仓储低代码应用主链路已完成配置层落地:应用入口、主子表、选择器、流程绑定、数量动作、详情区块、演示数据和原型对照均已具备。用户反馈的自动编号、状态字典、记录选择器业务对象编码、子表列宽、重复流程入口、字段长度和常用校验配置已完成平台级修复;二次反馈中的关系配置可见性、子表内部 ID 默认隐藏、旧流程 key 替换、采购单字典保存兜底也已完成。剩余风险是未在本地数据库和 Flow 服务中做审批/扣库存端到端验收,以及按仓库可用库存过滤候选物料仍需后续平台级库存选择器增强。

13. 确认记录(HARD-GATE)

  • 确认时间:2026-07-03
  • 确认人:用户
  • 确认内容:用户确认可以开始 lowcode-procurement-warehouse-app 开发,使用项目渐进式 SDD 开发流程,不使用 superpowers 开发模式。