From 9744cc9e56515c6bcf446173b64ef88be0251940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Thu, 4 Jul 2024 18:21:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B8=82=E5=9C=BA=E6=B3=95?= =?UTF-8?q?=E8=A7=84=E5=BA=93=E6=B8=85=E4=B8=8B=E8=BD=BD=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MarketStandardController.java | 16 ----- .../MarketStandardDetailController.java | 31 +++++++++ .../ILawsMarketStandardDetailService.java | 16 +++++ .../service/ILawsMarketStandardService.java | 7 -- .../LawsMarketStandardDetailServiceImpl.java | 61 ++++++++++++++++-- .../impl/LawsMarketStandardServiceImpl.java | 31 +++------ .../src/main/resources/application-dev.yml | 1 + template/导入模板-市场法规清单.xlsx | Bin 0 -> 17058 bytes 8 files changed, 114 insertions(+), 49 deletions(-) create mode 100644 template/导入模板-市场法规清单.xlsx diff --git a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardController.java b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardController.java index c2c2b113..e55b901f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardController.java @@ -157,22 +157,6 @@ public class MarketStandardController { return Result.OK("修改成功!"); } - /** - * 导入 - * - * @param file - * @return - */ - @AutoLog(value = "外部标准库-市场法规清单-导入") - @ApiOperation(value = "外部标准库-市场法规清单-导入", notes = "外部标准库-市场法规清单-导入") - @ApiOperationSupport(order = 7) - @PostMapping(value = "/importExcel") - @RequiresPermissions("marketStandard:importExcel") - public Result importExcel(@RequestParam("file") @ApiParam("文件") MultipartFile file) { - List errorMessages = marketStandardService.importExcel(file); - return Result.OK(errorMessages); - } - /** * 发布 * diff --git a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardDetailController.java b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardDetailController.java index bfbbaca5..43eb9316 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardDetailController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/controller/MarketStandardDetailController.java @@ -56,4 +56,35 @@ public class MarketStandardDetailController { return lawsMarketStandardDetailService.getList(manifestId,manifestVersion); } + /** + * 导入 + * + * @param file + * @return + */ + @AutoLog(value = "外部标准库-市场法规清单-导入") + @ApiOperation(value = "外部标准库-市场法规清单-导入", notes = "外部标准库-市场法规清单-导入") + @ApiOperationSupport(order = 7) + @PostMapping(value = "/importExcel") + @RequiresPermissions("marketStandard:importExcel") + public Result importExcel(@RequestParam("file") @ApiParam("文件") MultipartFile file) { + List errorMessages = lawsMarketStandardDetailService.importExcel(file); + return Result.OK(errorMessages); + } + + /** + * 下载模板 + * + * @param + * @return + */ + @AutoLog(value = "外部标准库-市场法规清单-下载模板") + @ApiOperation(value = "外部标准库-市场法规清单-下载模板", notes = "外部标准库-市场法规清单-下载模板") + @ApiOperationSupport(order = 7) + @GetMapping(value = "/downloadTemplate") + @RequiresPermissions("marketStandard:importExcel") + public void downloadTemplate(HttpServletResponse response) { + lawsMarketStandardDetailService.downloadTemplate(response); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardDetailService.java b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardDetailService.java index fdc80a6c..4e644a98 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardDetailService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardDetailService.java @@ -3,6 +3,10 @@ package com.jero.modules.laws.marketStandard.service; import com.jero.common.api.vo.Result; import com.jero.modules.laws.marketStandard.entity.LawsMarketStandardDetail; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * @author ThinkBook @@ -18,4 +22,16 @@ public interface ILawsMarketStandardDetailService extends IService getList(String manifestId,String manifestVersion); + + /** + * 导入Excel + * @param file + * @return + */ + List importExcel(MultipartFile file); + + /** + * 下载模板 + */ + void downloadTemplate(HttpServletResponse response); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardService.java b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardService.java index a596617b..449288fb 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/ILawsMarketStandardService.java @@ -68,11 +68,4 @@ public interface ILawsMarketStandardService extends IService * @param marketStandardDetailVO */ void edit(MarketStandardDetailVO marketStandardDetailVO); - - /** - * 导入Excel - * @param file - * @return - */ - List importExcel(MultipartFile file); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardDetailServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardDetailServiceImpl.java index ee1e5a2a..e7699e00 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardDetailServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardDetailServiceImpl.java @@ -10,13 +10,19 @@ import com.jero.modules.laws.marketStandard.mapper.LawsMarketStandardDetailMappe import com.jero.modules.laws.marketStandard.service.ILawsMarketStandardService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.word.WordExportUtil; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.*; import java.util.stream.Collectors; /** @@ -28,6 +34,9 @@ import java.util.stream.Collectors; public class LawsMarketStandardDetailServiceImpl extends ServiceImpl implements ILawsMarketStandardDetailService { + @Value("${jero.path.template}") + private String templatePath; + @Resource private ILawsMarketStandardService marketStandardService; @@ -57,6 +66,50 @@ public class LawsMarketStandardDetailServiceImpl extends ServiceImpl list = list(queryLawsMarketStandardDetail); return Result.OK(list); } + + + @Override + public List importExcel(MultipartFile file) { + List list = new ArrayList<>(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setStartRows(4); + params.setNeedSave(true); + try { + return ExcelImportUtil.importExcel(file.getInputStream(), LawsMarketStandardDetail.class, params); + } catch (Exception e) { + log.error(e.getMessage(),e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return list; + } + + @Override + public void downloadTemplate(HttpServletResponse response) { + String templateName = "导入模板-市场法规清单.xlsx"; + // 模板存放地址 + String templateUrl = templatePath + File.separator + templateName; + try (InputStream inputStream = new BufferedInputStream(new FileInputStream(templateUrl)); + OutputStream outputStream = response.getOutputStream() + ) { + byte[] buf = new byte[1024]; + int len; + while ((len = inputStream.read(buf)) > 0) { + outputStream.write(buf, 0, len); + } + response.flushBuffer(); + } catch (Exception e) { + log.error("下载模板异常" + e.getMessage()); + response.setStatus(404); + e.printStackTrace(); + } + } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardServiceImpl.java index 2adcac97..ba2df6e5 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/marketStandard/service/impl/LawsMarketStandardServiceImpl.java @@ -84,7 +84,15 @@ public class LawsMarketStandardServiceImpl extends ServiceImpl{ + for (int i1 = 0; i1 < str.length; i1++) { + i.like("ms.country", str[i1]); + if(i1 != str.length - 1){ + i.or(); + } + } + }); } queryWrapper.eq(StringUtils.isNotBlank(marketStandard.getDrivePosition()), "ms.drive_position", marketStandard.getDrivePosition()); @@ -172,27 +180,6 @@ public class LawsMarketStandardServiceImpl extends ServiceImpl importExcel(MultipartFile file) { - List list = new ArrayList<>(); - ImportParams params = new ImportParams(); - params.setTitleRows(4); - params.setHeadRows(1); - params.setNeedSave(true); - try { - return ExcelImportUtil.importExcel(file.getInputStream(), LawsMarketStandardDetail.class, params); - } catch (Exception e) { - log.error(e.getMessage(),e); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return list; - } - @Override public ModelAndView export(HttpServletResponse response, LawsMarketStandard marketStandard, String fileName, String sheetName, HttpServletRequest req) { QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index 6cd2448a..5ac3497d 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -216,6 +216,7 @@ jero: #文件上传根目录 设置 upload: D://opt//upFiles img: /upFiles/ + template: D://opt//template #webapp文件路径 webapp: D://opt//webapp uploadCos: 1 diff --git a/template/导入模板-市场法规清单.xlsx b/template/导入模板-市场法规清单.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7183995b5813960785aa40d7cc428cf86faffba5 GIT binary patch literal 17058 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 literal 0 HcmV?d00001