feat(generator): 支持生成枚举类型属性

This commit is contained in:
风筝LC
2025-04-05 14:31:11 +00:00
committed by Charles7c
parent da674879a3
commit 1de7b20fb0
3 changed files with 50 additions and 2 deletions

View File

@@ -100,6 +100,11 @@ public class InnerGenConfigDO extends GenConfigDO {
*/
private boolean hasTimeField;
/**
* 引入的包
*/
private List<String> imports;
public InnerGenConfigDO() {
}

View File

@@ -38,6 +38,7 @@ import freemarker.template.DefaultObjectWrapperBuilder;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.continew.admin.generator.config.properties.GeneratorProperties;
@@ -54,6 +55,7 @@ import top.continew.admin.generator.model.resp.GeneratePreviewResp;
import top.continew.admin.generator.service.GeneratorService;
import top.continew.starter.core.autoconfigure.project.ProjectProperties;
import top.continew.starter.core.constant.StringConstants;
import top.continew.starter.core.enums.BaseEnum;
import top.continew.starter.core.exception.BusinessException;
import top.continew.starter.core.validation.CheckUtils;
import top.continew.starter.data.core.enums.DatabaseType;
@@ -290,7 +292,15 @@ public class GeneratorServiceImpl implements GeneratorService {
CheckUtils.throwIfNull(genConfig, "请先进行数据表 [{}] 生成配置", tableName);
List<FieldConfigDO> fieldConfigList = fieldConfigMapper.selectListByTableName(tableName);
CheckUtils.throwIfEmpty(fieldConfigList, "请先进行数据表 [{}] 字段配置", tableName);
InnerGenConfigDO innerGenConfig = new InnerGenConfigDO(genConfig);
List<String> imports = new ArrayList<>();
// 处理枚举字段
List<FieldConfigDO> fieldConfigRecords = fieldConfigList.stream()
.map(s -> convertToFieldConfigDO(s, imports))
.toList();
innerGenConfig.setImports(imports);
// 渲染代码
String classNamePrefix = innerGenConfig.getClassNamePrefix();
Map<String, GeneratorProperties.TemplateConfig> templateConfigMap = generatorProperties.getTemplateConfigs();
@@ -304,7 +314,7 @@ public class GeneratorServiceImpl implements GeneratorService {
for (Map.Entry<String, GeneratorProperties.TemplateConfig> templateConfigEntry : templateConfigMap.entrySet()) {
GeneratorProperties.TemplateConfig templateConfig = templateConfigEntry.getValue();
// 移除需要忽略的字段
innerGenConfig.setFieldConfigs(fieldConfigList.stream()
innerGenConfig.setFieldConfigs(fieldConfigRecords.stream()
.filter(fieldConfig -> !StrUtil.equalsAny(fieldConfig.getFieldName(), templateConfig
.getExcludeFields()))
.toList());
@@ -334,6 +344,33 @@ public class GeneratorServiceImpl implements GeneratorService {
return generatePreviewList;
}
/**
* 添加枚举类型的属性生成对应的import
*
* @param fieldConfigDO 属性配置信息
* @param imports 待导入包集合
* @return 新的属性配置信息
*/
private FieldConfigDO convertToFieldConfigDO(FieldConfigDO fieldConfigDO, List<String> imports) {
FieldConfigDO fieldConfig = new FieldConfigDO();
BeanUtil.copyProperties(fieldConfigDO, fieldConfig);
String dictCode = fieldConfig.getDictCode();
if (StringUtils.isBlank(dictCode)) {
return fieldConfig;
}
Set<Class<?>> classSet = ClassUtil.scanPackageBySuper(projectProperties.getBasePackage(), BaseEnum.class);
Optional<Class<?>> clazzOptional = classSet.stream()
.filter(s -> StrUtil.toUnderlineCase(s.getSimpleName()).toLowerCase().equals(dictCode))
.findFirst();
if (clazzOptional.isEmpty()) {
return fieldConfig;
}
Class<?> clazz = clazzOptional.get();
imports.add(clazz.getName());
fieldConfig.setFieldType(clazz.getSimpleName());
return fieldConfig;
}
/**
* 设置预览路径
*

View File

@@ -6,6 +6,12 @@ import com.baomidou.mybatisplus.annotation.TableName;
import top.continew.admin.common.model.entity.BaseDO;
<#if imports??>
<#list imports as className>
import ${className};
</#list>
</#if>
import java.io.Serial;
<#if hasTimeField>
import java.time.*;
@@ -35,4 +41,4 @@ public class ${className} extends BaseDO {
private ${fieldConfig.fieldType} ${fieldConfig.fieldName};
</#list>
</#if>
}
}