# 执行日志:business-flow-lowcode-integration ## 2026-06-28 08:22 CST ### 变更范围 - `BusinessFlowBindingDTO` 增加 `businessBinding`。 - `BusinessFlowBindingVO` 回显 `businessBinding`。 - `BusinessFlowService` 保存流程绑定时归一化 `businessBinding`,并对低代码对象自动补齐业务表绑定默认值。 - 方案文档补充 JeecgBoot 风格“流程模型关联业务表 + 状态字段”的分层采纳策略。 ### 执行命令与结果 1. 首次编译: ```bash cd forge-server mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests ``` 结果:失败。Maven 使用本机默认 Java 8,报错 `无效的目标发行版: 17`。这是环境问题,不是代码编译错误。 2. 使用 Java 17 重新编译: ```bash 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`。 3. 空白字符检查: ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 编译输出提示既有代码存在 deprecated API 和 unchecked 操作,涉及 `GenTableServiceImpl`、`BusinessObjectDesignerService`,非本轮新增。 ### 跳过项 - 未启动服务做接口验证:本轮未改 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/readonly`,`BusinessFlowService#getTaskFormReadonlyContext` 跳过待办任务身份校验,仅返回只读业务表单上下文。 - `done.vue` 已办详情新增“表单内容”区块,按只读方式渲染外部表单、动态表单、低代码业务对象表单和代码表单查看入口。 - `NodePropertiesPanel.vue` 将流转条件配置改为业务化选项:同意通过、驳回修改、退回上一步、终止流程、按业务字段判断;选择后自动生成原 Flowable 条件表达式,高级表达式保留在折叠面板中。 ### 执行命令与结果 ```bash 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-generator`、`forge-flow-server` 及依赖模块 `BUILD SUCCESS`,总耗时 13.141s。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/store/index.js` 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 - 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。 - `git status` 中仍存在既有无关 `.DS_Store` 脏变更:`M .DS_Store`、`D 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 并返回“采购单不存在”。 ### 执行命令与结果 ```bash 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-core`、`forge-flow-client` 及依赖模块 `BUILD SUCCESS`,总耗时 12.678s。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ```bash 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.vue` 和 `src/store/index.js` 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 - 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。 - `git status` 中仍存在既有无关 `.DS_Store` 脏变更:`M .DS_Store`、`D forge/.DS_Store`,本轮未处理。 ### 跳过项 - 未启动 Admin/Flow 服务做真实接口联调:完整复现需要已部署采购单流程、样例采购单和当前办理人的待办任务;用户要求最后统一验证,本轮先完成代码修复和构建验证。 ### 服务清理 - 本轮未启动任何服务,无需清理 PID。 ## 2026-06-28 16:08 CST ### 变更范围 - 修复流程设计器多实例人工节点导出:保留 `flowable:collection`、`flowable:elementVariable`,集合缺失时兜底写出 `loopCardinality`,避免采购会签节点部署时报 `flowable-multi-instance-missing-collection`。 - 画布网关从普通卡片尺寸调整为 44px 菱形锚点,并按真实锚点重算连线起止端,解决网关附近看起来断线的问题。 - `DingFlowDesigner` 关闭 SVG 连线层重复条件标签,分支标签改为按连线路径放置并做碰撞避让,避免“条件已设 / 默认”和加号重叠。 - `BranchNode` 视觉调整为参考钉钉样式的小菱形条件锚点。 - 补充分支标签、加号避让、复杂驳回回路、多实例 BPMN 写出相关单测。 ### 执行命令与结果 ```bash 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 个用例全部通过。 ```bash cd forge-admin-ui source ~/.nvm/nvm.sh && nvm use v20.19.0 node --input-type=module ``` 结果:通过。采购单样例 BPMN 往返转换后 `purchase_countersign` 检查输出: ```text assignee= ${assignee} collection= ${countersignUserList} elementVariable= assignee loopCardinalityCount= 0 completion= ${nrOfCompletedInstances/nrOfInstances == 1} ``` ```bash 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`。 ```bash 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` 增加“添加分支按钮居中,默认分支标签避开按钮”回归用例。 ### 执行命令与结果 ```bash 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 个用例全部通过。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/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` 增加驳回重提回路单测。 ### 执行命令与结果 ```bash 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 个用例全部通过。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ```bash git status --short ``` 结果:本轮相关文件包括 `layout-algorithm.js`、`BranchNode.vue`、`layout-algorithm.spec.js`、`test-spec.md`、`execution-log.md`;工作区仍存在前序任务和既有 `.DS_Store` 脏变更,本轮未处理。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/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`,创建测试表、状态字典、总经理角色、菜单和按钮权限。 ### 执行命令与结果 ```bash 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-core`、`forge-flow-client` 及依赖模块 `BUILD SUCCESS`,总耗时 16.638s。 ```bash 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。 ```bash 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 变量读取策略对齐。 ### 执行命令与结果 ```bash 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。 ```bash 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 sources` 和 `Tests are skipped`,未实际执行测试用例。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 结论 - 当前 Forge 流程模块确实存在同类风险:完成事件原先只带 `ExecutionEntity#getVariables()`,流程结束后的变量查询也只读运行时变量;业务侧 `FlowEventSubscriber` 回调异常只记录日志。 - 本轮已修复变量快照和历史变量兜底,降低因最后一次审批变量缺失导致业务状态卡在审批中的风险。 ### 警告项 - `FlowEventSubscriber` 仍未提供持久化重试/死信队列;如果业务回调因业务异常、数据库异常或服务宕机失败,仍可能只记录日志。该能力需要单独设计事件投递表或可靠消息队列。 - `git status` 中仍存在既有无关 `.DS_Store` 脏变更:`M .DS_Store`、`D forge/.DS_Store`,本轮未处理。 ### 跳过项 - 未启动 Admin/Flow 服务做真实流程联调:需要可完成的流程模型、最后节点提交变量、业务侧 `@FlowCallback` 样例和数据库状态断言,留待最终统一验证。 ### 服务清理 - 本轮未启动任何服务,无需清理 PID。 ## 2026-06-28 11:39 CST ### 变更范围 - `FlowClient` 增加任务详情查询,业务待办表单上下文按 `taskId` 校验任务状态、当前办理人、流程实例、业务 Key 和节点 Key。 - `BusinessTaskFormContextQueryDTO`、`BusinessTaskFormSaveDTO`、`BusinessTaskFormContextVO` 补齐任务身份字段,保存业务字段和重提必须由已签收办理人执行。 - 新增 `BusinessCodeFormProvider` 和 `BusinessCodeFormProviderRegistry`,代码优先复杂业务可注册代码表单资产、上下文和保存逻辑。 - `BUSINESS_CODE_FORM` 待办上下文支持 Provider 委派;未注册 Provider 时返回 warning,并支持待办页打开业务表单地址。 - 新增 `POST /ai/business/flow/resubmit`,供复杂业务页保存主数据后复用原流程实例完成修改节点重提。 - `todo.vue` 对代码表单和存在可写业务字段的任务禁止快捷同意,避免绕过业务表单保存和节点字段权限。 - `spec.md`、`tasks.md`、`test-spec.md` 已补齐本轮运行态、Provider 和重提接口记录;低代码应用完整改造按用户要求暂缓。 ### 执行命令与结果 ```bash 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。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/store/index.js` 等动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 - 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。 - `git status` 中仍存在既有无关 `.DS_Store` 脏变更:`M .DS_Store`、`D forge/.DS_Store`,本轮未处理。 ### 跳过项 - 未启动 Admin/Flow 服务做接口联调:完整重提链路需要已部署流程模型、驳回到修改节点的待办任务、登录态和业务样例数据,本地当前不具备稳定验收数据,按用户要求留待最后统一验证。 - 未继续做低代码应用/设计器整体改造:用户明确要求“低代码应用的改造先别做”,本轮只收敛既有业务流程运行态、代码表单 Provider 和重提接口。 - 未新增采购合同示例 Provider:平台扩展点和协议已落地,具体业务示例需结合实际业务模块接入。 ### 服务清理 - 本轮未启动任何服务,无需清理 PID。 ## 2026-06-28 08:49 CST ### 变更范围 - `BusinessFlowBindingPanel.vue` 增加“业务记录绑定”配置区。 - 前端保存流程绑定时提交 `businessBinding`,回显旧配置时归一化接入方式、业务表、主键字段、租户字段、状态字段、标题字段和负责人字段。 - 运行摘要增加业务绑定模式、业务表和状态字段。 - `tasks.md`、`test-spec.md` 更新本轮设计器配置和验证范围。 ### 执行命令与结果 ```bash 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`。 ```bash 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。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建提示既有 `UserSelectModal` 组件命名冲突、CSS 中 `//` 注释、`src/store/index.js` 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 - 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。 - `git status` 中存在既有 `.DS_Store` 脏变更:`M .DS_Store`、`D 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。 ### 执行命令与结果 ```bash 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`。 ```bash 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.md`、`test-spec.md` 更新本轮节点表单资产与字段权限落地范围。 ### 执行命令与结果 ```bash 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。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`src/store/index.js` 动静态混合导入、部分模块动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 - 后端编译仍有既有 deprecated API 和 unchecked 操作提示,非本轮新增。 - `git status` 中仍存在既有 `.DS_Store` 脏变更:`M .DS_Store`、`D forge/.DS_Store`,本轮未处理。 ### 跳过项 - 未启动后端服务做接口联调:本轮无数据库结构变更,且本地完整链路需要 Admin/Flow 多服务联动;先以目标模块编译覆盖接口签名、DTO/VO 和 JSON 归一化合法性。 - 未启动 Vite 做浏览器截图:本轮 UI 为配置表单和协议保存,生产构建已覆盖模板、脚本和组件导入合法性。 - 未实现待办审批页运行态渲染和后端提交字段权限校验,已明确保留在 Task 10/11/12 后续阶段。 ### 服务清理 - 本轮未启动任何服务,无需清理 PID。 ## 2026-06-28 09:34 CST ### 变更范围 - 新增 `BusinessTaskFormContextQueryDTO`、`BusinessTaskFormSaveDTO`、`BusinessTaskFormContextVO`。 - `BusinessFlowController` 新增 `GET/PUT /ai/business/flow/task-form-context`。 - `BusinessFlowService` 支持按 `processInstanceId/businessKey/taskDefKey` 解析业务记录、节点表单策略、低代码表单字段和字段权限,并只保存节点可编辑字段。 - `business-app.js` 新增待办业务表单上下文 API。 - `todo.vue` 在待办审批详情渲染低代码业务表单,“同意”前保存节点授权字段;快捷同意遇到业务可写字段时跳过并提示进入详情办理。 - `spec.md`、`tasks.md`、`test-spec.md` 回填首期“Flow 通用 TaskFormInfo + 业务侧表单上下文 API”的落地策略和验证计划。 ### 执行命令与结果 ```bash git diff --check ``` 结果:通过,无空白错误。 ```bash 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。 ```bash 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`。 ```bash git status --short ``` 结果:本轮相关文件处于已修改/新增状态;仍存在既有无关 `.DS_Store` 脏变更:`M .DS_Store`、`D 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 `taskId` 或 `sys_flow_task.id`。 - `BusinessFlowController` 新增 `GET /ai/business/flow/task-form-context/readonly`,业务表单只读上下文不触发待办办理人校验。 - BPMN 节点属性面板把流转条件改为业务选项:“同意通过 / 驳回修改 / 退回上一步 / 终止流程 / 按业务字段判断”,表达式和脚本仅保留在开发者高级配置中。 ### 执行命令与结果 ```bash git diff --check ``` 结果:通过,无空白错误。 ```bash 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-server`、`forge-plugin-flow`、`forge-plugin-generator` 及依赖模块 `BUILD SUCCESS`,总耗时 14.543s。 ```bash 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.js` 和 `DingFlowDesigner.spec.js`,覆盖审批结果选择、旧表达式回显、复杂驳回回路标签展示。 ### 执行命令与结果 ```bash 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 个用例全部通过。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/store/index.js` 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 ### 跳过项 - 未启动 Admin/Flow 服务做浏览器实测:本轮先用组件单测覆盖交互状态和表达式写出,用生产构建覆盖打包合法性;真实页面联调留到最终统一验证。 ### 服务清理 - 本轮未启动任何服务,无需清理 PID。 ## 2026-06-28 18:42 CST ### 变更范围 - 仿钉钉流程设计器抄送节点从手工输入用户 ID 改为 `UserSelectPicker` 选择抄送人。 - 普通 BPMN 服务任务增加“作为抄送节点”配置,可通过用户选择弹窗配置抄送人。 - 抄送节点 BPMN 导出写入 `flowable:type="cc"`、`flowable:candidateUsers`、`flowable:candidateUserNames`,未配置自定义实现时自动挂 `flowable:delegateExpression="${flowCcNodeDelegate}"`。 - BPMN 导入可回显抄送人配置,抄送节点卡片可展示抄送人或抄送角色摘要。 - 后端新增 `FlowCcNodeDelegate`,流程流转到抄送 serviceTask 时按节点配置发送抄送。 ### 执行命令与结果 ```bash 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 个用例全部通过。 ```bash 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。 ```bash 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`。 ```bash 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。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/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 设计器序列化时丢失 `ccReceiverType`、`ccExpressionTarget` 等配置。 - `FlowCcNodeDelegate` 支持解析简单变量、`${user_123}` 和复杂 Flowable 表达式,并在角色模式下解析角色/部门下用户。 - “开发者高级配置(可选)”改为真实折叠面板;由于当前 Naive UI 版本不导出 `NSegmented`,抄送来源选择最终使用 `n-radio-group + n-radio-button` 实现。 ### 执行命令与结果 ```bash 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 报错。 ```bash 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 个用例全部通过。 ```bash 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。 ```bash 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`。 ```bash git diff --check ``` 结果:通过,无空白错误。 ### 警告项 - 前端构建仍提示既有 `UserSelectModal` 组件命名冲突、CSS `//` 注释、`ExpandPanelRenderer.vue` 和 `src/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 属性面板的抄送来源选择同步改为自定义三段按钮,避免两套设计器样式不一致。 ### 执行命令与结果 ```bash 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 报错。 ```bash git diff --check ``` 结果:通过,无空白错误。 ```bash 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.vue` 和 `src/store/index.js` 动静态混合导入导致无法拆分 chunk,非本轮新增阻断项。 ### 跳过项 - 未启动 Vite 做浏览器截图:本轮是局部样式和 computed 回显修复,已按用户截图定位到对应面板代码;真实页面交互留给用户最终统一验证。 ### 服务清理 - 本轮未启动任何服务,无需清理 PID。