From d9c26dcc37fe7f9808c21fd2b05639059e169252 Mon Sep 17 00:00:00 2001 From: shijie <648688341@qq.com> Date: Mon, 24 Aug 2020 10:36:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E5=9F=9F=E5=92=8C=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=B1=BB=E5=9E=8B=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../msdw/tms/api/QuestionsControllerApi.java | 2 +- .../com/msdw/tms/common/utils/Constant.java | 6 ++--- .../tms/common/utils/poi/ExcelExportUtil.java | 2 +- .../java/com/msdw/tms/config/CorsConfig.java | 19 +++++++++++++++ .../tms/controller/QuestionsController.java | 6 ++--- .../com/msdw/tms/entity/QuestionsEntity.java | 2 +- .../msdw/tms/entity/vo/QuestionsDetailVO.java | 2 +- .../com/msdw/tms/entity/vo/QuestionsVO.java | 2 +- .../msdw/tms/service/QuestionsService.java | 3 +++ .../service/impl/QuestionsServiceImpl.java | 22 +++++++++++++++++- .../excel-template/试题导入模板.xlsx | Bin 11155 -> 11147 bytes 11 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/msdw/tms/config/CorsConfig.java diff --git a/src/main/java/com/msdw/tms/api/QuestionsControllerApi.java b/src/main/java/com/msdw/tms/api/QuestionsControllerApi.java index eef6de3..670c8cc 100644 --- a/src/main/java/com/msdw/tms/api/QuestionsControllerApi.java +++ b/src/main/java/com/msdw/tms/api/QuestionsControllerApi.java @@ -87,6 +87,6 @@ public interface QuestionsControllerApi { * 通过excel批量导出 */ @ApiOperation(value = "通过excel批量导出", notes = "通过excel批量导出") - R exportQuestion() throws IOException; + R exportQuestion(HttpServletResponse response) throws Exception; } diff --git a/src/main/java/com/msdw/tms/common/utils/Constant.java b/src/main/java/com/msdw/tms/common/utils/Constant.java index 9562d95..14962fa 100644 --- a/src/main/java/com/msdw/tms/common/utils/Constant.java +++ b/src/main/java/com/msdw/tms/common/utils/Constant.java @@ -205,17 +205,17 @@ public class Constant { } /** - * 是否删除 + * 是否删除:0使用,1删除,默认0使用 */ public enum IsDel { /** * 删除 */ - DEL(0, "删除"), + DEL(1, "删除"), /** * 不删除 */ - NOT_DEL(1, "不删除"); + NOT_DEL(0, "不删除"); private Integer type; //类型 private String desc; //描述 diff --git a/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java b/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java index 6da79eb..7c011a5 100644 --- a/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java +++ b/src/main/java/com/msdw/tms/common/utils/poi/ExcelExportUtil.java @@ -77,7 +77,7 @@ public class ExcelExportUtil { workbook.write(response.getOutputStream()); } - public CellStyle[] getTemplateStyles(Row row) { + CellStyle[] getTemplateStyles(Row row) { CellStyle[] styles = new CellStyle[row.getLastCellNum()]; for (int i = 0; i < row.getLastCellNum(); i++) { styles[i] = row.getCell(i).getCellStyle(); diff --git a/src/main/java/com/msdw/tms/config/CorsConfig.java b/src/main/java/com/msdw/tms/config/CorsConfig.java new file mode 100644 index 0000000..5250d87 --- /dev/null +++ b/src/main/java/com/msdw/tms/config/CorsConfig.java @@ -0,0 +1,19 @@ +package com.msdw.tms.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class CorsConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") + .allowCredentials(true) + .maxAge(3600) + .allowedHeaders("*"); + } +} diff --git a/src/main/java/com/msdw/tms/controller/QuestionsController.java b/src/main/java/com/msdw/tms/controller/QuestionsController.java index d8c056c..5d823c9 100644 --- a/src/main/java/com/msdw/tms/controller/QuestionsController.java +++ b/src/main/java/com/msdw/tms/controller/QuestionsController.java @@ -151,9 +151,9 @@ public class QuestionsController implements QuestionsControllerApi { @Override @GetMapping("/export") - public R exportQuestion() throws IOException { - // List<> list = questionsService.exportQuestion(); - return null; + public R exportQuestion(HttpServletResponse response) throws Exception { + questionsService.exportQuestion(response); + return R.ok(); } } diff --git a/src/main/java/com/msdw/tms/entity/QuestionsEntity.java b/src/main/java/com/msdw/tms/entity/QuestionsEntity.java index 03600ef..20cc204 100644 --- a/src/main/java/com/msdw/tms/entity/QuestionsEntity.java +++ b/src/main/java/com/msdw/tms/entity/QuestionsEntity.java @@ -71,7 +71,7 @@ public class QuestionsEntity implements Serializable { */ private Integer isEnable; /** - * 是否删除:1使用,0删除,默认1使用 + * 是否删除:0使用,1删除,默认0使用 */ private Integer isDel; /** diff --git a/src/main/java/com/msdw/tms/entity/vo/QuestionsDetailVO.java b/src/main/java/com/msdw/tms/entity/vo/QuestionsDetailVO.java index 9d32676..9851391 100644 --- a/src/main/java/com/msdw/tms/entity/vo/QuestionsDetailVO.java +++ b/src/main/java/com/msdw/tms/entity/vo/QuestionsDetailVO.java @@ -89,7 +89,7 @@ public class QuestionsDetailVO implements Serializable { */ private Integer isEnable; /** - * 是否删除:1使用,0删除,默认1使用 + * 是否删除:0使用,1删除,默认0使用 */ private Integer isDel; /** diff --git a/src/main/java/com/msdw/tms/entity/vo/QuestionsVO.java b/src/main/java/com/msdw/tms/entity/vo/QuestionsVO.java index 64a5c14..9c7cf9c 100644 --- a/src/main/java/com/msdw/tms/entity/vo/QuestionsVO.java +++ b/src/main/java/com/msdw/tms/entity/vo/QuestionsVO.java @@ -67,7 +67,7 @@ public class QuestionsVO implements Serializable { */ private Integer isEnable; /** - * 是否删除:1使用,0删除,默认1使用 + * 是否删除:0使用,1删除,默认0使用 */ private Integer isDel; /** diff --git a/src/main/java/com/msdw/tms/service/QuestionsService.java b/src/main/java/com/msdw/tms/service/QuestionsService.java index f3d4544..b1f5fec 100644 --- a/src/main/java/com/msdw/tms/service/QuestionsService.java +++ b/src/main/java/com/msdw/tms/service/QuestionsService.java @@ -9,6 +9,7 @@ import com.msdw.tms.entity.request.QuestionsQueryRequest; import com.msdw.tms.entity.request.QuestionsUpdateRequest; import com.msdw.tms.entity.vo.EvaluationVO; import com.msdw.tms.entity.vo.QuestionsDetailVO; +import com.msdw.tms.entity.vo.QuestionsVO; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -44,5 +45,7 @@ public interface QuestionsService extends IService { void downloadFiles(HttpServletResponse response) throws IOException; EvaluationVO evaluation(); + + void exportQuestion(HttpServletResponse response) throws Exception; } diff --git a/src/main/java/com/msdw/tms/service/impl/QuestionsServiceImpl.java b/src/main/java/com/msdw/tms/service/impl/QuestionsServiceImpl.java index 6ece057..feba884 100644 --- a/src/main/java/com/msdw/tms/service/impl/QuestionsServiceImpl.java +++ b/src/main/java/com/msdw/tms/service/impl/QuestionsServiceImpl.java @@ -8,6 +8,7 @@ import com.msdw.tms.common.utils.Constant; import com.msdw.tms.common.utils.FilesResult; import com.msdw.tms.common.utils.PageUtils; import com.msdw.tms.common.utils.Query; +import com.msdw.tms.common.utils.poi.ExcelExportUtil; import com.msdw.tms.common.utils.poi.ExcelImportUtil; import com.msdw.tms.dao.QuestionsDao; import com.msdw.tms.entity.QuestionsEntity; @@ -27,12 +28,14 @@ import com.msdw.tms.service.QuestionsService; import com.msdw.tms.service.XlsxTemplateService; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; @@ -278,7 +281,8 @@ public class QuestionsServiceImpl extends ServiceImpl list = new ExcelImportUtil(QuestionsImportRequest.class).readExcel(file.getInputStream(), Constant.STARTING_ROW, Constant.STARTING_CELL); + List list = new ExcelImportUtil(QuestionsImportRequest.class) + .readExcel(file.getInputStream(), Constant.STARTING_ROW, Constant.STARTING_CELL); if (list == null || list.size() == 0) { ExceptionCast.cast(CommonCode.INVALID_PARAM); @@ -413,6 +417,22 @@ public class QuestionsServiceImpl extends ServiceImpl list = this.list().stream().map(item -> { + QuestionsImportRequest importRequest = new QuestionsImportRequest(); + BeanUtils.copyProperties(item, importRequest); + return importRequest; + }).collect(Collectors.toList()); + + //2.加载模板流数据 + org.springframework.core.io.Resource resource = new ClassPathResource("excel-template/试题导入模板.xlsx"); + FileInputStream fis = new FileInputStream(resource.getFile()); + new ExcelExportUtil(QuestionsImportRequest.class, Constant.STARTING_ROW, Constant.STARTING_CELL). + export(response, fis, list, "试题表.xlsx"); + } + private Set getRandomList(int len, List list) { Set set = new HashSet<>(); Random random = new Random(); diff --git a/src/main/resources/excel-template/试题导入模板.xlsx b/src/main/resources/excel-template/试题导入模板.xlsx index 30c5e1403a0831064c7070de3ab74e5b19a87302..7cc72303e7167eaaaa0cc247893d750072923287 100644 GIT binary patch delta 4572 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 delta 4600 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 E0I}Yf)Bpeg