From f5447dc608c623e2fe7045fcf5d76127b69114ea Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Wed, 16 Mar 2022 14:08:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=201.=E5=85=9A=E5=91=98?= =?UTF-8?q?=E9=A3=8E=E9=87=87=20=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD=202.?= =?UTF-8?q?=E7=A4=BE=E5=8C=BA=E8=87=AA=E7=BB=84=E7=BB=87=20=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/utils/FileUtils.java | 58 ++++++++++++++++-- .../epmet-heart/epmet-heart-server/pom.xml | 10 +++ ...IcCommunitySelfOrganizationController.java | 28 +++++++++ .../templates/self_org_import_template.xlsx | Bin 0 -> 9094 bytes .../resi-partymember-server/pom.xml | 10 +++ .../IcPartymemberStyleController.java | 37 ++++++++++- .../templates/party_import_template.xlsx | Bin 0 -> 8824 bytes 7 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/self_org_import_template.xlsx create mode 100644 epmet-module/resi-partymember/resi-partymember-server/src/main/resources/templates/party_import_template.xlsx diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java index f309630863..b8a12015bb 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/FileUtils.java @@ -1,14 +1,18 @@ package com.epmet.commons.tools.utils; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.*; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; /** * @author kamui */ +@Slf4j public class FileUtils { /** @@ -62,4 +66,50 @@ public class FileUtils { return createTmpFile(inputStream, name, ext, null); } + /** + * 将classpath文件复制到宿主机 + * @param fileName + * @return + * @throws IOException + */ + public static String copyClassPathResourcesToHostMachine(String fileName, String fileClassPath, String fileHostPath, Class loaderClass) throws IOException { + // 宿主机目录准备 + if (StringUtils.isNotBlank(fileHostPath) && !fileHostPath.endsWith("/")) { + fileHostPath = fileHostPath.concat("/"); + } + + String homeDir = System.getProperty("user.home"); + Path epmetFilesPath = Paths.get(homeDir, "epmet_files", fileHostPath); + if (Files.notExists(epmetFilesPath)) { + Files.createDirectories(epmetFilesPath); + } + + Path templateFilePath = epmetFilesPath.resolve(fileName); + String templateFilePathStr = templateFilePath.toString(); + if (Files.exists(templateFilePath)) { + return templateFilePathStr; + } + + if (StringUtils.isNotBlank(fileClassPath) && !fileClassPath.endsWith("/")) { + fileClassPath = fileClassPath.concat("/"); + } + + // 将项目中的模板拷贝至用户家目录中 + OutputStream os = null; + InputStream is = null; + try { + is = loaderClass.getClassLoader().getResourceAsStream(fileClassPath + fileName); + os = new FileOutputStream(templateFilePathStr); + IOUtils.copy(is, os); + } finally { + if (is != null) { + is.close(); + } + if (os != null) { + os.close(); + } + } + return templateFilePathStr; + } + } diff --git a/epmet-module/epmet-heart/epmet-heart-server/pom.xml b/epmet-module/epmet-heart/epmet-heart-server/pom.xml index b74f583763..7496a794ee 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/pom.xml +++ b/epmet-module/epmet-heart/epmet-heart-server/pom.xml @@ -122,6 +122,16 @@ true + + org.apache.maven.plugins + maven-resources-plugin + + + xls + xlsx + + + ${project.basedir}/src/main/java diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcCommunitySelfOrganizationController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcCommunitySelfOrganizationController.java index 0c8c8f6dc8..3220da6bdb 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcCommunitySelfOrganizationController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcCommunitySelfOrganizationController.java @@ -45,12 +45,16 @@ import com.epmet.service.IcCommunitySelfOrganizationService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; @@ -181,6 +185,30 @@ public class IcCommunitySelfOrganizationController { return new Result(); } + /** + * 下载社区自组织导入模板 + * @param response + * @throws IOException + */ + @PostMapping("import-template-download") + public void downloadTemplate(HttpServletResponse response) throws IOException { + response.setCharacterEncoding("UTF-8"); + response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-disposition"); + //response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel"); + response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=社区自组织导入模板.xlsx"); + + InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/self_org_import_template.xlsx"); + try { + ServletOutputStream os = response.getOutputStream(); + IOUtils.copy(is, os); + } finally { + if (is != null) { + is.close(); + } + } + } + /** * @Description 添加社区自组织 * @param tokenDto diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/self_org_import_template.xlsx b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/self_org_import_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0be67fffe7b8af8d14579e8f4208c3844c0de52d GIT binary patch literal 9094 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 s4?igX#XtYK^2ZGHgYGY{mHe0PZ$4UC9`true + + org.apache.maven.plugins + maven-resources-plugin + + + xls + xlsx + + + ${project.basedir}/src/main/java diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java index 064a85c98f..585756ff48 100644 --- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java +++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartymemberStyleController.java @@ -21,10 +21,12 @@ import com.baomidou.mybatisplus.extension.api.R; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ExcelUtils; +import com.epmet.commons.tools.utils.FileUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; @@ -41,14 +43,21 @@ import com.epmet.resi.partymember.dto.partymember.form.StyleShowListFormDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -173,4 +182,28 @@ public class IcPartymemberStyleController { ValidatorUtils.validateEntity(formDTO,StyleShowListFormDTO.AddUserInternalGroup.class); return new Result>().ok(icPartymemberStyleService.showList(formDTO)); } + + /** + * 下载党员风采导入模板 + * @param response + * @throws IOException + */ + @PostMapping("import/template-download") + public void downloadTemplate(HttpServletResponse response) throws IOException { + response.setCharacterEncoding("UTF-8"); + response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-disposition"); + response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel"); + response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + //response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=党员风采导入模板.xlsx"); + + InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/party_import_template.xlsx"); + try { + ServletOutputStream os = response.getOutputStream(); + IOUtils.copy(is, os); + } finally { + if (is != null) { + is.close(); + } + } + } } \ No newline at end of file diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/templates/party_import_template.xlsx b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/templates/party_import_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..122a98049a01be2a9fc4606dfac87fa43c931313 GIT binary patch literal 8824 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