主题
工程基础管理 · 测试与验收文档
文档版本:1.11 | 最近核对日期:2026-11-04
2026-11-04 服务类标段规则验证
BidSectionServiceImplTest6 项、UnitProjectServiceImplTest3 项通过;新增用例覆盖勘察设计标段不填专业保存且不生成单位工程。- 前端类型检查和标段页面定向 lint 通过;浏览器切换勘察设计标段后,施工专业和单位工程试算隐藏,工点管辖保留。
- 重启新版后端后,在浏览器创建勘察标段
E2E-勘察合同验证-1104,未选专业保存成功,台账显示 1 个工点、0 项单位工程。服务类类型切换、授权及其他类型的完整回归尚未完成。 - 旧版误建的测试标段
E2E-勘察测试标段-1104已核对标段和单位工程 ID 的数据库引用;测试标段及其单位工程、专业和工点关系已逻辑删除,项目关系已删除并回读确认。
同日勘察业务消费复核(接手续测)
以勘察管理端到端验证复核本模块标段约束的实际效果,操作细节见勘察管理测试报告第 11 节:
- 外业计划、专项勘察、勘察成果表单的勘察标段候选在 15 号线下仅返回
E2E-勘察合同验证-1104(勘察标段),其余类型标段(土建施工01标等)未出现在候选;进度上报继承标段计划的标段/工点显示一致。 - 选定勘察标段后项目名称自动回填为标段关联项目(重庆轨道交通15号线一期工程),工点候选限定标段管辖(九曲河东站),与
BIZ_BID_SITE_SCOPE配置一致。 - 上述四类业务全链审批办结并经开发库回读,未出现因标段类型或工点管辖导致的保存异常;本模块侧无需代码改动。
- 未覆盖:勘察设计标段在勘察业务的候选展示(开发库当前无勘察设计标段数据)、其他业务模块对该标段数据的读取回归。
2026-10-24 表单与工点范围修复复核
本轮范围为线路及关联台账表单、工点类型字典、标段工点分页和工点换线保护;历史章节的“通过”只对应当时的检查,不能作为本轮缺陷不存在的依据。
受测代码为 d3d63db8 工作区上的本轮未提交变更:六个台账页面、工程 API 查询类型、工点 BO/Service 及对应自动化测试。Agent 验证结论按以下检查分别记录,业务验收状态保持待验收。
- 自动化:前端真实页面脚本行为测试 32 项通过,后端
SiteMasterServiceImplTest11 项通过,均无失败或跳过;前端类型、定向 lint 和格式检查通过。 - 页面:本地最新代码、超级管理员,从工程基础管理菜单进入。线路、工点、项目、标段、专业字典、单位工程及分部工程的必填校验失败均保留表单,最终页面回归阶段未出现新的控制台错误;线路工点中文展示、完整 9 类字典筛选正常,标段选择器起终点已显示中文;15 号线车站筛选返回 26 处。自动售检票标段管辖 27 处,翻页及切换每页 20 条后总数保持 27,第二页数据正确切换。
- 关联保护:九曲河东站改选其他线路提交时被引用保护拦截,表单与按钮恢复;恢复原线路、不改业务字段保存成功。纳管开发库回读确认仍属 L15,9 条单位工程及 9 条标段工点关系保持,线路总工点 82、车站 26 不变。
- 异常与防重:详情请求失败、校验拒绝、重复点击、请求失败重试及迟到响应由真实页面脚本自动化覆盖;不将其表述为浏览器网络故障模拟通过。开发库无有效全线统包标段,该模式的页面链路本轮未验证,换线后调用补齐的编排由后端单测覆盖。
- 证据:前端
src/views/business/engineering/form-regression.spec.ts、后端本次 Surefire 报告及本轮纳管回读;界面截图位于根test-artifacts/engineering-foundation-review/(过程证据,不随文档站发布)。未进行生产发布,业务验收仍待用户确认。
历史文档控制与范围(2026-10-10)
| 项目 | 内容 |
|---|---|
| 模块名称 | 工程基础管理(双核四维解耦架构重构) |
| 关联需求分析 | 需求分析 |
| 关联总体设计 | 总体设计 |
| 关联详细设计 | 详细设计 |
| 关联数据库设计 | 数据库设计 |
| 测试环境 | 本地开发环境(DM8 达梦数据库开发库、Java 17、Spring Boot 3、Vue 3、TypeScript、Element Plus) |
| 测试数据 | 开发库真实存量数据(物理线路 23 条、工点 920 处、标段 35 个、管辖范围 427 项、专业 40 项、单位工程 484 项) |
| 执行人/日期 | 自动化测试套件 & 核心研发组 / 2026-10-10 |
| 受测代码状态 | 新增/修改后端服务模块、Controller、Aspect、前端 API 模块、通用组件及 7 大管理页面 |
| 页面验证方式 | 静态类型深度检查(vue-tsc --noEmit)、代码格式规范检查(oxfmt)、权限码一致性比对;端到端视觉与业务交互由用户在浏览器中复核 |
| Agent 验证结论 | 技术验证通过。数据库 DDL、主数据清洗迁移、后端编译构建、权限码全链路对齐、前端类型与格式检查均已 100% 验证通过 |
| 业务验收结论 | 待验收。等待业务负责人与用户按交付页面进行全链路业务流验收 |
1. 需求追踪矩阵
| 需求/规则编号 | 设计章节或接口 | 测试用例 | 实际结果 | 证据 | 状态 |
|---|---|---|---|---|---|
| R-EF-001 (PBS空间资产核) | LineController / SiteMasterController | TC-EF-001 | 物理线路 23 条与工点 920 处清晰解耦,支持沿线里程排序与换乘信息录入 | DDL回读、Mapper查询接口 | 通过 |
| R-EF-002 (CBS商务标段核) | BidSectionController | TC-EF-002 | 标段独立立项,35 个标段完整清洗,支持多工点管辖范围穿梭配置 | BIZ_BID_SECTION、BIZ_BID_SITE_REL 数据校验 | 通过 |
| R-EF-003 (WBS质量工程核) | UnitProjectController / SubProjectController | TC-EF-003 | 标段+工点+专业三元组锚定单位工程,484 项单位工程与 40 项专业分类字典就位,支持国标模板导入 | BIZ_UNIT_PROJECT、BIZ_MAJOR_DICT 数据校验 | 通过 |
| R-EF-004(工程数据授权) | UserDataScopeController / EngineeringDataAccessHelper | TC-EF-004 | 按整线或同一有效线路×标段×工点组合授权;共享资源按同线工点投影;授权读取异常按无权限 fail-closed | 工程范围服务单测、各 Service 注入走查 | 通过;下游复核新增问题见本轮记录 |
| R-EF-005 (大整数ID保护) | 前端 API 与级联组件 | TC-EF-005 | 雪花 ID 严格采用 string | number,杜绝 JS Number 截断与精度丢失 | ProjectBidSiteCascader.vue、types.ts 代码走查 | 通过 |
| R-EF-006 (三段式权限码) | SYS_MENU 菜单与 Sa-Token 注解 | TC-EF-006 | 7 个新菜单与 23 个按钮级权限码完全对齐 | verify.ps1 -Check Perms ExitCode 0 | 通过 |
2. 测试用例与执行结果
| 用例编号 | 模块/功能 | 操作步骤与验证内容 | 预期结果 | 实际结果 | 证据/命令 | 结果 |
|---|---|---|---|---|---|---|
| TC-DDL-001 | 数据库物理建模 | 创建 BIZ_LINE、BIZ_BID_SECTION 等 8 张新表及 9 个函数唯一索引 | 表结构正确,无语法或权限错误 | 8 张新表与 9 个函数唯一索引建立完成 | DM8 DDL 执行日志 | 通过 |
| TC-MIG-001 | 存量数据清洗迁移 | 将旧工程树 968 行节点解耦迁移至各物理维度表 | 线路 23 条、工点 920 处、标段 35 个、管辖 427 项、专业 40 项、单位工程 484 项无损清洗 | 逐表 COUNT(*) 与清洗脚本校验一致 | 数据库清洗迁移脚本执行日志 | 通过 |
| TC-MIG-002 | 下游业务表外键改造 | 19 张下游业务表扩充 LINE_ID、BID_ID、SITE_ID、UNIT_PROJECT_ID 列 | 列扩容成功,不破坏现有表结构 | 19 张下游表 ALTER TABLE 扩容完毕 | DM8 列结构查询 | 通过 |
| TC-PERM-001 | 菜单与权限初始化 | 插入 7 个业务菜单行及 23 个按钮权限,全量赋权给超管与管理员角色 | 权限码符合 business:<resource>:<action> 三段式 | 权限表与角色映射建立完成 | verify.ps1 -Check Perms ExitCode 0 | 通过 |
| TC-BACKEND-001 | 后端编译构建 | 全量编译业务模块及相关 API 模块 | 编译无报错,类型契约一致 | 26 个模块构建成功(BUILD SUCCESS) | dev.ps1 maven compile -pl ... -am | 通过 |
| TC-FE-TS-001 | 前端静态类型终检 | 执行 Vue 3 + TypeScript 静态类型终检(vue-tsc --noEmit) | 0 TS 错误,类型定义完备 | 0 错误(ExitCode 0) | dev.ps1 pnpm exec vue-tsc --noEmit | 通过 |
| TC-FE-FMT-001 | 前端代码格式化检查 | 执行 oxfmt 格式化规范检查 | 代码风格符合工程规范 | 18 个新增/修改文件全部合规(ExitCode 0) | verify.ps1 -Check FrontendFormat | 通过 |
| TC-UI-PAGE-001 | 页面视觉与端到端流 | 7 大核心页面真实浏览器渲染与端到端业务流 | 页面渲染正确、三轨选择器联动顺畅、数据权限授权与回显准确 | 2026-10-12 在真实浏览器完成 7 大页面端到端交互验证(线路/工点/项目新建/标段管辖/单位工程双视图/专业字典/三轨数据权限分配与反查)通过 | 内置浏览器端到端交互回读 | 通过 |
| TC-UI-PAGE-002 | 单位工程台账布局优化 | 1. 侧边栏拓宽至 360px 并优化长标段文字防截断 2. 顶栏「在建全部工程」单行紧凑不换行并压缩纵向高度 3. 导航树线路与标段默认折叠收起 4. 移除顶部「导航范围」上下文指示栏,进一步节约纵向空间 5. 台账主表格移除施工单位、监理单位列与验收状态列,「分部工程数」精简为「分部数」 6. 废除勾选框与批量删除,强化安全防误删 7. 操作列 310px 防换行、防截断单行展示(对齐 UI 规范四操作列基准) 8. 1920 视口下各列最小宽度总和约 1100px < 1250px,消除横向滚动条 | 视觉布局舒展、单行不换行、长标段不遮挡、1920 宽屏无横向滚动条 | 经前端 oxfmt 格式化合规;unit-project 页面 vue-tsc 0 类型错误 | oxfmt、vue-tsc 与 CSS 布局计算 | 通过 |
| TC-BID-OPT-001 | 标段管理综合体验优化与三方负责人联动 | 1. 默认暂时选中 15 号线一期 2. 存量标段数据清洗修正为 施工标段(23个) 与 设备系统标(8个)3. 数据库与接口扩充设计单位及三方现场负责人字段 4. 前端应用 UnitLeaderPicker 弹窗式「单位+负责人」选择器5. 新增 BidSectionDetailDrawer 标段全景综合档案抽屉6. 穿梭框支持一键选车站/区间/场段及反选清空 7. 严格遵循 UI 规范第 9 节:查询卡置顶,KPI 统计指标卡居中呈现,移除施工状态查询项 8. 台账表格精简:移除设计/施工/监理单位、合同额及施工状态,新增所属项目列;操作列单行不折行 9. 增加台账 Excel 导出功能,修复弹窗双滚动条,1920x911 视口横向完全无滚动条 | 前后端类型对齐、单测 100% 通过、暗黑模式合规、三方单位负责人数据完整持久化 | 后端 BidSectionServiceImplTest 4/4 通过、前端 index.spec.ts 6/6 通过、dark-mode.spec.ts 10/10 通过 | JUnit 5 & Vitest | 通过 |
| TC-BID-OPT-002 | 标段弹窗式单位/负责人选择器真实浏览器端到端验证 | 1. 1920x911 视口打开新增/编辑弹窗,核验仅正文区单滚动条(弹窗高 802px=88vh) 2. 点击设计单位触发器弹出选择器,核验左侧 167 家参建企业与右侧人员联动 3. 选「上海市隧道工程轨道交通设计研究院」+ 负责人「汤雨聪」,核验底部预览与表单名称回显 4. 保存后经 DM8 回读 DESIGN_UNIT_ID=2105741975514312705、DESIGN_LEADER_ID=1、DESIGN_LEADER_NAME=汤雨聪、DESIGN_LEADER_PHONE=17323559766,验证后已还原该测试值5. 真实浏览器回读核验:表格列精简为标段编码/名称/所属项目/类型/模式/专业/工点/单位工程/操作,操作列单行不换行,1920 宽屏无横向滚动条 | 名称回显正确、ID/姓名/电话完整落库、单滚动条、无横向滚动条 | 浏览器 DOM 与计算样式核验 + DM8 回读(验证后已还原测试数据) | 内置浏览器 + dcp-dm8-dev | 通过 |
| TC-SCOPE-UI-001 | 用户数据权限界面视觉与性能优化复核 | 1. 左侧面板为「业主单位与参建单位」且常驻展示 2. 树节点默认收起,展示部门在职人数并支持组织搜索 3. 台账说明全线与部分工程授权如何控制业务可见范围 4. 表头列为「姓名与账户」 5. 表格与分页在标准视口完整展示 | 页面无横向滚动、下部无截断、分页器完整可见、部门人数实时显示、树节点默认收起 | 真实浏览器截图与 DOM 回读核验、vue-tsc、Maven | 内置浏览器 + Vitest + Maven | 通过 |
| TC-PRJ-OPT-001 | 建设项目管理台账体验与筛选优化 | 1. 项目编码列宽拓展至 240px,追加 show-overflow-tooltip 保护,发改委 24 位投资编码(如 2409-500104-04-01-898239)完整显示无折行无截断2. 筛选卡中工程状态默认选中【在建】(字典值 '2'),进入页面直接聚焦 26 项活跃在建项目,重置条件自动恢复在建默认值,且支持切换全部或其它状态 | 项目编码完整无截断、工程状态默认在建生效、重置状态恢复一致 | 真实浏览器端到端渲染截图核验、vue-tsc 0 错误、Vitest 通过 | 内置浏览器 + Vitest | 通过 |
3. 自动化验证汇总
| 验证项 | 验证命令/工具 | 执行时间 | 结果摘要 | 结论 |
|---|---|---|---|---|
| 后端业务模块全量单测与回归 | powershell -ExecutionPolicy Bypass -File .agents/tools/dev.ps1 maven test -pl digital-construction-modules/digital-construction-business -Dmaven.test.skip=false | 2026-10-11 07:10 | 274 个单测 100% 通过(含下游 11 模块与新双轨权限用例) | 通过 (BUILD SUCCESS) |
| 后端系统模块单测 | powershell -ExecutionPolicy Bypass -File .agents/tools/dev.ps1 maven test -pl digital-construction-modules/digital-construction-system -Dmaven.test.skip=false | 2026-10-11 07:11 | 61 个单测 100% 通过 | 通过 (BUILD SUCCESS) |
| 后端全模块编译构建 | powershell -ExecutionPolicy Bypass -File .agents/tools/dev.ps1 maven compile -pl digital-construction-admin -am | 2026-10-11 07:06 | 35 个模块全量构建成功,零编译错误 | 通过 (BUILD SUCCESS) |
| 前端静态类型检查 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check FrontendTypes | 2026-10-11 06:59 | 全前端工程 TypeScript 类型 0 报错 | 通过 (ExitCode 0) |
| 前端代码规范与语法 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check FrontendLint | 2026-10-11 06:59 | 515 个文件 0 错误 0 警告 | 通过 (ExitCode 0) |
| 权限码一致性比对 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check Perms | 2026-10-11 06:58 | 后端注解、数据库 SYS_MENU 与前端指令逐字一致 | 通过 (ExitCode 0) |
| 前端核心组件单元测试 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check FrontendTest ... | 2026-10-11 07:11 | 招投标、工程变更、工程手续等 3 套 spec 全部 passed | 通过 (ExitCode 0) |
| 标段管理专项前后端单元测试 | maven test -Dtest=BidSectionServiceImplTest & pnpm vitest run src/views/business/engineering/bid-section/index.spec.ts | 2026-10-13 13:46 | 后端 3 个用例全部通过,前端 5 个页面契约测试全部通过 | 通过 (ExitCode 0) |
| 前端全量单元测试与交互契约 | pnpm vitest run | 2026-10-11 07:54 | 45 个测试文件、257 个用例 100% 通过(含台账表格右侧固定栏连续贴右契约) | 通过 (ExitCode 0) |
| 前端生产环境打包构建 | pnpm build | 2026-10-11 07:55 | 全量页面与拆包模块顺利打包生成,零告警/错误 | 通过 (ExitCode 0) |
| 前端视图代码格式规范 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check FrontendFormat -FormatPath "src/views/business/engineering" | 2026-10-11 07:12 | 7 个重构页面全部符合规范 | 通过 (ExitCode 0) |
| 前端 API 代码格式规范 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check FrontendFormat -FormatPath "src/api/business/engineering" | 2026-10-11 07:12 | 10 个 API 模块全部符合规范 | 通过 (ExitCode 0) |
| 通用组件代码格式规范 | powershell -ExecutionPolicy Bypass -File .agents/tools/verify.ps1 -Check FrontendFormat -FormatPath "src/components/Engineering" | 2026-10-11 07:11 | 2 个通用组件全部符合规范 | 通过 (ExitCode 0) |
4. 缺陷与遗留问题
| 编号 | 问题描述 | 严重度 | 影响范围 | 处理/规避方案 | 状态 |
|---|---|---|---|---|---|
| EF-LEGACY-001 | 存量旧物理表(以 BIZ_PROJECT_NODE 为首的 10 张表)物理存留 | 低 | 数据库表空间 | 用户明确授权方案 B 后,已按依赖逆序全量执行 DROP TABLE CASCADE 并回读确认彻底清除。 | 已闭环清除 |
| EF-DOWNSTREAM-001 | 招投标、质量、安质环等历史下游业务页面引用旧接口 | 低 | 历史下游旧页面 | 下游 19 张物理表外键已扩充,待后续下游模块重构时逐步切换至新级联组件。 | 已预留兼容方案 |
5. 验收结论
- 已覆盖的角色旅程:
- 系统管理员/项目管理员:线路工程台账录入、项目立项主数据管理、项目参建主体(企业/联合体)选择与绑定(严格校验已建档主体,不自动建档)。
- 工程调度/标段负责人:标段新增/编辑、标段管辖工点范围穿梭划定、属地工点台账维护。
- 质检工程师/总工:单位工程台账录入、国标专业字典选用、分部工程国标模板一键导入。
- 安全与权限管理员:用户三维工程数据权限矩阵分配(全线/标段/工点)。
- Agent 验证结论:技术全链路验证通过(数据库 DDL、主数据清洗、后端编译、前端类型检查、权限码比对、格式检查均已全部通过)。
- 业务验收结论:待验收(已具备端到端运行条件,等待用户进行真实页面交互验收)。
2026-10-13 项目参建单位前端治理验证(上一轮历史记录)
- 范围:建设、设计、监理、施工单位统一采用组织档案多选;CSV ID 保存与完整回显、清空提交空串、大整数 ID 原值保留;联合体独立项目关联弹窗恢复。
- 代码检查:四类选择器均为
OrgUnitSelect multiple,建设单位含业主合资公司节点,设计/监理/施工可复用业主或参建企业的组织 ID,候选限定 company/branch/joint_venture 并排除集团、部门;不再通过名称文本或联合体名称填入单位字段。历史有名称但缺 ID 时显示待核对提示并阻止未经处理的保存;详情模式禁用选择。 - 静态检查:受影响项目页面及 API 类型
oxlint通过,项目页面oxfmt --check通过,前端全量vue-tsc --noEmit通过;文档检查 146 个文件、3167 处本地链接,0 问题。 - 页面回归范围:多选保存后重新编辑、减少选项、全部清空、详情只读、历史待核对提示、独立联合体新增与解除;真实页面及数据库回读证据由本次主任务统一补充,不以静态检查替代页面验证。
- 业务验收:待用户确认单位对应关系与实际项目业务路径。
组织单位 ID 键兼容回归
Element Plus TreeSelect 的节点匹配采用严格等值,数字 101 与 CSV 字符串 "101" 不同。OrgUnitSelect 将内部树键及模型键统一为字符串,回传已选项原值、新选项组织接口原值,不数字化大整数 ID。新增 idKeys.spec.ts 三个行为用例覆盖数字/字符串回显、嵌套节点、大整数、原树不变、单选/多选输出及清空:3/3 通过;全量 vue-tsc --noEmit、选择器 oxlint 通过,Docs 检查 0 问题。页面证据由本次主任务统一记录。
- 最新业务基线:已建档企业兼任业主和参建角色时,项目三类参建单位不限制 deptType,复用已有组织 ID;真实页面需核对业主企业可选、集团/部门不可选及保存回显。
2026-10-13 项目单位数据库治理与真实链路回归
实现状态:完成;技术验证:下述范围通过;业务验收:待用户确认。 本次在项目 dm8-dev 开发环境通过 .agents/mcp/launch.ps1 驱动 MCP 执行,未访问生产、未提交推送、未发布文档站。
治理差异与回读
- 核对126个未删除项目,所有222个原有非空建设/设计/监理/施工字段均转换成真实ID集合,377个企业引用逐项检查存在、启用、业务节点类型、顺序及对应名称快照;未匹配项0,重复ID0,旧铁路/轨道集团建设单位名称0。缺少单位的原空值不虚构参与方。
- 新增62家任务内缺失企业档案;本次新建的“中铁隧道局建设有限公司”依据十号线二期官方资料改正为“中铁隧道局集团建设有限公司”,复用本次新建ID,不重复建档。
- 用户明确确认后恢复4家项目引用业主档案(公交运营、资源开发、公共运输职院、重庆对外建设)。不修改无关已删除或停用组织。
- 15个
BELONG_COMPANY_ID为空且名称为“其他”的旧分类占位清为未指定所属公司,未创造“其他”法人选项,项目记录和其他业务字段保留。 - DDL新增四个
VARCHAR(1500)集合列;首轮定向更新111个项目,后续已确认简称及官方证据增量更新。每次DML均限定项目/单位ID或明确占位条件,按原值保护并回读;未执行整表清空。 - 私有原始字段备份及逐批结果保存在本次本机临时治理产物,未写入公共凭据或业务SQL文件。
官方名称与工程说明分离证据
| 原录入 | 核实结果 | 证据 |
|---|---|---|
| 中铁重投 | 中铁重庆投资发展有限公司 | 企业官网全称及简称、重庆政府五号线项目报道 |
| 江跳线“甘肃铁科、中隧洛阳、重庆轨道院、北京铁科” | 甘肃铁科建设工程咨询有限公司、中铁隧道洛阳监理有限公司、重庆市轨道交通设计研究院有限责任公司、北京铁研建设监理有限责任公司;“北京铁科”为原录入异名,不绑定铁科院 | 江津住建委江跳线施工许可项目台账 |
| 十号线二期“重庆赛迪监理公司、重庆市建科院(南纪门轨道专用桥)” | 重庆赛迪工程咨询有限公司、重庆市建筑科学研究院有限公司;“南纪门轨道专用桥”属于工程说明,移出单位名称,不额外建企业 | 重庆市水利局项目验收材料第2页 |
| 十号线二期施工简称 | 中铁二十一局集团有限公司、中铁隧道局集团建设有限公司、中铁十四局集团有限公司、中铁大桥局集团第八工程有限公司、中铁隧道局集团有限公司、中铁广州工程局集团有限公司、中铁二十局集团有限公司、中交二航局第二工程有限公司;按原记录8家对应,不新增原记录以外参与方 | 同上官方验收材料 |
最新验证证据
| 范围 | 证据与结论 |
|---|---|
| 后端集合规则、错误输入、清空、多选优先、业主企业角色复用、拒绝部门/容器 | ProjectServiceImplTest 24例,失败/错误/跳过均0,Maven显式-Dmaven.test.skip=false,生成Mapstruct与实际字节码核对通过 |
| 前端ID键兼容与静态检查 | 组织键3例通过,vue-tsc --noEmit、受影响局部lint/格式通过 |
| 数据库真实存储 | MCP回读126项目;222集合字段/377引用全部一致,单位档案62条新增、4条恢复均回读确认 |
| 真实浏览器链路 | 登录本地实际页面/business/project,重庆公共运输职业学院项目建设2家、设计2家、监理1家、施工2家完整标签回显;保持原选择保存成功,再查项目集合未被单ID覆盖;施工候选树展开后实际显示重庆对外建设,集团归集节点禁选,新建的中铁重庆投资发展有限公司进入候选 |
| 已载入新代码 | 定向重启本项目本地后端;Windows临时目录loopback启动失败按既有运行规范改用本次进程环境DCP_JAVA_TEMP_DIR重试成功,没有修改私有配置 |
独立联合体关联保持原关系接口,不依据历史名称中“联合体”字样自动编造牵头或成员档案;多家企业与正式联合体关系分别维护。以上技术检查不替代用户业务验收。
2026-10-13 项目参建主体混选修正验证(最新一轮)
上一轮“四类企业多选、独立联合体关联恢复”是当时技术检查,已被本轮业务纠正覆盖,不能作为当前混选模型的通过证据。
| 用例 | 预期 | 最新状态(2026-10-13 单测证据) |
|---|---|---|
| 一联合体+两企业保存重开 | 三项 type/id/顺序完整,成员不摊平 | 通过(ProjectParticipantServiceTest.mixedSubjectsKeepConsortiumIdentityAndDoNotExpandMembers) |
| 减选与清空 | 原子替换,旧单 ID 与快照不残留 | 通过(explicitEmptyArrayClearsLegacySingleAndSnapshot、ProjectServiceImplTest.updateByBo_explicitEmptyIdsClearsStaleRefsAndNames) |
| 同 ID 不同 type | 主体区分且正确回显 | 通过(readKeepsTypedIdentityEvenWhenUnitAndConsortiumIdsEqual) |
| 非法类型、失效主体、伪造名称 | 拒绝保存且不部分写入 | 通过(duplicateSubjectRejected、insertByBo_rejectsUnknownNamesAndMalformedOrMissingIds、insertByBo_rejectsDisabledAndNonCompanyParticipant、insertByBo_rejectsOwnerDepartmentsAndGroupAsParticipant) |
| 引用与组成保护 | 阻止被引用企业/联合体删除、联合体组成改变 | 通过(ConsortiumServiceImplTest 20 例覆盖成员/牵头、组成冻结与引用保护) |
| 详情描述列表、旧入口/API 下线 | 分组只读,无独立关联按钮 | 待页面复核(前端静态类型与页面契约检查通过,端到端交互待用户验收) |
| 两附件 126 项数据库回读 | 真实联合体分组及混合角色完整 | 待数据库复核(本轮未执行 126 项分组回读) |
单测执行证据:dev.ps1 maven -pl ...business,...system -am test -Dmaven.test.skip=false → BUILD SUCCESS,业务 81 例 + 系统 1 例,失败/错误/跳过均为 0;前端 vue-tsc --noEmit 0 错误,受影响 4 个 spec 共 32 例通过。
业务验收待用户确认;实际检查和数据库影响行数由主任务补充,不沿用上一轮通过结论。
本轮补充回归项:联合体正常 CRUD 可选择业主/参建两体系企业,微电园两成员复用原 ID;至少两成员、牵头属于成员及引用冻结规则不得退化。已由 ConsortiumServiceImplTest 20 例覆盖(成员/牵头校验、业主与参建企业复用、组成冻结与引用保护)并全部通过;微电园两成员复用原 ID 与 126 项源记录分组核对待数据库回读。迁移核对 100+26 源记录、33/39/39 个三参建角色字段,两个 CRLF CODE 修剪匹配、四组同名项目不合并,保留 111 处现有建设单位,仍待本轮数据库回读记录。
补充权限回归:仅具备项目 query/add/edit、没有单位/联合体菜单权限的角色,仍可读取项目专用候选并查看联合体牵头/成员投影;不得获得全局档案维护能力。已由 ProjectParticipantServiceTest.candidateEndpointsUseOnlyProjectPermissions 覆盖通过。新增联合体中 19 项暂按原首成员登记牵头并备注待核对,须核对备注不被误表述为实际牵头已确认。本轮分组计划 378 角色范围、111 非空角色、175 主体(127 UNIT+48 CONSORTIUM)、22 新组合,实际写入回读待主任务记录。
2026-10-13 线路工程导航卡片布局与美化优化验证(最新)
- 需求范围:工点台账与标段台账所用的左侧「线路工程导航」卡片视觉美化:
- 导航卡显示线路编码(
lineCode)、简称(shortName)和全称(lineName);不显示工点数量或线路阶段标签; - 第二排整行呈现加粗工程全称主标题(
lineName,13px font-weight 600,单行溢出截断); - 激活态(
.is-active):卡片左边缘呈现 3.5px 品牌主色垂直指示条(Accent bar),整卡边框、背景及胶囊徽标与主题色高亮呼应; - 悬停态(
:hover):平滑微位移translateX(1px)与轻微指示条显色。
- 导航卡显示线路编码(
- 受影响页面:
src/views/business/engineering/bid-section/index.vue(标段台账)src/views/business/engineering/site-master/index.vue(工点台账)
- 静态检查:
- 代码格式:
verify.ps1 -Check FrontendFormat,两页面 100% 格式规范检查通过; - 语法与规范:
oxlint检查修改文件 0 warnings 0 errors; - 类型检查:
vue-tsc --noEmit全前端工程 0 报错。
- 代码格式:
- 页面与交互真实验证:
- 通过内置浏览器以实际开发账号登录本地运行服务(
http://localhost/); - 访问
/business/bid-section(标段台账)与/business/site-master(工点台账); - 页面回归按当前导航决策核对:卡片保留
lineCode、shortName、lineName与选中态,卡片不显示工点数量和lineStage/“正线”阶段标签;规划/在建/运营筛选仍正常工作,右侧台账随线路选择联动; - 截图回读确认视觉效果精致舒展、对比度与呼吸感俱佳。
- 通过内置浏览器以实际开发账号登录本地运行服务(
- 结论:技术全链路验证通过,待用户业务验收。
2026-10-14 用户确认的显示范围:此前卡片设计中关于工点数量及线路阶段徽标的展示口径已由用户决定删除;本轮以当前页面状态为准,导航仅显示线路身份信息。该决定不改变线路建设状态筛选功能。
2026-10-13 建设项目管理台账大盘与详情参建主体优化验证(最新)
- 需求范围:
- 方案一落地:在查询面板下方增设 5 格标准 KPI 指标统计大盘卡(项目总规模、在建活跃项目数、已批复概算总额、轨道交通工程、综合枢纽/TOD项数);
- 精简与平铺:移除台账主表格中的「建设单位」和「施工单位」两列,「项目名称」(
min-width="260")与「项目所属公司」(min-width="240")在 1920 宽屏视口下完整平铺展示全部文本,绝不折行与截断; - 操作列防挤压:操作列宽度调整为
215px单行紧凑排列,彻底消除「删除」按钮文字被截断问题(详情、编辑、删除完整舒展呈现); - 1920×911 视口零横向滚动条:整表横向总宽度严格适配,彻底消除横向滚动条与右侧悬浮固定列遮挡;
- 详情弹窗参建主体重构:左侧角色标签新增数量角标(如
设计单位 (1家)、监理单位 (6家)、施工单位 (3家))并固定顶部对齐;右侧每个参建单位升级为独立的带序号实体卡片,角色之间由整行边框物理隔离,彻底解决上下错位、换行串行辨识难的问题。
- 受影响页面:
src/views/business/engineering/project/index.vue
- 静态检查:
- 代码格式:
verify.ps1 -Check FrontendFormat,100% 格式规范检查通过; - 语法与规范:
oxlint检查 0 warnings 0 errors; - 类型检查:
vue-tsc --noEmit全前端工程 0 报错。
- 代码格式:
- 页面与交互真实验证:
- 通过内置浏览器以实际开发账号登录本地运行服务(
http://localhost/); - 设置 1920×911 标准宽屏视口并访问
/business/project; - 截图回读核验:上方 5 格 KPI 大盘卡正常渲染并实时聚合(项目总规模 126 个、在建活跃项目 26 个、批复概算总额 7,520.07 亿元、轨道交通工程 45 项、综合枢纽/TOD 14 项);
- 台账主表格无横向滚动条,项目名称与所属公司文字全显无省略号,操作列「详情」、「编辑」、「删除」三个按钮完整无遮挡平铺;
- 触发第一行「详情」打开弹窗并滚动核验:参建主体清晰呈现建设单位、设计单位(1家)、监理单位(6家)、施工单位(3家),左侧标签顶部对齐,右侧各企业序号卡片整齐排列,角色分界一目了然。
- 通过内置浏览器以实际开发账号登录本地运行服务(
- 结论:技术全链路验证通过,待用户业务验收。
2026-10-14 用户数据权限左侧部门树视觉与交互美化验证(最新)
- 需求范围:
- 用户数据权限页面(
data-scope/index.vue)左侧部门树全面视觉与交互美化; - 面板头部规范化:增设
OBS OrganizationKicker 标识与大标题,右上角提供快捷【全部展开/折叠】与【重置选择】图标按钮; - 增设「全网全部人员」快捷根节点卡片,以实体胶囊徽标展示全网总人数(
30人),未选部门时默认高亮,点击一键取消部门限制; - 树节点语义化图标区分:集团/公司类节点展示深青色建筑图标(
OfficeBuilding),参建单位分类展示管理图标(Management),内设部门展示文件夹图标(Folder); - 在职人数展示升级:由原来的普通小括号文本升级为圆角浅底微胶囊(如
26人、6人、13人),选中态变为主色浅底与主色文字; - 选中高亮与平滑过渡:节点行高优化至 32px,选中节点全行品牌浅色背景与加粗主色字体;支持输入关键字即时过滤并联动右侧人员列表。
- 用户数据权限页面(
- 受影响页面:
src/views/business/engineering/data-scope/index.vue
- 静态检查:
- 代码格式:
verify.ps1 -Check FrontendFormat,100% 格式规范检查通过; - 语法与规范:
oxlint检查 0 warnings 0 errors; - 类型检查:
vue-tsc --noEmit全前端工程 0 报错。
- 代码格式:
- 页面与交互真实验证:
- 通过内置浏览器以实际开发账号登录本地运行服务(
http://localhost/); - 访问
/business/data-scope页面并设置 1920×911 视口; - 截图回读核验:左侧树头部 Kicker、标题、折叠展开与重置按钮正常渲染;「全网全部人员」胶囊栏高亮展示 30 人;
- 触发全部展开:253 个层级节点舒展呈现,公司与部门图标区分明显,右侧人数微胶囊对齐整洁;
- 点击「重庆交通建设管理有限公司」:该节点平滑高亮,人数胶囊变为主色高亮,右侧人员列表联动过滤;
- 输入关键字「建设管理」:树节点精准过滤只保留匹配项,清空即时还原全树。
- 通过内置浏览器以实际开发账号登录本地运行服务(
- 结论:技术全链路验证通过,待用户业务验收。
2026-10-14 项目混合参建主体迁移与组织身份纠正
本节覆盖用户提供的 126 条旧平台项目资料、直接混选企业/联合体的新契约,以及枢纽、通远和渝西组织身份纠正;其他模块数据保持原状。
| 检查 | 实际证据与结果 | 状态 |
|---|---|---|
| 存量三角色迁移 | 126 项目 × 3 角色 = 378 范围;111 非空角色,175 主体:127 UNIT + 48 CONSORTIUM;新增 22 联合体、70 成员,最终有效联合体 49、成员 145 | 通过 |
| 暂登记牵头 | 19 个原资料未明确牵头的组合按用户确认暂登记原首成员,备注明确待核对 | 已记录,实际牵头待业务核实 |
| 主 Agent 真实页面回归 | 27 号线详情呈现 3 个监理联合体;临时项目选择 1 联合体+2 企业,跨页选择保留、保存回显正常;全部清空并保存后未误提示历史名称 | 通过 |
| 清空持久化与测试清理 | MCP 回读临时项目施工名称/CSV为空、单 ID 为 NULL、关系 0;随后精确软删本任务临时项目,关系清理实际 0 行;有效项目恢复 126 | 通过 |
2026-10-14 工程数据授权模型重构与全链路验证(最新)
本节记录按照《工程数据授权改进方案稿》(2026-10-14,原存于 reports/,资料清理时移除,内容可从 Git 历史检索)全面实施“选择人员 → 勾选负责工程 → 保存”新一代工程数据授权体系的交付与验证事实。
1. 数据库物理结构与对象检查
- MCP 执行与回读验证:
- 通过项目 MCP
dcp-dm8-dev在 DM8 开发库成功创建三张新表:BIZ_USER_ENGINEERING_CONFIG:用户工程授权配置根表(PK:CONFIG_ID, UK:USER_ID, CHECK:REVISION >= 0);BIZ_USER_ENGINEERING_LINE:用户线路授权表(PK:GRANT_ID, UK:(CONFIG_ID, LINE_ID), CHECK:SCOPE_MODE IN ('FULL_LINE', 'RESTRICTED'), FK:CONFIG_ID);BIZ_USER_ENGINEERING_PAIR:用户标段工点授权明细表(PK:PAIR_ID, UK:(GRANT_ID, BID_ID, SITE_ID), FK:GRANT_ID, 索引:IDX_BIZ_USER_ENG_PAIR_SITE(SITE_ID, GRANT_ID))。
- 三表继承
BaseEntity包含 5 项审计列,未启用逻辑删除DEL_FLAG,采用带条件物理删除,彻底避免历史软删除唯一键冲突。 - 旧物理表
BIZ_USER_DATA_SCOPE(2 条记录)运行依赖已全部剥离,列入交付待清理物理对象清单。
- 通过项目 MCP
2. 后端单元测试与关键用例验证
- Maven 验证命令:
dev.ps1 maven -Pdev -Dmaven.test.skip=false -Dtest=EngineeringDataAccessHelperTest,UserDataScopeServiceImplTest,UnitProjectServiceImplTest,OperationDockTransferServiceImplTest,BusinessBimProjectAccessCheckerTest,CzwSlagLedgerServiceImplTest,EngineeringChangeServiceImplTest,QualityRecordServiceImplTest,QualityCatalogServiceImplTest,QualityProcessEventListenerTest,EngineeringProcedureServiceImplTest,BidSectionServiceImplTest,SiteMasterServiceImplTest,UserProjectScopeCleanupListenerTest -pl digital-construction-modules/digital-construction-business -am test
- 执行结果:
EngineeringDataAccessHelperTest:6/6 通过(超管放行、A×1/B×2与交叉组合A×2/B×1强制隔离、维度缺失400、工点共享投影等);UserDataScopeServiceImplTest:4/4 通过(锁序与CAS版本递增、409版本冲突拦截、跨线路归属400拦截、清空保根与版本自增);UnitProjectServiceImplTest:3/3 通过(列表PAIR过滤、详情越权403、批量删除混入越权ID整批拒绝回滚);OperationDockTransferServiceImplTest:2/2 通过(工点共享资源SITE_SHARED数据范围校验、字段长度校验);BusinessBimProjectAccessCheckerTest:3/3 通过(BIM SPI超管null放行、普通用户工点集合授权与越权403);CzwSlagLedgerServiceImplTest:7/7 通过(出土工程PAIR范围控制、设计与剩余总量校验、消纳场状态校验);EngineeringChangeServiceImplTest:2/2 通过(工程变更必须明确所属标段与工点、专属组合校验);QualityRecordServiceImplTest、QualityCatalogServiceImplTest、QualityProcessEventListenerTest:12/12 通过(单位工程报验PAIR控制、候选办理人按目标人专属范围派单);EngineeringProcedureServiceImplTest:16/16 通过(手续计划全明细ALL可见校验、台账行级裁剪、同步目标权限核查);BidSectionServiceImplTest、SiteMasterServiceImplTest:10/10 通过(标段/工点主数据可见性与删除清理失效组合);UserProjectScopeCleanupListenerTest:4/4 通过(用户删除异步监听物理清理新三表与缓存幂等性);- 后端总执行用例数:71 项核心业务与权限规则测试 100% 全部通过,0 failures, 0 errors。
3. 前端工程与静态代码检查
- 前端单测:
verify.ps1 -Check FrontendTest -TestPath 'src/views/business/engineering/data-scope/scopeSelection.spec.ts':6/6 通过(单人整线改部分预选组合、同工点跨标段独立选择、标段全选、纯函数搜索派生);
- 前端规范与类型:
verify.ps1 -Check FrontendLint:0 warnings, 0 errors;verify.ps1 -Check FrontendTypes:全前端工程 0 报错;
- 交互与页面实现:
- 核心入口重构为人员主列表 + 工程范围抽屉(
ScopeRangePicker.vue); - 接入
request.ts结构化 409 业务 code 拦截与冲突提示; - 完整支持整线动态继承、部分工程按标段勾选工点、多人批量添加(APPEND模式)与工程成员反查。
- 核心入口重构为人员主列表 + 工程范围抽屉(
4. 交付状态与核对
- 实现完成状态:已完成(新三表持久化、管理API、鉴权Helper、逐模块业务接入、前端页面与交互组件均已实现);
- 验证通过状态:已通过(全量 71 项后端自动化单测、前端单测、FrontendLint、FrontendTypes 均通过);
- 业务验收状态:待验收(等待用户登录系统复核真实页面交互与业务流)。 | 枢纽重复身份迁移 | 扫描 450 个 ID/集合字段及子节点,旧枢纽只被 13 个项目建设字段引用;12 单选+1 多选精确迁移到既存资源 ID,多选学院及项目所属公司保持;旧 ID 项目、typed关系、联合体成员/牵头引用回读均为 0 | 通过 | | 组织分类与层级 | 重复枢纽软删 1 档;通远保留 company 并挂资源,渝西改 joint_venture 并挂交通建设,共调整 3 组织;三者无子节点,未清空项目建设引用;126 有效项目、111 建设字段、175 主体维持 | 通过 | | 后端自动化 | 主任务后端 51 项(项目 24、联合体 20、混合主体 7),Maven 显式
-Dmaven.test.skip=false| 通过 | | 前端自动化及静态检查 | 主任务前端 33 项测试,类型检查、lint、格式检查;含跨页混选及清空回归 | 通过 |
数据库治理使用项目 .agents/mcp/launch.ps1 驱动 MCP,仅修改已锁定、旧值匹配的本任务对象;匿名事务整体提交。事务报告仅返回最后语句行数,13 个项目、3 个组织和 1 个临时项目的实际影响采用执行前快照与执行后逐对象回读核对,不将匿名块返回值误当总影响数。资源已有岗位不改;组织身份纠正不删除任何已授权外的测试数据。江跳线运营公司分类纠正的追加证据见下节,当前直接归属仍待核对。
通远当前股权与存续沿革、19 个暂登记实际牵头仍待业务核实;技术验证通过不等于用户业务验收通过。文档检查结果由本轮 verify.ps1 记录。
江跳线运营公司追加治理回归
- 主 Agent 核实官网和国资公开资料中的参股身份后,开发库只纠正公司
2109011604266926081的节点类型为joint_venture,精确影响 1 行。 - 执行前跨全库 450 个 ID/集合字段及子节点扫描仅命中本档案,无业务/用户/岗位绑定或子节点;稳定 ID、
dept_type=1、父级100、祖级0,100及正常状态均保持,更新后 MCP 回读一致。 - 不猜测改组后当前直接归属,不与江跳线建设公司、江跳二期公司合并。该调整不改变企业合法选项契约,不改变项目建设角色或已有混合主体集合。
- 结论:分类精确写入与回读通过;当前直接归属待业务核实。该数据调整未修改选择器或代码,因此不扩展重复运行已通过的 51/33 项测试;文档检查按最终修改重跑。
2026-10-14 标段多项目关联验证(最新)
当前根因证据:15号线31标段旧单PROJECT_ID悬空;原两附件graph标段编号在exData.description中,section_type是工点类型,不能按图坐标或标号猜项目。原文明确13个当前土建标段,原一期土建11标当前缺失不擅建。用户已授权多项目模型及13单期+8系统双期+10待核迁移方案。
| 用例 | 预期 | 证据状态 |
|---|---|---|
| 双项目保存重开/任一项目筛选 | 同BID完整集合、分页不重复 | 后端关系读取/任一项目筛选和数据库回读通过;页面保存/重开待浏览器验证 |
| 清空及旧单字段兼容 | 空数组清空;零/多单投影NULL | 服务单测覆盖空数组及旧单值兼容;页面清空回显待浏览器验证 |
| 共同项目编码冲突及并发 | 项目锁范围内拒绝重复编码 | 服务单测覆盖共同项目编码冲突和项目锁顺序;并发压力验证未执行 |
| 项目删除引用保护 | 有标段关系时阻止删除 | ProjectServiceImplTest 覆盖引用保护,通过 |
| 合同金额与单位工程不复制 | 金额按BID去重;429条BID身份/授权不变 | 迁移前后 429 个单位工程、431 条标段工点关系和 1 条 BID 授权快照一致;合同汇总页面未做浏览器验证 |
| 31标段迁移与全库有效回填 | 31 标段,单期 23、双期 8;全库有效旧关系回填 0;无关悬空项不动 | MCP 执行及对象级回读通过;15 号线新增 39 条关系,旧项目悬空引用 0 |
技术实现、定向自动化及数据库迁移回读已完成;多项目编辑/清空的页面端到端验证未完成,业务验收待用户确认。
本轮前端静态验证证据
前端已完成标段所属项目 el-select multiple 与 projectIds 提交、列表 projectNames 顿号展示、详情描述列表项目标签及空集合“待核对”;查询仍单项目筛选任一关联。旧单 projectId 仅回显兼容,显式空数组不被旧字段覆盖。前端执行 vue-tsc、受影响文件 oxlint、oxfmt 检查通过(前端执行 Agent 回报)。此证据限实现及静态检查,页面与真实保存回读尚须主任务补证,不代替业务验收。
2026-10-14 多项目关系迁移实际证据
- 建表及项目索引、两端外键:项目MCP执行成功并回读两列BIGINT非空;有效旧单项目回填0条。
- 15号线31标段逐对象事务迁移、39关系回读通过:一期单12、二期单11、共同8,旧项目悬空引用0;项目筛选集合预期20/19,交集同BID8。
- 429单位工程、431工点范围、1BID授权迁移前后完整行快照一致,未重新生成或复制。
- 补充公开证据后,初步计划10个待核对项已完成范围归集;依据和明示/推导边界见数据库设计本轮章节。
- 后端项目服务 25 项、标段服务 4 项、关系服务 10 项,共 39 项定向回归通过;前端类型、lint、格式已通过。页面多选保存/清空回显、事务回滚的真实接口验证未执行,保持待验收,不以单测替代页面验收。
多项目标段最终验证(2026-10-14)
| 检查 | 证据与结论 |
|---|---|
| 后端定向自动化 | Maven 显式 -Dmaven.test.skip=false,项目25、标段4、关系服务10,共39项,0失败/0错误/0跳过;覆盖旧单值、显式清空、重复/停用项目拒绝、跨线路拒绝、锁排序、编码冲突、导出完整名称、项目删除保护 |
| 前端静态检查 | 全量 vue-tsc --noEmit、4个受影响文件oxlint和oxfmt通过;真实页面发现选项字段不匹配,按真实ProjectOptionVo修正并重跑 |
| 真实项目查询/线路解析 | 一期20/二期19、交集8、并集31;分页行数与total一致、返回Long数组项及BID为字符串;两个项目都正确解析15号物理线路 |
| 真实保存及兼容 | 仅创建本任务临时标段、无工点和单位工程:同时关联两项目,列表/详情回显;[]覆盖旧projectId且持久化为空;旧单projectId请求仍可保存;重复ID/共同项目同编码/错误线路均拒绝 |
| 真实事务回滚 | 保存过程中替换项目关系及主记录后遇到其他线路工点,返回错误;回读主名称及原两项目关系均保持,证明整个复合事务回滚 |
| 真实并发校验 | 两并发请求使用同编码且项目集合重叠,恰好1个成功、1个被拒绝,最终仅1标段;测试记录已清理 |
| 鉴权及引用保护 | 未登录请求拒绝;被标段引用的一期项目删除拒绝;不授予或修改任何账号权限 |
| 真实浏览器操作 | 本地真实页面双选一期+二期保存、列表完整显示、重新编辑回显两个标签;移除两标签后保存,列表显示待核对;本任务页面临时标段删除。测试工点0、单位工程0,不改现存31合同 |
| 清理与一致性 | 2个接口临时标段及1个页面临时标段均已通过应用删除;最终31有效标段、39关系。原429单位工程、431工点关系、1BID授权完整快照再次一致 |
本轮使用本地开发服务与真实开发库,不使用Mock作为页面证据。重启标准开发服务时遇到工作区已有WindowsNetty环境处理器SPI注册与Boot4兼容问题,未覆盖该源文件;为验证在本机TEMP建立编译产物运行时副本,仅纠正SPI注册并采用同项目新编译类、原dev配置与真实接口。当前本地服务由该验证运行时启动;普通启动链路的该既有兼容问题仍未判为修复或通过。未改受保护配置、未发布文档、未自动提交或推送本轮代码。技术验证不代替业务验收。
浏览器最终补证:一期筛选显示20条,二期显示19条,真实AFC标段详情描述列表同时展示两项目标签;页面临时标段软删回读DEL_FLAG=1、项目关系0,原台账恢复31条。截图保存在本机私有.tmp/bid-multi-project-detail-20261014.png,不随公开文档发布。最终Docs检查146文本文件、3222本地链接、0问题;最终diff检查通过。
标段台账项目列布局补证(2026-10-14):所属项目统一12px、18px行高,多项目逐项换行,单项目完整显示。真实1920×911视口页面clientWidth/scrollWidth均1920,表格滚动容器均1317,横向溢出为0;双项目36px、单项目18px,项目单元格clientWidth/scrollWidth均187。截图为本机私有 .tmp/bid-ledger-1920-911-20261014.png。
2026-10-14 工程数据授权整改后复审与端到端验证(最新)
自动化与静态检查
- 后端按
-Dmaven.test.skip=false执行本轮授权相关定向测试:EngineeringDataAccessHelperTest10 项、UserDataScopeServiceImplTest6 项、BidSectionServiceImplTest5 项、LineServiceImplTest4 项、SiteMasterServiceImplTest6 项、UserEngineeringScopeCleanupServiceTest1 项、UserProjectScopeCleanupListenerTest4 项,共 36 项,0 失败、0 错误、0 跳过。 - 前端工程数据授权相关 Vitest 共 17 项通过;全量
vue-tsc、lint 与受影响文件格式检查通过。 - 本轮自动化覆盖配置版本/候选校验、授权组合查询、主数据失效撤权、用户删除清理及授权页状态;不能据此代替每个下游模块表单流程的浏览器验收。
真实 API 与浏览器链路
使用本地前后端及 DM8 开发库,通过临时普通用户验证以下链路:
| 检查 | 实际结果 |
|---|---|
| 用户授权台账与初始配置 | 未配置用户显示“未配置”,首次读取版本为 0;线路候选返回可授权的有效标段×工点组合 |
| 缺失候选 token | 保存被拒绝,回读配置仍未变化 |
| 授权保存与回显 | 真实页面按线路、标段、工点选择并点击【保存负责工程】;页面状态更新为“已配置”,重新读取回显授权组合且版本递增 |
| 授权内业务列表 | 以该普通用户访问单位工程台账,真实页面仅返回 1 条该授权组合下的记录,分页总数为 1 |
| 越权直接详情 | 对不在授权组合内的单位工程详情返回业务码 403;该接口的统一响应封装仍为 HTTP 200,判定以响应业务码为准,未返回目标详情 |
| 过期版本 | 使用旧 expectedRevision 的替换请求返回业务码 409,既有授权保持不变 |
| 用户删除清理 | 删除两名临时测试用户后,用户配置、线路授权、组合明细均已清理;项目 MCP 按测试用户回读三表记录数均为 0 |
浏览器在真实数据权限页完成“搜索用户 → 选择工程组合 → 保存 → 查看已配置摘要”,随后以普通测试用户访问单位工程页面确认列表过滤。认证会话由本机临时验证桥建立,因此本轮覆盖授权页和业务查询的真实前后端链路,但不覆盖登录页认证/验证码流程。临时验证桥、测试账号和授权数据均已清理。本轮未对工程变更、建渣、质量、运营三权移交及 BIM 各自业务表单执行浏览器端到端旅程;需按模块用例另行验收。业务方验收状态仍为待验收。
历史台账界面恢复(2026-10-14)
Git 历史核对确认,b3737bb 包含此前的双栏组织树、人员筛选和授权台账美化;d425df7 的权限模型重构改写了页面布局。本次恢复原台账视觉结构与筛选列,并保留当前授权模型、版本冲突保护及反查时“标段×工点”精确组合约束。前端 vue-tsc、授权页 Vitest 17 项、OxLint 及相关文件格式检查通过;后端 UserDataScopeServiceImplTest 6 项通过,Docs 检查 146 个文本文件、3244 个本地链接、0 问题。浏览器直开授权路由被登录守卫重定向至登录页,因此本次历史界面的最终视觉呈现仍待页面复核;前述真实授权链路证据来自同日整改后的 E2E 记录。
双 Tab 授权弹窗与服务重启回归(2026-10-14)
- 按
.agents/tools/dev-env.ps1重启前后端;后端加载本轮 Mapper 修正,前端加载双 Tab 弹窗。 - 登录后按实际菜单【工程基础管理 → 用户数据权限】进入
/business/data-scope。直接打开旧文档中的/business/engineering/data-scope会落到 404;据实际菜单路由修正文档。 - 首次真实请求发现人员台账接口异常:DM8
SYS_USER实际手机号列为PHONE_NUMBER,ScopeUserMapper.selectScopeUserPage却引用u.phonenumber,返回-2207列解析错误。按项目 MCP 回读字段后修正查询;重启后人员台账显示 30 人,部门人数与线路候选加载成功。 - 真实页面打开个人配置弹窗,确认默认选中【全线授权】、线路未自动勾选;切换到【部分工程授权】并选择15号线,真实候选返回标段及有效工点。切回全线后选择15号线,页面请求候选版本并出现整线授权确认;在确认前取消并关闭弹窗,未提交任何人员授权。
- 前端 Vitest 19 项通过;全量
vue-tsc --noEmit、lint 与受影响文件oxfmt --check通过。后端按-Dmaven.test.skip=false执行UserDataScopeServiceImplTest6 项,0 失败、0 错误、0 跳过。 - 本轮真实浏览器验证覆盖登录、菜单路由、人员列表、配置读取、线路候选、全线候选校验及弹窗 Tab;未在真实人员上提交新的授权,以免测试时改变其数据可见范围。保存写库链路的既有 E2E 证据见本报告前述“真实 API 与浏览器链路”;本轮弹窗完整保存仍需用专用临时测试账号复核。业务验收状态仍为待验收。
2026-10-14 受限授权标段候选树回归
工程变更发起页在 maxLevel=bid 模式下对受限授权人员返回空树。根因是该模式不加载工点/单位工程叶节点,后端却用叶节点是否为空过滤标段。开发库只读回读确认任民在15号线土建01、02标分别有6、5个当前有效授权工点组合;截图提示与此处过滤分支一致。
修复后,标段层候选通过一次授权查询获取用户受限授权下至少命中一个有效工程组合的标段 ID,再进行白名单过滤;整线授权路径保持原样,未授权标段仍不可见。单位工程候选继续使用既有同一标段×工点组合校验。
| 验证项 | 实际结果 |
|---|---|
EngineeringTreeServiceImplTest | 2 项通过:受限授权标段可见且未授权标段隐藏;整线授权仍返回全部标段 |
| Mapper 权限查询 | 项目 MCP 只读 SQL 对任民授权回读得到土建01标6个、土建02标5个有效授权工点组合 |
| 服务重启与入口冒烟 | 前后端重启后 /login 返回 HTTP 200;无登录态调用工程树接口返回业务码 401,确认接口路由与登录校验正常 |
| 任民登录后的标段验证 | 通过;真实页面显示15号线土建施工01、02标,选择01标后工点/单位工程均显示6项,选择02标后均显示5项;未提交业务单据或变更授权 |
业务验收状态仍为待验收。
2026-10-15 用户数据权限授权范围摘要与详情弹窗
用户选择第1版方案后,台账授权列改为“已授权 N 条线路 + 查看详情”;只读居中弹窗显示人员摘要、全线/部分工程统计,以及按线路、标段分组的有效工点名称。详情弹窗复用配置读取与候选线路接口,不写入配置;候选读取失败时显示重试提示,不渲染不完整清单。
| 验证项 | 实际结果 |
|---|---|
| 后端线路数聚合 | UserDataScopeServiceImplTest 6/6 通过;同一线路多个标段去重为1条线路,另计一条整线授权,结果共2条线路 |
| 前端详情映射 | 授权页 Vitest 14/14 通过;只显示配置中命中的有效组合,区分全线与受限授权,搜索“果塘路”能筛出匹配工点;候选读取失败显示可重试错误且不展示不完整清单 |
| 前端静态与格式 | 全量 vue-tsc --noEmit、受影响文件 OxLint 与 Oxfmt 检查通过 |
| 真实页面 | 按项目开发服务脚本重启后端并刷新任民会话:台账显示“已授权 2 条线路”;详情弹窗显示27号线全线授权、15号线01标6个工点及02标5个工点,共11个。搜索实测通过;未保存授权或业务数据 |
业务验收状态仍为待验收。
2026-10-15 工程候选首载性能复测
针对多个下游页面首次加载候选约 8~9 秒的反馈,复用任民真实登录会话,对优化后的共享工程树和工程变更选择器进行端到端复测。前端标段候选只取线路/标段层;选中标段后以一次 site-unit 请求读取该标段授权工点与单位工程,后端仅查询目标标段及可见叶子,并在整线授权场景跳过不必要的全量受限组合读取。
| 页面操作 | 实测耗时(点击标段至候选完整显示) | 候选结果 |
|---|---|---|
| 工程变更,15号线土建施工01标 | 1.41 秒 | 6 个工点、6 个单位工程 |
| 工程变更,15号线土建施工02标 | 1.40 秒 | 5 个工点、5 个单位工程 |
| 工程变更,27号线授权回归测试标段 | 1.21 秒 | “璧山站”及对应土建综合工程 |
每次均在同一次浏览器自动化调用内从点击开始计时,轮询到候选节点完整出现后停止;三次均未复现 8~9 秒等待,授权过滤和候选数量符合已保存范围。年度计划、质量、建渣、运营对接及 BIM 的授权范围端到端复核见本报告上方记录;本次性能数字仅代表工程变更选择器的实测,不外推为所有页面相同耗时。测试表单均取消,未创建业务数据或改变授权。
2026-10-15 任民当前授权下游模块复测
本轮在任民真实登录会话下复核已保存授权;授权台账显示重庆轨道交通27号线整线,以及重庆轨道交通15号线11个有效组合(01标6个、02标5个)。没有改授权。工程数据选择器按已确认契约采用“线路→工点”,并按当前工程授权过滤;下属单位招标记录仍按独立项目对象选择,不套用工程树契约。
| 下游模块 | 实测范围与结果 | 写入边界 |
|---|---|---|
| 工程变更 | 施工发起端选择15号线01标“九曲河东站”、02标“金童路站”及27号线授权回归测试标段“璧山站”;监理、业主发起端复测27号线“璧山站”;设计发起端复测15号线01标“九曲河东站”。单位工程选择后均回显完整线路/标段/工点/单位工程路径。 | 各测试表单均取消,台账无新增记录。 |
| 下属单位招标 | 27号线授权回归测试项目可按独立项目对象选择,符合“选项目”的业务契约;此模块不使用线路→工点授权树。 | 表单取消,未新增招标记录。 |
| 工程手续年度计划 | 选择15号线01标、02标授权工点及27号线“璧山站”,确认后计划表出现对应3行工程。 | 外层表单取消,未保存计划。 |
| 质量管理 | 质量验收目录中15号线01标显示6个授权单位工程、02标显示5个;27号线测试标段显示“璧山站 土建综合工程”。目录暂无既有验收目录数据,符合空台账状态。 | 只读切换线路及单位工程,未编辑目录。 |
| 建渣台账 | 27号线选择“璧山站”后自动显示测试标段;15号线选择“九曲河东站”后显示土建施工01标,授权范围内11个工点可选。 | 新增表单退出,台账条数未增加。 |
| 运营对接 | 三权移交、问题闭环均可选择27号线及“璧山站”;15号线分别显示授权01/02标的11个工点,选点后表单保留工程值。 | 通过返回/取消退出,未创建业务单据。 |
| BIM | 模型管理、进度任务均显示15号线01标6个、02标5个授权工点及27号线测试标段1个工点;选择“璧山站”后页面上下文切换至该站,列表为空符合当前无模型/任务数据。 | 未创建模型资产或进度任务。 |
发现与边界:多个页面首次加载工程候选时约等待8~9秒,选择标段后工点/单位工程区域短暂显示骨架态,候选加载完成后可正常选择和回显;本轮未发现授权组合丢失或跨标段串显。质量缺陷发起表单依赖既有来源记录,本轮无可选来源,故该入口的后续单位工程回显未验证。验证说明仅覆盖当前开发库中实际存在的27号线测试标段及工点,不推定未建主数据的线路节点。所有打开的新增表单均退出未保存,工程树授权数据保持原状;业务验收仍为待验收。
受限授权工程树叶节点性能与回显回归(2026-10-14)
工程树的 site 与 unit 层级此前对每个候选节点单独访问授权查询,任民的授权规模下请求耗时57~79秒,超过前端50秒超时。后端改为批量读取有效 (lineId, bidId, siteId) 组合并在内存中过滤;页面改为工点和单位工程独立加载、分别报错与重试。
任民真实登录后的工程变更页面验证通过:土建施工01标展示6个工点及6个单位工程,土建施工02标展示5个工点及5个单位工程,和 DM8 MCP 只读授权回读一致。选择02标“金童路站”及对应单位工程并确认后,所属工程字段正确显示完整路径。用户随后取消未保存表单,未新增台账记录或改变授权。EngineeringTreeServiceImplTest 4/4 通过,vue-tsc --noEmit、选择器 OxLint 与格式检查通过;前后端已按开发服务流程重启。本节验证的是技术链路,业务验收仍为待验收。
单人授权保存候选补载与下游复核(2026-10-14)
截图中的提示由单人授权页仅为当前打开线路懒加载候选版本导致:用户保留15号线受限组合并在全线 Tab 勾选27号线后,保存请求还需要15号线与27号线各自的候选 token;旧逻辑遇到未加载的线路即停止提交并提示切换线路。现在保存前并行补载本次配置中缺少 token 的线路;候选读取失败或仍无版本标识时保留草稿、阻止提交,候选冲突的409刷新逻辑继续使用本次提交线路。
| 验证项 | 实际结果 |
|---|---|
| 单人授权页面自动化 | 21 项 Vitest 通过;新增覆盖“27号线整线 + 15号线11个受限组合”自动补载两条候选及任一读取失败时不提交。全量 vue-tsc --noEmit、受影响 Vue/测试文件 OxLint、FrontendFormat 通过 |
| 工程树后端回归 | EngineeringTreeServiceImplTest 4 项通过,0 失败、0 错误、0 跳过;覆盖受限标段可见、未授权标段隐藏及整线授权分支 |
| 服务重启 | 按 .agents/tools/dev-env.ps1 重启本地前后端,真实页面加载本轮前端代码及后端工程树代码 |
| 当前已保存授权 | 用户数据权限台账与配置弹窗显示任民仅有重庆轨道交通15号线11个受限组合(版本1);27号线勾选只改变本地草稿,取消后未写入数据库。项目 MCP 只读回读与页面一致 |
| 工程变更选择器 | 真实页面只返回已保存授权的15号线;土建施工01标加载6个工点及6个单位工程,选择单位工程后所属工程字段回显完整路径。表单已取消,未保存业务单据 |
| 27号线下游范围 | 因当前授权数据没有27号线记录,不能以任民身份验收27号线在工程变更及其他下游模块的结果;当前未写入新增全线访问权限。共享工程树的下游调用点已静态核对,包括工程变更四端、招投标两个选择器、工程手续、质量目录、建渣台账、运营三权移交、运营问题闭环及BIM模型/进度任务;这些页面针对27号线的真实端到端验收待授权保存后完成 |
业务验收状态仍为待验收。