mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-10-28 16:57:11 +08:00
refactor: 优化代码生成预览
This commit is contained in:
@@ -16,14 +16,12 @@
|
|||||||
|
|
||||||
package top.continew.admin.generator.model.resp;
|
package top.continew.admin.generator.model.resp;
|
||||||
|
|
||||||
import java.io.Serial;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import java.io.Serializable;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成预览信息
|
* 生成预览信息
|
||||||
@@ -38,6 +36,9 @@ public class GeneratePreviewResp implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "生成的文件路径", example = "continew-admin\\continew-admin\\continew-admin-generator\\src\\main\\java\\top\\continew\\admin\\generator\\service")
|
||||||
|
private String path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件名
|
* 文件名
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -248,10 +248,35 @@ public class GeneratorServiceImpl implements GeneratorService {
|
|||||||
genConfigMap.put("fieldConfigs", fieldConfigList);
|
genConfigMap.put("fieldConfigs", fieldConfigList);
|
||||||
generatePreview.setContent(TemplateUtils.render(templateConfig.getTemplatePath(), genConfigMap));
|
generatePreview.setContent(TemplateUtils.render(templateConfig.getTemplatePath(), genConfigMap));
|
||||||
}
|
}
|
||||||
|
setPreviewPath(generatePreview, genConfig, templateConfig);
|
||||||
}
|
}
|
||||||
return generatePreviewList;
|
return generatePreviewList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setPreviewPath(GeneratePreviewResp generatePreview, GenConfigDO genConfig, GeneratorProperties.TemplateConfig templateConfig) {
|
||||||
|
// 获取前后端基础路径
|
||||||
|
String backendBasicPackagePath = this.buildBackendBasicPackagePath(genConfig);
|
||||||
|
String frontendBasicPackagePath = String.join(File.separator, projectProperties.getAppName(), projectProperties.getAppName() + "-ui");
|
||||||
|
String packageName = genConfig.getPackageName();
|
||||||
|
String moduleName = StrUtil.subSuf(packageName, StrUtil
|
||||||
|
.lastIndexOfIgnoreCase(packageName, StringConstants.DOT) + 1);
|
||||||
|
String packagePath;
|
||||||
|
if (generatePreview.isBackend()) {
|
||||||
|
// 例如:continew-admin/continew-system/src/main/java/top/continew/admin/system/service/impl
|
||||||
|
packagePath = String.join(File.separator, backendBasicPackagePath, templateConfig.getPackageName()
|
||||||
|
.replace(StringConstants.DOT, File.separator));
|
||||||
|
} else {
|
||||||
|
// 例如:continew-admin/continew-admin-ui/src/views/system
|
||||||
|
packagePath = String.join(File.separator, frontendBasicPackagePath, templateConfig.getPackageName()
|
||||||
|
.replace(StringConstants.SLASH, File.separator), moduleName);
|
||||||
|
// 例如:continew-admin/continew-admin-ui/src/views/system/user
|
||||||
|
packagePath = ".vue".equals(templateConfig.getExtension())
|
||||||
|
? packagePath + File.separator + StrUtil.lowerFirst(genConfig.getClassNamePrefix())
|
||||||
|
: packagePath;
|
||||||
|
}
|
||||||
|
generatePreview.setPath(packagePath);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(List<String> tableNames, HttpServletRequest request, HttpServletResponse response) {
|
public void generate(List<String> tableNames, HttpServletRequest request, HttpServletResponse response) {
|
||||||
try {
|
try {
|
||||||
@@ -282,37 +307,10 @@ public class GeneratorServiceImpl implements GeneratorService {
|
|||||||
* @param genConfig 生成配置
|
* @param genConfig 生成配置
|
||||||
*/
|
*/
|
||||||
private void generateCode(List<GeneratePreviewResp> generatePreviewList, GenConfigDO genConfig) {
|
private void generateCode(List<GeneratePreviewResp> generatePreviewList, GenConfigDO genConfig) {
|
||||||
// 获取前后端基础路径
|
|
||||||
String backendBasicPackagePath = this.buildBackendBasicPackagePath(genConfig);
|
|
||||||
String frontendBasicPackagePath = SystemUtil.getUserInfo().getTempDir() + String
|
|
||||||
.join(File.separator, projectProperties.getAppName(), projectProperties.getAppName() + "-ui");
|
|
||||||
String packageName = genConfig.getPackageName();
|
|
||||||
String moduleName = StrUtil.subSuf(packageName, StrUtil
|
|
||||||
.lastIndexOfIgnoreCase(packageName, StringConstants.DOT) + 1);
|
|
||||||
// 生成代码
|
|
||||||
Map<String, GeneratorProperties.TemplateConfig> templateConfigMap = generatorProperties.getTemplateConfigs();
|
|
||||||
for (GeneratePreviewResp generatePreview : generatePreviewList) {
|
for (GeneratePreviewResp generatePreview : generatePreviewList) {
|
||||||
// 获取对应模板配置
|
|
||||||
GeneratorProperties.TemplateConfig templateConfig = templateConfigMap.getOrDefault(StrUtil
|
|
||||||
.subBefore(generatePreview.getFileName(), StringConstants.DOT, true)
|
|
||||||
.replace(genConfig.getClassNamePrefix(), StringConstants.EMPTY), templateConfigMap.get("api"));
|
|
||||||
String packagePath;
|
|
||||||
if (generatePreview.isBackend()) {
|
|
||||||
// 例如:continew-admin/continew-system/src/main/java/top/continew/admin/system/service/impl
|
|
||||||
packagePath = String.join(File.separator, backendBasicPackagePath, templateConfig.getPackageName()
|
|
||||||
.replace(StringConstants.DOT, File.separator));
|
|
||||||
} else {
|
|
||||||
// 例如:continew-admin/continew-admin-ui/src/views/system
|
|
||||||
packagePath = String.join(File.separator, frontendBasicPackagePath, templateConfig.getPackageName()
|
|
||||||
.replace(StringConstants.SLASH, File.separator), moduleName);
|
|
||||||
// 例如:continew-admin/continew-admin-ui/src/views/system/user
|
|
||||||
packagePath = ".vue".equals(templateConfig.getExtension())
|
|
||||||
? packagePath + File.separator + StrUtil.lowerFirst(genConfig.getClassNamePrefix())
|
|
||||||
: packagePath;
|
|
||||||
}
|
|
||||||
// 后端:continew-admin/continew-system/src/main/java/top/continew/admin/system/service/impl/XxxServiceImpl.java
|
// 后端:continew-admin/continew-system/src/main/java/top/continew/admin/system/service/impl/XxxServiceImpl.java
|
||||||
// 前端:continew-admin/continew-admin-ui/src/views/system/user/index.vue
|
// 前端:continew-admin/continew-admin-ui/src/views/system/user/index.vue
|
||||||
File file = new File(packagePath, generatePreview.getFileName());
|
File file = new File(SystemUtil.getUserInfo().getTempDir() + generatePreview.getPath(), generatePreview.getFileName());
|
||||||
// 如果已经存在,且不允许覆盖,则跳过
|
// 如果已经存在,且不允许覆盖,则跳过
|
||||||
if (!file.exists() || Boolean.TRUE.equals(genConfig.getIsOverride())) {
|
if (!file.exists() || Boolean.TRUE.equals(genConfig.getIsOverride())) {
|
||||||
FileUtil.writeUtf8String(generatePreview.getContent(), file);
|
FileUtil.writeUtf8String(generatePreview.getContent(), file);
|
||||||
@@ -328,7 +326,7 @@ public class GeneratorServiceImpl implements GeneratorService {
|
|||||||
*/
|
*/
|
||||||
private String buildBackendBasicPackagePath(GenConfigDO genConfig) {
|
private String buildBackendBasicPackagePath(GenConfigDO genConfig) {
|
||||||
// 例如:continew-admin/continew-system/src/main/java/top/continew/admin/system
|
// 例如:continew-admin/continew-system/src/main/java/top/continew/admin/system
|
||||||
return SystemUtil.getUserInfo().getTempDir() + String.join(File.separator, projectProperties
|
return String.join(File.separator, projectProperties
|
||||||
.getAppName(), projectProperties.getAppName(), genConfig.getModuleName(), "src", "main", "java", genConfig
|
.getAppName(), projectProperties.getAppName(), genConfig.getModuleName(), "src", "main", "java", genConfig
|
||||||
.getPackageName()
|
.getPackageName()
|
||||||
.replace(StringConstants.DOT, File.separator));
|
.replace(StringConstants.DOT, File.separator));
|
||||||
|
|||||||
Reference in New Issue
Block a user