6.2 KiB
6.2 KiB
采购交易导入失败记录接口修复说明
问题描述
采购交易管理的导入失败记录列表无法展示。对话框能打开,但表格为空。
根本原因
通过代码对比分析,发现采购交易管理的导入失败记录接口与项目中其他模块(员工、中介)的实现不一致:
问题代码
文件: ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java
原代码 (第179-183行):
@GetMapping("/importFailures/{taskId}")
public AjaxResult getImportFailures(@PathVariable String taskId) {
List<PurchaseTransactionImportFailureVO> failures = transactionImportService.getImportFailures(taskId);
return success(failures); // ❌ 直接返回所有数据,没有分页
}
问题点:
- 返回类型是
AjaxResult,而不是TableDataInfo - 没有
pageNum和pageSize分页参数 - 没有实现分页逻辑
- 返回数据结构是
{code: 200, data: [...]}而不是{code: 200, rows: [...], total: xxx}
正确实现 (参考中介模块)
文件: ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
@GetMapping("/importPersonFailures/{taskId}")
public TableDataInfo getPersonImportFailures(
@PathVariable String taskId,
@RequestParam(defaultValue = "1") Integer pageNum, // ✅ 支持分页
@RequestParam(defaultValue = "10") Integer pageSize) {
List<IntermediaryPersonImportFailureVO> failures = personImportService.getImportFailures(taskId);
// ✅ 手动分页
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, failures.size());
List<IntermediaryPersonImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
return getDataTable(pageData, failures.size()); // ✅ 返回TableDataInfo
}
修复方案
修改 CcdiPurchaseTransactionController.java 的 getImportFailures 方法:
修改后的代码
文件: ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java:173-196
/**
* 查询导入失败记录
*/
@Operation(summary = "查询导入失败记录")
@Parameter(name = "taskId", description = "任务ID", required = true)
@Parameter(name = "pageNum", description = "页码", required = false)
@Parameter(name = "pageSize", description = "每页条数", required = false)
@PreAuthorize("@ss.hasPermi('ccdi:purchaseTransaction:import')")
@GetMapping("/importFailures/{taskId}")
public TableDataInfo getImportFailures(
@PathVariable String taskId,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
List<PurchaseTransactionImportFailureVO> failures = transactionImportService.getImportFailures(taskId);
// 手动分页
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, failures.size());
List<PurchaseTransactionImportFailureVO> pageData = failures.subList(fromIndex, toIndex);
return getDataTable(pageData, failures.size());
}
修改内容
- ✅ 修改返回类型:
AjaxResult→TableDataInfo - ✅ 添加分页参数:
pageNum和pageSize - ✅ 实现手动分页逻辑
- ✅ 使用
getDataTable()方法返回标准分页结构
返回数据结构对比
修复前 (AjaxResult):
{
"code": 200,
"msg": "操作成功",
"data": [
{...},
{...},
...
]
}
修复后 (TableDataInfo):
{
"code": 200,
"msg": "查询成功",
"rows": [
{...},
{...},
...
],
"total": 100
}
测试验证
方法1: 使用自动化测试脚本
-
启动后端服务
mvn spring-boot:run -
准备测试数据
- 准备一个包含错误数据的Excel文件
- 通过系统界面上传并导入
- 记录返回的
taskId
-
运行测试脚本
cd doc/test-data/purchase_transaction node test-import-failures-api.js <taskId> -
查看测试结果
- 脚本会验证:
- 响应状态码是否为 200
rows字段是否存在且为数组total字段是否存在- 分页功能是否正常工作
- 脚本会验证:
方法2: 使用 Postman/curl 测试
# 1. 登录获取token
curl -X POST "http://localhost:8080/login/test" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# 2. 查询导入失败记录 (替换 <taskId> 和 <token>)
curl -X GET "http://localhost:8080/ccdi/purchaseTransaction/importFailures/<taskId>?pageNum=1&pageSize=10" \
-H "Authorization: Bearer <token>"
预期响应:
{
"code": 200,
"msg": "查询成功",
"rows": [
{
"purchaseId": "PO001",
"projectName": "测试项目",
"subjectName": "测试标的物",
"errorMessage": "采购数量必须大于0"
}
],
"total": 1
}
方法3: 前端界面测试
- 访问采购交易管理页面
- 准备包含错误数据的Excel文件并导入
- 等待导入完成
- 点击"查看导入失败记录"按钮
- 验证:
- ✅ 对话框能正常打开
- ✅ 表格显示失败记录数据
- ✅ 顶部显示统计信息
- ✅ 分页组件正常显示和工作
影响范围
- ✅ 后端代码:
CcdiPurchaseTransactionController.java - ✅ 前端代码: 无需修改 (前端代码已正确处理
TableDataInfo格式) - ✅ 数据库: 无影响
- ✅ 其他模块: 无影响
兼容性说明
此修复使采购交易模块的导入失败记录接口与项目中其他模块(员工、中介)保持一致,符合项目的统一规范。
相关文件
- Controller:
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java - 前端页面:
ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue - 前端API:
ruoyi-ui/src/api/ccdiPurchaseTransaction.js - Service实现:
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java - 测试脚本:
doc/test-data/purchase_transaction/test-import-failures-api.js
变更历史
| 日期 | 版本 | 变更内容 | 作者 |
|---|---|---|---|
| 2026-02-09 | 1.0 | 初始版本,修复导入失败记录接口 | Claude |