guoyu/_已清理文件备份_周六 22512/md/导入进度实时更新功能说明.md
2025-12-06 20:11:36 +08:00

5.4 KiB
Raw Blame History

导入进度实时更新功能说明

功能概述

已成功实现学员数据导入的实时进度更新功能,解决了导入大量数据时页面卡住的问题。

实现方式

使用 SSE (Server-Sent Events) 技术实现服务端到客户端的实时进度推送。

核心改动

1. 后端改动

新增文件

  • ImportProgress.java - 进度信息实体类

    • 位置:ry-study-common/src/main/java/com/ddnai/common/core/domain/ImportProgress.java
    • 包含:总数、已处理数、成功数、失败数、百分比、状态、消息等字段
  • ImportProgressManager.java - 进度管理器

    • 位置:ry-study-common/src/main/java/com/ddnai/common/utils/ImportProgressManager.java
    • 功能管理导入任务、SSE连接、进度更新推送

修改文件

  • StudyClassUserController.java

    • 修改 importData 方法改为异步处理返回任务ID
    • 新增 getImportProgress 方法提供SSE端点
  • IStudyClassUserService.java

    • 新增 importStudentsWithProgress 方法接口
  • StudyClassUserServiceImpl.java

    • 实现 importStudentsWithProgress 方法每处理10条数据更新一次进度

2. 前端改动

修改文件

  • classUser/index.vue
    • 数据字段:新增 importTaskIdimportEventSourceimportMessageimportProcessedimportTotalimportSuccessimportFailed
    • 方法修改:
      • handleFileSuccess - 接收taskId并建立SSE连接
      • 新增 connectImportProgress - 连接SSE并监听进度事件
      • 新增 closeImportProgress - 关闭SSE连接并清理资源
    • 生命周期:新增 beforeDestroy 钩子清理SSE连接
    • UI更新实时显示处理进度和详细统计

功能特点

实时进度显示

正在处理: 已完成 3158/3800 (成功 2704, 失败 454)
进度条83%

导入流程

  1. 文件上传

    • 显示上传进度0-100%
    • 状态:正在上传文件... XX%
  2. 数据解析

    • 后端解析Excel文件
    • 生成唯一任务ID
    • 状态:文件上传完成,开始处理数据...
  3. 异步导入

    • 每处理10条数据推送一次进度
    • 实时更新:已处理数、成功数、失败数
    • 进度条实时更新
  4. 完成反馈

    • 自动关闭进度对话框
    • 刷新数据列表
    • 弹出详细导入结果

使用方法

导入学员数据

  1. 进入"学员管理"页面
  2. 点击"导入"按钮
  3. 选择Excel文件支持.xls/.xlsx
  4. 点击"确定"开始导入
  5. 实时查看进度
    • 上传进度
    • 处理进度(已完成/总数)
    • 成功/失败统计
  6. 导入完成后查看详细结果

技术优势

异步处理 - 不阻塞HTTP请求避免超时 实时反馈 - 用户可以看到真实处理进度 批量优化 - 每10条更新一次进度减少网络开销 资源管理 - 自动清理SSE连接防止内存泄漏 错误处理 - 完善的异常处理和用户提示

测试建议

测试场景

  1. 小批量数据(< 100条

    • 验证功能正常运行
    • 检查进度更新流畅
  2. 中批量数据100-1000条

    • 验证进度实时性
    • 检查性能表现
  3. 大批量数据(> 3000条

    • 验证页面不卡顿
    • 检查进度准确性
    • 验证完成后结果正确

测试步骤

  1. 准备测试数据Excel文件建议3000条以上
  2. 启动后端服务
  3. 启动前端服务
  4. 登录系统
  5. 进入"学员管理"页面
  6. 导入测试文件
  7. 观察进度更新:
    • 上传阶段进度
    • 处理阶段进度
    • 成功/失败统计
    • 百分比变化
  8. 等待完成,查看结果
  9. 刷新列表验证数据正确性

注意事项

浏览器兼容性

  • Chrome/Edge推荐
  • Firefox
  • Safari
  • IE不支持EventSource

网络要求

  • SSE需要保持长连接
  • 确保防火墙不阻止SSE连接
  • 代理服务器需要支持SSE

性能建议

  • 单次导入建议不超过10000条
  • 超大数据建议分批导入
  • 服务器内存建议至少2GB

故障排查

问题1进度不更新

可能原因:

  • SSE连接失败
  • 后端处理异常

解决方法:

  1. 打开浏览器控制台查看错误
  2. 检查网络连接
  3. 查看后端日志

问题2导入失败

可能原因:

  • Excel格式不正确
  • 数据验证失败
  • 数据库连接问题

解决方法:

  1. 下载最新模板
  2. 检查数据格式
  3. 查看错误提示
  4. 查看后端日志

问题3页面白屏

可能原因:

  • 前端代码错误
  • 依赖缺失

解决方法:

  1. 清除浏览器缓存
  2. 重新编译前端代码
  3. 检查控制台错误

技术细节

SSE事件格式

{
  "taskId": "uuid",
  "total": 3800,
  "processed": 3158,
  "success": 2704,
  "failed": 454,
  "duplicate": 0,
  "percentage": 83,
  "status": "processing",
  "message": "正在处理: 已完成 3158/3800 (成功 2704, 失败 454)",
  "result": null
}

状态说明

  • processing - 处理中
  • completed - 完成
  • failed - 失败

扩展性

该功能框架可以轻松扩展到其他导入场景:

  • 题库导入
  • 课程导入
  • 用户导入
  • 其他批量数据导入

只需:

  1. 复用 ImportProgressManager
  2. 在Service层调用进度更新方法
  3. 前端使用相同的SSE连接模式

开发者

  • 开发日期2024
  • 技术栈Spring Boot + Vue.js + SSE
  • 更新记录:初始版本