diff --git a/pom.xml b/pom.xml
index 42841b3..0294aeb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,11 +107,6 @@
libthrift
0.9.2
-
- com.alibaba
- fastjson
- 1.2.35
-
com.alibaba
fastjson
@@ -120,12 +115,12 @@
org.apache.poi
poi
- 3.14
+ 3.17
org.apache.poi
poi-ooxml
- 3.14
+ 3.17
diff --git a/src/main/java/com/jmfy/controller/OrderInfoController.java b/src/main/java/com/jmfy/controller/OrderInfoController.java
index 74b4629..b7d1a45 100644
--- a/src/main/java/com/jmfy/controller/OrderInfoController.java
+++ b/src/main/java/com/jmfy/controller/OrderInfoController.java
@@ -1,7 +1,5 @@
package com.jmfy.controller;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
import com.jmfy.WebSecurityConfig;
import com.jmfy.dao.*;
import com.jmfy.model.*;
@@ -10,10 +8,10 @@ import com.jmfy.model.vo.OrderExcelVo;
import com.jmfy.redisProperties.RedisUserKey;
import com.jmfy.utils.*;
import com.jmfy.utils.DateUtil;
-import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,9 +29,6 @@ import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
import java.util.*;
/**
@@ -316,53 +311,48 @@ public class OrderInfoController {
long start = DateUtil.now();
LOGGER.info("开始导出订单,写入文件,name:{},订单数:{}",name, cgPayOrders.size());
try (FileOutputStream fOut = new FileOutputStream(getExcelFilePath(name, start))) {
- try (Workbook workbook = new XSSFWorkbook()) {
- CellStyle contextStyle = workbook.createCellStyle();
- int rowIndex = 1, cellIndex = 0;
- Field[] fields = cgPayOrders.get(0).getClass().getDeclaredFields();
- Sheet sheet = workbook.createSheet();
- Row headerRow = sheet.createRow(0);
- while (cellIndex < fields.length) {
- Cell cell = headerRow.createCell(cellIndex);
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
- cell.setCellValue(fields[cellIndex].getAnnotation(Fields.class).value());
- cellIndex++;
- }
+ SXSSFWorkbook workbook = new SXSSFWorkbook(); // 使用SXSSFWorkbook代替XSSFWorkbook
- for (Corder cgPayOrder : cgPayOrders) {
- if (rowIndex > 65535) {
- // 超过行数限制,创建新的工作表
- sheet = workbook.createSheet();
- headerRow = sheet.createRow(0);
- cellIndex = 0;
- while (cellIndex < fields.length) {
- Cell cell = headerRow.createCell(cellIndex);
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
- cell.setCellValue(fields[cellIndex].getAnnotation(Fields.class).value());
- cellIndex++;
- }
- rowIndex = 1;
- }
+ CellStyle contextStyle = workbook.createCellStyle();
+ int rowIndex = 1, cellIndex = 0;
+ Field[] fields = cgPayOrders.get(0).getClass().getDeclaredFields();
+ SXSSFSheet sheet = workbook.createSheet();
+ Row headerRow = sheet.createRow(0);
+ while (cellIndex < fields.length) {
+ Cell cell = headerRow.createCell(cellIndex);
+ cell.setCellType(CellType.STRING);
+ cell.setCellValue(fields[cellIndex].getAnnotation(Fields.class).value());
+ cellIndex++;
+ }
+ int batchSize = 1000; // 每批写入的数据量
+ int batchCount = (int) Math.ceil((double) cgPayOrders.size() / batchSize);
+ for (int batch = 0; batch < batchCount; batch++) {
+ int startIndex = batch * batchSize;
+ int endIndex = Math.min(startIndex + batchSize, cgPayOrders.size());
+ for (int i = startIndex; i < endIndex; i++) {
+ Corder cgPayOrder = cgPayOrders.get(i);
cellIndex = 0;
Row currentRow = sheet.createRow(rowIndex);
while (cellIndex < fields.length) {
Cell cell = currentRow.createCell(cellIndex);
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+ cell.setCellType(CellType.STRING);
Object value = getFieldValueByName(fields[cellIndex].getName(), cgPayOrder);
setCellValue(cell, value, contextStyle);
cellIndex++;
}
rowIndex++;
}
- workbook.write(fOut);
- }catch (Exception e){
- LOGGER.error("导出订单报错1:{}", e.getMessage(), e);
+
+ sheet.flushRows(); // 刷新行数据到磁盘,释放内存
}
+
+ workbook.write(fOut);
+ workbook.dispose(); // 释放临时文件资源
+ LOGGER.info("导出订单操作,excel文件写入耗时:{}毫秒", DateUtil.now() - start);
} catch (Exception e) {
- LOGGER.error("导出订单报错2:{}", e.getMessage(), e);
+ LOGGER.error("导出订单报错:{}", e.getMessage(), e);
}
- LOGGER.info("导出订单操作,excel文件写入耗时:{}毫秒", DateUtil.now() - start);
}
private static String getExcelFilePath(String name, long start) throws Exception {