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<Question> questions = new ArrayList<>();
|
|
// 单选题
|
List<String> singleChoiceOptions = new ArrayList<>();
|
singleChoiceOptions.add("Option 1");
|
singleChoiceOptions.add("Option 2");
|
singleChoiceOptions.add("Option 3");
|
Question singleChoiceQuestion = new Question("singleChoice", "单选题111", "单选题题目1:", singleChoiceOptions);
|
|
List<String> 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<String> 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<String, Object> 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<String, String[]> formData = request.getParameterMap();
|
System.out.println(formData.toString());
|
}
|
|
}
|