You've already forked FrameTour-BE
feat(questionnaire): 添加下载问卷小程序二维码功能
- 新增 downloadQrCode 方法,用于生成和下载问卷小程序二维码 - 集成微信小程序配置和二维码生成工具 - 实现问卷二维码的生成、上传和访问控制
This commit is contained in:
@@ -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<String> 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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user