# 招投标信息维护实施记录

## 本次改动
- 将信息维护下“采购交易管理”改为“招投标信息维护”，保留原有 `purchaseTransaction` 技术标识。
- 新增供应商明细子表 `ccdi_purchase_transaction_supplier`，支持维护全部参标供应商，并使用 `is_bid_winner` 标记中标方。
- 主表继续保留中标供应商摘要字段，新增/修改/导入时从供应商明细自动回填。
- 列表查询新增供应商数聚合；详情查询和项目专项核查采购详情新增供应商明细返回。
- 导入模板改为“招投标主信息 + 供应商明细”双 Sheet，并按 `purchaseId` 聚合校验。
- 前端页面改造为多供应商明细表单，详情弹窗与项目详情弹窗改为供应商明细表展示。

## 关键文件
- 后端
  - `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiPurchaseTransactionServiceImpl.java`
  - `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
  - `ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiPurchaseTransactionMapper.xml`
  - `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectSpecialCheckMapper.xml`
- 前端
  - `ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue`
  - `ruoyi-ui/src/views/ccdiProject/components/detail/ExtendedPurchaseDetailDialog.vue`
- SQL
  - `sql/ccdi_purchase_transaction.sql`
  - `sql/ccdi_purchase_transaction_menu.sql`
  - `sql/migration/2026-04-22-bidding-info-maintenance-supplier-detail.sql`

## 验证结果
- 后端编译
  - 命令：`mvn -pl ccdi-info-collection,ccdi-project -am -DskipTests compile`
  - 结果：通过。
- 前端构建
  - 命令：`source ~/.nvm/nvm.sh && nvm use 14.21.3 >/dev/null && cd ruoyi-ui && npm run build:prod`
  - 结果：通过，仅有既有产物体积 warning。
- 数据迁移
  - 命令：`bin/mysql_utf8_exec.sh sql/migration/2026-04-22-bidding-info-maintenance-supplier-detail.sql`
  - 结果：执行成功，本地联调库菜单名已更新为“招投标信息维护”。
- Playwright 实页验证
  - 验证页面：`http://localhost:8080/maintain/purchaseTransaction`
  - 结果：
    - 菜单与面包屑显示“招投标信息维护”
    - 列表显示“中标供应商”“参与供应商数”
    - 新增弹窗显示供应商明细表，并可新增供应商行
    - 详情弹窗显示供应商明细表与中标标识
  - 联调过程中发现列表 SQL 因 join 后字段未加别名导致 `purchase_id is ambiguous`，已修复并复验通过。

## 测试进程清理
- 已关闭 Playwright 浏览器会话。
- 已停止前端 `npm run dev` 进程。
- 已停止测试期间启动的后端进程。
