execution-log.md 41 KB

执行日志:business-flow-lowcode-integration

2026-06-28 08:22 CST

变更范围

  • BusinessFlowBindingDTO 增加 businessBinding
  • BusinessFlowBindingVO 回显 businessBinding
  • BusinessFlowService 保存流程绑定时归一化 businessBinding,并对低代码对象自动补齐业务表绑定默认值。
  • 方案文档补充 JeecgBoot 风格“流程模型关联业务表 + 状态字段”的分层采纳策略。

执行命令与结果

  1. 首次编译:
cd forge-server
mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests

结果:失败。Maven 使用本机默认 Java 8,报错 无效的目标发行版: 17。这是环境问题,不是代码编译错误。

  1. 使用 Java 17 重新编译:
cd forge-server
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

结果:通过。forge-plugin-generator 及依赖模块 BUILD SUCCESS

  1. 空白字符检查:
git diff --check

结果:通过,无空白错误。

警告项

  • 编译输出提示既有代码存在 deprecated API 和 unchecked 操作,涉及 GenTableServiceImplBusinessObjectDesignerService,非本轮新增。

跳过项

  • 未启动服务做接口验证:本轮未改 Controller 路由或数据库结构。
  • 未执行前端构建:本轮未改前端。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 16:55 CST

变更范围

  • purchase-order-test.vue 将待办外部表单里的“同意 / 驳回修改”按钮调整为 size="large",并统一操作区按钮最小宽度,解决与父级“转办/签收”按钮大小不一致的问题。
  • FlowTaskController 新增 GET /api/flow/task/form,通过 processInstanceId/businessKey/processDefKey/taskId 返回只读表单信息,覆盖已办等没有运行中任务的场景。
  • BusinessFlowController 新增 GET /ai/business/flow/task-form-context/readonlyBusinessFlowService#getTaskFormReadonlyContext 跳过待办任务身份校验,仅返回只读业务表单上下文。
  • done.vue 已办详情新增“表单内容”区块,按只读方式渲染外部表单、动态表单、低代码业务对象表单和代码表单查看入口。
  • NodePropertiesPanel.vue 将流转条件配置改为业务化选项:同意通过、驳回修改、退回上一步、终止流程、按业务字段判断;选择后自动生成原 Flowable 条件表达式,高级表达式保留在折叠面板中。

执行命令与结果

cd forge-server
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-flow/forge-flow-server,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests

结果:通过。forge-plugin-generatorforge-flow-server 及依赖模块 BUILD SUCCESS,总耗时 13.141s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 54s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git status 中仍存在既有无关 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做真实已办详情联调:完整验证需要已完成采购单流程实例、当前用户已办任务和登录态数据,按用户要求留待最后统一验证。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 16:31 CST

变更范围

  • SamplePurchaseOrderController#getById 支持 businessKey 查询采购单详情,避免流程待办外部表单只能依赖前端传 Long id
  • SamplePurchaseOrderService 增加 detailByBusinessKey,通过 sample_purchase_order.business_key 在当前租户内定位采购单。
  • purchase-order-test.js 的详情、提交、删除接口统一按字符串传递 ID 参数。
  • purchase-order-test.vue 的待办表单优先使用 businessKey 查询详情,列表详情/编辑优先使用行 businessKey,审批人和会签人 ID 不再转 Number()
  • 根因确认:后端雪花 ID 超出 JS 安全整数范围,前端转换为 Number 后发生精度丢失,导致 /business/sample-purchase-order/getById 收到错误 ID 并返回“采购单不存在”。

执行命令与结果

cd forge-server
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-business/forge-business-core,forge-flow/forge-flow-client -am compile -DskipTests

结果:通过。forge-business-coreforge-flow-client 及依赖模块 BUILD SUCCESS,总耗时 12.678s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 16s

git diff --check

结果:通过,无空白错误。

rg -n "Number\((props|row|record|detail|currentSubmitRow|.*Id)|Number\(.*\.id|Number\(.*recordId|Number\(.*businessKey|Number\(.*purchaseOrderId" \
  forge-admin-ui/src/views/business/purchase-order-test.vue \
  forge-admin-ui/src/api/business/purchase-order-test.js

结果:通过,未发现采购单记录 ID、businessKey、流程变量 ID 继续被 Number() 转换。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git status 中仍存在既有无关 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做真实接口联调:完整复现需要已部署采购单流程、样例采购单和当前办理人的待办任务;用户要求最后统一验证,本轮先完成代码修复和构建验证。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 16:08 CST

变更范围

  • 修复流程设计器多实例人工节点导出:保留 flowable:collectionflowable:elementVariable,集合缺失时兜底写出 loopCardinality,避免采购会签节点部署时报 flowable-multi-instance-missing-collection
  • 画布网关从普通卡片尺寸调整为 44px 菱形锚点,并按真实锚点重算连线起止端,解决网关附近看起来断线的问题。
  • DingFlowDesigner 关闭 SVG 连线层重复条件标签,分支标签改为按连线路径放置并做碰撞避让,避免“条件已设 / 默认”和加号重叠。
  • BranchNode 视觉调整为参考钉钉样式的小菱形条件锚点。
  • 补充分支标签、加号避让、复杂驳回回路、多实例 BPMN 写出相关单测。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec vitest run \
  src/components/flow-designer/converter/__tests__/layout-algorithm.spec.js \
  src/components/flow-designer/canvas/__tests__/layout-engine.spec.js \
  src/components/flow-designer/canvas/__tests__/EdgePath.spec.js \
  src/components/flow-designer/converter/__tests__/user-task-parser-multi-instance.spec.js \
  src/components/flow-designer/converter/__tests__/json-to-bpmn.spec.js \
  src/components/flow-designer/converter/__tests__/roundtrip.spec.js \
  src/components/flow-designer/__tests__/DingFlowDesigner.spec.js \
  src/components/flow-designer/nodes/__tests__/node-cards.spec.js

结果:通过。8 个测试文件、92 个用例全部通过。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
node --input-type=module <inline-check-script>

结果:通过。采购单样例 BPMN 往返转换后 purchase_countersign 检查输出:

assignee= ${assignee}
collection= ${countersignUserList}
elementVariable= assignee
loopCardinalityCount= 0
completion= ${nrOfCompletedInstances/nrOfInstances == 1}
cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 34s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer / src/store/index.js 等模块动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。

跳过项

  • 未启动 Admin/Flow 做真实部署联调:用户要求最后统一验证;本轮已通过样例 BPMN 往返转换确认会签节点导出的 Flowable 多实例必要属性存在。
  • 未做浏览器截图:流程配置页依赖登录态和后端模型数据;本轮通过画布坐标、组件 DOM 位置和生产构建覆盖展示层回归。

服务清理

  • 本轮未启动常驻服务。前端构建命令已正常退出。

2026-06-28 15:38 CST

变更范围

  • DingFlowDesigner.vue 调整分支条件标签定位:横向分支标签放到网关与目标节点的中段,垂直默认分支标签向左避让。
  • DingFlowDesigner.vue 调整添加分支按钮定位:从网关中心线下方取分支线 y 坐标,不再固定向右偏移。
  • DingFlowDesigner.spec.js 增加“添加分支按钮居中,默认分支标签避开按钮”回归用例。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec vitest run \
  src/components/flow-designer/__tests__/DingFlowDesigner.spec.js \
  src/components/flow-designer/canvas/__tests__/AddNodeButton.spec.js \
  src/components/flow-designer/converter/__tests__/layout-algorithm.spec.js \
  src/components/flow-designer/canvas/__tests__/layout-engine.spec.js

结果:通过。4 个测试文件、40 个用例全部通过。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 45s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 等动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。

跳过项

  • 未启动 Vite/Playwright 截图:项目当前没有独立 Storybook/Playwright 入口,流程配置页依赖登录态和后端流程模型数据;本轮用组件定位单测和生产构建覆盖。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 15:25 CST

变更范围

  • layout-algorithm.js 区分真实局部分支汇合与驳回重提回退入口,避免 dept_leader_approve 这类回连目标被误判为主链路截断点。
  • 没有即时汇合点的审批结果网关改为默认分支继续主线、非默认分支侧向展开,采购单审批的“通过/驳回修改/终止”不再整列顺序展示。
  • BranchNode.vue 将条件/并行/包容网关视觉从普通任务卡调整为轻量分支锚点。
  • layout-algorithm.spec.js 增加驳回重提回路单测。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec vitest run \
  src/components/flow-designer/converter/__tests__/layout-algorithm.spec.js \
  src/components/flow-designer/canvas/__tests__/layout-engine.spec.js \
  src/components/flow-designer/nodes/__tests__/node-cards.spec.js \
  src/components/flow-designer/canvas/__tests__/NodeRenderer.spec.js \
  src/components/flow-designer/__tests__/DingFlowDesigner.spec.js

结果:通过。5 个测试文件、67 个用例全部通过。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 48s

git diff --check

结果:通过,无空白错误。

git status --short

结果:本轮相关文件包括 layout-algorithm.jsBranchNode.vuelayout-algorithm.spec.jstest-spec.mdexecution-log.md;工作区仍存在前序任务和既有 .DS_Store 脏变更,本轮未处理。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 等动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。

跳过项

  • 未启动 Vite/Playwright 截图:项目当前没有独立 Storybook/Playwright 入口,流程配置页依赖登录态和后端流程模型数据;本轮用坐标级布局单测、组件单测和生产构建覆盖。
  • 未启动后端服务做流程联调:本轮只改前端流程图布局与网关节点视觉,不涉及后端接口。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 14:15 CST

变更范围

  • 新增采购单审批测试业务模块:sample_purchase_order 表、实体、DTO/VO、Mapper XML、Service、Controller 和代码表单 Provider。
  • 新增采购单审批 BPMN,包含部门负责人审批、工程部经理审批、会签、申请人修改、驳回修改、申请人终止和审批通过。
  • FlowClient 已支持模型创建、更新、发布;FlowResult 兼容 RespInfo.message 字段。
  • 新增前端 API src/api/business/purchase-order-test.js
  • 新增前端页面 src/views/business/purchase-order-test.vue,同一组件支持采购单列表测试页和 Flow 外置待办审批表单。
  • 新增 Flyway V1.0.81__add_sample_purchase_order_flow_test.sql,创建测试表、状态字典、总经理角色、菜单和按钮权限。

执行命令与结果

cd forge-server
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-business/forge-business-core,forge-flow/forge-flow-client -am compile -DskipTests

结果:通过。forge-business-coreforge-flow-client 及依赖模块 BUILD SUCCESS,总耗时 16.638s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 9s,并生成 purchase-order-test 页面 chunk。

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 命名冲突、CSS // 注释、src/store/index.js 和部分模块动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API、unchecked 操作和 Lombok Builder 默认值提示,非本轮新增阻断项。

跳过项

  • 未启动 Admin/Flow 服务做真实流程联调:用户要求最后统一验证,本轮只完成样例代码和构建验证。
  • 未继续低代码应用设计器改造:按用户要求,低代码应用改造暂缓。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 13:38 CST

变更范围

  • 排查当前流程模块是否存在“TASK_COMPLETED / PROCESS_COMPLETED 事件顺序不稳定,完成事件变量缺失导致业务回调失败且不重试”的同类风险。
  • FlowTaskEventListener#handleProcessCompleted 发布 PROCESS_COMPLETED/PROCESS_REJECTED 前合并当前执行变量、运行时变量和历史变量,并从合并变量中兜底解析 approvalResult
  • FlowTaskEventListener#handleTaskCompleted 读取任务变量失败后不再直接返回空,继续按流程实例和历史变量兜底。
  • FlowInstanceServiceImpl#getProcessVariables 改为运行时优先、流程结束后历史变量兜底。
  • FlowMonitorServiceImpl#getProcessVariables 与监控 Controller 变量读取策略对齐。

执行命令与结果

cd forge-server
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-flow -am compile -DskipTests

结果:通过。forge-plugin-flow 及依赖模块 BUILD SUCCESS,总耗时 7.706s。

cd forge-server
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-flow -Dtest=FlowTaskEventListenerTest -DskipTests=false -Dmaven.test.skip=false test

结果:命令成功返回,但模块配置仍输出 Not compiling test sourcesTests are skipped,未实际执行测试用例。

git diff --check

结果:通过,无空白错误。

结论

  • 当前 Forge 流程模块确实存在同类风险:完成事件原先只带 ExecutionEntity#getVariables(),流程结束后的变量查询也只读运行时变量;业务侧 FlowEventSubscriber 回调异常只记录日志。
  • 本轮已修复变量快照和历史变量兜底,降低因最后一次审批变量缺失导致业务状态卡在审批中的风险。

警告项

  • FlowEventSubscriber 仍未提供持久化重试/死信队列;如果业务回调因业务异常、数据库异常或服务宕机失败,仍可能只记录日志。该能力需要单独设计事件投递表或可靠消息队列。
  • git status 中仍存在既有无关 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做真实流程联调:需要可完成的流程模型、最后节点提交变量、业务侧 @FlowCallback 样例和数据库状态断言,留待最终统一验证。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 11:39 CST

变更范围

  • FlowClient 增加任务详情查询,业务待办表单上下文按 taskId 校验任务状态、当前办理人、流程实例、业务 Key 和节点 Key。
  • BusinessTaskFormContextQueryDTOBusinessTaskFormSaveDTOBusinessTaskFormContextVO 补齐任务身份字段,保存业务字段和重提必须由已签收办理人执行。
  • 新增 BusinessCodeFormProviderBusinessCodeFormProviderRegistry,代码优先复杂业务可注册代码表单资产、上下文和保存逻辑。
  • BUSINESS_CODE_FORM 待办上下文支持 Provider 委派;未注册 Provider 时返回 warning,并支持待办页打开业务表单地址。
  • 新增 POST /ai/business/flow/resubmit,供复杂业务页保存主数据后复用原流程实例完成修改节点重提。
  • todo.vue 对代码表单和存在可写业务字段的任务禁止快捷同意,避免绕过业务表单保存和节点字段权限。
  • spec.mdtasks.mdtest-spec.md 已补齐本轮运行态、Provider 和重提接口记录;低代码应用完整改造按用户要求暂缓。

执行命令与结果

cd forge-server
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

结果:通过。forge-plugin-generator 及依赖模块 BUILD SUCCESS,总耗时 10.878s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 28s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 等动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git status 中仍存在既有无关 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做接口联调:完整重提链路需要已部署流程模型、驳回到修改节点的待办任务、登录态和业务样例数据,本地当前不具备稳定验收数据,按用户要求留待最后统一验证。
  • 未继续做低代码应用/设计器整体改造:用户明确要求“低代码应用的改造先别做”,本轮只收敛既有业务流程运行态、代码表单 Provider 和重提接口。
  • 未新增采购合同示例 Provider:平台扩展点和协议已落地,具体业务示例需结合实际业务模块接入。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 08:49 CST

变更范围

  • BusinessFlowBindingPanel.vue 增加“业务记录绑定”配置区。
  • 前端保存流程绑定时提交 businessBinding,回显旧配置时归一化接入方式、业务表、主键字段、租户字段、状态字段、标题字段和负责人字段。
  • 运行摘要增加业务绑定模式、业务表和状态字段。
  • tasks.mdtest-spec.md 更新本轮设计器配置和验证范围。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 7m 44s

cd forge-server
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

结果:通过。forge-plugin-generator 及依赖模块 BUILD SUCCESS,总耗时 17.561s。

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建提示既有 UserSelectModal 组件命名冲突、CSS 中 // 注释、src/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git status 中存在既有 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store,本轮未处理。

跳过项

  • 未启动 Vite 做浏览器截图:本轮 UI 改动为配置表单和保存协议,已通过生产构建覆盖模板和脚本合法性。
  • 未启动后端服务做接口联调:本轮沿用既有 PUT /ai/business/flow/binding/{objectCode},未改 Controller 路径或数据库结构。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 08:28 CST

变更范围

  • BusinessFlowService 在流程发起时对本次运行的 bindingConfig 补齐 businessBinding 默认值。
  • 流程发起成功后统一调用业务流程状态回写方法,低代码对象可通过 businessBinding.statusField 回写 IN_PROCESS
  • 流程回调时读取流程绑定配置,按 businessBinding.statusField 回写 APPROVED/REJECTED/CANCELED
  • ADAPTER 模式跳过平台直接回写;BUSINESS_TABLE 暂只允许与已发布低代码运行表一致时通过动态 CRUD 内部更新,避免任意表名拼接 SQL。

执行命令与结果

cd forge-server
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

结果:通过。forge-plugin-generator 及依赖模块 BUILD SUCCESS

git diff --check

结果:通过,无空白错误。

警告项

  • 编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。

跳过项

  • 未启动服务做接口验证:本轮继续后端运行态代码落地,未改前端页面。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 09:12 CST

变更范围

  • BusinessFlowBindingDTO/VO 增加 nodeForms
  • BusinessFlowController 新增 GET /ai/business/flow/form-assets/{objectCode}
  • BusinessFlowService 增加表单资产目录读取、节点表单策略保存归一化、字段权限归一化和低代码表单字段目录解析。
  • BusinessFlowVariableResolver 从 BPMN XML 解析 userTask,返回人工节点清单给前端。
  • BusinessFlowBindingPanel.vue 增加“节点表单策略”,支持低代码表单资产选择、代码适配器表单编码、外部表单 URL,以及节点级可见/可编辑/必填字段配置。
  • business-app.js 增加表单资产目录 API。
  • tasks.mdtest-spec.md 更新本轮节点表单资产与字段权限落地范围。

执行命令与结果

cd forge-server
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

结果:通过。forge-plugin-generator 及依赖模块 BUILD SUCCESS,总耗时 13.999s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 2m 1s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、src/store/index.js 动静态混合导入、部分模块动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git status 中仍存在既有 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store,本轮未处理。

跳过项

  • 未启动后端服务做接口联调:本轮无数据库结构变更,且本地完整链路需要 Admin/Flow 多服务联动;先以目标模块编译覆盖接口签名、DTO/VO 和 JSON 归一化合法性。
  • 未启动 Vite 做浏览器截图:本轮 UI 为配置表单和协议保存,生产构建已覆盖模板、脚本和组件导入合法性。
  • 未实现待办审批页运行态渲染和后端提交字段权限校验,已明确保留在 Task 10/11/12 后续阶段。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 09:34 CST

变更范围

  • 新增 BusinessTaskFormContextQueryDTOBusinessTaskFormSaveDTOBusinessTaskFormContextVO
  • BusinessFlowController 新增 GET/PUT /ai/business/flow/task-form-context
  • BusinessFlowService 支持按 processInstanceId/businessKey/taskDefKey 解析业务记录、节点表单策略、低代码表单字段和字段权限,并只保存节点可编辑字段。
  • business-app.js 新增待办业务表单上下文 API。
  • todo.vue 在待办审批详情渲染低代码业务表单,“同意”前保存节点授权字段;快捷同意遇到业务可写字段时跳过并提示进入详情办理。
  • spec.mdtasks.mdtest-spec.md 回填首期“Flow 通用 TaskFormInfo + 业务侧表单上下文 API”的落地策略和验证计划。

执行命令与结果

git diff --check

结果:通过,无空白错误。

cd forge-server
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

结果:通过。forge-plugin-generator 及依赖模块 BUILD SUCCESS,总耗时 11.291s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 17s

git status --short

结果:本轮相关文件处于已修改/新增状态;仍存在既有无关 .DS_Store 脏变更:M .DS_StoreD forge/.DS_Store

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、src/store/index.js 以及部分模块动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。

跳过项

  • 未启动 Admin/Flow 服务做接口联调:本轮无数据库结构变更,完整链路需要已发布低代码对象、已部署流程模型、待办任务和登录态数据,本地当前不具备稳定验收数据。
  • 未启动 Vite 做浏览器截图:本轮待办页改动已通过生产构建覆盖模板、脚本、组件导入和打包合法性;后续有真实流程样例后再补浏览器级交互验收。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 17:05 CST

变更范围

  • 待办外部采购单表单中“转办 / 同意 / 驳回修改”按钮统一大尺寸和最小宽度。
  • 已办详情新增“表单内容”只读区块,支持外部表单、节点动态表单、低代码业务对象表单和代码业务表单入口。
  • FlowTaskController 新增 GET /api/flow/task/form,已办/历史查看可按流程实例、业务 Key 或任务 ID 获取只读表单信息。
  • FlowTaskMapper/FlowTaskServiceImpl 增加 selectByIdOrTaskId,兼容已办列表传 Flowable taskIdsys_flow_task.id
  • BusinessFlowController 新增 GET /ai/business/flow/task-form-context/readonly,业务表单只读上下文不触发待办办理人校验。
  • BPMN 节点属性面板把流转条件改为业务选项:“同意通过 / 驳回修改 / 退回上一步 / 终止流程 / 按业务字段判断”,表达式和脚本仅保留在开发者高级配置中。

执行命令与结果

git diff --check

结果:通过,无空白错误。

cd forge-server
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-flow/forge-flow-server,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests

结果:通过。forge-flow-serverforge-plugin-flowforge-plugin-generator 及依赖模块 BUILD SUCCESS,总耗时 14.543s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 2m 14s

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git diff --name-only 中仍存在既有无关 .DS_Store 脏变更,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做真实已办详情和流程设计器浏览器联调:完整验证需要已完成采购单流程实例、当前用户已办任务和流程模型数据;用户要求最后统一验证,本轮以目标模块编译和前端生产构建覆盖接口、模板和打包合法性。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 17:21 CST

变更范围

  • ConditionConfig.vue 将仿钉钉流程设计器的条件分支配置改为“审批结果 / 业务字段 / 开发者高级”三种模式。
  • “审批结果”模式提供同意通过、驳回修改、退回上一步、终止流程四个业务选项;选择“驳回修改”自动写入 ${approvalResult == 'reject'}
  • BranchHeader.vue 对已有审批结果表达式做业务文案回显,分支标签直接显示“驳回修改 / 终止流程”等,不再只显示“条件已设”。
  • 补充 ConditionConfig.spec.jsDingFlowDesigner.spec.js,覆盖审批结果选择、旧表达式回显、复杂驳回回路标签展示。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec vitest run \
  src/components/flow-designer/panel/__tests__/ConditionConfig.spec.js \
  src/components/flow-designer/__tests__/DingFlowDesigner.spec.js

结果:通过。2 个测试文件、28 个用例全部通过。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 41s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。

跳过项

  • 未启动 Admin/Flow 服务做浏览器实测:本轮先用组件单测覆盖交互状态和表达式写出,用生产构建覆盖打包合法性;真实页面联调留到最终统一验证。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 18:42 CST

变更范围

  • 仿钉钉流程设计器抄送节点从手工输入用户 ID 改为 UserSelectPicker 选择抄送人。
  • 普通 BPMN 服务任务增加“作为抄送节点”配置,可通过用户选择弹窗配置抄送人。
  • 抄送节点 BPMN 导出写入 flowable:type="cc"flowable:candidateUsersflowable:candidateUserNames,未配置自定义实现时自动挂 flowable:delegateExpression="${flowCcNodeDelegate}"
  • BPMN 导入可回显抄送人配置,抄送节点卡片可展示抄送人或抄送角色摘要。
  • 后端新增 FlowCcNodeDelegate,流程流转到抄送 serviceTask 时按节点配置发送抄送。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec vitest run \
  src/components/flow-designer/converter/__tests__/json-to-bpmn.spec.js \
  src/components/flow-designer/converter/__tests__/bpmn-to-json-multi.spec.js \
  src/components/flow-designer/nodes/__tests__/node-cards.spec.js

结果:通过。3 个测试文件、37 个用例全部通过。

cd forge-server
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-flow -am compile -DskipTests

结果:通过。forge-plugin-flow 及依赖模块 BUILD SUCCESS,总耗时 8.259s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 54s

cd forge-server
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-flow/forge-flow-server -am compile -DskipTests

结果:通过。forge-flow-server 及依赖模块 BUILD SUCCESS,总耗时 12.352s。

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。
  • git status --short 中仍存在既有无关 .DS_Store 脏变更,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做真实抄送发送联调:完整验证需要已部署包含抄送 serviceTask 的流程模型、当前租户用户和抄送接收人数据;用户要求最后统一验证,本轮先用转换单测、前端构建和后端编译覆盖配置链路。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 19:28 CST

变更范围

  • 仿钉钉流程设计器 CarbonCopyConfig.vue 的抄送来源扩展为“指定人员 / 指定角色 / 表达式”。
  • 普通 BPMN NodePropertiesPanel.vue 的服务任务抄送配置同步支持人员、角色和表达式。
  • 角色模式通过 /system/role/page 加载角色,保存到 flowable:candidateGroups / flowable:candidateGroupNames
  • 表达式模式支持选择“表达式返回人员 / 表达式返回角色”,保存到对应候选人员或候选组属性。
  • flowable-moddle.json 补充抄送节点自定义属性,避免普通 BPMN 设计器序列化时丢失 ccReceiverTypeccExpressionTarget 等配置。
  • FlowCcNodeDelegate 支持解析简单变量、${user_123} 和复杂 Flowable 表达式,并在角色模式下解析角色/部门下用户。
  • “开发者高级配置(可选)”改为真实折叠面板;由于当前 Naive UI 版本不导出 NSegmented,抄送来源选择最终使用 n-radio-group + n-radio-button 实现。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec eslint \
  src/components/flow-designer/panel/CarbonCopyConfig.vue \
  src/components/bpmn/NodePropertiesPanel.vue \
  src/components/flow-designer/converter/json-to-bpmn.js \
  src/components/flow-designer/converter/bpmn-to-json.js

结果:通过,无 ESLint 报错。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec vitest run \
  src/components/flow-designer/converter/__tests__/json-to-bpmn.spec.js \
  src/components/flow-designer/converter/__tests__/bpmn-to-json-multi.spec.js

结果:通过。2 个测试文件、21 个用例全部通过。

cd forge-server
JAVA_HOME=$(/usr/libexec/java_home -v 17) \
PATH="$JAVA_HOME/bin:$PATH" \
mvn -pl forge-framework/forge-plugin-parent/forge-plugin-flow -am compile -DskipTests

结果:通过。forge-plugin-flow 及依赖模块 BUILD SUCCESS,总耗时 6.905s。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

首次结果:失败。原因是新增的 n-segmented 会被自动导入为 NSegmented,但当前 naive-ui@2.44.1 不导出该组件。已改为项目可用的 n-radio-group + n-radio-button

重跑结果:通过。Vite 构建完成,输出 ✓ built in 1m 35s

git diff --check

结果:通过,无空白错误。

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。
  • git status --short 中仍存在既有无关 .DS_Store、本地环境文件和前序业务流程改造文件,本轮未处理。

跳过项

  • 未启动 Admin/Flow 服务做真实角色抄送和表达式抄送联调:完整验证需要已部署流程模型、角色成员、流程变量和登录态数据;用户要求最后统一验证,本轮先通过转换单测、前端构建和后端编译覆盖配置链路。

服务清理

  • 本轮未启动任何服务,无需清理 PID。

2026-06-28 19:37 CST

变更范围

  • 修复仿钉钉抄送配置面板中“抄送来源”三段选择错位问题:不再把 Naive n-radio-group 强行改成 grid,改为自定义三段按钮。
  • 修复仿钉钉抄送节点“开发者高级配置”实现类型无法保持选择的问题:implementationType 不再依赖 implementation 非空才回显。
  • 去掉仿钉钉抄送配置中重复的“开发者高级配置”表单标签,折叠区只保留一处标题。
  • 普通 BPMN 属性面板的抄送来源选择同步改为自定义三段按钮,避免两套设计器样式不一致。

执行命令与结果

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
pnpm exec eslint \
  src/components/flow-designer/panel/CarbonCopyConfig.vue \
  src/components/bpmn/NodePropertiesPanel.vue

结果:通过,无 ESLint 报错。

git diff --check

结果:通过,无空白错误。

cd forge-admin-ui
source ~/.nvm/nvm.sh && nvm use v20.19.0
NODE_OPTIONS=--max-old-space-size=8192 pnpm build

结果:通过。Vite 构建完成,输出 ✓ built in 1m 32s

警告项

  • 前端构建仍提示既有 UserSelectModal 组件命名冲突、CSS // 注释、ExpandPanelRenderer.vuesrc/store/index.js 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。

跳过项

  • 未启动 Vite 做浏览器截图:本轮是局部样式和 computed 回显修复,已按用户截图定位到对应面板代码;真实页面交互留给用户最终统一验证。

服务清理

  • 本轮未启动任何服务,无需清理 PID。