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