From 3e7389ce16c44e4942bcf3fb2857f65b16da2cee Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Tue, 29 Jul 2025 11:34:44 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E5=AE=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pjcloud-integrated-biz/pom.xml | 10 +++
.../controller/AppVisitorController.java | 69 +++++++++++++------
.../controller/VisitorsController.java | 1 +
.../integrated/entity/VisitorUserEntity.java | 7 ++
.../integrated/entity/VisitorsEntity.java | 4 ++
.../service/impl/VisitorsServiceImpl.java | 34 +++++++--
.../resources/mapper/VisitorUserMapper.xml | 2 +
.../src/main/resources/application.yml | 15 +++-
8 files changed, 113 insertions(+), 29 deletions(-)
diff --git a/pjcloud-integrated/pjcloud-integrated-biz/pom.xml b/pjcloud-integrated/pjcloud-integrated-biz/pom.xml
index 02475f028..c64626fdd 100644
--- a/pjcloud-integrated/pjcloud-integrated-biz/pom.xml
+++ b/pjcloud-integrated/pjcloud-integrated-biz/pom.xml
@@ -13,6 +13,16 @@
pjcloud-integrated-biz
+
+ com.google.zxing
+ core
+ 3.5.2
+
+
+ com.google.zxing
+ javase
+ 3.5.2
+
com.auth0
java-jwt
diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/AppVisitorController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/AppVisitorController.java
index 3e979fc5a..adf4c46f6 100644
--- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/AppVisitorController.java
+++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/AppVisitorController.java
@@ -35,12 +35,20 @@ import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import cn.hutool.extra.qrcode.QrConfig;
-import java.awt.Image;
-import cn.hutool.core.img.ImgUtil;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.util.Base64;
+import javax.imageio.ImageIO;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
-import java.util.Base64;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import java.io.IOException;
/**
* 访客用户
@@ -127,11 +135,42 @@ public class AppVisitorController {
}
/**
- * 获取动态二维码(用于门卫/机器核验,5分钟刷新一次,预约未过期时一直可用)
- * @param token uuid生成的
- * @param logoUrl 可选logo图片url
+ * 生成真正的二维码(使用ZXing库)
*/
- @GetMapping("/visitorQr")
+ private String generateQRCode(String content) {
+ try {
+ QRCodeWriter qrCodeWriter = new QRCodeWriter();
+
+ // 设置二维码参数
+ Map hints = new HashMap<>();
+ hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+ hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+ hints.put(EncodeHintType.MARGIN, 2);
+
+ // 生成二维码矩阵
+ BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 300, 300, hints);
+
+ // 转换为图片
+ BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
+ for (int x = 0; x < 300; x++) {
+ for (int y = 0; y < 300; y++) {
+ image.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
+ }
+ }
+
+ // 转换为Base64
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ImageIO.write(image, "PNG", baos);
+ byte[] imageBytes = baos.toByteArray();
+ return Base64.getEncoder().encodeToString(imageBytes);
+
+ } catch (WriterException | IOException e) {
+ // 如果生成失败,返回一个简单的占位符
+ return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==";
+ }
+ }
+
+ @GetMapping("/app/visitorQr")
@Operation(summary = "获取动态二维码" , description = "用于门卫/机器核验,5分钟刷新一次,预约未过期时一直可用" )
public R