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 0000000000..0be67fffe7 Binary files /dev/null and b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/self_org_import_template.xlsx differ diff --git a/epmet-module/resi-partymember/resi-partymember-server/pom.xml b/epmet-module/resi-partymember/resi-partymember-server/pom.xml index bae2ec09fb..a15e120b72 100644 --- a/epmet-module/resi-partymember/resi-partymember-server/pom.xml +++ b/epmet-module/resi-partymember/resi-partymember-server/pom.xml @@ -120,6 +120,16 @@ 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 0000000000..122a98049a Binary files /dev/null and b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/templates/party_import_template.xlsx differ