From f6a1bf1d9b19dd8b3750034048f3876d086db1f1 Mon Sep 17 00:00:00 2001
From: ZQN <364596817@qq.com>
Date: 星期三, 14 八月 2024 17:11:49 +0800
Subject: [PATCH] 企业二维码添加

---
 project-common/src/main/java/com/project/common/utils/file/ImageUtils.java                |   41 ++----
 project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java               |    3 
 project-system/src/main/java/com/project/system/domain/SysCompany.java                    |    3 
 project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java   |   34 ++++-
 project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java                   |   60 ++++++++++
 project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java              |   73 ++++++++++++
 project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java |   25 ++++
 project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java       |   37 ++++++
 project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java            |   50 ++++++++
 9 files changed, 288 insertions(+), 38 deletions(-)

diff --git a/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java b/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java
index 9c23927..30e97c1 100644
--- a/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java
+++ b/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java
@@ -1,12 +1,18 @@
 package com.project.admin.controller.system;
 
+import cn.hutool.core.convert.Convert;
 import com.project.common.annotation.Log;
 import com.project.common.annotation.RepeatSubmit;
+import com.project.common.config.ProjectConfig;
 import com.project.common.core.controller.BaseController;
 import com.project.common.core.domain.AjaxResult;
 import com.project.common.core.page.TableDataInfo;
 import com.project.common.enums.BusinessType;
+import com.project.common.utils.StringUtils;
+import com.project.common.utils.file.ImageUtils;
 import com.project.common.utils.poi.ExcelUtil;
+import com.project.common.utils.zip.ZipUtils;
+import com.project.system.domain.SysCompany;
 import com.project.system.domain.bo.editBo.SysCompanyBo;
 import com.project.system.domain.bo.queryBo.SysCompanyQueryBo;
 import com.project.system.domain.vo.SysCompanyResultVo;
@@ -20,9 +26,11 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 浼佷笟淇℃伅Controller
@@ -38,6 +46,7 @@
     private final ISysCompanyService iSysCompanyService;
 
 
+
     @ApiOperation("鏌ヨ浼佷笟淇℃伅鍒楄〃")
     @GetMapping("/list")
     public TableDataInfo list(SysCompanyQueryBo bo)
@@ -48,6 +57,22 @@
     }
 
 
+    @ApiOperation("涓嬭浇浜岀淮鐮�")
+    @GetMapping("/downloadQrcode")
+    public void downloadQrcode(SysCompanyQueryBo bo, HttpServletResponse response)
+    {
+        List<SysCompanyVo> list = iSysCompanyService.queryList(bo);
+        list.forEach(e->{
+            if (StringUtils.isEmpty(e.getQrcodeImg())){
+                String qrcode = ImageUtils.createQrcode(e.getCompanyCode(), e.getCompanyName(), "2");
+                e.setQrcodeImg(qrcode);
+                iSysCompanyService.updateById(Convert.convert(SysCompany.class, e));
+            }
+        });
+        List<String> collect = list.stream().map(SysCompanyVo::getQrcodeImg).collect(Collectors.toList());
+        ZipUtils.downloadToZip(collect, response);
+    }
+
 
     @ApiOperation("瀵煎嚭浼佷笟淇℃伅鍒楄〃")
     //@PreAuthorize("@ss.hasPermi('system:company:export')")
diff --git a/project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java b/project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java
new file mode 100644
index 0000000..1c502c6
--- /dev/null
+++ b/project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java
@@ -0,0 +1,37 @@
+package com.project.admin.controller.tool;
+
+import com.project.common.core.domain.AjaxResult;
+import com.project.common.utils.file.ImageUtils;
+import com.project.system.service.ISysConfigService;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 鍔熻兘鎻忚堪锛�
+ *
+ * @author ZQN
+ * @version 1.0 2024骞�07鏈�17鏃�
+ */
+
+@Api(value = "浜岀淮鐮�", tags = {"浜岀淮鐮�"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/tool/qrcode")
+public class QrcodeController
+{
+
+    private final ISysConfigService configService;
+
+
+    @PostMapping("/createQrcode")
+    public AjaxResult createQrcode()
+    {
+        String content = configService.selectConfigByKey("sys.trans.qrcode.url");
+        return AjaxResult.success(ImageUtils.createQrcode("abssdf1asdfasdfasdfasdsa","娌堜笜鍘垮崕椤哄啘涓氬缓璁惧伐绋嬫湁闄愬叕鍙告矆涓樺垎鍏徃","2"));
+    }
+
+}
diff --git a/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java b/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java
index 7a70cdf..ad21297 100644
--- a/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java
+++ b/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java
@@ -1,5 +1,17 @@
 package com.project.common.utils.file;
 
+import com.alibaba.fastjson2.JSONObject;
+import com.google.zxing.WriterException;
+import com.project.common.config.ProjectConfig;
+import com.project.common.constant.Constants;
+import com.project.common.utils.StringUtils;
+import com.project.common.utils.WeChatUtils;
+import com.project.common.utils.qrcode.QRCodeUtil;
+import org.apache.poi.util.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -8,23 +20,6 @@
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.project.common.config.ProjectConfig;
-import com.project.common.utils.WeChatUtils;
-import com.project.common.utils.qrcode.QRCodeUtil;
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.WriterException;
-import com.google.zxing.client.j2se.MatrixToImageWriter;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.qrcode.QRCodeWriter;
-import org.apache.poi.util.IOUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.project.common.constant.Constants;
-import com.project.common.utils.StringUtils;
-
-import javax.net.ssl.*;
 
 import static com.project.common.utils.file.FileUploadUtils.getPathFileName;
 
@@ -120,7 +115,7 @@
      * @throws WriterException
      * @throws IOException
      */
-    public static Object createQrcode(String content, String type)
+    public static String createQrcode(String content, String name, String type)
     {
         // 鏈湴璧勬簮璺緞
         String localPath = ProjectConfig.getQrcodePath();
@@ -192,15 +187,7 @@
                 }
             }
             else if ("2".equals(type)){
-                try {
-                    String destPath = localPath+"/logo.png";
-                    QRCodeUtil.encode(content,  destPath, file.getPath(),true);
-
-                } catch (IOException | WriterException e) {
-                    throw new RuntimeException(e);
-                } catch (ClassNotFoundException e) {
-                    throw new RuntimeException(e);
-                }
+                QRCodeUtil.contextLoads2(content,  name, file.getPath());
             }
 
         }
diff --git a/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java b/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java
index 81fa4b6..b34ffe2 100644
--- a/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java
+++ b/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java
@@ -2,6 +2,7 @@
 
 
 import com.google.zxing.*;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.common.HybridBinarizer;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
@@ -14,7 +15,11 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Map;
 
 public class QRCodeUtil {
     private static final String CHARSET = "utf-8";
@@ -106,7 +111,8 @@
         QRCodeUtil.encode(content, null, outputStream, false);
     }
 
-    public static String decode(File file) throws IOException, NotFoundException {
+    public static String decode(File file) throws IOException, NotFoundException
+    {
         BufferedImage image;
         image = ImageIO.read(file);
         if (image == null) {
@@ -133,5 +139,70 @@
         }
     }
 
+
+    //浜岀淮鐮佸浘涓婂甫瀛�
+    public static void contextLoads2(String content, String name, String filePathStr)
+    {
+        int qrCodeWidth = 700;
+        int qrCodeHeight = 700;
+        int textPadding = 5; // 鏂囨湰涓庝簩缁寸爜涔嬮棿鐨勯棿璺�
+        int textSize = 30; // 鏂囨湰瀛椾綋澶у皬
+        int totalHeight = qrCodeHeight + 300;
+
+        try {
+            // 鐢熸垚浜岀淮鐮佺殑BitMatrix
+            BitMatrix bitMatrix = generateQRCode(content, qrCodeWidth, qrCodeHeight);
+
+            // 灏咮itMatrix杞崲涓築ufferedImage
+            BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
+
+            // 鍒涘缓涓�涓柊鐨凚ufferedImage鏉ュ绾充簩缁寸爜鍜屾枃鏈�
+            BufferedImage combinedImage = new BufferedImage(
+                    qrCodeWidth, 900, BufferedImage.TYPE_INT_RGB);
+
+            // 缁樺埗浜岀淮鐮佸埌鏂扮殑BufferedImage涓�
+            Graphics2D g2d = combinedImage.createGraphics();
+            g2d.setColor(Color.WHITE);
+            g2d.fillRect(0, 0, qrCodeWidth, 900);
+            g2d.drawImage(qrCodeImage, 0, 0, null);
+
+            // 璁剧疆鏂囨湰鏍峰紡
+            Font font = new Font("BLACK", Font.PLAIN, textSize);
+            g2d.setFont(font);
+            g2d.setColor(Color.BLACK); // 鏂囨湰棰滆壊
+
+            // 缁樺埗鏂囨湰鍒板浘鐗囦笅鏂�
+            FontMetrics metrics = g2d.getFontMetrics();
+            int textX = (qrCodeWidth - metrics.stringWidth("娌堜笜鎯犱紒鎵ф硶")) / 2;
+            int textX1 = (qrCodeWidth - metrics.stringWidth(name)) / 2;
+            int textY = qrCodeHeight + textPadding;
+            g2d.drawString("娌堜笜鎯犱紒鎵ф硶", textX, textY);
+            g2d.drawString(name, textX1, textY+50);
+
+            g2d.dispose();
+
+            // 鎸囧畾瀛樺偍鍥剧墖鐨勮矾寰�
+            Path filePath = Paths.get(filePathStr);
+
+            // 纭繚鏂囦欢璺緞鐨勭埗鐩綍瀛樺湪
+            filePath.getParent().toFile().mkdirs();
+
+            // 淇濆瓨鍥剧墖鍒版枃浠�
+            ImageIO.write(combinedImage, "PNG", filePath.toFile());
+
+            System.out.println("QR Code with text has been generated: " + filePath.toAbsolutePath());
+        } catch (WriterException | IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    private static BitMatrix generateQRCode(String text, int width, int height) throws WriterException
+    {
+        Map<EncodeHintType, Object> hints = new HashMap<>();
+        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+        return new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
+    }
+
 }
 
diff --git a/project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java b/project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java
new file mode 100644
index 0000000..de4c736
--- /dev/null
+++ b/project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java
@@ -0,0 +1,50 @@
+package com.project.common.utils.zip;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class ImageDownloader {
+
+    public static void main(String[] args) throws IOException {
+        File[] imageFiles = new File("images").listFiles();
+
+        if (imageFiles != null) {
+            File zipFile = new File("images.zip");
+            FileOutputStream fos = new FileOutputStream(zipFile);
+            ZipArchiveOutputStream zos = new ZipArchiveOutputStream(fos);
+
+            for (File imageFile : imageFiles) {
+                if (imageFile.isFile()) {
+                    ZipArchiveEntry entry = new ZipArchiveEntry(imageFile.getName());
+                    zos.putArchiveEntry(entry);
+
+                    FileInputStream fis = new FileInputStream(imageFile);
+                    byte[] buffer = new byte[1024];
+                    int length;
+                    while ((length = fis.read(buffer)) != -1) {
+                        zos.write(buffer, 0, length);
+                    }
+
+                    fis.close();
+                    zos.closeArchiveEntry();
+                }
+            }
+
+            zos.finish();
+            zos.close();
+            fos.close();
+
+            System.out.println("Images downloaded and packed into 'images.zip' successfully.");
+        } else {
+            System.out.println("No images found.");
+        }
+    }
+
+
+
+}
diff --git a/project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java b/project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java
new file mode 100644
index 0000000..619e89f
--- /dev/null
+++ b/project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java
@@ -0,0 +1,60 @@
+package com.project.common.utils.zip;
+
+import cn.hutool.core.util.ZipUtil;
+import com.project.common.config.ProjectConfig;
+import com.project.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+@Component
+@Slf4j
+public class ZipUtils {
+
+    // 鏈湴璧勬簮璺緞
+    private static String localPath = ProjectConfig.getQrcodePath();
+
+    /**
+     * 涓嬭浇澶氫釜鏂囦欢杞瑉ip鍘嬬缉鍖�
+     *
+     * @param list 鍥剧墖鏁扮粍
+     * @param response  鍝嶅簲
+     */
+    public static void downloadToZip(List<String> list, HttpServletResponse response)
+    {
+        int i = 0;
+        //濡傛灉鏈夐檮浠� 杩涜zip澶勭悊
+        if (StringUtils.isNotEmpty(list)) {
+            try {
+                //琚帇缂╂枃浠舵祦闆嗗悎
+                InputStream[] srcFiles = new InputStream[list.size()];
+                //琚帇缂╂枃浠跺悕绉�
+                String[] srcFileNames = new String[list.size()];
+                for (String path : list) {
+                    //浠ヤ笅浠g爜涓鸿幏鍙栧浘鐗噄nputStream
+                    String s = path.substring(path.lastIndexOf("/"));
+                    InputStream ins = Files.newInputStream(Paths.get(localPath + s));
+                    //濉炲叆娴佹暟缁勪腑
+                    srcFiles[i] = ins;
+                    srcFileNames[i] = path.substring(path.lastIndexOf("/",path.lastIndexOf("-")));
+                    i++;
+                }
+                response.setCharacterEncoding("UTF-8");
+                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("涓嬭浇.zip", "UTF-8"));
+                //澶氫釜鏂囦欢鍘嬬缉鎴愬帇缂╁寘杩斿洖
+                ZipUtil.zip(response.getOutputStream(), srcFileNames, srcFiles);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+}
+
diff --git a/project-system/src/main/java/com/project/system/domain/SysCompany.java b/project-system/src/main/java/com/project/system/domain/SysCompany.java
index 9e9858a..11b9aa3 100644
--- a/project-system/src/main/java/com/project/system/domain/SysCompany.java
+++ b/project-system/src/main/java/com/project/system/domain/SysCompany.java
@@ -82,6 +82,9 @@
     @ApiModelProperty("鑷畾涔夋帓搴�")
     private Integer sortNum;
 
+    @ApiModelProperty("浼佷笟浜岀淮鐮�")
+    private String qrcodeImg;
+
 
 
 
diff --git a/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java b/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java
index c99e3a2..593de96 100644
--- a/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java
+++ b/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java
@@ -93,6 +93,9 @@
 	@ApiModelProperty("澶囨敞")
 	private String remark;
 
+	@ApiModelProperty("浼佷笟浜岀淮鐮�")
+	private String qrcodeImg;
+
 
 	@ApiModelProperty("閿欒淇℃伅鏁版嵁")
 	private List<ImportError> errorList;
diff --git a/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java b/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java
index c3f46d2..08f121d 100644
--- a/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java
+++ b/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java
@@ -1,28 +1,29 @@
 package com.project.system.service.impl;
 
+import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.project.common.constant.UserConstants;
 import com.project.common.core.domain.entity.SysUser;
 import com.project.common.core.domain.model.ImportError;
 import com.project.common.exception.base.BaseException;
 import com.project.common.utils.SecurityUtils;
+import com.project.common.utils.StringUtils;
+import com.project.common.utils.file.ImageUtils;
+import com.project.system.domain.SysCompany;
+import com.project.system.domain.bo.editBo.SysCompanyBo;
+import com.project.system.domain.bo.queryBo.SysCompanyQueryBo;
 import com.project.system.domain.vo.SysCompanyResultVo;
+import com.project.system.domain.vo.SysCompanyVo;
+import com.project.system.mapper.SysCompanyMapper;
+import com.project.system.service.ISysCompanyService;
 import com.project.system.service.ISysUserService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import cn.hutool.core.convert.Convert;
-import com.project.common.utils.StringUtils;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springframework.transaction.annotation.Transactional;
-import com.project.system.domain.vo.SysCompanyVo;
-import com.project.system.domain.bo.editBo.SysCompanyBo;
-import com.project.system.domain.bo.queryBo.SysCompanyQueryBo;
-import com.project.system.domain.SysCompany;
-import com.project.system.mapper.SysCompanyMapper;
-import com.project.system.service.ISysCompanyService;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -51,6 +52,11 @@
     public SysCompanyVo queryById(Long companyId)
     {
         SysCompany db = this.baseMapper.selectById(companyId);
+        if (StringUtils.isEmpty(db.getQrcodeImg())){
+            String qrcode = ImageUtils.createQrcode(db.getCompanyCode(), db.getCompanyName(), "2");
+            db.setQrcodeImg(qrcode);
+            this.updateById(db);
+        }
         return Convert.convert(SysCompanyVo.class , db);
     }
 
@@ -62,6 +68,9 @@
         SysCompany add = Convert.convert(SysCompany.class, bo);
         add.setCompanyStatus(1);
         validEntityBeforeSave(add);
+        String qrcode = ImageUtils.createQrcode(add.getCompanyCode(), add.getCompanyName(), "2");
+        add.setQrcodeImg(qrcode);
+
         boolean save = this.save(add);
         if (isAddUser(bo.getCompanyPhone())){
             addCompanyUser(add, 0);
@@ -156,6 +165,10 @@
             }
         });
         List<SysCompany> companies = Convert.toList(SysCompany.class, resultVo.getVoList());
+        companies.forEach(e->{
+            String qrcode = ImageUtils.createQrcode(e.getCompanyCode(), e.getCompanyName(), "2");
+            e.setQrcodeImg(qrcode);
+        });
         boolean b = this.saveOrUpdateBatch(companies);
         for (SysCompany company : companies) {
             if (isAddUser(company.getCompanyPhone())){
@@ -168,6 +181,7 @@
 
 //-------------------------------------------------------------------------------------
 
+
     /**
      * 淇濆瓨鍓嶆牎楠�
      * @param entity    鍙傛暟

--
Gitblit v1.9.1