# 2026-04-22 招投标导入失败展示增强实施记录

## 1. 本次变更

- 招投标导入失败记录新增失败来源 `Sheet`
- 招投标导入失败记录新增 Excel 失败行号
- 招投标信息维护页面失败弹窗新增 `失败Sheet`、`失败行号` 展示列

## 2. 文档落点确认

- 后端实施计划：`/Users/wkc/Desktop/ccdi/ccdi/docs/plans/backend/2026-04-22-bidding-import-failure-display-backend-implementation.md`
- 前端实施计划：`/Users/wkc/Desktop/ccdi/ccdi/docs/plans/frontend/2026-04-22-bidding-import-failure-display-frontend-implementation.md`
- 实施记录：`/Users/wkc/Desktop/ccdi/ccdi/docs/reports/implementation/2026-04-22-bidding-import-failure-display-implementation.md`

## 3. 实施内容

- 在后端失败记录 VO 中新增 `sheetName`、`sheetRowNum`
- 在导入服务中为主信息、供应商明细两类导入行建立行号上下文
- 在主信息校验失败、供应商校验失败、主从关系失败等场景下统一返回失败来源 Sheet 与行号
- 在前端失败弹窗中新增 `失败Sheet`、`失败行号` 列，直接展示后端返回值

## 4. 预期验证点

- 主信息失败记录显示 `招投标主信息`
- 供应商失败记录显示 `供应商明细`
- 失败行号与 Excel 实际数据行一致
- 同一失败由多行触发时，页面可直接展示合并行号

## 5. 实际验证结果

- 后端执行 `mvn -pl ccdi-info-collection -am compile -DskipTests` 编译通过
- 后端通过 `bin/restart_java_backend.sh` 完成重启，前端通过 `nvm use` 后启动真实页面进行验证
- 在真实页面上传 `bidding_import_structure.xlsx` 后，导入任务 `f1026563-4bf3-4f1d-ae27-d3f9623547f4` 成功生成失败记录
- 页面“查看导入失败记录”弹窗已展示以下表头：
- `失败Sheet`
- `失败行号`
- `采购事项ID`
- `项目名称`
- `标的物名称`
- `失败原因`
- 真实页面已验证的失败展示样例：
- `供应商明细 | 第8行 | 供应商明细Sheet中的采购事项ID不能为空`
- `招投标主信息 | 第2行 | 采购事项ID[LSFXMOCKP2PUR001]已存在，请勿重复导入`
- `招投标主信息 | 第3、4行 | 采购事项ID[IMPCOV20260422154511STR03]在招投标主信息Sheet中重复`
- `供应商明细 | 第4、5行 | 采购事项ID[IMPCOV20260422154511STR02]缺少招投标主信息`
- 本次验证样本未产生成功导入数据，无需额外回滚业务数据
