From 040f137934130451700bc28aeabbced30970c5f6 Mon Sep 17 00:00:00 2001
From: Yoofff <tomcat416@163.com>
Date: Sat, 23 Mar 2024 13:52:17 +0000
Subject: [PATCH] =?UTF-8?q?feat(generator):=20=E6=96=B0=E5=A2=9E=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81=E6=89=B9=E9=87=8F=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../admin/generator/model/resp/TableResp.java | 10 +++
 .../generator/service/GeneratorService.java   |  8 +-
 .../service/impl/GeneratorServiceImpl.java    | 81 ++++++++++---------
 .../webapi/tool/GeneratorController.java      |  8 +-
 4 files changed, 63 insertions(+), 44 deletions(-)

diff --git a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/resp/TableResp.java b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/resp/TableResp.java
index db573351..8498ae8f 100644
--- a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/resp/TableResp.java
+++ b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/resp/TableResp.java
@@ -72,4 +72,14 @@ public class TableResp implements Serializable {
      */
     @Schema(description = "是否已配置", example = "true")
     private Boolean isConfiged;
+
+    /**
+     * 是否禁用
+     */
+    @Schema(description = "是否禁用", example = "true")
+    private Boolean disabled;
+
+    public Boolean getDisabled() {
+        return !isConfiged;
+    }
 }
diff --git a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/GeneratorService.java b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/GeneratorService.java
index 42677330..444204d2 100644
--- a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/GeneratorService.java
+++ b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/GeneratorService.java
@@ -85,9 +85,9 @@ public interface GeneratorService {
     /**
      * 生成代码
      *
-     * @param tableName 表名称
-     * @param request   请求对象
-     * @param response  响应对象
+     * @param tableNames 表明层
+     * @param request    请求对象
+     * @param response   响应对象
      */
-    void generate(String tableName, HttpServletRequest request, HttpServletResponse response);
+    void generate(List<String> tableNames, HttpServletRequest request, HttpServletResponse response);
 }
diff --git a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java
index 27b5428d..cd9fad23 100644
--- a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java
+++ b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java
@@ -260,50 +260,57 @@ public class GeneratorServiceImpl implements GeneratorService {
     }
 
     @Override
-    public void generate(String tableName, HttpServletRequest request, HttpServletResponse response) {
+    public void generate(List<String> tableNames, HttpServletRequest request, HttpServletResponse response) {
         try {
-            // 初始化配置及数据
-            List<GeneratePreviewResp> generatePreviewList = this.preview(tableName);
-            GenConfigDO genConfig = genConfigMapper.selectById(tableName);
-            // 生成后端代码
-            Map<Boolean, List<GeneratePreviewResp>> generatePreviewListMap = generatePreviewList.stream()
-                .collect(Collectors.groupingBy(GeneratePreviewResp::isBackend));
-            this.generateBackendCode(generatePreviewListMap.get(true), genConfig);
-            // 生成前端代码
-            List<GeneratePreviewResp> frontendGeneratePreviewList = generatePreviewListMap.get(false);
-            String packageName = genConfig.getPackageName();
-            String moduleName = StrUtil.subSuf(packageName, StrUtil
-                .lastIndexOfIgnoreCase(packageName, StringConstants.DOT) + 1);
             String tempDir = SystemUtil.getUserInfo().getTempDir();
-            // 例如:continew-admin-ui/src
-            String frontendBasicPackagePath = tempDir + String.join(File.separator, projectProperties
-                .getAppName(), projectProperties.getAppName() + "-ui", "src");
-            // 1、生成 api 代码
-            GeneratePreviewResp apiGeneratePreview = frontendGeneratePreviewList.get(0);
-            // 例如:continew-admin-ui/src/src/api/system
-            String apiPath = String.join(File.separator, frontendBasicPackagePath, "api", moduleName);
-            // 例如:continew-admin-ui/src/api/system/user.ts
-            File apiFile = new File(apiPath, apiGeneratePreview.getFileName());
-            if (!apiFile.exists() || Boolean.TRUE.equals(genConfig.getIsOverride())) {
-                FileUtil.writeUtf8String(apiGeneratePreview.getContent(), apiFile);
-            }
-            // 2、生成 view 代码
-            GeneratePreviewResp viewGeneratePreview = frontendGeneratePreviewList.get(1);
-            // 例如:continew-admin-ui/src/views/system
-            String vuePath = String.join(File.separator, frontendBasicPackagePath, "views", moduleName, StrUtil
-                .lowerFirst(genConfig.getClassNamePrefix()));
-            // 例如:continew-admin-ui/src/views/system/user/index.vue
-            File vueFile = new File(vuePath, viewGeneratePreview.getFileName());
-            if (!vueFile.exists() || Boolean.TRUE.equals(genConfig.getIsOverride())) {
-                FileUtil.writeUtf8String(viewGeneratePreview.getContent(), vueFile);
-            }
+            // 删除旧代码
+            FileUtil.del(tempDir + projectProperties.getAppName());
+
+            tableNames.forEach(tableName -> {
+                // 初始化配置及数据
+                List<GeneratePreviewResp> generatePreviewList = this.preview(tableName);
+                GenConfigDO genConfig = genConfigMapper.selectById(tableName);
+                // 生成后端代码
+                Map<Boolean, List<GeneratePreviewResp>> generatePreviewListMap = generatePreviewList.stream()
+                    .collect(Collectors.groupingBy(GeneratePreviewResp::isBackend));
+                this.generateBackendCode(generatePreviewListMap.get(true), genConfig);
+                // 生成前端代码
+                List<GeneratePreviewResp> frontendGeneratePreviewList = generatePreviewListMap.get(false);
+                String packageName = genConfig.getPackageName();
+                String moduleName = StrUtil.subSuf(packageName, StrUtil
+                    .lastIndexOfIgnoreCase(packageName, StringConstants.DOT) + 1);
+
+                // 例如:continew-admin-ui/src
+                String frontendBasicPackagePath = tempDir + String.join(File.separator, projectProperties
+                    .getAppName(), projectProperties.getAppName() + "-ui", "src");
+                // 1、生成 api 代码
+                GeneratePreviewResp apiGeneratePreview = frontendGeneratePreviewList.get(0);
+                // 例如:continew-admin-ui/src/src/api/system
+                String apiPath = String.join(File.separator, frontendBasicPackagePath, "api", moduleName);
+                // 例如:continew-admin-ui/src/api/system/user.ts
+                File apiFile = new File(apiPath, apiGeneratePreview.getFileName());
+                if (!apiFile.exists() || Boolean.TRUE.equals(genConfig.getIsOverride())) {
+                    FileUtil.writeUtf8String(apiGeneratePreview.getContent(), apiFile);
+                }
+                // 2、生成 view 代码
+                GeneratePreviewResp viewGeneratePreview = frontendGeneratePreviewList.get(1);
+                // 例如:continew-admin-ui/src/views/system
+                String vuePath = String.join(File.separator, frontendBasicPackagePath, "views", moduleName, StrUtil
+                    .lowerFirst(genConfig.getClassNamePrefix()));
+                // 例如:continew-admin-ui/src/views/system/user/index.vue
+                File vueFile = new File(vuePath, viewGeneratePreview.getFileName());
+                if (!vueFile.exists() || Boolean.TRUE.equals(genConfig.getIsOverride())) {
+                    FileUtil.writeUtf8String(viewGeneratePreview.getContent(), vueFile);
+                }
+            });
+
             // 打包下载
             File tempDirFile = new File(tempDir, projectProperties.getAppName());
-            String zipFilePath = tempDirFile.getPath() + ".zip";
+            String zipFilePath = tempDirFile.getPath() + jodd.io.ZipUtil.ZIP_EXT;
             ZipUtil.zip(tempDirFile.getPath(), zipFilePath);
             FileUploadUtils.download(request, response, new File(zipFilePath), true);
         } catch (Exception e) {
-            log.error("Generate code of table '{}' occurred an error. {}", tableName, e.getMessage(), e);
+            log.error("Generate code of table '{}' occurred an error. {}", tableNames, e.getMessage(), e);
             throw new BusinessException("代码生成失败,请手动清理生成文件");
         }
     }
diff --git a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java
index 25589841..123774a1 100644
--- a/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java
+++ b/continew-admin-webapi/src/main/java/top/charles7c/continew/admin/webapi/tool/GeneratorController.java
@@ -102,8 +102,10 @@ public class GeneratorController {
     @Operation(summary = "生成代码", description = "生成代码")
     @Parameter(name = "tableName", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH)
     @SaCheckPermission("tool:generator:list")
-    @PostMapping("/{tableName}")
-    public void generate(@PathVariable String tableName, HttpServletRequest request, HttpServletResponse response) {
-        generatorService.generate(tableName, request, response);
+    @PostMapping("/{tableNames}")
+    public void generate(@PathVariable List<String> tableNames,
+                         HttpServletRequest request,
+                         HttpServletResponse response) {
+        generatorService.generate(tableNames, request, response);
     }
 }