From 849a3b529cc0f6582c2859e2ce537b4b434dee75 Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Tue, 24 May 2022 17:14:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=85=9A=E5=91=98=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/IcPartyMemberController.java | 25 +++++++++++++++++- .../main/resources/excel/ic_party_member.xlsx | Bin 0 -> 12293 bytes 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 epmet-module/resi-partymember/resi-partymember-server/src/main/resources/excel/ic_party_member.xlsx diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartyMemberController.java b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartyMemberController.java index b53d989d56..4864cd6e13 100644 --- a/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartyMemberController.java +++ b/epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/controller/IcPartyMemberController.java @@ -27,9 +27,9 @@ import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.constants.ImportTaskConstants; -import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.dto.form.IcPartyMemberFormDTO; import com.epmet.dto.form.IcPartyMemberListFormDTO; +import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.dto.result.PartyMemberAgeResultDTO; import com.epmet.dto.result.PartyMemberEducationResultDTO; import com.epmet.modules.partymember.excel.IcPartyMemberExcel; @@ -43,14 +43,17 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.net.URLEncoder; import java.nio.file.Path; import java.util.List; import java.util.UUID; @@ -284,4 +287,24 @@ public class IcPartyMemberController implements ResultDataResolver { } return new Result>().ok(icPartyMemberService.partyMemberAgeStatistics(formDTO)); } + + + @RequestMapping(value = "downloadTemplate", method = {RequestMethod.GET, RequestMethod.POST}) + 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.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("党员信息导入模板", "UTF-8") + ".xlsx"); + + InputStream is = this.getClass().getClassLoader().getResourceAsStream("excel/ic_party_member.xlsx"); + try { + ServletOutputStream os = response.getOutputStream(); + IOUtils.copy(is, os); + } finally { + if (is != null) { + is.close(); + } + } + + } } diff --git a/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/excel/ic_party_member.xlsx b/epmet-module/resi-partymember/resi-partymember-server/src/main/resources/excel/ic_party_member.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d663ad01c509d4df88563c6b07ffe92856504cf0 GIT binary patch literal 12293 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