💡 更新注释信息和文件命名方式

This commit is contained in:
Bunny 2025-07-01 16:39:16 +08:00
parent 9b6938b46e
commit 41ce317249
10 changed files with 37 additions and 25 deletions

View File

@ -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<ColumnMetaData> vo = sqlParserService.getColumnInfoList(sql);
return Result.success(vo);
}
}

View File

@ -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<ColumnMetaData> columnInfo = databaseMetadataProvider.getColumnInfoList(tableName);
return Result.success(columnInfo);
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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<ColumnMetaData> 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());

View File

@ -14,7 +14,9 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 负责处理ZIP打包和下载逻辑的服务类
* VMS代码生成系统的ZIP打包服务
* <p>
* 提供将生成的代码模板打包为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<GeneratorVo> generatorVoList = codeGeneratorService.generateCode(dto).values().stream().flatMap(Collection::stream).toList();
// 将二维代码生成结果扁平化为一维列表
List<GeneratorVo> 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);
}
}
}