From a816065c4c3bdbd353f5ad3020bb2848c6c55af0 Mon Sep 17 00:00:00 2001 From: liuxm <liuxm@fescotech.com> Date: 星期二, 21 五月 2024 09:01:55 +0800 Subject: [PATCH] 抽取方法:生成二维码;下载excel文件 --- pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeUtil.java | 63 +++++++++++++++++++++++++++++++ pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/MarkQrCode/MarkQrCodeCtrl.java | 38 +++---------------- 2 files changed, 69 insertions(+), 32 deletions(-) diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeUtil.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeUtil.java new file mode 100644 index 0000000..93b5da3 --- /dev/null +++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeUtil.java @@ -0,0 +1,63 @@ +package com.dy.pmsGlobal.util; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.converters.Converter; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.dy.common.util.QrCodeGenerator; +import com.google.zxing.WriterException; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ClassPathResource; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +@Slf4j +public class QrCodeUtil { + private static final ConcurrentHashMap<String, File> logoCache = new ConcurrentHashMap<>(); + private static final String LOGO_PATH = "/images/logo.png"; + + + /** + * 鐢熸垚甯ogo鐨勪簩缁寸爜鍥剧墖瀛楄妭鏁扮粍銆� + * @param code 浜岀淮鐮佸唴瀹� + * @return 浜岀淮鐮佸浘鐗囩殑瀛楄妭鏁扮粍 + * @throws IOException IO寮傚父 + * @throws WriterException 浜岀淮鐮佺敓鎴愬紓甯� + */ + public static byte[] genQrCode(String code) throws IOException, WriterException { + File logoFile = logoCache.computeIfAbsent(LOGO_PATH, key -> { + try { + ClassPathResource resource = new ClassPathResource(key); + return resource.getFile(); + } catch (IOException e) { + throw new RuntimeException("鍔犺浇Logo鍥剧墖澶辫触", e); + } + }); + + BufferedImage qrCodeImage = QrCodeGenerator.toBufferedImage(QrCodeGenerator.createBitMatrix(code, QrCodeConstant.MarkQrCodeWidth, QrCodeConstant.MarkQrCodeHeight)); + if (logoFile != null) { + qrCodeImage = QrCodeGenerator.addQrCodeLogo(qrCodeImage, logoFile); + } + return QrCodeGenerator.bufferedImageToByteArray(qrCodeImage, "JPEG"); + } + + public static void downloadExcel(HttpServletResponse response, String fileName, String sheetName, List<Converter> list){ + if(CollectionUtils.isEmpty(list)){ + return; + } + try{ + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), list.get(0).getClass()).sheet(sheetName).doWrite(list); + EasyExcel.write(response.getOutputStream(), Converter.class).sheet(sheetName).doWrite(list); + }catch (Exception e){ + log.error("瀵煎嚭浜у搧淇℃伅寮傚父", e); + } + } +} \ No newline at end of file diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/MarkQrCode/MarkQrCodeCtrl.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/MarkQrCode/MarkQrCodeCtrl.java index ddbd240..e9655a4 100644 --- a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/MarkQrCode/MarkQrCodeCtrl.java +++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/MarkQrCode/MarkQrCodeCtrl.java @@ -2,22 +2,17 @@ import cn.hutool.core.codec.Base64; -import com.alibaba.excel.EasyExcel; -import com.dy.common.util.QrCodeGenerator; +import com.alibaba.excel.converters.Converter; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.pmsGlobal.util.QrCodeConstant; +import com.dy.pmsGlobal.util.QrCodeUtil; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.awt.image.BufferedImage; -import java.io.File; -import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -41,20 +36,12 @@ public BaseResponse<List<ResultVo>> show() { try{ List<ResultVo> list = new ArrayList<>() ; - Resource resource = new ClassPathResource("/images/logo.png"); - File logoPngFile = resource.getFile() ; String[][] marks = QrCodeConstant.Marks() ; for(String[] mark : marks){ ResultVo vo = new ResultVo() ; vo.code = mark[0] ; vo.name = mark[1] ; - //vo.code = "1234567890123456789012" ; - //BufferedImage bufferedImage = QrCodeGenerator.toBufferedImage(QrCodeGenerator.createBitMatrix(vo.code, 30, 30)); - BufferedImage bufferedImage = QrCodeGenerator.toBufferedImage(QrCodeGenerator.createBitMatrix(vo.code, QrCodeConstant.MarkQrCodeWidth, QrCodeConstant.MarkQrCodeHeight)); - if(logoPngFile != null && logoPngFile.exists()){ - bufferedImage = QrCodeGenerator.addQrCodeLogo(bufferedImage, logoPngFile); - } - byte[] codes = QrCodeGenerator.bufferedImageToByteArray(bufferedImage, "JPG"); + byte[] codes = QrCodeUtil.genQrCode(vo.code); vo.imgBase64 = "data:image/jpeg;base64," + Base64.encode(codes); list.add(vo) ; } @@ -72,29 +59,16 @@ @GetMapping(path = "download") public void download(HttpServletResponse response){ try{ - // 杩欓噷娉ㄦ剰 鏈夊悓瀛﹀弽搴斾娇鐢╯wagger 浼氬鑷村悇绉嶉棶棰橈紝璇风洿鎺ョ敤娴忚鍣ㄦ垨鑰呯敤postman - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setCharacterEncoding("utf-8"); - // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴 - String fileName = URLEncoder.encode(MarkQrCodeCtrl.fileName, "UTF-8").replaceAll("\\+", "%20"); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); - - List<ExcelVo> list = new ArrayList<>() ; - Resource resource = new ClassPathResource("/images/logo.png"); - File logoPngFile = resource.getFile() ; + List<Converter> list = new ArrayList<>() ; String[][] marks = QrCodeConstant.Marks() ; for(String[] mark : marks){ ExcelVo vo = new ExcelVo() ; vo.code = mark[0] ; vo.name = mark[1] ; - BufferedImage bufferedImage = QrCodeGenerator.toBufferedImage(QrCodeGenerator.createBitMatrix(vo.code, QrCodeConstant.MarkQrCodeWidth, QrCodeConstant.MarkQrCodeHeight)); - if(logoPngFile != null && logoPngFile.exists()){ - bufferedImage = QrCodeGenerator.addQrCodeLogo(bufferedImage, logoPngFile); - } - vo.image = QrCodeGenerator.bufferedImageToByteArray(bufferedImage, "JPG"); + vo.image = QrCodeUtil.genQrCode(vo.code); list.add(vo) ; } - EasyExcel.write(response.getOutputStream(), ExcelVo.class).sheet(MarkQrCodeCtrl.sheetName).doWrite(list); + QrCodeUtil.downloadExcel(response, fileName, sheetName, list); }catch (Exception e){ log.error("涓嬭浇鏍囪瘑绫讳簩缁寸爜鏃跺紓甯�", e); } -- Gitblit v1.8.0