From 9226dfff1d45f953ce8ce71631987d27e7fbf462 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 19 Sep 2025 17:28:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(questionnaire):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E9=97=AE=E5=8D=B7=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 downloadQrCode 方法,用于生成和下载问卷小程序二维码 - 集成微信小程序配置和二维码生成工具 - 实现问卷二维码的生成、上传和访问控制 --- .../pc/QuestionnaireV2Controller.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/main/java/com/ycwl/basic/controller/pc/QuestionnaireV2Controller.java b/src/main/java/com/ycwl/basic/controller/pc/QuestionnaireV2Controller.java index 691dc357..a6768225 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/QuestionnaireV2Controller.java +++ b/src/main/java/com/ycwl/basic/controller/pc/QuestionnaireV2Controller.java @@ -6,12 +6,19 @@ import com.ycwl.basic.integration.questionnaire.dto.questionnaire.QuestionnaireR import com.ycwl.basic.integration.questionnaire.dto.statistics.QuestionnaireStatistics; import com.ycwl.basic.integration.questionnaire.service.QuestionnaireIntegrationService; import com.ycwl.basic.integration.common.response.PageResponse; +import com.ycwl.basic.model.pc.mp.MpConfigEntity; +import com.ycwl.basic.repository.ScenicRepository; +import com.ycwl.basic.storage.StorageFactory; +import com.ycwl.basic.storage.adapters.IStorageAdapter; +import com.ycwl.basic.storage.enums.StorageAcl; import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.WxMpUtil; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import java.io.File; import java.util.Map; /** @@ -27,6 +34,7 @@ import java.util.Map; public class QuestionnaireV2Controller { private final QuestionnaireIntegrationService questionnaireIntegrationService; + private final ScenicRepository scenicRepository; // ========== 问卷管理 CRUD 操作 ========== @@ -261,4 +269,45 @@ public class QuestionnaireV2Controller { } } + /** + * 下载问卷小程序二维码 + */ + @GetMapping("/{id}/QRCode") + public ApiResponse downloadQrCode(@PathVariable Long id) { + log.info("下载问卷小程序二维码, id: {}", id); + try { + // 获取问卷详情 + QuestionnaireResponse questionnaire = questionnaireIntegrationService.getQuestionnaire(id); + if (questionnaire == null) { + return ApiResponse.fail("问卷不存在"); + } + + MpConfigEntity mpConfig = scenicRepository.getScenicMpConfig(3930324797233434624L); + if (mpConfig == null) { + return ApiResponse.fail("小程序配置不存在"); + } + + String appId = mpConfig.getAppId(); + String appSecret = mpConfig.getAppSecret(); + String appState = mpConfig.getState(); + String path = "pages/questionnaire/index?id=" + id; + String filePath = "qr_code_questionnaire_" + id + ".jpg"; + + IStorageAdapter adapter = StorageFactory.use(); + if (adapter.isExists(filePath)) { + return ApiResponse.success(adapter.getUrl(filePath)); + } + + WxMpUtil.generateWXAQRCode(appId, appSecret, appState, path, filePath); + File file = new File(filePath); + String s = adapter.uploadFile(null, file, filePath); + file.delete(); + adapter.setAcl(StorageAcl.PUBLIC_READ, filePath); + return ApiResponse.success(s); + } catch (Exception e) { + log.error("生成问卷二维码失败, id: {}", id, e); + return ApiResponse.fail("生成二维码失败: " + e.getMessage()); + } + } + } \ No newline at end of file