💡 更新注释信息和文件命名方式
This commit is contained in:
parent
9b6938b46e
commit
41ce317249
|
@ -1,6 +1,6 @@
|
||||||
package cn.bunny.controller;
|
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.ColumnMetaData;
|
||||||
import cn.bunny.domain.entity.TableMetaData;
|
import cn.bunny.domain.entity.TableMetaData;
|
||||||
import cn.bunny.domain.result.Result;
|
import cn.bunny.domain.result.Result;
|
||||||
|
@ -34,4 +34,5 @@ public class SqlParserController {
|
||||||
List<ColumnMetaData> vo = sqlParserService.getColumnInfoList(sql);
|
List<ColumnMetaData> vo = sqlParserService.getColumnInfoList(sql);
|
||||||
return Result.success(vo);
|
return Result.success(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package cn.bunny.controller;
|
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.ColumnMetaData;
|
||||||
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
||||||
import cn.bunny.domain.entity.TableMetaData;
|
import cn.bunny.domain.entity.TableMetaData;
|
||||||
|
@ -51,4 +51,5 @@ public class TableController {
|
||||||
List<ColumnMetaData> columnInfo = databaseMetadataProvider.getColumnInfoList(tableName);
|
List<ColumnMetaData> columnInfo = databaseMetadataProvider.getColumnInfoList(tableName);
|
||||||
return Result.success(columnInfo);
|
return Result.success(columnInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.ColumnMetaData;
|
||||||
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
import cn.bunny.domain.entity.DatabaseInfoMetaData;
|
|
@ -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.ColumnMetaData;
|
||||||
import cn.bunny.domain.entity.TableMetaData;
|
import cn.bunny.domain.entity.TableMetaData;
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.bunny.core.factory;
|
package cn.bunny.core.provider;
|
||||||
|
|
||||||
import cn.bunny.core.dialect.DatabaseDialect;
|
import cn.bunny.core.dialect.DatabaseDialect;
|
||||||
import cn.bunny.domain.entity.ColumnMetaData;
|
import cn.bunny.domain.entity.ColumnMetaData;
|
|
@ -15,7 +15,7 @@ import java.util.Date;
|
||||||
* 使用模板方法,方便扩展
|
* 使用模板方法,方便扩展
|
||||||
* 如果需要继承 AbstractVmsGenerator
|
* 如果需要继承 AbstractVmsGenerator
|
||||||
*/
|
*/
|
||||||
public class VmsTemplateGenerator extends AbstractTemplateGenerator {
|
public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
|
||||||
|
|
||||||
private final VmsArgumentDto dto;
|
private final VmsArgumentDto dto;
|
||||||
private final String path;
|
private final String path;
|
||||||
|
@ -26,7 +26,7 @@ public class VmsTemplateGenerator extends AbstractTemplateGenerator {
|
||||||
* @param path 当前路径
|
* @param path 当前路径
|
||||||
* @param tableMetaData 表名称
|
* @param tableMetaData 表名称
|
||||||
*/
|
*/
|
||||||
public VmsTemplateGenerator(VmsArgumentDto dto, String path, TableMetaData tableMetaData) {
|
public VmsTBaseTemplateGenerator(VmsArgumentDto dto, String path, TableMetaData tableMetaData) {
|
||||||
this.dto = dto;
|
this.dto = dto;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.tableMetaData = tableMetaData;
|
this.tableMetaData = tableMetaData;
|
|
@ -1,6 +1,6 @@
|
||||||
package cn.bunny.service.impl;
|
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.DatabaseInfoMetaData;
|
||||||
import cn.bunny.domain.entity.TableMetaData;
|
import cn.bunny.domain.entity.TableMetaData;
|
||||||
import cn.bunny.service.TableService;
|
import cn.bunny.service.TableService;
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class VmsServiceImpl implements VmsService {
|
||||||
// 下载文件名称
|
// 下载文件名称
|
||||||
long currentTimeMillis = System.currentTimeMillis();
|
long currentTimeMillis = System.currentTimeMillis();
|
||||||
String digestHex = MD5.create().digestHex(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();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package cn.bunny.service.impl.vms;
|
package cn.bunny.service.impl.vms;
|
||||||
|
|
||||||
import cn.bunny.core.factory.DatabaseMetadataProvider;
|
import cn.bunny.core.provider.DatabaseMetadataProvider;
|
||||||
import cn.bunny.core.factory.SqlMetadataProvider;
|
import cn.bunny.core.provider.SqlMetadataProvider;
|
||||||
import cn.bunny.core.template.VmsTemplateGenerator;
|
import cn.bunny.core.template.VmsTBaseTemplateGenerator;
|
||||||
import cn.bunny.domain.dto.VmsArgumentDto;
|
import cn.bunny.domain.dto.VmsArgumentDto;
|
||||||
import cn.bunny.domain.entity.ColumnMetaData;
|
import cn.bunny.domain.entity.ColumnMetaData;
|
||||||
import cn.bunny.domain.entity.TableMetaData;
|
import cn.bunny.domain.entity.TableMetaData;
|
||||||
|
@ -60,7 +60,7 @@ public class VmsCodeGeneratorService {
|
||||||
*/
|
*/
|
||||||
private GeneratorVo generateTemplate(VmsArgumentDto dto, String path,
|
private GeneratorVo generateTemplate(VmsArgumentDto dto, String path,
|
||||||
TableMetaData tableMetaData, List<ColumnMetaData> columnInfoList) {
|
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);
|
StringWriter writer = generator.generatorCodeTemplate(tableMetaData, columnInfoList);
|
||||||
String processedPath = VmsUtil.handleVmFilename(path, tableMetaData.getTableName());
|
String processedPath = VmsUtil.handleVmFilename(path, tableMetaData.getTableName());
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,9 @@ import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 负责处理ZIP打包和下载逻辑的服务类
|
* VMS代码生成系统的ZIP打包服务
|
||||||
|
* <p>
|
||||||
|
* 提供将生成的代码模板打包为ZIP文件并支持下载的功能
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
@ -23,17 +25,22 @@ public class VmsZipService {
|
||||||
private final VmsCodeGeneratorService codeGeneratorService;
|
private final VmsCodeGeneratorService codeGeneratorService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建ZIP文件字节数组
|
* 将生成的代码模板打包为ZIP文件
|
||||||
*
|
*
|
||||||
* @param dto 生成参数
|
* @param dto 代码生成参数DTO,包含表名、包名等配置
|
||||||
* @return ZIP文件字节数组
|
* @return ZIP文件字节数组,可直接用于下载
|
||||||
|
* @throws RuntimeException 当ZIP打包过程中发生IO异常时抛出
|
||||||
*/
|
*/
|
||||||
public byte[] createZipFile(VmsArgumentDto dto) {
|
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();
|
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream)) {
|
ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream)) {
|
||||||
|
|
||||||
|
// 将所有生成的文件添加到ZIP包中
|
||||||
generatorVoList.forEach(generatorVo -> addToZip(zipOutputStream, generatorVo));
|
generatorVoList.forEach(generatorVo -> addToZip(zipOutputStream, generatorVo));
|
||||||
return byteArrayOutputStream.toByteArray();
|
return byteArrayOutputStream.toByteArray();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -42,21 +49,24 @@ public class VmsZipService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将单个生成结果添加到ZIP文件
|
* 将单个代码文件添加到ZIP输出流
|
||||||
*
|
*
|
||||||
* @param zipOutputStream ZIP输出流
|
* @param zipOutputStream ZIP文件输出流
|
||||||
* @param generatorVo 生成结果对象
|
* @param generatorVo 代码生成结果对象,包含文件路径和内容
|
||||||
|
* @throws RuntimeException 当文件添加失败时抛出,包含失败文件路径信息
|
||||||
*/
|
*/
|
||||||
private void addToZip(ZipOutputStream zipOutputStream, GeneratorVo generatorVo) {
|
private void addToZip(ZipOutputStream zipOutputStream, GeneratorVo generatorVo) {
|
||||||
try {
|
try {
|
||||||
|
// 标准化文件路径:移除Velocity模板扩展名
|
||||||
String path = generatorVo.getPath().replace(".vm", "");
|
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.write(generatorVo.getCode().getBytes(StandardCharsets.UTF_8));
|
||||||
zipOutputStream.closeEntry();
|
zipOutputStream.closeEntry();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException("Failed to add file to ZIP: " + generatorVo.getPath(), e);
|
throw new RuntimeException("Failed to add file to ZIP: " + generatorVo.getPath(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue