liusheng
21 小时以前 e4e220916dd2a4aa649a9b0162e5b5ed0dc9d7e5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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());
    }
 
}