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.dto.statistics.QuestionnaireStatistics;
|
||||||
import com.ycwl.basic.integration.questionnaire.service.QuestionnaireIntegrationService;
|
import com.ycwl.basic.integration.questionnaire.service.QuestionnaireIntegrationService;
|
||||||
import com.ycwl.basic.integration.common.response.PageResponse;
|
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.ApiResponse;
|
||||||
|
import com.ycwl.basic.utils.WxMpUtil;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,6 +34,7 @@ import java.util.Map;
|
|||||||
public class QuestionnaireV2Controller {
|
public class QuestionnaireV2Controller {
|
||||||
|
|
||||||
private final QuestionnaireIntegrationService questionnaireIntegrationService;
|
private final QuestionnaireIntegrationService questionnaireIntegrationService;
|
||||||
|
private final ScenicRepository scenicRepository;
|
||||||
|
|
||||||
// ========== 问卷管理 CRUD 操作 ==========
|
// ========== 问卷管理 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