优化 导出交易记录文件
This commit is contained in:
@@ -688,118 +688,101 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
log.info("无数据,直接返回,不生成空文件");
|
||||
return;
|
||||
}
|
||||
//生成文件路径
|
||||
String newFilePath = "files";
|
||||
//文件名称
|
||||
|
||||
// 文件名称
|
||||
String time = DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_hh_mm_ss);
|
||||
String fileName = "paymentInfo_"+ time + ".xlsx";
|
||||
//输出流
|
||||
OutputStream out = null;
|
||||
String fileName = "paymentInfo_" + time + ".xlsx";
|
||||
|
||||
// 创建Excel文件
|
||||
XSSFWorkbook workBook = new XSSFWorkbook();
|
||||
// 创建Excel工作表(Table),之后的数据都添加到该表中
|
||||
XSSFSheet sheet = workBook.createSheet("数据导出");
|
||||
// 设置列的宽度
|
||||
sheet.setDefaultColumnWidth(16);
|
||||
// 创建标题行
|
||||
XSSFRow titleRow = sheet.createRow(0);
|
||||
String[] title = new String[]{"id", "payer", "platform", "payerTotal", "type", "status",
|
||||
"country", "city", "paymentMethod", "last4", "createTime"};
|
||||
//设置标题字体样式
|
||||
XSSFCellStyle cellStyle = workBook.createCellStyle();
|
||||
XSSFFont font = workBook.createFont();
|
||||
font.setBold(true);//加粗
|
||||
font.setFontHeightInPoints((short) 14);//设置字体大小
|
||||
cellStyle.setFont(font);
|
||||
//设置标题列
|
||||
for (int i = 0; i < title.length; i++) {
|
||||
//创建标题的单元格
|
||||
XSSFCell titleCell = titleRow.createCell(i);
|
||||
//填充标题数值
|
||||
titleCell.setCellValue(title[i]);
|
||||
//设置样式
|
||||
titleCell.setCellStyle(cellStyle);
|
||||
}
|
||||
//填充数据
|
||||
//第一行是标题所以要从第二行开始
|
||||
for (int i = 0; i < paymentInfoVOS.size(); i++) {
|
||||
PaymentInfoVO paymentInfoVO = paymentInfoVOS.get(i);
|
||||
XSSFRow row = sheet.createRow(i + 1);
|
||||
for (int j = 0; j < title.length; j++) {
|
||||
XSSFCell titleCell = row.createCell(j);
|
||||
String exportKey = title[j];
|
||||
switch (exportKey) {
|
||||
case "id":
|
||||
titleCell.setCellValue(paymentInfoVO.getId());
|
||||
break;
|
||||
case "payer":
|
||||
titleCell.setCellValue(paymentInfoVO.getPayer());
|
||||
break;
|
||||
case "platform":
|
||||
titleCell.setCellValue(paymentInfoVO.getPlatform());
|
||||
break;
|
||||
case "payerTotal":
|
||||
titleCell.setCellValue(paymentInfoVO.getPayerTotal());
|
||||
break;
|
||||
case "type":
|
||||
titleCell.setCellValue(paymentInfoVO.getType());
|
||||
break;
|
||||
case "status":
|
||||
titleCell.setCellValue(paymentInfoVO.getStatus());
|
||||
break;
|
||||
case "country":
|
||||
titleCell.setCellValue(paymentInfoVO.getCountry());
|
||||
break;
|
||||
case "city":
|
||||
titleCell.setCellValue(paymentInfoVO.getCity());
|
||||
break;
|
||||
case "paymentMethod":
|
||||
titleCell.setCellValue(paymentInfoVO.getPaymentMethod());
|
||||
break;
|
||||
case "last4":
|
||||
titleCell.setCellValue(paymentInfoVO.getLast4());
|
||||
break;
|
||||
case "createTime":
|
||||
titleCell.setCellValue(paymentInfoVO.getCreateTime());
|
||||
break;
|
||||
try (XSSFWorkbook workBook = new XSSFWorkbook()) {
|
||||
// 创建Excel工作表(Table),之后的数据都添加到该表中
|
||||
XSSFSheet sheet = workBook.createSheet("数据导出");
|
||||
// 设置列宽
|
||||
sheet.setDefaultColumnWidth(16);
|
||||
|
||||
// 创建标题行
|
||||
XSSFRow titleRow = sheet.createRow(0);
|
||||
String[] title = new String[]{"id", "payer", "platform", "payerTotal", "type", "status",
|
||||
"country", "city", "paymentMethod", "last4", "createTime"};
|
||||
//设置标题字体样式
|
||||
XSSFCellStyle cellStyle = workBook.createCellStyle();
|
||||
XSSFFont font = workBook.createFont();
|
||||
font.setBold(true);//加粗
|
||||
font.setFontHeightInPoints((short) 14);//设置字体大小
|
||||
cellStyle.setFont(font);
|
||||
//设置标题列
|
||||
for (int i = 0; i < title.length; i++) {
|
||||
//创建标题的单元格
|
||||
XSSFCell titleCell = titleRow.createCell(i);
|
||||
//填充标题数值
|
||||
titleCell.setCellValue(title[i]);
|
||||
//设置样式
|
||||
titleCell.setCellStyle(cellStyle);
|
||||
}
|
||||
|
||||
// 填充数据
|
||||
//第一行是标题所以要从第二行开始
|
||||
for (int i = 0; i < paymentInfoVOS.size(); i++) {
|
||||
PaymentInfoVO paymentInfoVO = paymentInfoVOS.get(i);
|
||||
XSSFRow row = sheet.createRow(i + 1);
|
||||
for (int j = 0; j < title.length; j++) {
|
||||
XSSFCell cell = row.createCell(j);
|
||||
String exportKey = title[j];
|
||||
switch (exportKey) {
|
||||
case "id":
|
||||
cell.setCellValue(paymentInfoVO.getId());
|
||||
break;
|
||||
case "payer":
|
||||
cell.setCellValue(paymentInfoVO.getPayer());
|
||||
break;
|
||||
case "platform":
|
||||
cell.setCellValue(paymentInfoVO.getPlatform());
|
||||
break;
|
||||
case "payerTotal":
|
||||
cell.setCellValue(paymentInfoVO.getPayerTotal());
|
||||
break;
|
||||
case "type":
|
||||
cell.setCellValue(paymentInfoVO.getType());
|
||||
break;
|
||||
case "status":
|
||||
cell.setCellValue(paymentInfoVO.getStatus());
|
||||
break;
|
||||
case "country":
|
||||
cell.setCellValue(paymentInfoVO.getCountry());
|
||||
break;
|
||||
case "city":
|
||||
cell.setCellValue(paymentInfoVO.getCity());
|
||||
break;
|
||||
case "paymentMethod":
|
||||
cell.setCellValue(paymentInfoVO.getPaymentMethod());
|
||||
break;
|
||||
case "last4":
|
||||
cell.setCellValue(paymentInfoVO.getLast4());
|
||||
break;
|
||||
case "createTime":
|
||||
cell.setCellValue(paymentInfoVO.getCreateTime());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
File file = new File(newFilePath + File.separator + fileName);
|
||||
out = Files.newOutputStream(file.toPath());
|
||||
workBook.write(out);
|
||||
out.flush();
|
||||
out.close();
|
||||
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
|
||||
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
// 读取文件并写入响应输出流
|
||||
OutputStream responseOut = response.getOutputStream();
|
||||
FileInputStream fileInputStream = new FileInputStream(newFilePath + File.separator + fileName);
|
||||
// 将文件转成字节数组,再将数组写入响应的输出流
|
||||
byte[] buffer = new byte[1024];
|
||||
int bytesRead = -1;
|
||||
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
|
||||
responseOut.write(buffer, 0, bytesRead);
|
||||
}
|
||||
// 刷新输出流
|
||||
responseOut.flush();
|
||||
// 关闭流
|
||||
fileInputStream.close();
|
||||
responseOut.close();
|
||||
// 将workBook转换为字节数组
|
||||
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
|
||||
workBook.write(byteArrayOutputStream);
|
||||
byte[] bytes = byteArrayOutputStream.toByteArray();
|
||||
|
||||
// 路径为文件且不为空则进行删除
|
||||
if (file.isFile() && file.exists()) {
|
||||
boolean delete = file.delete();
|
||||
if (delete){
|
||||
log.info("临时文件:{}, 删除成功", fileName);
|
||||
}else {
|
||||
log.info("临时文件:{}, 删除失败", fileName);
|
||||
// 设置响应头
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||
|
||||
// 将字节数组写入响应流
|
||||
try (OutputStream responseOut = response.getOutputStream()) {
|
||||
responseOut.write(bytes);
|
||||
responseOut.flush();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.info(e.getMessage());
|
||||
log.info("文件下载失败:{}", e.getMessage());
|
||||
throw new BusinessException("文件下载失败");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user