Skip to content

Commit

Permalink
refactor(generator): 重构代码生成配置
Browse files Browse the repository at this point in the history
Closes #42
  • Loading branch information
Charles7c committed Mar 11, 2024
1 parent dee3cf6 commit 7031a51
Show file tree
Hide file tree
Showing 17 changed files with 72 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,13 @@

package top.charles7c.continew.admin.generator.config.properties;

import java.util.Map;

import cn.hutool.core.map.MapUtil;
import lombok.Data;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import cn.hutool.core.map.MapUtil;
import java.util.List;
import java.util.Map;

/**
* 代码生成器配置属性
Expand All @@ -39,7 +38,12 @@ public class GeneratorProperties {
/**
* 排除数据表(哪些数据表不展示在代码生成中)
*/
private String[] excludeTables;
private String[] excludeTables = new String[0];

/**
* 类型映射
*/
private Map<String, Map<String, List<String>>> typeMappings = MapUtil.newHashMap();

/**
* 模板配置
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.meta.Column;
import cn.hutool.setting.dialect.Props;
import cn.hutool.setting.dialect.PropsUtil;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
Expand Down Expand Up @@ -169,10 +167,4 @@ public void setColumnName(String columnName) {
this.columnName = columnName;
this.fieldName = StrUtil.toCamelCase(this.columnName);
}

public void setColumnType(String columnType) {
this.columnType = columnType;
Props generatorProp = PropsUtil.get("generator");
this.fieldType = generatorProp.getStr(columnType);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import top.charles7c.continew.starter.core.constant.StringConstants;
import top.charles7c.continew.starter.core.exception.BusinessException;
import top.charles7c.continew.starter.core.util.TemplateUtils;
import top.charles7c.continew.starter.data.core.enums.DatabaseType;
import top.charles7c.continew.starter.data.core.util.MetaUtils;
import top.charles7c.continew.starter.data.core.util.Table;
import top.charles7c.continew.starter.core.util.validate.CheckUtils;
Expand Down Expand Up @@ -136,20 +137,32 @@ public List<FieldConfigDO> listFieldConfig(String tableName, Boolean requireSync
List<FieldConfigDO> latestFieldConfigList = new ArrayList<>();
// 获取最新数据表列信息
Collection<Column> columnList = MetaUtils.getColumns(dataSource, tableName);
// 获取数据库对应的类型映射配置
DatabaseType databaseType = MetaUtils.getDatabaseType(dataSource);
Map<String, List<String>> typeMappingMap = generatorProperties.getTypeMappings()
.get(databaseType.getDatabase());
CheckUtils.throwIfEmpty(typeMappingMap, "请先配置对应数据库的类型映射");
Set<Map.Entry<String, List<String>>> typeMappingEntrySet = typeMappingMap.entrySet();
// 新增或更新字段配置
Map<String, FieldConfigDO> fieldConfigMap = fieldConfigList.stream()
.collect(Collectors.toMap(FieldConfigDO::getColumnName, Function.identity(), (key1, key2) -> key2));
int i = 1;
for (Column column : columnList) {
FieldConfigDO fieldConfig = Optional.ofNullable(fieldConfigMap.get(column.getName()))
.orElseGet(() -> new FieldConfigDO(column));
fieldConfig.setFieldSort(i++);
// 更新已有字段配置
if (null != fieldConfig.getCreateTime()) {
String columnType = StrUtil.splitToArray(column.getTypeName(), StringConstants.SPACE)[0].toLowerCase();
fieldConfig.setColumnType(columnType);
fieldConfig.setColumnSize(Convert.toStr(column.getSize()));
}
String fieldType = typeMappingEntrySet.stream()
.filter(entry -> entry.getValue().contains(fieldConfig.getColumnType()))
.map(Map.Entry::getKey)
.findFirst()
.orElse(null);
fieldConfig.setFieldType(fieldType);
fieldConfig.setFieldSort(i++);
latestFieldConfigList.add(fieldConfig);
}
return latestFieldConfigList;
Expand Down Expand Up @@ -232,13 +245,13 @@ public List<GeneratePreviewResp> preview(String tableName) {
// 渲染前端代码
// api 代码
genConfigMap.put("fieldConfigs", fieldConfigList);
String apiContent = TemplateUtils.render("generator/api.ftl", genConfigMap);
String apiContent = TemplateUtils.render("api.ftl", genConfigMap);
GeneratePreviewResp apiCodePreview = new GeneratePreviewResp();
apiCodePreview.setFileName(classNamePrefix.toLowerCase() + ".ts");
apiCodePreview.setContent(apiContent);
generatePreviewList.add(apiCodePreview);
// view 代码
String viewContent = TemplateUtils.render("generator/index.ftl", genConfigMap);
String viewContent = TemplateUtils.render("index.ftl", genConfigMap);
GeneratePreviewResp viewCodePreview = new GeneratePreviewResp();
viewCodePreview.setFileName("index.vue");
viewCodePreview.setContent(viewContent);
Expand All @@ -260,9 +273,9 @@ public void generate(String tableName) {
// 1.确定后端代码基础路径
// 例如:D:/continew-admin
String projectPath = SystemUtil.getUserInfo().getCurrentDir();
// 例如:D:/continew-admin/continew-admin-tool
// 例如:D:/continew-admin/continew-admin-system
File backendModuleFile = new File(projectPath, genConfig.getModuleName());
// 例如:D:/continew-admin/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool
// 例如:D:/continew-admin/continew-admin-system/src/main/java/top/charles7c/continew/admin/system
List<String> backendModuleChildPathList = CollUtil.newArrayList("src", "main", "java");
backendModuleChildPathList.addAll(StrUtil.split(packageName, StringConstants.DOT));
File backendParentFile = FileUtil.file(backendModuleFile, backendModuleChildPathList
Expand All @@ -273,7 +286,7 @@ public void generate(String tableName) {
.toList();
Map<String, TemplateConfig> templateConfigMap = generatorProperties.getTemplateConfigs();
for (GeneratePreviewResp codePreview : backendCodePreviewList) {
// 例如:D:/continew-admin/continew-admin-tool/src/main/java/top/charles7c/continew/admin/tool/service/impl/XxxServiceImpl.java
// 例如:D:/continew-admin/continew-admin-system/src/main/java/top/charles7c/continew/admin/system/service/impl/XxxServiceImpl.java
TemplateConfig templateConfig = templateConfigMap.get(codePreview.getFileName()
.replace(classNamePrefix, StringConstants.EMPTY)
.replace(FileNameUtil.EXT_JAVA, StringConstants.EMPTY));
Expand Down Expand Up @@ -310,7 +323,7 @@ public void generate(String tableName) {
FileUtil.writeUtf8String(apiCodePreview.getContent(), apiFile);
// 2.生成 view 代码
GeneratePreviewResp viewCodePreview = frontendCodePreviewList.get(1);
// 例如:D:/continew-admin-ui/src/views/tool/xxx/index.vue
// 例如:D:/continew-admin-ui/src/views/system/xxx/index.vue
File indexFile = FileUtil.file(frontendPath, apiModuleName, StrUtil
.lowerFirst(classNamePrefix), "index.vue");
if (indexFile.exists() && Boolean.FALSE.equals(isOverride)) {
Expand Down
26 changes: 0 additions & 26 deletions continew-admin-generator/src/main/resources/generator.properties

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,42 @@ generator:
- DATABASECHANGELOGLOCK
- gen_config
- gen_field_config
# 模板配置
## 类型映射
typeMappings:
MySQL:
Integer:
- int
- tinyint
- smallint
- mediumint
- integer
String:
- varchar
- char
- text
- mediumtext
- longtext
- tinytext
LocalDate:
- date
LocalDateTime:
- datetime
- timestamp
Long:
- bigint
Float:
- float
Double:
- double
BigDecimal:
- decimal
Boolean:
- bit
## 模板配置
templateConfigs:
DO:
# 模板路径
templatePath: generator/Entity.ftl
templatePath: Entity.ftl
# 包名称
packageName: model.entity
# 排除字段
Expand All @@ -21,20 +52,20 @@ generator:
- updateUser
- updateTime
Query:
templatePath: generator/Query.ftl
templatePath: Query.ftl
packageName: model.query
Req:
templatePath: generator/Req.ftl
templatePath: Req.ftl
packageName: model.req
Resp:
templatePath: generator/Resp.ftl
templatePath: Resp.ftl
packageName: model.resp
excludeFields:
- id
- createUser
- createTime
DetailResp:
templatePath: generator/DetailResp.ftl
templatePath: DetailResp.ftl
packageName: model.resp
excludeFields:
- id
Expand All @@ -43,14 +74,14 @@ generator:
- updateUser
- updateTime
Mapper:
templatePath: generator/Mapper.ftl
templatePath: Mapper.ftl
packageName: mapper
Service:
templatePath: generator/Service.ftl
templatePath: Service.ftl
packageName: service
ServiceImpl:
templatePath: generator/ServiceImpl.ftl
templatePath: ServiceImpl.ftl
packageName: service.impl
Controller:
templatePath: generator/Controller.ftl
templatePath: Controller.ftl
packageName: controller
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,8 @@ spring:
profiles:
# 启用的环境
active: dev
include:
- generator
main:
# 允许定义重名的 bean 对象覆盖原有的 bean
allow-bean-definition-overriding: true
Expand Down

0 comments on commit 7031a51

Please sign in to comment.