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