From f52b5ef7621b3e5425573f877968cc3a82b2056d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=B7=A1=E5=BF=98=E4=B8=80=E5=88=87?= <7990497@qq.com> Date: Mon, 6 Nov 2023 09:16:31 +0800 Subject: [PATCH] =?UTF-8?q?Finish=20Task=20#8394=20=20Cost:8h=20=20=20?= =?UTF-8?q?=E3=80=90PC=E7=AB=AF=E3=80=91=E6=96=B0=E5=A2=9E=E6=B5=B7?= =?UTF-8?q?=E5=A4=96=E8=AE=A2=E5=8D=95=E6=8E=92=E4=BA=A7=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/keking/service/ContractService.java | 52 +++++++++++++++++++ .../web/controller/ContractController.java | 45 ++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/server/src/main/java/cn/keking/service/ContractService.java b/server/src/main/java/cn/keking/service/ContractService.java index 736a1bf..e663804 100644 --- a/server/src/main/java/cn/keking/service/ContractService.java +++ b/server/src/main/java/cn/keking/service/ContractService.java @@ -229,6 +229,13 @@ public class ContractService { return desc; } + /** + * 返回 pdf 文件 + * @param templateName + * @param dataMap + * @return + * @throws Exception + */ public File download(String templateName, Map dataMap) throws Exception { OutputStream os = null; @@ -269,4 +276,49 @@ public class ContractService { } } } + + + + /** + * 返回 word 文件 + * @param templateName + * @param dataMap + * @return + * @throws Exception + */ + + public File downloadWord(String templateName, Map dataMap) throws Exception { + OutputStream os = null; + try { + File outFile = new File(Consts.uploadAbsDir()); + if (!outFile.exists()) { + outFile.mkdirs(); + } + String templatePath = Consts.getTemplatePath(); + String abTemplatePath = templatePath + File.separator + templateName + ".docx"; + //判断模板是否存在 + File file = new File(abTemplatePath); + if(!file.exists()){ + throw new KkFileException("请先上传模板!"); + } + XWPFDocument xwpfDocument = WordExportUtil.exportWord07(abTemplatePath, dataMap); + //如果是签收单,则需要合并单元格 + if (Consts.RECEIPT_FORM.equals(templateName)){ + List invoiceResList = (List) MapUtils.getObject(dataMap, "invoiceResList"); + mergeCell(xwpfDocument,0,7,7+invoiceResList.size()-1,Arrays.asList(5,6)); + } + String docxFile = "/"+ UUID.randomUUID().toString().replace("-", "") + ".docx"; + //通过填参 生产文件 并放到 upload 文件夹中 + String path = Consts.uploadAbsDir(); + String pathFile = path + docxFile; + os = new FileOutputStream(pathFile); + xwpfDocument.write(os); + //返回word + return new File(pathFile); + } finally { + if (os != null) { + os.close(); + } + } + } } diff --git a/server/src/main/java/cn/keking/web/controller/ContractController.java b/server/src/main/java/cn/keking/web/controller/ContractController.java index ee2b11e..75dc33e 100644 --- a/server/src/main/java/cn/keking/web/controller/ContractController.java +++ b/server/src/main/java/cn/keking/web/controller/ContractController.java @@ -155,4 +155,49 @@ public class ContractController { return new ServiceResponse<>(null, "fail", ServiceResponse.RESULT_SERVER_ERR_CODE); } } + + /** + * 下载 word 文件 + */ + @ApiParam("下载word文件") + @PostMapping("/downloadWord/{templateName}") + public ServiceResponse downloadWord( + @PathVariable String templateName, + @RequestBody Map dataMap, + HttpServletResponse response + ) { + try { + log.error(JSON.toJSONString(dataMap)); + OutputStream outstream = null; + + File file = contractService.downloadWord(templateName, dataMap); + outstream = response.getOutputStream(); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/octet-stream"); + String filename = dataMap.get("conCode") + ".docx"; + response.reset(); + // 设置response的Header + response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes())); + response.addHeader("Content-Length", "" + file.length()); + // 刷新缓冲 + response.flushBuffer(); + FileInputStream fileInputStream = new FileInputStream(file); + BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); + byte[] b = new byte[bufferedInputStream.available()]; + bufferedInputStream.read(b); + outstream.write(b); + bufferedInputStream.close(); + outstream.flush(); + outstream.close(); + return new ServiceResponse<>("success", + ServiceResponse.RESULT_CODE_SUCCESS_CODE); + } catch (Exception e) { + log.error("生成错误:", e); + if (e instanceof KkFileException) { + KkFileException kkFileException = (KkFileException) e; + return new ServiceResponse<>(null, kkFileException.getMessage(), ServiceResponse.RESULT_CODE_ERROR_CODE); + } + return new ServiceResponse<>(null, "fail", ServiceResponse.RESULT_SERVER_ERR_CODE); + } + } }