liusheng
2024-06-12 6d51501ca93f5bf46759f851988650477cf32e6c
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
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.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 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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Api(description = "问卷二维码")
@RestController
@RequestMapping("/qrcode")
public class QRCodeController {
 
    private final Configuration configuration;
 
    public QRCodeController(Configuration configuration) {
        this.configuration = configuration;
    }
 
    /**
     * 问卷题目
     *
     * @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 reqid  问卷ID
     * @param userid 用户ID
     */
    @ApiOperation("获取问卷二维码")
    @GetMapping(value = "/getQRcode/{reqid}/{userid}")
    public void getQRcode(@PathVariable("reqid") String reqid, @PathVariable("userid") String userid) {
        String url = "http://192.168.2.10:8080/smartor/svytitle/generateStaticHtml";
        String filePath = "D:\\daima\\qrcode.png"; // 保存二维码图像的文件路径
 
        generateQRCode(url, filePath);
 
        System.out.println("QR Code generated successfully!");
    }
 
    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());
    }
 
}