Merge branch 'dev/dev_xp' into dev/dev

This commit is contained in:
2025-01-24 14:28:54 +08:00

View File

@@ -34,7 +34,6 @@ import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -227,45 +226,6 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
return questionnaireVOS;
}
// 输出为pdf 需要自己组装pdf内容
// 解决iText不显示中文问题
/*public static void main(String[] args) {
try {
// 创建文档
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
document.open();
// 加载字体文件
InputStream inputStream = ConvenientInquiryServiceImpl.class.getResourceAsStream("/font/msyhl.ttc");
byte[] fontBytes = toByteArray(inputStream);
inputStream.close();
// 创建BaseFont和Font对象
BaseFont baseFont = BaseFont.createFont("msyhl.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true, fontBytes, null);
Font yaHeiFont = new Font(baseFont, 12, Font.NORMAL);
// 添加带有中文字体的段落
document.add(new Paragraph("你好,世界!", yaHeiFont));
document.close();
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
}
// 将InputStream转换为字节数组
public static byte[] toByteArray(InputStream input) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
return output.toByteArray();
}*/
/**
* 近期新增用户
*/
@@ -688,118 +648,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("文件下载失败");
}
}