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()); 
 | 
    } 
 | 
  
 | 
} 
 |