主题
工程变更监管 · 测试与验收文档
文档版本:1.10 | 最近核对日期:2026-11-04
当前进展:施工单位 I 类需出图正式长链路已完成真实闭环;工程变更五条流程图已全部完成规范重排并发布(施工 V10、监理 V6、业主 V6、设计 V6、重新申报 V5,开发库与生产库均已发布),每条均完成布局与导入核验;其他发起单位/类别、退回和外部档案仍待专项
文档控制与范围
| 项目 | 内容 |
|---|---|
| 模块名称 | 工程变更监管;施工 V10、监理 V6、业主 V6、设计 V6、重新申报 V5 五条流程 |
| 关联需求分析 | 需求分析 |
| 关联详细设计 | 详细设计 |
| 测试环境 | 本地开发环境;DM8 开发库;前后端按仓库配置 |
| 测试数据 | 复用开发库已有测试组织、岗位和用户;2026-09-04 已清除工程变更旧流程实例、表单数据和旧流程定义,并导入、发布施工、监理、业主、设计、设计重新申报五条 V1;本次保留 5 条新建测试单据及首个待办作为历史复测证据,并保留施工单位 I 类需出图正式长链路 2099050465062395906、流程实例 2099211161267961857 及测试附件;不在文档记录账号密码 |
| 执行人/日期 | Codex / 2026-09-14 |
| 总体结论 | 五条 V1 流程的发起闭环已完成;本批次新增施工单位 I 类需出图正式长链路,已从提交、分类、并行审核、出图、最终核价、下达、监督令推进到归档,流程实例结束、待办归零,节点业务记录和金额分类均回读一致;施工单位流程图已重排为 V8 并完成开发侧视觉核对,五条流程图已全部按规范重排发布(施工 V9、监理 V5、业主 V5、设计 V5、重新申报 V4),部门会签段统一为横向轨道并完成开发侧逐段核对,业务方视觉验收仍待开展;其他发起单位/类别、退回、负向权限和外部档案同步仍待专项;2026-10-23 本批五条流程升版并发布,发起字段、领导顺序、附件权限、折叠和流程概述已完成开发库与页面核验,领导附件真实节点验证和生产同步待专项 |
当前 V1 复测(2026-09-04)
本次端到端边界为“发起页面填写 → 附件上传 → 提交 → 业务主表 → 流程实例 → 首个待办”。五条实例均已分别落到首个办理人;未在未获得各办理账号授权的情况下代办后续节点,因此不将本次结果虚构为五条流程全部归档。
| 流程 | 测试单号 | 测试项目 | 预计金额/类别 | 首个办理人 | 测试附件 | 首个待办节点 | 结果 |
|---|---|---|---|---|---|---|---|
| 施工单位工程变更 | 20260904140034054 | 轨道交通7号线 / 7号线一期 | 320 / I | 赵启明 | e2e-construction-change.txt | 项目经理 | 通过 |
| 监理单位工程变更 | 20260904140252980 | 轨道交通15号线 / 15号线一期 | 120 / II | 王五 | e2e-supervision-change.txt | 总监理工程师 | 通过 |
| 业主单位工程变更 | 20260904140427385 | 轨道交通17号线 / 17号线一期 | 60 / III | 张三 | e2e-owner-change.txt | 分公司项目负责人 | 通过 |
| 设计单位工程变更 | 20260904141102679 | 轨道交通19号线 / 19号线一期 | 305 / I | 李四 | e2e-design-change.txt | 设计部项目负责人 | 通过 |
| 设计单位重新申报 | 20260904141205899 | 轨道交通24号线 / 24号线一期 | 80 / III | 程浩 | e2e-resubmit-change.txt | 重新申报编制 | 通过 |
当前数据库回读结果:5 条业务记录均为 approval_status=waiting,5 个流程实例均为运行中,5 个实例各有 1 个首个活动待办;5 条 V1 流程定义均为已发布状态。流程分类回读为四个业务分类:施工、监理、业主各 1 条,设计单位 2 条。重新申报流程由设计单位页面手动发起,与设计单位普通工程变更流程没有必然关联。
当前复测自动验证
| 验证项 | 结果 |
|---|---|
| 五份流程源文件 JSON 结构检查 | 5/5 通过;节点扩展字段均为数组或空对象 |
| 节点扩展字段兼容单测 | 3/3 通过;兼容历史导入的单对象格式,并保持数组格式为规范格式 |
| DM8 V1 流程定义导入与发布回读 | 5/5 通过 |
| 浏览器发起闭环 E2E | 5/5 通过;不同项目、金额/类别、办理人和附件均已实际提交 |
| 后端日志异常检查 | 0 条节点扩展字段反序列化异常 |
1. 需求追踪矩阵
| 需求/规则编号 | 设计章节或接口 | 测试用例 | 实际结果 | 证据 | 状态 |
|---|---|---|---|---|---|
| R-EC-001 | 四页面与按发起单位划分的主流程;施工单位不按类别拆流程 | TC-001、TC-014 | 施工页面与施工单主流程已落地 | 页面/路由/DM8 engineering_change_construction | 已核对 |
| R-EC-002 | estimated_amount 分类服务 | TC-002~005 | 已实现,边界单测通过 | Maven 测试 | 已核对 |
| R-EC-003 | 估价后系统判定 I/II/III/IV,类别在施工主流程内部流转 | TC-003~006、TC-015、TC-017 | 本次实例由 300 万元估价判定为 I 类;流程变量保留 valuationAmount=300、changeClass=I | 业务主表、流程变量、历史任务 | 部分核对 |
| R-EC-004a | 草稿暂存、重开和编辑回读 | TC-007a | 已通过 | 页面/接口/数据库 | 已核对 |
| R-EC-004b | 退回后可编辑并沿原流程再次提交 | TC-007b | 待专项验证 | 接口/页面 | 待核对 |
| R-EC-005 | 越权与工程节点范围 | TC-008 | 待实现 | 接口/日志 | 待核对 |
| R-EC-006 | 最终核量核价不补走跨档审批 | TC-009、TC-017 | 最终核量核价写入 300 万元/I 类,之后按原路径进入核定签发和归档,未新增跨档领导审批 | 业务主表、历史任务 | 已核对 |
| R-EC-015~022 | 左侧只读表单、预览、附件分类、统一办理文案、路由顺序、右侧时间线全展开、流程图布局和边属性 | TC-010~013、TC-016、TC-017 | 已通过浏览器核对只读表单、动态节点字段、附件回显、统一办理页和完整审批时间线;施工单位流程图 V8 的布局与业务入口已完成开发侧核对,业务方视觉验收和预览取消专项用例仍待开展 | 页面、流程时间线、附件回显 | 部分核对 |
2. 测试用例与结果
以下用例表保留原施工单位发起流程和历史回归记录,当前五条 V1 发起闭环结果以“当前 V1 复测”章节为准。
| 用例 | 角色/前置条件 | 操作 | 预期结果 | 实际结果 | 证据 | 结果 |
|---|---|---|---|---|---|---|
| TC-001 | 测试施工单位用户 | 进入施工单位工程变更页面 | 只看到施工页面,页面不混入其他三类发起按钮 | 已进入施工单位工程变更台账并完成发起 | 页面/路由 | 已核对 |
| TC-002 | 服务层 | 金额 300.00 | 类别 I | 已通过 | EngineeringChangeRulesTest | 已核对 |
| TC-003 | 服务层 | 金额 100.00、-100.00 | 类别 II | 已通过 | EngineeringChangeRulesTest | 已核对 |
| TC-004 | 服务层 | 金额 50.00、-50.00 | 类别 III | 已通过 | EngineeringChangeRulesTest | 已核对 |
| TC-005 | 服务层 | 金额 49.99、-49.99 | 类别 IV | 已通过 | EngineeringChangeRulesTest | 已核对 |
| TC-006 | 测试发起人 | 选择发起单位并填写预计金额、类别、总包和首个办理人后提交 | 按发起单位启动主流程;只记录预计类别,正式类别在造价估价后由系统计算 | 本次成功启动 engineering_change_construction,估价后正式类别为 I 类 | 页面/DB | 已核对 |
| TC-007a | 草稿记录 | 保存、重开并修改后再次保存 | 草稿可编辑;保存结果可回读 | 已通过,工程节点、项目名称、分部工程、图号、金额、工期、预计类别、归属单位、说明和首个办理人均完成保存/回读 | 页面/接口/数据库 | 已核对 |
| TC-007b | 退回记录 | 修改并沿原流程再次提交 | 退回记录可编辑;审批中不可修改 | 待专项验证 | 页面/接口 | 待核对 |
| TC-008 | 无工程节点授权用户 | 查询或提交非授权节点 | 返回无权访问/数据不出现在列表 | 待执行 | API/日志 | 待核对 |
| TC-009 | 造价咨询人员 | 完成最终核量核价 | 写入最终金额,不新增高等级审批,不回改已完成审批 | 最终金额写入 300 万元;后续直接进入分公司核定签发,未新增跨档审批 | DB/流程 | 已核对 |
| TC-010 | 当前办理人 | 在同意/退回弹窗填写内容并点击预览 | 左侧只读表单临时显示预览内容;不改正式数据、不进时间线 | 待执行 | 页面状态 | 待核对 |
| TC-011 | 当前办理人 | 取消预览或关闭页面 | 正式表单保持原样,预览内容不保留 | 待执行 | 页面状态 | 待核对 |
| TC-012 | 当前办理人 | 任意流程节点上传附件 | 无附件时不显示附件区,上传后在对应节点显示流程附件并可预览 | 待执行 | 页面/接口 | 待核对 |
| TC-013 | 当前办理人 | 正式同意或退回 | 写入签名和表单年月日;右侧时间线显示 SQE 完整时间 | 正式同意节点均写入办理人、日期、意见和时间线记录 | 页面/流程 | 已核对 |
| TC-014 | 施工单位发起人 | 使用同一施工单位主流程分别提交 I/II/III/IV 类测试数据 | 不创建四个类别流程;同一流程在类别网关处生成对应路径 | 已核对只有 1 条施工单位主流程;本次仅实测 I 类实例,II/III/IV 实例待补测 | DM8 FLOW_DEFINITION/FLOW_SKIP | 部分核对 |
| TC-015 | 部门审核人 | 分别办理 I 类和 II/III/IV 类 | 部门包容网关为 I 类生成技术部、工程部、成本合约部、设计部四条并行线;其他类别生成工程部、成本合约部、设计部三条并行线;汇聚等待实际分支全部完成 | 本次 I 类实例实际生成并完成四条专业并行线;其他类别待补测 | DM8 FLOW_NODE/FLOW_SKIP、历史任务 | 部分核对 |
| TC-016 | 监管查看人 | 查看施工单位流程图 | 按业务阶段从左到右阅读;部门审核四条局部轨道、类别及出图分支可区分并向右汇聚;普通边无“通过”冗余文字;关键分流边保留属性;线条从节点四向锚点连接且不穿过无关节点 | V8 已在真实设计器与施工单位新增表单的流程图抽屉查看整图及放大后的局部路径;静态几何与标签检查通过。Warm-Flow 默认整图适配时文字仍较小,逐段阅读需使用工具栏放大;业务方视觉验收待开展 | 页面/流程定义 | 开发侧已核对;业务方待验收 |
| TC-017 | 施工单位发起人、各节点办理人 | 创建“分公司 + 有总包 + I 类 + 需出图”单据,上传测试附件,沿最长路径办理至归档 | 历史回归已完成发起、串行审批、四专业并行、出图分支、高层审批、资料完善、最终核量核价、变更单下达和归档;其后按用户要求清理过程数据 | 历史单据 2094118225580748801、实例 2094119486145220610;历史任务 48 条;最终金额 300 万元/I 类;needsDrawing=1;附件对象 11 条;2026-09-01 已清理 | 浏览器、DM8 MCP、MinIO 元数据 | 历史已核对 |
| TC-018 | 退回后重新待办的当前节点 | 同一节点存在上一轮办理记录后被退回并再次成为当前任务 | 节点卡片优先显示“待我办理”,不回显上一轮签名、意见、日期、特殊动作或附件 | 已新增前端回归测试验证当前任务优先级;真实退回页面回归待专项验证(Agent 可按改动范围自行在浏览器执行) | ConstructionChangeFullForm.spec.ts | 部分核对 |
| TC-019 | 并发处理人 | 同一流程节点被其他办理人先处理后再次提交 | 不覆盖已变更记录,提示当前记录已被其他人处理并保留工作流日志 | 待专项验证 | 接口/工作流日志 | 待核对 |
3. 自动化验证
| 验证项 | 命令或入口 | 执行时间 | 结果摘要 | 证据/日志 |
|---|---|---|---|---|
| 后端测试 | .agents/tools/dev.ps1 maven '-pl' 'digital-construction-modules/digital-construction-business' '-am' '-Dmaven.test.skip=false' 'test' | 2026-08-31 | 当前修复后业务模块及依赖构建成功;49 个测试通过,0 失败/错误 | Maven 输出 |
| 工作流后端局部单测 | .agents/tools/dev.ps1 maven '-pl' 'digital-construction-modules/digital-construction-workflow' '-am' '-Dmaven.test.skip=false' '-Dtest=FlwTaskServiceImplTest' '-Dsurefire.failIfNoSpecifiedTests=false' test | 2026-09-01 | 手动指定下一办理人表达式不会被上一轮流程变量覆盖 | Maven 输出:1 通过 |
| 前端检查/构建 | digital-construction-ui: .agents/tools/dev.ps1 pnpm build | 2026-08-30 | Vite 构建成功;存在既有 CSS/大包提示 | 构建输出 |
| 前端类型检查 | digital-construction-ui: .agents/tools/dev.ps1 pnpm exec vue-tsc --noEmit | 2026-08-30 | 工程变更代码无新增类型错误;现有 SignatureUpload.vue 仍有 4 个基线错误 | 类型检查输出 |
| 前端局部自动化测试 | digital-construction-ui: .agents/tools/dev.ps1 pnpm vitest run src/api/workflow/workflowCommon/index.spec.ts src/views/business/sqe/flowSteps.spec.ts src/components/Process/FlowActionPanel.spec.ts src/views/business/engineeringChange/construction/ConstructionChangeFullForm.spec.ts | 2026-09-01 | 覆盖工作台跳转缓存失效、退回弹窗字段边界和退回后当前节点渲染优先级 | Vitest 输出 |
| 前端静态检查 | digital-construction-ui: .agents/tools/dev.ps1 pnpm exec oxlint(相关文件) | 2026-09-01 | 本轮工作流与工程变更前端文件通过 | Oxlint 输出 |
| 接口/数据库实测 | 项目 DM8 MCP | 2026-09-04 | 清除工程变更旧实例、表单数据和旧定义;重新导入并发布施工、监理、业主、设计、设计重新申报 5 条 V1 定义;当前 5 条复测业务记录、5 个流程实例和 5 个首个待办均已回读 | MCP 查询结果 |
| 接口/数据库实测 | 项目 DM8 MCP | 2026-08-31 | 基线迁移核验后完成真实实例回读:业务单据 2094118225580748801 为 approval_status=finish,流程实例 end/finish,历史任务 48 条,活动任务 0 条;needsDrawing=1、估价/最终金额 300、正式类别 I;节点办理快照 41 条;测试附件 11 条均保留 | MCP 查询结果 |
| 工作流来源节点修复定向单测 | .agents/tools/dev.ps1 maven '-Dmaven.test.skip=false' '-pl' 'digital-construction-modules/digital-construction-business' '-am' '-Dtest=EngineeringChangeProcessEventListenerTest' '-Dsurefire.failIfNoSpecifiedTests=false' test | 2026-09-14;1 项通过 | EngineeringChangeProcessEventListenerTest 验证下一待办节点与刚办理来源节点不同时,业务 action 仍写入来源节点 | 已核对 |
| 浏览器端到端回归 | 本地浏览器;工程变更四类发起页及设计页重新申报入口 | 2026-09-04 | 当前五条 V1 均完成从表单填写、附件上传、提交到首个待办生成;施工单位最长路径归档为历史回归证据 | 浏览器 DOM 状态、DM8 回读;历史详情页 |
| 流程 V2/V3 重出图核验 | 仓库 JSON 静态核验脚本、项目 DM8 MCP、本地浏览器设计器 | 2026-09-26 | 五条流程按流程图编排规范重出图后导入为 V2、标签定位修正后重发 V3 并发布:语义字段与 V1 零差异;交叉 0、穿节点 0、斜线段 0、锚点异常 0、超 70px 共用段 0;FLOW_NODE/FLOW_SKIP 重复行检查为空;设计器渲染回读为 69 个 100 × 80 办理卡片、19 个 50 × 50 网关、起止半径 25、105 条连线与 20 个边标签;V3 的 83 条带名称连线标签坐标按"不压节点、不压线、不互相重叠"复核,无冲突。2026-09-26 再按「画布尺寸与屏幕适配」重排为 V4 并发布:画布 2490 × 1350、12 行 × 14 列、整屏缩放约 0.59(目标 ≥0.6,差约 2%),六项清晰度计数 0、语义差异 0、标签 20/20 有位且零冲突;设计器渲染回读为 69 张办理卡片、19 个网关、起止各 1、105 条连线、20 个边标签。2026-09-26 再按"竖向不滚动、横向两屏内"排为 V5:8 行 × 110 行距、渲染范围 3470 × 870、按高度缩放约 0.91,六项清晰度全 0(短距离斜线 0、最大累计共段 70px 在上限内)、网关三项与分支组相邻达标、语义零差异,独立复核通过。未执行:V5 的业务端到端办理回归与业务方视觉验收仍待专项 | MCP 查询结果、设计器 DOM 读取 |
| 施工流程 V8 重排核验 | 仓库 JSON 语义比对与几何检查、项目 DM8 MCP、真实设计器与业务流程图抽屉 | 2026-09-27 | 仅坐标变更;90 节点、105 连线及条件、办理配置等语义字段与仓库基线一致。斜线与正交线统一检查后,穿节点 0、交叉 0;20 个关键边标签无节点、线或标签相互遮挡。V8 已导入并发布;定义源与导出坐标一致,FLOW_NODE/FLOW_SKIP 重复键均为 0;整图与局部放大页面可见阶段顺序、上下分支和向右汇聚。V6/V7 已取消发布。此次未重跑业务办理端到端回归,业务方视觉验收待开展 | 静态检查、MCP 回读、真实页面截图 |
| 监理流程 V4 重出图核验 | 仓库 JSON 语义比对与几何检查、项目 DM8 MCP、真实设计器 | 2026-09-27 | 按施工 V8 参考重出图,仅坐标变更:86 节点、100 连线的语义字段与已发布 V3 逐字段比对差异为 0;锚点异常、线线交叉(含通用线段相交)、穿节点(含斜线求交)、卡片重叠、标签冲突均为 0,8 条斜线继承 V8 同区段几何。V4(2104099569750036482)已导入并发布,V3 转未发布保留在途实例;FLOW_NODE/FLOW_SKIP 重复键均为 0,头链与收尾节点、连线坐标抽样回读与源文件一致;真实设计器逐段核对头链(监理审核→阶段留白→分公司经办)、系统设备/分公司分支、部门四轨分流、类别出图分支与收尾链,文字在放大倍率下可读。未重跑监理单据业务办理端到端回归,业务方视觉验收待开展 | 静态检查、MCP 回读、真实页面截图 |
| 设计流程 V4 重出图核验 | 仓库 JSON 语义比对与几何检查、项目 DM8 MCP、真实设计器 | 2026-09-27 | 按施工 V8 参考重出图,仅坐标变更:88 节点、102 连线的语义字段与已发布 V3 逐字段比对差异为 0(仅 design_project_manager 名称换行符 \r\n 规整为 \n,渲染语义不变);锚点异常、线线交叉(含通用线段相交)、穿节点(含斜线求交)、卡片重叠、超 70px 共段、标签冲突均为 0,斜线继承 V8 同区段几何。V4(2104101229834588161)已导入并发布,V3 转未发布保留在途实例;FLOW_NODE/FLOW_SKIP 重复键均为 0,头部重报网关、折返行与收尾节点、连线坐标抽样回读与源文件一致;真实设计器逐段核对头链(重报判断「满足重报条件」侧出结束、「继续工程变更」向下折返)、系统设备/分公司分支、部门四轨分流、I/II/III/IV 类别出图分支、领导审批链与收尾链,文字在放大倍率下可读。业务流程图抽屉与设计器为同一渲染组件(FlowChartEntry 内嵌同 URL 只读设计器)。未重跑设计单据业务办理端到端回归,业务方视觉验收待开展 | 静态检查、MCP 回读、真实页面截图 |
| 业主流程 V4 重出图核验 | 仓库 JSON 语义比对与几何检查、项目 DM8 MCP、真实设计器与业务流程图抽屉 | 2026-09-27 | 按施工 V8 参考重出图,仅坐标变更:84 节点、98 连线的语义字段与已发布 V3 逐字段比对差异为 0;锚点异常、线线交叉(含斜线求交)、穿节点(含斜线)、卡片重叠、超 70px 共段、标签冲突均为 0,斜线条数与 V8 同区段一致;scheme_parallel 之后各区直接沿用 V8 已核验几何,仓库 check_layout.py 独立复核同为 0 异常。V4(2104102410615050241)已导入并发布,V3 转未发布保留在途实例;FLOW_NODE/FLOW_SKIP 重复键均为 0,发起链、归属分流与收尾节点、连线坐标抽样回读与源文件一致;真实设计器逐段核对发起折返(开始 → 分公司经办/项目负责人/负责人 → 下折现场核验 → 估价与造价审核反向回到左侧并行网关)、归属网关两个分流标签、系统设备与分公司分支、部门四轨分流、类别出图分支与收尾链,业主新增表单「流程图」抽屉加载同一 V4(84 节点 / 98 连线 / 18 标签),文字在放大倍率下可读。未重跑业主单据业务办理端到端回归,业务方视觉验收待开展 | 静态检查、MCP 回读、真实页面截图 |
| 设计流程 V5 部门段横排核验 | 仓库 JSON 语义比对与几何检查、项目 DM8 MCP、真实设计器 | 2026-09-27 | 按用户反馈将设计流程部门会签段由纵向四列改为横向四轨道(技术部/工程部/设计部/成本合约部,行距 160,成本三节点链置最下轨道),仅坐标变更:部门段 11 节点、16 连线重排,全部语义字段与 V4 逐字段比对差异为 0;锚点异常、线线交叉(含斜线求交)、穿节点、超 70px 共段、标签冲突均为 0,分叉处最长共用段 68px 在上限内。V5(2104107140741386242)已导入并发布,V4 转未发布保留在途实例;FLOW_NODE/FLOW_SKIP 重复键均为 0,部门段与收尾节点坐标抽样回读与源文件一致;真实设计器核对分叉标签(仅 I 类/工程/设计/成本)、四条轨道从左到右推进与向右收拢进汇聚网关,衔接分类网关及下游扇出不变,文字在放大倍率下可读。未重跑设计单据业务办理端到端回归,业务方视觉验收待开展;施工 V8、监理 V4、业主 V4 同区段仍为纵向列,待业务方认可横向轨道后再统一调整 | 静态检查、MCP 回读、真实页面截图 |
| 部门段横排推广与贴边线修复核验 | 仓库/线上定义逐字段比对、几何检查、项目 DM8 MCP、真实设计器 | 2026-09-27 | 导入前四条流程仓库文件与线上已发布定义逐字段比对语义差异均为 0。施工 V9(2104111147471917058,90 节点/105 连线)、监理 V5(2104111217659400194,86/100)、业主 V5(2104111284558548993,84/98)套用设计 V5 部门段横向轨道坐标,变换脚本对 11 节点、16 连线逐项断言旧坐标与 V8 基线一致后才替换;重新申报 V4(2104112567948464129,27/31)修复技术管理部负责人→汇聚贴边线(原路由绕行卡片背后沿 x=1000 下行贴设计部负责人卡片左边缘,改右锚点直出 x=1195 通道下行),并行会签本为横向轨道无需改排。五条流程 check_layout 全 0(锚点/交叉含斜线/穿节点/超 70px 共段/标签冲突);FLOW_NODE/FLOW_SKIP 重复行 0,发布后每条流程唯一发布版;真实设计器核对施工、监理、业主部门段四条横向轨道及重新申报修复段汇入通道,文字可读。仓库五个流程文件同日去掉 _v1 后缀(数据库三处文档引用同步更新)。未重跑业务办理端到端回归,业务方视觉验收待开展 | 静态检查、MCP 回读、真实页面截图 | 布局与导入已核对;业务回归未执行;业务方待验收 | | 2026-10-23 业务调整核验 | 仓库 JSON 静态检查、项目 DM8 MCP、前后端定向测试、内置浏览器 | 2026-10-23 | 五条流程升版并发布:施工 V10(2113585283608932354,79/92)、设计 V6(2113585397517840385,77/89)、业主 V6(2113585512764731394,73/85)、监理 V6(2113585616674418689,75/87)、重新申报 V5(2113585722714812417,27/31);check_layout.py 五项检查全 0,新定义 FLOW_NODE/FLOW_SKIP 重复行 0,发布前回读无运行中工程变更实例。后端工程变更定向测试 15/15 通过(合同金额按发起单位校验、流程概述落库/必填、领导附件拒绝、设计重报节点兼容);前端工程变更单测 11/11 通过、变更目录 oxlint 0 错误。页面核验(验证单据 2113589076350238722,由页面与受控接口组合推进):设计发起弹窗无合同金额、重新申报同源;设计项目负责人节点显示重报判断(默认“否,继续工程变更”),分公司负责人节点不再重复显示;分公司负责人填写流程概述后数据库回读一致,查看页显示在基础表单底部、首个签名上方;未经过和待判定环节折叠、已办理/当前环节展开、展开全部/收起全部可见;领导顺序显示为建设→成本→设计→总经理→董事长;设计部审核、需出图复核和最终核价阶段已从表单移除;历史单据项目负责人卡片不再显示“待选择”。未在真实页面推进到领导节点验证附件入口(流程路径长且含并行分支),以节点 ext 回读、监听器单测和前端按钮权限逻辑为证据;完整设计长链路和业务方视觉验收仍待专项;生产发布包 20261024-gis 已包含本批前后端,生产库已新增 process_overview 并导入发布五条新版本(施工 V10、设计 V6、业主 V6、监理 V6、重新申报 V5),生产设计 V5 两条在途实例保留旧定义 | 静态检查、MCP 回读、单测、页面快照 | 页面与开发库、生产库已核对;领导附件入口未做真实页面节点验证 | | 文档构建与链接检查 | 文档站 docs:check、docs:build、docs:check:dist | 2026-09-14;正文 91 个文本文件/1269 个本地链接、构建产物 299 个文本文件/0 个本地链接问题 | 文档站脚本输出 | 已通过 |
本批次最新后端回归补充:使用显式 -Dmaven.test.skip=false 执行业务模块及其依赖,业务模块 94 项、工作流模块 12 项测试均通过,0 失败、0 错误;BIM 依赖模块虽随构建通过,但不纳入本次非 BIM/GIS 业务结论。
4. 缺陷与遗留问题
| 编号 | 问题 | 严重度 | 影响范围 | 处理/规避 | 复验结果 | 状态 |
|---|---|---|---|---|---|---|
| BUG-001 | 原文档曾记录最终核量核价补审规则,与最新确认不一致 | 中 | 已改为最终核量核价不补走跨档审批,代码保留历史兼容字段但不参与流程 | 本次 300 万元最终核价后未新增跨档领导审批 | 已修复并核验 | |
| BUG-002 | 系统设备分支实际部门/岗位测试数据未建立 | 低 | 特殊分支 | 分支行为已确定;先验证普通分公司,组织编码核对后补测系统设备经办 | 待执行 | 遗留 |
| BUG-003 | 现有施工单位流程数据仍按 I/II/III/IV 建立多个定义,与最新主流程设计不一致 | 高 | 流程启动、类别分支和在途实例 | 已按确认范围清空施工单位旧表单、定义及实例,仅导入施工单位主流程 V1;无在途实例需要迁移 | 本次实例按同一主流程完成 I 类长路径;流程定义回读为单主流程 | 已处理并核验 |
| BUG-004 | 分类日志实体继承 BaseEntity,开发库旧表缺少 update_by、update_time,提交时插入失败 | 高 | 施工单位发起提交 | 已通过 DM8 MCP 补列并纳入交付数据库基线 | 本次成功提交、估价分类日志和最终分类日志均已写入 | 已修复并核验 |
| BUG-005 | 部分旧导入定义的节点 ext 为单对象,解析器按数组反序列化导致流程启动失败 | 高 | 五类工程变更流程启动 | 流程源文件统一使用数组格式;解析器兼容历史单对象和空对象格式 | 五条 V1 均成功启动;节点扩展字段单测 3/3 通过;后端日志无对应异常 | 已修复并核验 |
| BUG-006 | 流程定义未配置 autoPass 时,启动准备阶段发生空指针 | 高 | 流程启动 | 使用 Boolean.TRUE.equals 安全读取可选配置 | 本次流程成功启动;后端 49 个测试通过 | 已修复并核验 |
| BUG-007 | 同一节点退回后重新成为待办时,完整表单先按历史记录判断,错误显示为“已办理” | 中 | 退回后的当前待办展示 | 当前待办状态优先于历史节点记录;当前状态不读取上一轮办理快照 | 新增 ConstructionChangeFullForm.spec.ts 通过;真实页面待专项验证(Agent 可按改动范围自行在浏览器执行) | 已修复,待专项验证 |
| BUG-008 | 任务事件的 nodeCode 指向新生成的下一待办,而动态 engineeringChangeAction 属于刚完成的来源节点;监听器按事件节点解析会把 action 写错节点,并在下一节点产生不一致校验错误 | 高 | 施工单位正式办理、节点快照、后续流转 | 工作流事件补充来源节点元数据;工程变更监听器按来源节点优先解析并校验,普通节点仍保留严格节点一致性校验 | 新增 EngineeringChangeProcessEventListenerTest 1/1 通过;真实 I 类需出图长链路完成,节点记录和待办状态一致 | 已修复并核验 |
| LIMIT-001 | 外部档案系统未接入,主表 archive_status 仍为 pending | 中 | 外部档案同步状态 | 本次只验证模块内归档节点和资料留存,不伪造外部同步成功 | 流程实例为 end/finish,台账为“已完成”;外部档案同步仍待接口接入 | 范围边界 |
5. 验收结论
- 当前已覆盖的角色旅程:施工、监理、业主、设计四类发起页及设计页手动重新申报入口;不同项目、金额/类别、首个办理人和附件均已提交并回读至首个待办。
- 当前端到端结论:五条 V1 均已完成浏览器发起闭环,业务单据、流程实例、首个待办、办理人和附件均已回读。旧实例、旧表单数据和旧定义已在复测前清除;本次新增的 5 条复测记录作为当前证据保留。
- 正式完整路径结论:施工单位 I 类需出图长链路
2099050465062395906已在本批次真实推进至流程结束,最终金额 300、正式类别 I,活动待办为 0,节点业务记录包含并行审核、需出图、最终核价和归档节点;外部档案archiveStatus=pending是未接入系统的范围边界。 - 未覆盖及原因:五条流程后续节点的完整代办、II/III/IV 类完整路径、系统设备公司分支、草稿/退回/权限负向场景、流程图视觉专项和外部档案同步仍待专项测试;后续节点需要对应办理人员账号或正式验收人员参与。
- 已知限制与后续版本:上报集团/主管部门节点本次只做流程节点留痕,不做外部系统集成;
archive_status=pending表示外部档案同步未接入,不影响本次流程实例结束。 - 验收结论:五条 V1 的发起闭环和施工单位 I 类需出图代表性正式长链路通过开发验证;II/III/IV 类、其他发起单位和退回等扩展分支仍待专项验收。
- V1 基线结论:施工、监理、业主、设计、设计重新申报五条流程定义均已发布且启用;设计重新申报由设计单位页面手动发起,不依赖普通设计单位工程变更实例。
- 业务确认人及日期:待业主确认。
7. 2026-09-13~2026-09-14 全模块 E2E 批次同步
本批次先通过管理员真实页面打开施工、监理、业主、设计和统计五个实际入口,并执行空表暂存边界:后端返回“工程节点不能为空”,没有生成业务记录。随后保留并编辑 E2E变更验证工程-20260913 草稿,继续核对金额、类别、参建单位、附件和首个办理人。为验证真正的业务主链,再补齐施工单位正式草稿的施工/设计/监理单位和变更范围,提交 2099050465062395906,由测试员按真实待办逐节点办理至归档。
| 验证项 | 结果 | 证据与边界 |
|---|---|---|
| 五类入口可达性 | 通过 | 实际菜单路由均可打开;页面无 404 |
| 空表暂存校验 | 通过 | 浏览器触发真实接口校验,提示工程节点不能为空且无记录落库 |
| 金额分类边界 | 通过 | EngineeringChangeRulesTest 覆盖 300、100、50、49.99 及正负边界;本批次业务模块回归无失败 |
| 有效草稿与编辑回读 | 通过 | 测试草稿的工程节点、项目名称、分部工程、图号、金额、工期、预计类别、归属单位、说明和首个办理人均完成保存/回读;预计类别仅作录入参考,正式类别仍由估价流程判定 |
| 附件与权限 | 通过(代表链路) | 施工单位正式链路沿用保留测试附件和工程节点范围;测试员具备当前工程范围和对应菜单/按钮权限,节点待办均可读取并办理;等价角色越权仍待专项 |
| 业务全流程 | 通过(施工单位 I 类需出图) | 2099050465062395906 以 engineering_change_construction 实例 2099211161267961857 完成项目经理、专业/总监/分公司、部门并行审核、专题会、出图、最终核价、下达和归档等节点;最终正式类别 I、最终金额 300、currentTaskId=null、流程 finish,外部 archiveStatus=pending |
| 真实异常修复回归 | 通过(已修复) | 首次普通节点办理复现“节点办理信息与当前流程节点不一致”;定位为 task event 使用下一节点而 action 属于来源节点;修复后重试成功并继续完成全链路;专题会请求同时补齐顶层 needsDrawing=1,与真实表单契约一致 |
| 节点/金额/出图分支 | 通过(本代表路径) | company_special_meeting 记录 needsDrawing=1;估价/最终核价金额为 300 万元,正式类别和最终类别均为 I;四部门并行分支汇聚后继续出图和归档 |
设计/验收待确认项保持原记录:退回重办、系统设备公司分支、II/III/IV 类完整路径、负向权限、流程图视觉及外部档案同步。草稿重新打开时首个办理人需按提交要求再次选择,是否应在草稿编辑态回显属于交互设计待确认项;工程变更流程核心任务接口仍存在统一显式权限门禁不足的设计审计项,不能以页面隐藏按钮替代后端结论。外部档案未接入,因此业务归档节点完成不等于档案中心同步完成。
8. 2026-09-17 原施工图号选填调整批次
本次将原施工图号从正式提交必填放宽为选填:后端移除 EngineeringChangeBo 的 @NotBlank 与 validateSubmit 拼接校验中的该字段,施工、监理、业主、设计四个发起页移除前端必填规则。数据库 original_drawing_no 本就可空,无 DDL 变更。
| 验证项 | 结果 | 证据与边界 |
|---|---|---|
| 后端提交校验回归 | 通过 | EngineeringChangeBoValidationTest 新增“原施工图号为空时无校验违规”用例;EngineeringChangeServiceImplTest 新增“施工单位提交允许原施工图号为空”用例;工程变更相关测试 9/9 通过(EngineeringChange*Test,均为本次执行) |
| 四端表单必填标记 | 通过 | 施工、监理、业主、设计四个发起页真实打开新增表单,原施工图号字段 is-required=false,无必填星号;其余必填字段标记保持不变 |
| 端到端提交链路 | 通过(施工单位代表链路) | 管理员在施工端真实页面新建并提交:原施工图号留空,其余字段按规则填写;新增接口 POST /business/engineering-change/construction、提交接口 POST /business/engineering-change/construction/submit 均 200,页面提示“提交成功” |
| 数据库回读 | 通过 | 新记录 2100504054699352066(编号 20260917163028716):original_drawing_no=null、approval_status=waiting、instance_id=2100504063041822721,其余字段与页面填写一致 |
| 前端自动化回归 | 通过 | ConstructionChangeFullForm.spec.ts、design/flowForm.spec.ts 共 5/5 通过;vue-tsc --noEmit 通过 |
未覆盖及边界:本次仅验证施工单位正式提交代表链路;监理、业主、设计三端只验证了表单必填标记,未逐一执行各端完整提交(各端沿用同一后端 validateSubmit 与相同规则结构,风险已收敛);前端格式检查对四个页面仍提示历史遗留格式问题(改动前后一致,非本次引入),未纳入本次修复范围。
9. 2026-09-18 运营节点显示口径批次
业务侧节点选择器改为默认隐藏 biz_status='2'(运营)节点并提供「显示运营」开关(默认关闭),隐藏时把运营节点的非运营下级提升到最近可见层级;开关只切换显示层,不构成拒绝,服务端不做运营状态判定(需求口径见需求分析 R-EC-023)。四类发起页的单位工程选择器与招投标监管共用 views/business/bidding/components/ProjectNodePicker.vue,本节页面回归在「施工单位工程变更·新增」入口执行;显示层组件共用的其余口径分别记录在各模块测试文档中。
| 验证项 | 结果 | 证据与边界 |
|---|---|---|
| 单位工程选择器默认隐藏运营 | 通过 | 真实页面打开「工程变更·新增」的单位工程选择器:默认根级不出现运营根节点,显示由运营根下提升的在建支线(4号线西延、5号线北延、江跳线二期、6号线东延、9号线一期新桥段、18号线北延)以及轨道交通7/15/17/19/24/26/27/28号线、市城铁路璧铜线、重庆东站共 10 个非运营根 |
| 「显示运营」开关 | 通过 | 开关位于选择器工具栏且默认关闭;打开后出现轨道交通环线、轨道交通1号线~18号线等运营根,可正常选择与提交 |
| 上提支线的可选边界 | 通过(既有节点类型规则) | 六条上提支线在 BIZ_PROJECT_NODE 中当前无下级,按既有限定 SITE 节点的规则仍作为容器、不可直接点选,与运营状态无关 |
| 前端类型检查 | 通过 | vue-tsc --noEmit 0 error |
| 前端全量测试 | 212 项通过、1 项失败 | 失败为 src/components/Process/FlowTimeline.spec.ts,属仓库存量问题,与本次显示层改动无关,未判为本次回归通过 |
| 文档检查 | 通过 | .agents/tools/verify.ps1(Docs)docs:check 0 issue |
未覆盖及边界:招标文件管理页「线路」(LINE)选择器的逐项点选未执行(见招投标监管测试文档);非超级管理员角色视角未验证;深色模式下开关观感未单独核对。本节只覆盖显示层口径,未改变后端权限、数据范围、工程节点类型校验和流程流转规则。
结论:验证通过(有限范围)——四类发起页共用选择器的“默认隐藏运营、可切换显示、不拒绝”已按上述入口和命令核对;未覆盖项不作已通过表述。
10. 2026-10-09 草稿办理人智能回显与外部归档指引
针对草稿重开/退回重办时首个办理人回显空白,以及终态归档缺乏业务指引的问题完成优化:
| 验证项 | 结果 | 证据与边界 |
|---|---|---|
| 外部综合档案对接指引 | 通过 | 施工、监理、业主变更表单统一补充明确提示:“外部综合档案系统对接中,单据终态审批后全套资料已在系统内留存;若需移交档案室,请至「工程文件管理」按规定办理人工归档” |
| 草稿重开/退回重提办理人回显 | 通过 | 在施工、监理、业主、设计台账引入 draftHandlerCache,并从历史节点记录解析 resolveFirstHandlerIds,使暂存重开和退回重办时能自动回填首节点办理人 |
| 全量单测与前端规范 | 通过 | npm run lint 0 error,全量测试 308/308 PASS |
11. 2026-10-14 受限授权发起人标段选择修复
用户反馈任民已获15号线土建01、02标全部工点授权,但新增施工单位工程变更时提示“没有可选的标段”。开发库经项目 MCP 只读核对:对应受限授权分别包含6个、5个当前有效工点组合。
根因在共享选择器调用 /business/engineering-tree/tree?maxLevel=bid 时,后端不加载工点/单位工程叶节点,却以 leafChildren.isEmpty() 删除非整线用户标段,造成合法受限授权标段全部消失。现改为受限授权按当前有效授权组合中的标段 ID 白名单筛选;未授权标段继续隐藏,整线授权逻辑及 site/unit 层级的组合校验不变。
| 验证项 | 实际结果 |
|---|---|
| 服务层回归 | EngineeringTreeServiceImplTest 2 项覆盖受限授权白名单与整线授权行为 |
| 真实开发库授权回读 | 任民15号线土建01标6个、土建02标5个有效授权组合;未修改授权数据 |
| 服务重启与入口冒烟 | 前后端重启后 /login 返回 HTTP 200;无登录态调用工程树接口返回业务码 401 |
| 任民登录后的标段验证 | 通过;真实页面显示15号线土建施工01、02标,选择01标后工点/单位工程均显示6项,选择02标后均显示5项;未提交业务单据或变更授权 |
本次仅恢复授权标段候选,不创建工程变更草稿或流程实例。业务验收仍为待验收。
受限标段下工点与单位工程加载、回显回归(2026-10-14)
用户继续反馈“选中了但是没有显示出来”。根因为 maxLevel=site/unit 在每个候选节点上分别查询工程数据权限,授权明细较多时接口耗时57~79秒并超过前端50秒请求超时;选择器原先使用 Promise.all,任一请求失败会同时清空工点和单位工程列表。修复为一次批量读取有效的 (lineId, bidId, siteId) 授权组合后在内存中过滤;前端两组候选分别维护加载和失败状态,单组失败不清空另一组,并允许重试。
| 验证项 | 实际结果 |
|---|---|
| 服务层回归 | EngineeringTreeServiceImplTest 4/4 通过;覆盖站点及单位工程只显示授权组合,且不再逐候选调用权限查询 |
| 任民真实页面与真实授权 | 选择15号线土建施工01标后显示6个工点、6个单位工程;切换02标后显示5个工点、5个单位工程,与 DM8 MCP 只读回读的有效授权组合数一致 |
| 选择确认与表单回显 | 在未保存的施工单位工程变更表单中选择02标的“金童路站”及对应“金童路站 土建综合工程”,确认后所属工程字段显示完整线路/标段/工点/单位工程路径;随后取消表单,台账无新增记录 |
| 前后端运行与静态检查 | 按项目开发服务流程重启前后端;/login 可访问。vue-tsc --noEmit、目标组件 OxLint、格式检查及定向 Maven 测试通过 |
本轮未暂存、提交或发起审批,也未修改任民授权。页面技术验证通过,业务验收仍为待验收。
2026-10-15 任民授权范围四类发起端回归
| 发起端 | 授权节点选择与回显 | 结果 |
|---|---|---|
| 施工单位 | 15号线土建施工01标“九曲河东站”、02标“金童路站”;27号线授权回归测试标段“璧山站”及其土建综合工程 | 均能选择,所属工程完整回显线路/标段/工点/单位工程路径 |
| 监理单位 | 27号线“璧山站”及“璧山站 土建综合工程” | 选择、确认和路径回显通过 |
| 业主单位 | 27号线“璧山站”及“璧山站 土建综合工程” | 选择、确认和路径回显通过 |
| 设计单位 | 15号线土建施工01标“九曲河东站”及其土建综合工程 | 候选显示6个授权工点/单位工程,选择确认后完整路径回显 |
四类表单共用 ProjectNodePicker。本轮任民登录页面实测中,首次打开及切换标段后的候选列表会短暂处于加载状态;等待候选返回后可正常选择,未复现“授权节点无权限/选中不显示”。各表单均取消退出,台账仍无本轮新增记录;未改授权、未暂存、未提交审批。质量管理、工程手续、建渣、运营对接及BIM的对应工程范围回归见工程基础授权下游复测。
2026-10-15 工程变更候选首载性能复测
在同一任民真实会话中,从标段点击开始计时,直至工点与单位工程候选完整显示:15号线土建施工01标为 1.41 秒(6+6 项),02标为 1.40 秒(5+5 项),27号线授权回归测试标段为 1.21 秒(璧山站及对应单位工程)。页面显示的候选均符合保存的工程授权,四类发起端共用该选择器。本轮只读取候选,未确认选择、暂存或提交;更广的下游范围回归见工程基础授权下游复测。
12. 2026-11-04 综合统计页上线批次
综合统计页从占位页转正:新增 GET /business/engineering-change/statistics/overview 聚合接口(权限 engineeringChange:statistics:list,空条件全量查询并复用台账工程数据权限过滤,Java 内存聚合),页面提供 6 张指标卡、类别/月度/发起单位/线路四张 echarts 图表与变更金额 TOP10 表。统计口径:已撤销/已作废单据不参与金额与分布统计;正式类别 finalClass 优先、无正式类别归“待定”;单笔图表金额审定优先、未定审按预计;月度按申请日期(空取创建时间)归近 12 个自然月。
| 验证项 | 实际结果 |
|---|---|
| 后端聚合单测 | EngineeringChangeServiceImplTest 5/5 通过(verify-backend-tests 入口,Evidence 退出码 0);覆盖状态计数、金额合计排除撤销作废、类别归并与排序、DESIGN_RESUBMIT 归并设计单位、近 12 月补零、线路次级金额排序、TOP10 排除撤销并按金额倒序 |
| 接口与页面数据一致性 | 开发库 5 条变更单(4 完成 1 待审核、均为 15 号线):页面指标卡显示总数 5、待审核 1、已完成 4、退回终止 0、审定 1,440.00 万元、预计 1,750.00 万元,与库内 4×360.00、5×350.00 一致;TOP10 表 5 行与台账数据逐行一致,未定审单据审定金额显示“-”、正式类别显示“待定” |
| 页面视觉与交互 | 1920×911 基准视口浏览器实测:KPI 卡/图表卡/表格布局完整,图表 tooltip、环形图中心总数、横向条形 TOP 正常;发现 flex 压缩导致 TOP 表不可见(scrollHeight 恒等于容器高)已修复为子项 flex: none;数值滚动动画由非法 useTransition 参数导致的归零问题已改为 rAF 实现 |
| 深色模式 | 整站深色下页面令牌取色正确,无白底黑字;echarts 轴色/分隔线随 isDark 重建,图表彩色系列可读 |
| 静态检查 | 受影响目录 OxLint 0 警告、oxfmt 通过、dark-mode.spec.ts 10/10 通过 |
遗留:统计页为只读展示,无导出与穿透跳转,暂无业务操作验收项;业务方视觉验收待开展。