diff --git a/generator-code-server/src/main/java/cn/bunny/controller/SqlParserController.java b/generator-code-server/src/main/java/cn/bunny/controller/SqlParserController.java index 28c3bfa..a8de999 100644 --- a/generator-code-server/src/main/java/cn/bunny/controller/SqlParserController.java +++ b/generator-code-server/src/main/java/cn/bunny/controller/SqlParserController.java @@ -1,6 +1,6 @@ package cn.bunny.controller; -import cn.bunny.core.factory.SqlMetadataProvider; +import cn.bunny.core.provider.SqlMetadataProvider; import cn.bunny.domain.entity.ColumnMetaData; import cn.bunny.domain.entity.TableMetaData; import cn.bunny.domain.result.Result; @@ -34,4 +34,5 @@ public class SqlParserController { List vo = sqlParserService.getColumnInfoList(sql); return Result.success(vo); } + } diff --git a/generator-code-server/src/main/java/cn/bunny/controller/TableController.java b/generator-code-server/src/main/java/cn/bunny/controller/TableController.java index aa0e234..857ed97 100644 --- a/generator-code-server/src/main/java/cn/bunny/controller/TableController.java +++ b/generator-code-server/src/main/java/cn/bunny/controller/TableController.java @@ -1,6 +1,6 @@ package cn.bunny.controller; -import cn.bunny.core.factory.DatabaseMetadataProvider; +import cn.bunny.core.provider.DatabaseMetadataProvider; import cn.bunny.domain.entity.ColumnMetaData; import cn.bunny.domain.entity.DatabaseInfoMetaData; import cn.bunny.domain.entity.TableMetaData; @@ -51,4 +51,5 @@ public class TableController { List columnInfo = databaseMetadataProvider.getColumnInfoList(tableName); return Result.success(columnInfo); } + } diff --git a/generator-code-server/src/main/java/cn/bunny/core/factory/DatabaseMetadataProvider.java b/generator-code-server/src/main/java/cn/bunny/core/provider/DatabaseMetadataProvider.java similarity index 99% rename from generator-code-server/src/main/java/cn/bunny/core/factory/DatabaseMetadataProvider.java rename to generator-code-server/src/main/java/cn/bunny/core/provider/DatabaseMetadataProvider.java index 1fbb8b8..afa3fd7 100644 --- a/generator-code-server/src/main/java/cn/bunny/core/factory/DatabaseMetadataProvider.java +++ b/generator-code-server/src/main/java/cn/bunny/core/provider/DatabaseMetadataProvider.java @@ -1,4 +1,4 @@ -package cn.bunny.core.factory; +package cn.bunny.core.provider; import cn.bunny.domain.entity.ColumnMetaData; import cn.bunny.domain.entity.DatabaseInfoMetaData; diff --git a/generator-code-server/src/main/java/cn/bunny/core/factory/IMetadataProvider.java b/generator-code-server/src/main/java/cn/bunny/core/provider/IMetadataProvider.java similarity index 94% rename from generator-code-server/src/main/java/cn/bunny/core/factory/IMetadataProvider.java rename to generator-code-server/src/main/java/cn/bunny/core/provider/IMetadataProvider.java index 1437f2e..bf1fb80 100644 --- a/generator-code-server/src/main/java/cn/bunny/core/factory/IMetadataProvider.java +++ b/generator-code-server/src/main/java/cn/bunny/core/provider/IMetadataProvider.java @@ -1,4 +1,4 @@ -package cn.bunny.core.factory; +package cn.bunny.core.provider; import cn.bunny.domain.entity.ColumnMetaData; import cn.bunny.domain.entity.TableMetaData; diff --git a/generator-code-server/src/main/java/cn/bunny/core/factory/SqlMetadataProvider.java b/generator-code-server/src/main/java/cn/bunny/core/provider/SqlMetadataProvider.java similarity index 99% rename from generator-code-server/src/main/java/cn/bunny/core/factory/SqlMetadataProvider.java rename to generator-code-server/src/main/java/cn/bunny/core/provider/SqlMetadataProvider.java index 64913d4..c23c0b7 100644 --- a/generator-code-server/src/main/java/cn/bunny/core/factory/SqlMetadataProvider.java +++ b/generator-code-server/src/main/java/cn/bunny/core/provider/SqlMetadataProvider.java @@ -1,4 +1,4 @@ -package cn.bunny.core.factory; +package cn.bunny.core.provider; import cn.bunny.core.dialect.DatabaseDialect; import cn.bunny.domain.entity.ColumnMetaData; diff --git a/generator-code-server/src/main/java/cn/bunny/core/template/VmsTemplateGenerator.java b/generator-code-server/src/main/java/cn/bunny/core/template/VmsTBaseTemplateGenerator.java similarity index 93% rename from generator-code-server/src/main/java/cn/bunny/core/template/VmsTemplateGenerator.java rename to generator-code-server/src/main/java/cn/bunny/core/template/VmsTBaseTemplateGenerator.java index f9a7bcc..174faf8 100644 --- a/generator-code-server/src/main/java/cn/bunny/core/template/VmsTemplateGenerator.java +++ b/generator-code-server/src/main/java/cn/bunny/core/template/VmsTBaseTemplateGenerator.java @@ -15,7 +15,7 @@ import java.util.Date; * 使用模板方法,方便扩展 * 如果需要继承 AbstractVmsGenerator */ -public class VmsTemplateGenerator extends AbstractTemplateGenerator { +public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator { private final VmsArgumentDto dto; private final String path; @@ -26,7 +26,7 @@ public class VmsTemplateGenerator extends AbstractTemplateGenerator { * @param path 当前路径 * @param tableMetaData 表名称 */ - public VmsTemplateGenerator(VmsArgumentDto dto, String path, TableMetaData tableMetaData) { + public VmsTBaseTemplateGenerator(VmsArgumentDto dto, String path, TableMetaData tableMetaData) { this.dto = dto; this.path = path; this.tableMetaData = tableMetaData; diff --git a/generator-code-server/src/main/java/cn/bunny/service/impl/TableServiceImpl.java b/generator-code-server/src/main/java/cn/bunny/service/impl/TableServiceImpl.java index 00a9018..8e3bc43 100644 --- a/generator-code-server/src/main/java/cn/bunny/service/impl/TableServiceImpl.java +++ b/generator-code-server/src/main/java/cn/bunny/service/impl/TableServiceImpl.java @@ -1,6 +1,6 @@ package cn.bunny.service.impl; -import cn.bunny.core.factory.DatabaseMetadataProvider; +import cn.bunny.core.provider.DatabaseMetadataProvider; import cn.bunny.domain.entity.DatabaseInfoMetaData; import cn.bunny.domain.entity.TableMetaData; import cn.bunny.service.TableService; diff --git a/generator-code-server/src/main/java/cn/bunny/service/impl/VmsServiceImpl.java b/generator-code-server/src/main/java/cn/bunny/service/impl/VmsServiceImpl.java index 3f1117b..c5641d0 100644 --- a/generator-code-server/src/main/java/cn/bunny/service/impl/VmsServiceImpl.java +++ b/generator-code-server/src/main/java/cn/bunny/service/impl/VmsServiceImpl.java @@ -74,7 +74,7 @@ public class VmsServiceImpl implements VmsService { // 下载文件名称 long currentTimeMillis = System.currentTimeMillis(); String digestHex = MD5.create().digestHex(currentTimeMillis + ""); - String generateZipFilename = "generator-" + digestHex.substring(0, 4) + ".zip"; + String generateZipFilename = "code-" + digestHex.substring(0, 6) + ".zip"; // 设置响应头 HttpHeaders headers = new HttpHeaders(); diff --git a/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsCodeGeneratorService.java b/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsCodeGeneratorService.java index c1e1bac..ad9e57f 100644 --- a/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsCodeGeneratorService.java +++ b/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsCodeGeneratorService.java @@ -1,8 +1,8 @@ package cn.bunny.service.impl.vms; -import cn.bunny.core.factory.DatabaseMetadataProvider; -import cn.bunny.core.factory.SqlMetadataProvider; -import cn.bunny.core.template.VmsTemplateGenerator; +import cn.bunny.core.provider.DatabaseMetadataProvider; +import cn.bunny.core.provider.SqlMetadataProvider; +import cn.bunny.core.template.VmsTBaseTemplateGenerator; import cn.bunny.domain.dto.VmsArgumentDto; import cn.bunny.domain.entity.ColumnMetaData; import cn.bunny.domain.entity.TableMetaData; @@ -60,7 +60,7 @@ public class VmsCodeGeneratorService { */ private GeneratorVo generateTemplate(VmsArgumentDto dto, String path, TableMetaData tableMetaData, List columnInfoList) { - VmsTemplateGenerator generator = new VmsTemplateGenerator(dto, path, tableMetaData); + VmsTBaseTemplateGenerator generator = new VmsTBaseTemplateGenerator(dto, path, tableMetaData); StringWriter writer = generator.generatorCodeTemplate(tableMetaData, columnInfoList); String processedPath = VmsUtil.handleVmFilename(path, tableMetaData.getTableName()); diff --git a/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsZipService.java b/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsZipService.java index 1100f64..ba13910 100644 --- a/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsZipService.java +++ b/generator-code-server/src/main/java/cn/bunny/service/impl/vms/VmsZipService.java @@ -14,7 +14,9 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** - * 负责处理ZIP打包和下载逻辑的服务类 + * VMS代码生成系统的ZIP打包服务 + *

+ * 提供将生成的代码模板打包为ZIP文件并支持下载的功能 */ @Service @RequiredArgsConstructor @@ -23,17 +25,22 @@ public class VmsZipService { private final VmsCodeGeneratorService codeGeneratorService; /** - * 创建ZIP文件字节数组 + * 将生成的代码模板打包为ZIP文件 * - * @param dto 生成参数 - * @return ZIP文件字节数组 + * @param dto 代码生成参数DTO,包含表名、包名等配置 + * @return ZIP文件字节数组,可直接用于下载 + * @throws RuntimeException 当ZIP打包过程中发生IO异常时抛出 */ public byte[] createZipFile(VmsArgumentDto dto) { - List generatorVoList = codeGeneratorService.generateCode(dto).values().stream().flatMap(Collection::stream).toList(); - + // 将二维代码生成结果扁平化为一维列表 + List generatorVoList = codeGeneratorService.generateCode(dto).values().stream() + .flatMap(Collection::stream) + .toList(); + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream)) { + // 将所有生成的文件添加到ZIP包中 generatorVoList.forEach(generatorVo -> addToZip(zipOutputStream, generatorVo)); return byteArrayOutputStream.toByteArray(); } catch (IOException e) { @@ -42,21 +49,24 @@ public class VmsZipService { } /** - * 将单个生成结果添加到ZIP文件 + * 将单个代码文件添加到ZIP输出流 * - * @param zipOutputStream ZIP输出流 - * @param generatorVo 生成结果对象 + * @param zipOutputStream ZIP文件输出流 + * @param generatorVo 代码生成结果对象,包含文件路径和内容 + * @throws RuntimeException 当文件添加失败时抛出,包含失败文件路径信息 */ private void addToZip(ZipOutputStream zipOutputStream, GeneratorVo generatorVo) { try { + // 标准化文件路径:移除Velocity模板扩展名 String path = generatorVo.getPath().replace(".vm", ""); - ZipEntry zipEntry = new ZipEntry(path); - zipOutputStream.putNextEntry(zipEntry); + + zipOutputStream.putNextEntry(new ZipEntry(path)); + + // 以UTF-8编码写入文件内容,避免乱码问题 zipOutputStream.write(generatorVo.getCode().getBytes(StandardCharsets.UTF_8)); zipOutputStream.closeEntry(); } catch (IOException e) { throw new RuntimeException("Failed to add file to ZIP: " + generatorVo.getPath(), e); } } - } \ No newline at end of file