mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-09-14 03:01:36 +08:00
feat(generator): 支持生成枚举类型属性
This commit is contained in:
@@ -100,6 +100,11 @@ public class InnerGenConfigDO extends GenConfigDO {
|
|||||||
*/
|
*/
|
||||||
private boolean hasTimeField;
|
private boolean hasTimeField;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 引入的包
|
||||||
|
*/
|
||||||
|
private List<String> imports;
|
||||||
|
|
||||||
public InnerGenConfigDO() {
|
public InnerGenConfigDO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置预览路径
|
* 设置预览路径
|
||||||
*
|
*
|
||||||
|
@@ -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.*;
|
||||||
|
Reference in New Issue
Block a user