status: apply_completed created: 2026-07-03
code-copilot/changes/lowcode-business-transaction-closure/。FOREACH 动作步骤、选择器多字段搜索/动态过滤、数量台账只读查询。变更范围
FOREACH 动作步骤、循环作用域变量、嵌套子步骤执行入口。searchParams 中的 ${formData.xxx}、${record.xxx}、${row.xxx}、${query.xxx},子表选择器可读取父表单数据。ai:businessQuantity:view 权限脚本。执行命令与结果
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
结果:首次失败于 ForeachActionStepExecutor lambda 捕获循环变量 i;修复为 itemIndex 后复跑通过,最终 BUILD SUCCESS。
FOREACH 定向单测:JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:首次因 Mockito inline MockMaker 无法 attach 当前 Homebrew JDK 失败;测试改为无 Mockito 本地 fake 后复跑通过,Tests run: 5, Failures: 0, Errors: 0, Skipped: 0。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessRecordSelectorSearchParamsTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 4, Failures: 0, Errors: 0, Skipped: 0。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 3, Failures: 0, Errors: 0, Skipped: 0。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 2m 34s。
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
警告项
BusinessFlowService deprecated API 和 BusinessObjectDesignerService unchecked 警告,不阻断。UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
服务清理
变更范围
preset/pattern/message 在 formDesignerSchema 归一化时被丢弃的问题,并在属性面板选择常用校验时同步写回字段资产。displayFields/keywordFields/fieldMappings/searchParams 协议兼容读取和保存。LowcodeRuntimeConfigBuilder 在字段或页面配置带有 recordSelector/selector 元数据时,优先发布为 recordSelector 组件,并把选择器配置下发到运行时 props,避免仓库/供应商等字段退化成 ID 输入框。LowcodeRuntimeConfigBuilderTest 覆盖 bigint 字段携带 recordSelector 元数据时发布为选择器组件。执行命令与结果
git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vue forge-admin-ui/src/views/app-center/components/designer/forge-form-designer/ForgePropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.js forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilderTest.java
结果:通过,无输出。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=LowcodeRuntimeConfigBuilderTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 4, Failures: 0, Errors: 0, Skipped: 0,BUILD SUCCESS。
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 2m 35s。
警告项
UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。跳过项
服务清理
变更范围
syncTable 勾选值。执行命令与结果
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 2m 26s。
警告项
UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。服务清理
变更范围
dictType、basicProps.generation、basicProps.recordSelector、引用字段、公式配置和业务组件类型;同时把旧 edit_schema/search_schema/columns_schema 桥接回 page_schema.fieldSettings,避免保存设计器后状态下拉、仓库/供应商选择器、自动编号消失。V1.0.98__preserve_procurement_warehouse_designer_field_runtime_metadata.sql,修复采购仓储样例的仓库/供应商选择器、状态/仓库类型字典、列表渲染和编号字段生成配置。sys_resource.visible/menu_status,启用时恢复目录和启用应用菜单。执行命令与结果
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 1m 46s。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessObjectDesignerPageSchemaTest,BusinessActionExecutionServiceTest,LowcodeRuntimeConfigBuilderTest,BusinessRecordSelectorSearchParamsTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 18, Failures: 0, Errors: 0, Skipped: 0。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-admin-server -am compile -DskipTests
结果:通过,BUILD SUCCESS,总耗时 13.779 s。
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
警告项
UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
V1.0.98;脚本会在 forge-admin-server 下次启动时由 Flyway 执行。当前服务如已启动,需要重启 admin 服务后再复测采购仓储新增/发布页面。服务清理
变更范围
input-number/inputnumber,避免保存/迁移旧表单组件时没有命中数字字段默认值。BusinessObjectDesignerPageSchemaTest 新增 input-number 默认映射断言,和发布校验、动作执行对象编码、运行配置动作元数据用例一起复跑。执行命令与结果
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessObjectDesignerPageSchemaTest,BusinessActionExecutionServiceTest,LowcodeRuntimeConfigBuilderTest,BusinessRecordSelectorSearchParamsTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 15, Failures: 0, Errors: 0, Skipped: 0。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
结果:通过,BUILD SUCCESS,总耗时 13.846 s。
警告项
commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
V1.0.97;需要重启 forge-admin-server 或手动执行迁移后,线上/本地数据库里的采购仓储样例配置才会被修复。服务清理
变更范围
toolbar.fieldRefs 作为工具栏动作配置不再按数据字段校验,避免供应商/采购单发布被子表字段脏引用阻断。input-number/inputNumber/inputnumber,运行态继续归一为 number。LowcodePageZone 支持历史 key/type JSON 别名,避免旧 seed 的 zones 反序列化成空区域。BusinessActionExecuteDTO 兼容 businessObjectCode/targetObjectCode/targetEntityCode/refObjectCode/targetCode 等别名,并从 context.row._runtimeObjectCode 兜底;发布出的 COMMAND 动作保留 actionCode/suiteCode/objectCode/businessObjectCode。V1.0.97__harden_procurement_warehouse_page_action_selector_protocol.sql,清理采购仓储样例已持久化的工具栏脏字段引用,并补齐运行态按钮和关键选择器对象编码别名。执行命令与结果
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessObjectDesignerPageSchemaTest,BusinessActionExecutionServiceTest,LowcodeRuntimeConfigBuilderTest,BusinessRecordSelectorSearchParamsTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 14, Failures: 0, Errors: 0, Skipped: 0。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
结果:通过,BUILD SUCCESS,总耗时 11.503 s。
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
警告项
commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
V1.0.97;脚本会在 forge-admin-server 下次启动时由 Flyway 执行。已完成占位符静态扫描。服务清理
变更范围
LowcodeRuntimeConfigBuilderTest,使用真实 LowcodeRuntimeConfigBuilder、LowcodeSchemaValidator、LowcodePolicyService 构造最小低代码模型。detail zone props 中的 quantityPanels 发布为运行态 options.detailPanels。执行命令与结果
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=LowcodeRuntimeConfigBuilderTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 1, Failures: 0, Errors: 0, Skipped: 0。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest,LowcodeRuntimeConfigBuilderTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 13, Failures: 0, Errors: 0, Skipped: 0。
警告项
commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
服务清理
变更范围
LowcodeRuntimeConfigBuilder 从详情 zone props 读取 quantityPanels,发布为通用 options.detailPanels。views/ai/crud-page.vue 将 options.detailPanels 传入 AiCrudPage。LowcodePreviewPane.vue 和 GridBlockRenderer.vue 将运行态 detailPanels 透传给 AiCrudPage。AiCrudPage 详情模式在主表单和子表之后渲染 AiCrudRowExpand,复用通用数量面板 renderer。执行命令与结果
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
结果:通过,BUILD SUCCESS,总耗时 38.350 s。
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 2m 54s。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。
警告项
UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
AiCrudRowExpand/数量面板组件,主要风险在 prop 贯通和模板语法,已由生产构建覆盖。服务清理
变更范围
FOREACH + DOMAIN_ACTION/QUANTITY 可编辑步骤 JSON。searchParams 过滤参数入口;关系设计器新增子表选择器按钮、候选对象、显示字段、搜索字段、字段映射和过滤参数配置。expandConfig.panels[] 支持 quantity-balance、quantity-ledger、quantity-lock;详情设计器新增数量区块配置;行展开堆叠模式补错误重试。recordSelector 透传到模型引用 props 和运行态 childrenConfig。procurement-warehouse-acceptance.md,说明采购仓储通过平台配置验收。执行命令与结果
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 2m 17s。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
结果:通过,BUILD SUCCESS。
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
警告项
UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。commons-logging.jar 与 spring-jcl 发现提示,不阻断。跳过项
服务清理
变更范围
pageSchema.zones,丢弃空区域,兼容 list/data-table/form/edit-form/detail-view/table-toolbar 等历史别名,避免 不支持的页面区域: null。BusinessFieldSchemaService 从 basicProps/advancedProps 读取 dictType,并兼容选择器对象编码别名,避免已有字典字段保存时报“字典字段必须配置字典类型”。objectCode/businessObjectCode/targetObjectCode/targetEntityCode/refObjectCode/targetCode 等别名,后端 DTO 和解析逻辑同步兜底,避免“选择器缺少业务对象编码”。V1.0.96__harden_procurement_warehouse_designer_runtime_config.sql,按字段名修复采购仓储样例的状态字典、供应商报价子表状态下拉、选择器编码别名和 pw_supplier_material.material_id 可空。执行命令与结果
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
结果:git diff --check 无输出;Flyway ${...} 扫描无输出。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
结果:通过,BUILD SUCCESS,总耗时 12.325 s。
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin /usr/local/apache-maven-3.9.3/bin/mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessFieldSchemaServiceTest,BusinessRecordSelectorSearchParamsTest,BusinessObjectDesignerPageSchemaTest -Dsurefire.failIfNoSpecifiedTests=false test
结果:通过,Tests run: 10, Failures: 0, Errors: 0, Skipped: 0。
清理新增单测未使用 helper 后,补充复跑 BusinessObjectDesignerPageSchemaTest,通过,Tests run: 1, Failures: 0, Errors: 0, Skipped: 0。
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
结果:通过,✓ built in 1m 28s。
警告项
UserSelectModal 命名冲突提示、CSS // 注释 minify 警告、动态/静态导入同模块 chunk 提示,不阻断。跳过项
V1.0.96;脚本会在 forge-admin-server 下次启动时由 Flyway 执行。如当前服务已经启动,需要重启后再复测采购仓储页面。服务清理