From f7196dff53805c9d5e6c945e5334ce4e4423d779 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 15 三月 2024 18:02:23 +0800
Subject: [PATCH] 题目导入模板,待完善

---
 src/main/java/com/mindskip/xzs/excel/SelectExcel.java                                |   53 +++++++++++++++++
 src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java |    2 
 src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java                              |   60 ++++++++++++++++++++
 src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java              |   16 +++++
 pom.xml                                                                              |   10 +++
 5 files changed, 140 insertions(+), 1 deletions(-)

diff --git a/pom.xml b/pom.xml
index e2408eb..74a97c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,7 @@
         <mysql.version>8.0.17</mysql.version>
         <spring.boot.version>2.1.6.RELEASE</spring.boot.version>
         <mapstruct.version>1.4.1.Final</mapstruct.version>
+        <easyExcel.version>3.3.2</easyExcel.version>
     </properties>
 
 
@@ -69,6 +70,15 @@
 
 
     <dependencies>
+
+        <!-- easy excel -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>${easyExcel.version}</version>
+        </dependency>
+
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java
index 62b472d..97e109b 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java
@@ -79,7 +79,7 @@
                     .and().authenticationProvider(restAuthenticationProvider)
                     .authorizeRequests()
                     .antMatchers(securityIgnoreUrls.toArray(ignores)).permitAll()
-                    .antMatchers("/api/admin/department/list", "/api/admin/video/getList","/api/admin/user/conversion","/api/admin/examPaperGrade/updates").permitAll()
+                    .antMatchers("/api/admin/department/list", "/api/admin/video/getList","/api/admin/user/conversion","/api/admin/examPaperGrade/updates","/api/admin/question/download/question/import/temp").permitAll()
                     // todo 璁剧疆閮ㄩ棬绠$悊鍛樺彲浠ョ湅鐨勮姹�
                     .antMatchers("/api/admin/**").hasAnyRole(RoleEnum.ADMIN.getName(), RoleEnum.DEPT_ADMIN.getName())
                     .antMatchers("/api/student/**").hasRole(RoleEnum.STUDENT.getName())
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
index dec03bc..1cdabdb 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
@@ -1,5 +1,7 @@
 package com.mindskip.xzs.controller.admin;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.metadata.data.HyperlinkData;
 import com.mindskip.xzs.base.BaseApiController;
 import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.base.SystemCode;
@@ -9,6 +11,7 @@
 import com.mindskip.xzs.domain.enums.QuestionSourceEnum;
 import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
 import com.mindskip.xzs.domain.question.QuestionObject;
+import com.mindskip.xzs.excel.SelectExcel;
 import com.mindskip.xzs.repository.DepartmentMapper;
 import com.mindskip.xzs.repository.SubjectMapper;
 import com.mindskip.xzs.service.*;
@@ -18,12 +21,18 @@
 import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
 import com.mindskip.xzs.viewmodel.admin.question.*;
 import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.vo.QuestionImportVO;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.DataValidationHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -121,6 +130,13 @@
         return RestResponse.ok();
     }
 
+    @GetMapping("/download/question/import/temp")
+    public void getImportTemp(HttpServletResponse response) throws IOException {
+        String fileName = URLEncoder.encode("棰樼洰瀵煎叆妯℃澘", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), QuestionImportVO.class).registerWriteHandler(new SelectExcel()).sheet("妯℃澘").doWrite(new ArrayList());
+    }
+
     @PostMapping("/import")
     public RestResponse importUser(@RequestPart("file") MultipartFile file) throws Exception {
         List<QuestionEditVO> questionEditVOS = ExcelUtils.readMultipartFile(file, QuestionEditVO.class)
diff --git a/src/main/java/com/mindskip/xzs/excel/SelectExcel.java b/src/main/java/com/mindskip/xzs/excel/SelectExcel.java
new file mode 100644
index 0000000..4ad8e22
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/excel/SelectExcel.java
@@ -0,0 +1,53 @@
+package com.mindskip.xzs.excel;
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.handler.AbstractCellWriteHandler;
+import com.alibaba.excel.write.handler.CellWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 璁剧疆easy-excel涓嬫媺澶勭悊鍣�
+ *
+ * @author锛歺p
+ * @date锛�2024/3/15 17:27
+ */
+public class SelectExcel implements CellWriteHandler {
+
+    private String[] questionTypeList = {"鍗曢��", "澶氶��", "鍒ゆ柇"};
+    private String[] subjectTypeList = {"a","b"};
+
+    @Override
+    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
+        // 鑾峰彇sheet瀵硅薄
+        Sheet sheet = writeSheetHolder.getSheet();
+
+
+        // 鑾峰彇鏁版嵁鏍¢獙helper
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+
+        // 璁剧疆棰樼洰涓嬫媺鑼冨洿锛岀涓�鍒楋紝500琛屽唴
+        CellRangeAddressList questionTypeRange = new CellRangeAddressList(0, 500, 0, 0);
+        // 娣诲姞棰樼洰涓嬫媺
+        DataValidationConstraint questionConstraint = dataValidationHelper.createExplicitListConstraint(questionTypeList);
+        DataValidation questionValidation = dataValidationHelper.createValidation(questionConstraint, questionTypeRange);
+        sheet.addValidationData(questionValidation);
+
+
+        // 璁剧疆璇剧洰涓嬫媺鑼冨洿锛岀2鍒楋紝500琛屽唴
+        CellRangeAddressList subjectTypeRange = new CellRangeAddressList(0, 500, 1, 1);
+        // 娣诲姞璇剧洰涓嬫媺
+        DataValidationConstraint subjectConstraint = dataValidationHelper.createExplicitListConstraint(subjectTypeList);
+        DataValidation subjectValidation = dataValidationHelper.createValidation(subjectConstraint, subjectTypeRange);
+        sheet.addValidationData(subjectValidation);
+
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java b/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java
new file mode 100644
index 0000000..3894850
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/vo/QuestionImportVO.java
@@ -0,0 +1,60 @@
+package com.mindskip.xzs.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.mindskip.xzs.viewmodel.admin.question.QuestionEditItemVM;
+import lombok.Data;
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/3/15 17:06
+ */
+@Data
+@ColumnWidth(20)
+public class QuestionImportVO {
+
+    @ExcelProperty("棰樼洰绫诲瀷")
+    private Integer questionType;
+
+    @ExcelProperty("璇剧洰")
+    private String subjectName;
+
+    @ColumnWidth(80)
+    @ExcelProperty("棰樺共")
+    private String title;
+
+    // 閫夐」鍐呭
+    @ColumnWidth(60)
+    @ExcelProperty("閫夐」鍜岀瓟妗�")
+    private List<QuestionEditItemVM> items;
+
+    // 瑙f瀽
+    @ColumnWidth(30)
+    @ExcelProperty("瑙f瀽")
+    private String analyze;
+
+    @ExcelProperty("绛旀")
+    private String correct;
+
+    // 棰樼洰鍒嗘暟
+    @ExcelProperty("棰樼洰鍒嗘暟")
+    private String score;
+
+    // 棰樼洰闅惧害
+    @ExcelProperty("棰樼洰闅惧害")
+    private Integer difficult;
+
+    @ExcelProperty("閫夐」A")
+    private String a;
+
+    @ExcelProperty("閫夐」B")
+    private String b;
+
+    @ExcelProperty("閫夐」C")
+    private String c;
+
+    @ExcelProperty("閫夐」D")
+    private String d;
+
+}

--
Gitblit v1.8.0