Browse Source

任务详情导出优化,使用SXSSFWorkbook来处理大数据量,避免内存溢出

master
wangguangyuan 5 months ago
parent
commit
617ac11f51
1 changed files with 8 additions and 7 deletions
  1. +8
    -7
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java

+ 8
- 7
inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java View File

@ -65,6 +65,7 @@ import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
@ -224,13 +225,13 @@ public class PatrolTaskController extends BaseController {
logger.info("---------------[TASK] query resultAnalysis {}", resultAnalysis); logger.info("---------------[TASK] query resultAnalysis {}", resultAnalysis);
// 初筛数据 // 初筛数据
List<PatrolData> filterList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis); List<PatrolData> filterList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
logger.debug("---------------[TASK] query filterList {}", filterList);
// logger.debug("---------------[TASK] query filterList {}", filterList);
List<AlgInfo> algInfos = patrolResultService.selectAlgInfo(new PatrolResult()); List<AlgInfo> algInfos = patrolResultService.selectAlgInfo(new PatrolResult());
resultAnalysis.setFilter("0"); resultAnalysis.setFilter("0");
long t2 = System.currentTimeMillis(); long t2 = System.currentTimeMillis();
// 大模型数据 // 大模型数据
List<PatrolData> newList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis); List<PatrolData> newList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
logger.info("----------------[TASK] query newList {}", newList);
// logger.info("----------------[TASK] query newList {}", newList);
// if (newList == null) { // if (newList == null) {
// return getDataTable(2, new ArrayList<>(), new ArrayList<>()); // return getDataTable(2, new ArrayList<>(), new ArrayList<>());
// } // }
@ -2468,7 +2469,7 @@ public class PatrolTaskController extends BaseController {
logger.warn("图片下载失败: {}", imagePath, e); logger.warn("图片下载失败: {}", imagePath, e);
} }
}); });
logger.info("图片下载成功");
// exportExcel(response, newList); // exportExcel(response, newList);
exportExcelStream(response, newList, streamHashMap); exportExcelStream(response, newList, streamHashMap);
logger.info("任务详情导出耗时: {} ms", (System.currentTimeMillis() - start)); logger.info("任务详情导出耗时: {} ms", (System.currentTimeMillis() - start));
@ -2481,8 +2482,8 @@ public class PatrolTaskController extends BaseController {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"task_export_" + System.currentTimeMillis() + ".xlsx\""); response.setHeader("Content-Disposition", "attachment; filename=\"task_export_" + System.currentTimeMillis() + ".xlsx\"");
try (HSSFWorkbook workbook = new HSSFWorkbook();
// 使用SXSSFWorkbook来处理大数据量避免内存溢出
try (SXSSFWorkbook workbook = new SXSSFWorkbook(20);
ServletOutputStream out = response.getOutputStream()) { ServletOutputStream out = response.getOutputStream()) {
Sheet sheet = workbook.createSheet(MessageUtils.get("任务详情")); Sheet sheet = workbook.createSheet(MessageUtils.get("任务详情"));
@ -2549,7 +2550,7 @@ public class PatrolTaskController extends BaseController {
row.createCell(11).setCellValue(item.getDesc()); // 分析结果 row.createCell(11).setCellValue(item.getDesc()); // 分析结果
} }
private void insertImages(HSSFWorkbook workbook, Drawing<?> drawing, Sheet sheet,
private void insertImages(SXSSFWorkbook workbook, Drawing<?> drawing, Sheet sheet,
Row row, PatrolData item, Map<String, byte[]> imageCache) { Row row, PatrolData item, Map<String, byte[]> imageCache) {
try { try {
@ -2581,7 +2582,7 @@ public class PatrolTaskController extends BaseController {
return (images.length > 0) ? images[0] : null; return (images.length > 0) ? images[0] : null;
} }
private void insertImage(HSSFWorkbook workbook, Drawing<?> drawing, Row row,
private void insertImage(SXSSFWorkbook workbook, Drawing<?> drawing, Row row,
int colIndex, byte[] imageData) { int colIndex, byte[] imageData) {
// 计算图片位置 // 计算图片位置


Loading…
Cancel
Save