From a7cf1913c376b53f487f0ef8dfff084c5bc010a7 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 17 十月 2026 11:19:12 +0800
Subject: [PATCH] feat(mes): 支持二维码导出任务的分段下载功能
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java | 44 +++++++++++++++++++++++++++++++++++++-------
1 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java
index c35c287..9a30eb5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/QrCodeImageUtils.java
@@ -9,6 +9,9 @@
import lombok.extern.slf4j.Slf4j;
import javax.imageio.ImageIO;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;
+import javax.imageio.stream.MemoryCacheImageOutputStream;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
@@ -17,6 +20,7 @@
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
+import java.io.FilterOutputStream;
import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
@@ -32,9 +36,6 @@
private QrCodeImageUtils() {
}
-
- /** 鎵归噺瀵煎嚭浜岀淮鐮佹暟閲忎笂闄愶紙闃叉涓�娆℃�х敓鎴愯繃澶氬鑷村唴瀛�/鍝嶅簲杩囧ぇ锛� */
- public static final int MAX_QR_EXPORT = 2000;
/** 浜岀淮鐮佽竟闀� */
private static final int QR_SIZE = 260;
@@ -120,10 +121,7 @@
ZipOutputStream zip = new ZipOutputStream(response.getOutputStream());
try {
for (QrLabelInfo label : labels) {
- BufferedImage image = createQrLabel(label.getCode(), label.getFileName());
- zip.putNextEntry(new ZipEntry(label.getFileName() + ".png"));
- ImageIO.write(image, "png", zip);
- zip.closeEntry();
+ writeZipEntry(zip, label);
}
zip.finish();
zip.flush();
@@ -132,6 +130,38 @@
}
}
+ /**
+ * 鐢熸垚鍗曞紶鏍囩骞跺啓鍏� ZIP 鏉$洰
+ * <p>
+ * 渚涘悗鍙板鍑轰换鍔¤嚜寤哄啓鍏ュ惊鐜椂澶嶇敤锛氳皟鐢ㄦ柟闇�瑕佽嚜琛屽湪姣忓紶涔嬮棿妫�鏌ュ彇娑堛�侀噰鏍� CPU 骞跺洖鍐欒繘搴︼紝
+ * 鍥犳杩欓噷鍙礋璐�"涓�寮�"鐨勫鐞嗭紝涓嶆帴绠″惊鐜��
+ *
+ * @param zip ZIP 杈撳嚭娴�
+ * @param label 鏍囩淇℃伅
+ */
+ public static void writeZipEntry(ZipOutputStream zip, QrLabelInfo label) throws IOException {
+ BufferedImage image = createQrLabel(label.getCode(), label.getFileName());
+ zip.putNextEntry(new ZipEntry(label.getFileName() + ".png"));
+ try {
+ // ImageIO.write(OutputStream) 鍙兘涓烘瘡寮犲浘鐗囧垱寤虹鐩樼紦瀛橈紱澶ф壒閲忓鍑烘敼鐢ㄥ唴瀛樼紦瀛樸��
+ // 鍖呰娴佺殑 close 浠� flush锛屼笉鑳藉叧闂灞� ZIP銆�
+ ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
+ try (ImageOutputStream imageOut = new MemoryCacheImageOutputStream(new FilterOutputStream(zip) {
+ @Override
+ public void close() throws IOException {
+ flush();
+ }
+ })) {
+ writer.setOutput(imageOut);
+ writer.write(image);
+ } finally {
+ writer.dispose();
+ }
+ } finally {
+ zip.closeEntry();
+ }
+ }
+
// ==================== 绉佹湁鏂规硶 ====================
/**
--
Gitblit v1.9.3