From e24c81afde61a58d297f4b378fae95fe3385984e Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期五, 24 四月 2026 17:34:17 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/tcm-training
---
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java | 42 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java
index 2aef462..0877e3e 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java
@@ -17,6 +17,7 @@
import com.tcm.training.admin.system.service.AppVersionSettingsAppService;
import com.tcm.training.admin.system.vo.AppVersionCheckVO;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
@@ -69,6 +70,7 @@
result.setClinicName(trimToEmpty(clinic.getName()));
result.setInviteCode(inviteCode);
result.setShareLandingUrl(shareLandingUrl);
+ result.setQrCodeImageUrl(buildQrCodeImageUrl(inviteCode));
result.setQrCodeDataUrl(buildQrCodeDataUrl(shareLandingUrl));
result.setBoundUsers(listBoundUsers(doctorUser));
return result;
@@ -200,6 +202,46 @@
}
/**
+ * 构建二维码图片公开访问地址。
+ */
+ private String buildQrCodeImageUrl(String inviteCode) {
+ String landingBaseUrl = trimToNull(appShareProperties.getLandingBaseUrl());
+ if (landingBaseUrl == null) {
+ throw new IllegalArgumentException("邀请下载页地址暂未配置");
+ }
+ int schemeIndex = landingBaseUrl.indexOf("://");
+ if (schemeIndex < 0) {
+ throw new IllegalArgumentException("邀请下载页地址格式不正确");
+ }
+ int hostEndIndex = landingBaseUrl.indexOf('/', schemeIndex + 3);
+ String origin = hostEndIndex >= 0 ? landingBaseUrl.substring(0, hostEndIndex) : landingBaseUrl;
+ String normalizedInviteCode = trimToNull(inviteCode);
+ if (!StringUtils.hasText(normalizedInviteCode)) {
+ throw new IllegalArgumentException("邀请码不能为空");
+ }
+ return origin + "/api/open/app-share/qrcode-image?inviteCode=" + normalizedInviteCode;
+ }
+
+ /**
+ * 生成二维码 PNG 图片字节流。
+ */
+ public byte[] generateQrcodeImage(String inviteCode) {
+ Clinic clinic = findClinicByInviteCode(inviteCode);
+ if (clinic == null) {
+ throw new IllegalArgumentException("邀请码无效");
+ }
+ String shareLandingUrl = buildShareLandingUrl(requireInviteCode(clinic));
+ try {
+ BufferedImage image = QrCodeUtil.generate(shareLandingUrl, 400, 400);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ ImgUtil.write(image, "png", outputStream);
+ return outputStream.toByteArray();
+ } catch (Exception ex) {
+ throw new IllegalArgumentException("生成分享二维码失败");
+ }
+ }
+
+ /**
* 构建绑定用户展示项。
*/
private AppShareBoundUserItemVO toBoundUserItem(AppUser user) {
--
Gitblit v1.7.1