package com.ruoyi.web.controller.smartor; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.mchange.v2.uid.UidUtils; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.framework.config.ServerConfig; import com.smartor.domain.Question; import com.smartor.domain.SvyLibTemplate; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.util.*; @Slf4j @Api(description = "问卷二维码") @RestController @RequestMapping("/qrcode") public class QRCodeController { private final Configuration configuration; public QRCodeController(Configuration configuration) { this.configuration = configuration; } @Value("${ruoyi.profile}") private String profile; @Autowired private ServerConfig serverConfig; /** * 问卷题目 * * @param reqid 问卷ID * userid 用户ID * @return * @throws IOException * @throws TemplateException */ @ResponseBody @GetMapping(value = "/generateStaticHtml/{reqid}/{userid}", produces = MediaType.TEXT_HTML_VALUE) public String generateStaticHtml(@PathVariable("reqid") String reqid, @PathVariable("userid") String userid) throws IOException, TemplateException { // 创建Freemarker配置 Configuration configuration = new Configuration(Configuration.VERSION_2_3_31); configuration.setClassForTemplateLoading(SvyLibTemplateController.class, "/template"); configuration.setDefaultEncoding("UTF-8"); try { // 加载模板 Template template = configuration.getTemplate("question.ftl"); // 准备题目数据 List questions = new ArrayList<>(); // 单选题 List singleChoiceOptions = new ArrayList<>(); singleChoiceOptions.add("Option 1"); singleChoiceOptions.add("Option 2"); singleChoiceOptions.add("Option 3"); Question singleChoiceQuestion = new Question("singleChoice", "单选题111", "单选题题目1:", singleChoiceOptions); List singleChoiceOptions2 = new ArrayList<>(); singleChoiceOptions2.add("Option 4"); singleChoiceOptions2.add("Option 5"); singleChoiceOptions2.add("Option 6"); Question singleChoiceQuestion2 = new Question("singleChoice", "单选题222", "单选题题目2:", singleChoiceOptions2); questions.add(singleChoiceQuestion); questions.add(singleChoiceQuestion2); // 多选题 List multipleChoiceOptions = new ArrayList<>(); multipleChoiceOptions.add("Option A"); multipleChoiceOptions.add("Option B"); multipleChoiceOptions.add("Option C"); Question multipleChoiceQuestion = new Question("multipleChoice", "多选题1", "Question 2: Select multiple options", multipleChoiceOptions); questions.add(multipleChoiceQuestion); // 问答题 Question openEndedQuestion = new Question("openEnded", "问答题题", "问答题题目1", null); questions.add(openEndedQuestion); // 准备模板数据 Map data = new HashMap<>(); data.put("questions", questions); // 渲染模板 StringWriter writer = new StringWriter(); template.process(data, writer); String renderedTemplate = writer.toString(); return writer.toString(); // 返回模板内容给客户端 // System.out.println(renderedTemplate); // 这里只是示例,实际应用中应将内容返回给客户端进行展示 } catch (IOException | TemplateException e) { e.printStackTrace(); } return null; } /** * @param url 问卷ID * @param url 用户ID */ @ApiOperation("获取问卷二维码") @PostMapping(value = "/getQRcode") public AjaxResult getQRcode(@RequestParam("url") String url) { log.info("获取问卷二维码的入参:{}", url); String uuid = UUID.randomUUID().toString().replace("-", ""); String filePath = profile + "\\qrpath" + "\\" + uuid + ".png"; // 保存二维码图像的文件路径 //判断文件夹是否存在 File file = new File(profile + "\\qrpath"); if (!file.exists()) { file.mkdirs(); } generateQRCode(url, filePath); return AjaxResult.success(serverConfig.getUrl() + "/profile/qrpath/" + uuid + ".png"); } private void generateQRCode(String url, String filePath) { QRCodeWriter qrCodeWriter = new QRCodeWriter(); try { BitMatrix bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, 500, 500); File outputFile = new File(filePath); MatrixToImageWriter.writeToPath(bitMatrix, "PNG", outputFile.toPath()); } catch (WriterException | IOException e) { e.printStackTrace(); } } /** * 问券结果处理 * * @param request */ @PostMapping(value = "/getFormDate") public void getFormDate(HttpServletRequest request) { Map formData = request.getParameterMap(); System.out.println(formData.toString()); } }