# 2026-03-29 历史项目导入功能测试记录

## 测试目标

- 按实施计划验证“项目管理 -> 导入历史项目”功能的真实链路
- 通过浏览器、数据库、后端日志交叉确认以下能力：
  - 历史项目列表是否只展示已完成、已归档项目
  - 导入弹窗校验、项目创建、成功跳转是否正常
  - 异步历史导入是否生成文件记录与流水数据
  - 详情页上传记录是否展示来源信息、是否具备只读限制

## 测试环境

- 测试日期：2026-03-29
- 前端地址：`http://127.0.0.1:1026`
- 后端地址：`http://127.0.0.1:62318`
- 数据库：`116.62.17.81:3307/ccdi`
- 登录账号：`admin/admin123`

## 测试前检查

### 1. 默认启动失败

- 使用当前代码重新打包 `ruoyi-admin` 后，按默认参数启动后端，应用未能启动成功。
- 日志报错为 Spring Bean 循环依赖：
  - `CcdiBankTagServiceImpl`
  - `CcdiProjectServiceImpl`
  - `CcdiProjectHistoryImportServiceImpl`
- 结论：当前代码在默认配置下无法完成联调测试。

### 2. 为继续测试临时放开循环依赖

- 仅为继续验证后续功能，临时使用启动参数：

```bash
java -jar ruoyi-admin/target/ruoyi-admin.jar --spring.main.allow-circular-references=true
```

- 说明：以下浏览器与接口测试结果均建立在该临时启动参数下，不代表默认启动已通过。

### 3. 数据库结构预检查

- 执行 `SHOW COLUMNS FROM ccdi_file_upload_record;`
- 结果：数据库中缺少以下字段：
  - `source_type`
  - `source_project_id`
  - `source_project_name`

## 浏览器测试记录

### 1. 历史项目弹窗与列表

- 登录后进入“初核项目管理”页面。
- 点击快捷方式“导入历史项目”，弹窗可正常打开。
- 弹窗中看到“新项目名称 / 备注 / 流水时间 / 历史项目列表”布局，符合计划描述。
- 历史项目列表实际加载成功，只展示“已完成 / 已归档”项目。
- 浏览器看到的历史项目样本包括：
  - `phase2联调验证-20260322-1`
  - `0320`
  - `测试0319`
  - `测试0323`

### 2. 表单校验

- 未选择历史项目直接点击“导入”，页面提示：`请选择历史项目`
- 选择历史项目后，不填写新项目名称直接点击“导入”，页面提示：`请输入新项目名称`
- 结论：前端最小校验生效。

### 3. 真实提交

- 选择历史项目：
  - `49 phase2联调验证-20260322-1`
  - `48 0320`
- 填写：
  - 新项目名称：`自动测试-历史导入-20260329-1017`
  - 备注：`测试历史项目导入链路`
  - 流水时间：`2026-03-17` 至 `2026-03-18`
- 点击“导入”后：
  - 页面提示：`历史项目导入任务已开始`
  - 自动跳转至详情页：`/ccdiProject/detail/57`
  - 新项目标题显示为 `自动测试-历史导入-20260329-1017`
  - 项目状态显示为 `进行中`
  - 上传记录列表显示 `暂无数据`

## 数据库验证

### 1. 历史项目样本确认

- 查询 `ccdi_file_upload_record` 后确认以下项目存在可用于导入的 `parsed_success` 记录：
  - `49 phase2联调验证-20260322-1`：`11` 条
  - `48 0320`：`9` 条
  - `46 测试0319`：`4` 条

### 2. 新项目创建结果

- 提交后数据库生成新项目：

```text
project_id = 57
project_name = 自动测试-历史导入-20260329-1017
status = 0
lsfx_project_id = 1001
target_count = 0
```

### 3. 导入结果落库检查

- 查询 `ccdi_file_upload_record`：
  - `project_id = 57`，结果 `0` 条
- 查询 `ccdi_bank_statement`：
  - `project_id = 57`，结果 `0` 条

## 日志验证

### 1. 项目创建成功

- 日志记录了项目创建成功：
  - `projectId=57`
  - `projectName=自动测试-历史导入-20260329-1017`
  - 状态初始化为 `进行中`

### 2. 异步导入线程失败

- 后端异步线程 `file-upload-1` 在读取来源上传记录时抛出异常：

```text
Unknown column 'source_type' in 'field list'
```

- 对应 SQL 为：

```sql
select id, project_id, lsfx_project_id, log_id, file_name, file_size,
       file_status, source_type, source_project_id, source_project_name,
       enterprise_names, account_nos, error_message, upload_time, upload_user
from ccdi_file_upload_record
where project_id in (?, ?)
  and file_status = 'parsed_success'
  and log_id is not null
```

- 结论：异步导入任务在读取来源记录阶段即失败，后续的流水复制、文件记录写入、打标触发都没有执行成功。

## 测试结论

### 已验证通过

- 导入历史项目弹窗可打开
- 历史项目列表能够加载真实数据，且列表范围符合“已完成/已归档”
- 前端校验提示正常
- 点击导入后可创建新项目
- 提交成功后提示文案正确，且会跳转到新项目详情页

### 验证失败

- 默认配置下后端无法启动，存在循环依赖
- 联调用数据库缺少历史导入所需来源字段
- 异步历史导入任务执行失败
- 新项目未生成任何上传记录
- 新项目未生成任何流水数据

### 当前无法继续验证的项

- 上传记录“历史导入 · 来源项目名”展示
- 历史导入文件记录删除入口是否隐藏
- 导入完成后自动触发打标、结果刷新、统计刷新

## 阻塞问题汇总

1. `CcdiBankTagServiceImpl -> CcdiProjectServiceImpl -> CcdiProjectHistoryImportServiceImpl` 存在循环依赖，导致默认启动失败。
2. 联调用数据库 `ccdi_file_upload_record` 未执行来源字段迁移，导致异步导入 SQL 直接失败。

## 清理记录

- 已停止本次测试临时启动的后端进程
- 已停止本次测试临时启动的前端开发进程
