From 68a5725e06b304a0a38d43828f9bc23f0c1486b6 Mon Sep 17 00:00:00 2001 From: Ky10 <7703482+ky10_code@user.noreply.gitee.com> Date: Thu, 1 Aug 2024 17:49:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=8B=E8=BD=BD=E4=BB=A3=E7=A0=81zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 下载zip模块。后端代码部分。 --- .../controller/GeneratorController.java | 21 ++++++++++ .../system/service/GeneratorService.java | 7 ++++ .../service/impl/GeneratorServiceImpl.java | 42 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/src/main/java/com/youlai/system/controller/GeneratorController.java b/src/main/java/com/youlai/system/controller/GeneratorController.java index 7386cba4..6e89134c 100644 --- a/src/main/java/com/youlai/system/controller/GeneratorController.java +++ b/src/main/java/com/youlai/system/controller/GeneratorController.java @@ -11,9 +11,12 @@ import com.youlai.system.service.GeneratorService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.apache.commons.io.IOUtils; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.util.List; /** @@ -71,4 +74,22 @@ public class GeneratorController { return Result.success(list); } + + + @Operation(summary = "下载代码zip") + @GetMapping("/{tableName}/downloadZip") + public void downloadZip(HttpServletResponse response, @PathVariable String tableName) throws IOException { + String[] tableNames = tableName.split(","); + byte[] data = generatorService.downloadCode(tableNames); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"youlai-admin-code.zip\""); + response.addHeader("Content-Length", "" + data.length); + response.addHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setContentType("application/octet-stream; charset=UTF-8"); + response.setDateHeader("Expires", 0); + IOUtils.write(data, response.getOutputStream()); + } } diff --git a/src/main/java/com/youlai/system/service/GeneratorService.java b/src/main/java/com/youlai/system/service/GeneratorService.java index 882e7b9a..4fcb62e3 100644 --- a/src/main/java/com/youlai/system/service/GeneratorService.java +++ b/src/main/java/com/youlai/system/service/GeneratorService.java @@ -55,4 +55,11 @@ public interface GeneratorService { * @return */ void deleteGenConfig(String tableName); + + /** + * 下载代码 + * @param tableNames 表名 + * @return + */ + byte[] downloadCode(String[] tableNames); } diff --git a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java index d8c72318..8e49bbbb 100644 --- a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java @@ -32,11 +32,15 @@ import com.youlai.system.service.GenConfigService; import com.youlai.system.service.GenFieldConfigService; import com.youlai.system.service.SysMenuService; import lombok.RequiredArgsConstructor; +import org.apache.commons.io.IOUtils; import org.springframework.stereotype.Service; +import java.io.ByteArrayOutputStream; import java.io.File; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipOutputStream; + /** * 数据库服务实现类 @@ -382,5 +386,43 @@ public class GeneratorServiceImpl implements GeneratorService { return content; } + /** + * 下载代码 + * @param tableNames 表名,可以支持多张表。 + * @return 压缩文件字节数组 + */ + @Override + public byte[] downloadCode(String[] tableNames) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) + { + generatorCode(tableName, zip); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 根据表名生成代码并且压缩到zip文件中 + * + * @param tableName 单个表名 + * @param zip 压缩文件 + */ + private void generatorCode(String tableName, ZipOutputStream zip) { + List previewVOList = getTablePreviewData(tableName); + for (GeneratorPreviewVO previewVO : previewVOList) { + String fileName = previewVO.getFileName(); + String content = previewVO.getContent(); + String path = previewVO.getPath(); + try { + zip.putNextEntry(new java.util.zip.ZipEntry(path + File.separator + fileName)); + zip.write(content.getBytes("UTF-8")); + zip.closeEntry(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } }