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 boolean hasTimeField;
/**
* 引入的包
*/
private List<String> imports;
public InnerGenConfigDO() { public InnerGenConfigDO() {
} }

View File

@@ -38,6 +38,7 @@ import freemarker.template.DefaultObjectWrapperBuilder;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import top.continew.admin.generator.config.properties.GeneratorProperties; 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.admin.generator.service.GeneratorService;
import top.continew.starter.core.autoconfigure.project.ProjectProperties; import top.continew.starter.core.autoconfigure.project.ProjectProperties;
import top.continew.starter.core.constant.StringConstants; 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.exception.BusinessException;
import top.continew.starter.core.validation.CheckUtils; import top.continew.starter.core.validation.CheckUtils;
import top.continew.starter.data.core.enums.DatabaseType; import top.continew.starter.data.core.enums.DatabaseType;
@@ -290,7 +292,15 @@ public class GeneratorServiceImpl implements GeneratorService {
CheckUtils.throwIfNull(genConfig, "请先进行数据表 [{}] 生成配置", tableName); CheckUtils.throwIfNull(genConfig, "请先进行数据表 [{}] 生成配置", tableName);
List<FieldConfigDO> fieldConfigList = fieldConfigMapper.selectListByTableName(tableName); List<FieldConfigDO> fieldConfigList = fieldConfigMapper.selectListByTableName(tableName);
CheckUtils.throwIfEmpty(fieldConfigList, "请先进行数据表 [{}] 字段配置", tableName); CheckUtils.throwIfEmpty(fieldConfigList, "请先进行数据表 [{}] 字段配置", tableName);
InnerGenConfigDO innerGenConfig = new InnerGenConfigDO(genConfig); 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(); String classNamePrefix = innerGenConfig.getClassNamePrefix();
Map<String, GeneratorProperties.TemplateConfig> templateConfigMap = generatorProperties.getTemplateConfigs(); 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()) { for (Map.Entry<String, GeneratorProperties.TemplateConfig> templateConfigEntry : templateConfigMap.entrySet()) {
GeneratorProperties.TemplateConfig templateConfig = templateConfigEntry.getValue(); GeneratorProperties.TemplateConfig templateConfig = templateConfigEntry.getValue();
// 移除需要忽略的字段 // 移除需要忽略的字段
innerGenConfig.setFieldConfigs(fieldConfigList.stream() innerGenConfig.setFieldConfigs(fieldConfigRecords.stream()
.filter(fieldConfig -> !StrUtil.equalsAny(fieldConfig.getFieldName(), templateConfig .filter(fieldConfig -> !StrUtil.equalsAny(fieldConfig.getFieldName(), templateConfig
.getExcludeFields())) .getExcludeFields()))
.toList()); .toList());
@@ -334,6 +344,33 @@ public class GeneratorServiceImpl implements GeneratorService {
return generatePreviewList; 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; import top.continew.admin.common.model.entity.BaseDO;
<#if imports??>
<#list imports as className>
import ${className};
</#list>
</#if>
import java.io.Serial; import java.io.Serial;
<#if hasTimeField> <#if hasTimeField>
import java.time.*; import java.time.*;