From 8bab53a0268657693a94916d052b915e50cadefd Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Tue, 9 Jan 2024 11:41:51 +0800 Subject: [PATCH 01/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=AF=BC=E5=87=BAword?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/keking/service/ContractService.java | 37 +++++++++++++++++++ .../web/controller/ContractController.java | 18 +++++++++ 2 files changed, 55 insertions(+) diff --git a/server/src/main/java/cn/keking/service/ContractService.java b/server/src/main/java/cn/keking/service/ContractService.java index 5b39011..d147b34 100644 --- a/server/src/main/java/cn/keking/service/ContractService.java +++ b/server/src/main/java/cn/keking/service/ContractService.java @@ -1,5 +1,7 @@ package cn.keking.service; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.afterturn.easypoi.word.WordExportUtil; import cn.keking.config.ConfigConstants; import cn.keking.config.KkfileConfig; @@ -11,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections4.MapUtils; import org.apache.commons.io.FilenameUtils; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge; @@ -323,4 +326,38 @@ public class ContractService { } } } + + public String excel(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 + ".Xlsx"; + //判断模板是否存在 + File file = new File(abTemplatePath); + if (!file.exists()) { + throw new KkFileException("请先上传模板!"); + } + TemplateExportParams params = new TemplateExportParams( + abTemplatePath); + Workbook workbook = ExcelExportUtil.exportExcel(params, dataMap); + String docxFile = "/"+ UUID.randomUUID().toString().replace("-", "") + ".Xlsx"; + //通过填参 生产文件 并放到 upload 文件夹中 + String path = Consts.uploadAbsDir(); + String pathFile = path + docxFile; + os = new FileOutputStream(pathFile); + workbook.write(os); + log.info("文件路径:{}", kkfileConfig.getLocalfileUrl() + File.separator + Consts.UPLOAD_PATH_NAME + docxFile); + String previewUrl = WebUtils.getBaseUrl() + "onlinePreview?url=" + + URLEncoder.encode(Base64.encodeBase64String((kkfileConfig.getLocalfileUrl() + File.separator + Consts.UPLOAD_PATH_NAME + docxFile).getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8.name()); + return previewUrl; + } 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 22e9048..7db9299 100644 --- a/server/src/main/java/cn/keking/web/controller/ContractController.java +++ b/server/src/main/java/cn/keking/web/controller/ContractController.java @@ -61,6 +61,24 @@ public class ContractController { return new ServiceResponse<>(null, e.getMessage(), ServiceResponse.RESULT_SERVER_ERR_CODE); } } + @ApiOperation("根据模板渲染excel") + @PostMapping("/excel/{templateName}") + public ServiceResponse excel( + @PathVariable String templateName, + @RequestBody Map dataMap) { + try { + log.info("templateName:{},dataMap:{}", templateName, dataMap); + return new ServiceResponse<>(contractService.excel(templateName, dataMap), "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, e.getMessage(), ServiceResponse.RESULT_SERVER_ERR_CODE); + } + } /** * 合同模板上传 From 3c75bedb8ec3278160ae93c099732263e791f4df Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Tue, 9 Jan 2024 12:21:07 +0800 Subject: [PATCH 02/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=AF=BC=E5=87=BAword?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/cn/keking/config/KkfileConfig.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/cn/keking/config/KkfileConfig.java b/server/src/main/java/cn/keking/config/KkfileConfig.java index 204b4c0..e75c34a 100644 --- a/server/src/main/java/cn/keking/config/KkfileConfig.java +++ b/server/src/main/java/cn/keking/config/KkfileConfig.java @@ -9,6 +9,8 @@ import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -26,7 +28,7 @@ public class KkfileConfig { */ private static final long DEFAULT_TEMPLATE_MAX_SIZE = 10 * 1024 * 1024; - private static final List ALLOW_UPLOAD_TYPE = Collections.singletonList("docx"); + private static final List ALLOW_UPLOAD_TYPE =Arrays.asList("docx","xlsx"); /** * 预览地址 From aefd70308efbfe93a43af464580be9a595d8046b Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Tue, 9 Jan 2024 12:25:57 +0800 Subject: [PATCH 03/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=AF=BC=E5=87=BAword?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/cn/keking/service/ContractService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/cn/keking/service/ContractService.java b/server/src/main/java/cn/keking/service/ContractService.java index d147b34..c477ee0 100644 --- a/server/src/main/java/cn/keking/service/ContractService.java +++ b/server/src/main/java/cn/keking/service/ContractService.java @@ -335,7 +335,7 @@ public class ContractService { outFile.mkdirs(); } String templatePath = Consts.getTemplatePath(); - String abTemplatePath = templatePath + File.separator + templateName + ".Xlsx"; + String abTemplatePath = templatePath + File.separator + templateName + ".xlsx"; //判断模板是否存在 File file = new File(abTemplatePath); if (!file.exists()) { @@ -344,7 +344,7 @@ public class ContractService { TemplateExportParams params = new TemplateExportParams( abTemplatePath); Workbook workbook = ExcelExportUtil.exportExcel(params, dataMap); - String docxFile = "/"+ UUID.randomUUID().toString().replace("-", "") + ".Xlsx"; + String docxFile = "/"+ UUID.randomUUID().toString().replace("-", "") + ".xlsx"; //通过填参 生产文件 并放到 upload 文件夹中 String path = Consts.uploadAbsDir(); String pathFile = path + docxFile; From ac1274b56580292bb02e3b635d9d52e103792588 Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Tue, 9 Jan 2024 14:01:26 +0800 Subject: [PATCH 04/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=AF=BC=E5=87=BAword?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/keking/service/ContractService.java | 33 ++++++++++++++ .../web/controller/ContractController.java | 43 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/server/src/main/java/cn/keking/service/ContractService.java b/server/src/main/java/cn/keking/service/ContractService.java index c477ee0..66f279f 100644 --- a/server/src/main/java/cn/keking/service/ContractService.java +++ b/server/src/main/java/cn/keking/service/ContractService.java @@ -9,6 +9,7 @@ import cn.keking.exception.KkFileException; import cn.keking.service.impl.OtherFilePreviewImpl; import cn.keking.utils.Consts; import cn.keking.utils.WebUtils; +import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections4.MapUtils; @@ -281,6 +282,37 @@ public class ContractService { } } } + public File downloadExcel(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 + ".xlsx"; + //判断模板是否存在 + File file = new File(abTemplatePath); + if(!file.exists()){ + throw new KkFileException("请先上传模板!"); + } + + String excelFile = "/"+ UUID.randomUUID().toString().replace("-", "") + ".xlsx"; + //通过填参 生产文件 并放到 upload 文件夹中 + String path = Consts.uploadAbsDir(); + String pathFile = path + excelFile; + os = new FileOutputStream(pathFile); + TemplateExportParams params = new TemplateExportParams( + abTemplatePath); + Workbook workbook = ExcelExportUtil.exportExcel(params, dataMap); + workbook.write(os); + return new File(pathFile); + } finally { + if (os != null) { + os.close(); + } + } + } @@ -360,4 +392,5 @@ public class ContractService { } } } + } 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 7db9299..73c41c8 100644 --- a/server/src/main/java/cn/keking/web/controller/ContractController.java +++ b/server/src/main/java/cn/keking/web/controller/ContractController.java @@ -129,6 +129,49 @@ public class ContractController { } } + /** + * @return 下载合同excel文件 + */ + @ApiParam("下载excel文件") + @PostMapping("/downloadExcel/{templateName}") + public ServiceResponse downloadExcel( + @PathVariable String templateName, + @RequestBody Map dataMap, + HttpServletResponse response + ) { + try { + log.error(JSON.toJSONString(dataMap)); + OutputStream outstream = null; + File file = contractService.downloadExcel(templateName, dataMap); + outstream = response.getOutputStream(); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/octet-stream"); + String filename =file.getName(); + 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); + } + } /** * @return 下载合同pdf文件 */ From acd0c1982dd433d03903ab804265fbf94453791c Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Fri, 12 Jan 2024 10:06:42 +0800 Subject: [PATCH 05/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile_gray | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile_gray b/Dockerfile_gray index 73bdd7c..6c86f01 100644 --- a/Dockerfile_gray +++ b/Dockerfile_gray @@ -1,7 +1,5 @@ FROM openjdk:8u181-jre-alpine ENV LANG en_US.UTF-8 -RUN mkdir -p /usr/share/fonts/chinese -COPY fonts/* /usr/share/fonts/chinese/ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories &&\ apk add tzdata &&\ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone &&\ @@ -12,6 +10,7 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk apk add msttcorefonts-installer &&\ apk add fontconfig &&\ apk --update add unzip &&\ + mkdir -p /usr/share/fonts/chinese &&\ cd /tmp &&\ wget http://kkfileview.keking.cn/fonts.zip &&\ unzip -d /usr/share/fonts/chinese fonts.zip &&\ @@ -23,5 +22,6 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk COPY ./server/target/crm-print-server-1.0.0.jar / WORKDIR / -EXPOSE 9089 -CMD ["java","-Xms1000m","-Xmx1000m","-jar","crm-print-server-1.0.0.jar"] +HEALTHCHECK --interval=60s --timeout=3s CMD curl -fs http://localhost:8080/crm-print/actuator/health || exit 1 +EXPOSE 8080 +CMD ["java", "-Xms3072m", "-jar","crm-print-server-1.0.0.jar"] From 461dc26a7d409dc941329ac2546978caca891ded Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Fri, 12 Jan 2024 10:08:30 +0800 Subject: [PATCH 06/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile_gray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile_gray b/Dockerfile_gray index 6c86f01..c12f407 100644 --- a/Dockerfile_gray +++ b/Dockerfile_gray @@ -23,5 +23,5 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk COPY ./server/target/crm-print-server-1.0.0.jar / WORKDIR / HEALTHCHECK --interval=60s --timeout=3s CMD curl -fs http://localhost:8080/crm-print/actuator/health || exit 1 -EXPOSE 8080 +EXPOSE 9089 CMD ["java", "-Xms3072m", "-jar","crm-print-server-1.0.0.jar"] From 3494cd3a172e283b5f49d478e174ea40fe4368f4 Mon Sep 17 00:00:00 2001 From: daijunxiong <7990497@qq.com> Date: Fri, 12 Jan 2024 10:10:07 +0800 Subject: [PATCH 07/10] =?UTF-8?q?Finish=20Task=20#9031=20Cost:3h=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile_gray | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile_gray b/Dockerfile_gray index c12f407..251f7a6 100644 --- a/Dockerfile_gray +++ b/Dockerfile_gray @@ -22,6 +22,5 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk COPY ./server/target/crm-print-server-1.0.0.jar / WORKDIR / -HEALTHCHECK --interval=60s --timeout=3s CMD curl -fs http://localhost:8080/crm-print/actuator/health || exit 1 EXPOSE 9089 CMD ["java", "-Xms3072m", "-jar","crm-print-server-1.0.0.jar"] From d5d1137e3c6b1d06f47910bdc30f9a8e470a3787 Mon Sep 17 00:00:00 2001 From: luobai Date: Fri, 12 Jan 2024 10:27:28 +0800 Subject: [PATCH 08/10] =?UTF-8?q?dev=20=E5=90=88=E5=B9=B6=E5=88=B0=20beta?= =?UTF-8?q?=20=20=E8=BF=98=E6=98=AF=E6=9C=89=E5=8C=BA=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile_gray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile_gray b/Dockerfile_gray index b539849..fbac7b6 100644 --- a/Dockerfile_gray +++ b/Dockerfile_gray @@ -18,7 +18,7 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk mkfontscale &&\ mkfontdir &&\ fc-cache -fv &&\ - COPY /usr/share/fonts/korean /usr/share/fonts &&\ + cp /usr/share/fonts/korean /usr/share/fonts &&\ cd /usr/share/fonts/korean &&\ mkfontscale &&\ mkfontdir &&\ From 82fef86d12ef0eda7c84718ccd21bad22eafac0f Mon Sep 17 00:00:00 2001 From: luobai Date: Fri, 12 Jan 2024 10:34:12 +0800 Subject: [PATCH 09/10] =?UTF-8?q?dev=20=E5=90=88=E5=B9=B6=E5=88=B0=20beta?= =?UTF-8?q?=20=20=E8=BF=98=E6=98=AF=E6=9C=89=E5=8C=BA=E5=88=AB=EF=BC=8C?= =?UTF-8?q?=E5=86=8D=E8=B0=83=E6=95=B4=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile_gray | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile_gray b/Dockerfile_gray index 251f7a6..12a6659 100644 --- a/Dockerfile_gray +++ b/Dockerfile_gray @@ -23,4 +23,4 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk COPY ./server/target/crm-print-server-1.0.0.jar / WORKDIR / EXPOSE 9089 -CMD ["java", "-Xms3072m", "-jar","crm-print-server-1.0.0.jar"] +CMD ["java", "-Xms3072m", "-jar","crm-print-server-1.0.0.jar"] \ No newline at end of file From 5a84afd8bc3a5a09ac04583236c09f5e9333c3d7 Mon Sep 17 00:00:00 2001 From: luobai Date: Fri, 12 Jan 2024 10:53:08 +0800 Subject: [PATCH 10/10] =?UTF-8?q?dev=20=E5=90=88=E5=B9=B6=E5=88=B0=20beta?= =?UTF-8?q?=20=20=E8=BF=98=E6=98=AF=E6=9C=89=E5=8C=BA=E5=88=AB=EF=BC=8C?= =?UTF-8?q?=E5=86=8D=E8=B0=83=E6=95=B4=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile_gray | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Dockerfile_gray b/Dockerfile_gray index e008521..12a6659 100644 --- a/Dockerfile_gray +++ b/Dockerfile_gray @@ -18,11 +18,6 @@ RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk mkfontscale &&\ mkfontdir &&\ fc-cache -fv &&\ - cp /usr/share/fonts/korean /usr/share/fonts &&\ - cd /usr/share/fonts/korean &&\ - mkfontscale &&\ - mkfontdir &&\ - fc-cache -fv &&\ rm -rf /var/cache/* COPY ./server/target/crm-print-server-1.0.0.jar /