diff --git a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/config/properties/GeneratorProperties.java b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/config/properties/GeneratorProperties.java index 546e65332..e6204b606 100644 --- a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/config/properties/GeneratorProperties.java +++ b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/config/properties/GeneratorProperties.java @@ -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; /** * 代码生成器配置属性 @@ -39,7 +38,12 @@ public class GeneratorProperties { /** * 排除数据表(哪些数据表不展示在代码生成中) */ - private String[] excludeTables; + private String[] excludeTables = new String[0]; + + /** + * 类型映射 + */ + private Map>> typeMappings = MapUtil.newHashMap(); /** * 模板配置 diff --git a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/entity/FieldConfigDO.java b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/entity/FieldConfigDO.java index a9e80f7e3..c81866ae3 100644 --- a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/entity/FieldConfigDO.java +++ b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/model/entity/FieldConfigDO.java @@ -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; @@ -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); - } } diff --git a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java index d5735ef7b..08123d73e 100644 --- a/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java +++ b/continew-admin-generator/src/main/java/top/charles7c/continew/admin/generator/service/impl/GeneratorServiceImpl.java @@ -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; @@ -136,6 +137,12 @@ public List listFieldConfig(String tableName, Boolean requireSync List latestFieldConfigList = new ArrayList<>(); // 获取最新数据表列信息 Collection columnList = MetaUtils.getColumns(dataSource, tableName); + // 获取数据库对应的类型映射配置 + DatabaseType databaseType = MetaUtils.getDatabaseType(dataSource); + Map> typeMappingMap = generatorProperties.getTypeMappings() + .get(databaseType.getDatabase()); + CheckUtils.throwIfEmpty(typeMappingMap, "请先配置对应数据库的类型映射"); + Set>> typeMappingEntrySet = typeMappingMap.entrySet(); // 新增或更新字段配置 Map fieldConfigMap = fieldConfigList.stream() .collect(Collectors.toMap(FieldConfigDO::getColumnName, Function.identity(), (key1, key2) -> key2)); @@ -143,13 +150,19 @@ public List listFieldConfig(String tableName, Boolean requireSync 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; @@ -232,13 +245,13 @@ public List 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); @@ -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 backendModuleChildPathList = CollUtil.newArrayList("src", "main", "java"); backendModuleChildPathList.addAll(StrUtil.split(packageName, StringConstants.DOT)); File backendParentFile = FileUtil.file(backendModuleFile, backendModuleChildPathList @@ -273,7 +286,7 @@ public void generate(String tableName) { .toList(); Map 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)); @@ -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)) { diff --git a/continew-admin-generator/src/main/resources/generator.properties b/continew-admin-generator/src/main/resources/generator.properties deleted file mode 100644 index a50f63c6e..000000000 --- a/continew-admin-generator/src/main/resources/generator.properties +++ /dev/null @@ -1,26 +0,0 @@ -tinyint=Integer -smallint=Integer -mediumint=Integer -int=Integer -integer=Integer - -bigint=Long - -float=Float - -double=Double - -decimal=BigDecimal - -bit=Boolean - -char=String -varchar=String -tinytext=String -text=String -mediumtext=String -longtext=String - -date=LocalDate -datetime=LocalDateTime -timestamp=LocalDateTime \ No newline at end of file diff --git a/continew-admin-generator/src/main/resources/templates/generator/Controller.ftl b/continew-admin-generator/src/main/resources/templates/Controller.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Controller.ftl rename to continew-admin-generator/src/main/resources/templates/Controller.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/DetailResp.ftl b/continew-admin-generator/src/main/resources/templates/DetailResp.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/DetailResp.ftl rename to continew-admin-generator/src/main/resources/templates/DetailResp.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/Entity.ftl b/continew-admin-generator/src/main/resources/templates/Entity.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Entity.ftl rename to continew-admin-generator/src/main/resources/templates/Entity.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/Mapper.ftl b/continew-admin-generator/src/main/resources/templates/Mapper.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Mapper.ftl rename to continew-admin-generator/src/main/resources/templates/Mapper.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/Query.ftl b/continew-admin-generator/src/main/resources/templates/Query.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Query.ftl rename to continew-admin-generator/src/main/resources/templates/Query.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/Req.ftl b/continew-admin-generator/src/main/resources/templates/Req.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Req.ftl rename to continew-admin-generator/src/main/resources/templates/Req.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/Resp.ftl b/continew-admin-generator/src/main/resources/templates/Resp.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Resp.ftl rename to continew-admin-generator/src/main/resources/templates/Resp.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/Service.ftl b/continew-admin-generator/src/main/resources/templates/Service.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/Service.ftl rename to continew-admin-generator/src/main/resources/templates/Service.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/ServiceImpl.ftl b/continew-admin-generator/src/main/resources/templates/ServiceImpl.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/ServiceImpl.ftl rename to continew-admin-generator/src/main/resources/templates/ServiceImpl.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/api.ftl b/continew-admin-generator/src/main/resources/templates/api.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/api.ftl rename to continew-admin-generator/src/main/resources/templates/api.ftl diff --git a/continew-admin-generator/src/main/resources/templates/generator/index.ftl b/continew-admin-generator/src/main/resources/templates/index.ftl similarity index 100% rename from continew-admin-generator/src/main/resources/templates/generator/index.ftl rename to continew-admin-generator/src/main/resources/templates/index.ftl diff --git a/continew-admin-generator/src/main/resources/application.yml b/continew-admin-webapi/src/main/resources/config/application-generator.yml similarity index 53% rename from continew-admin-generator/src/main/resources/application.yml rename to continew-admin-webapi/src/main/resources/config/application-generator.yml index 80c363317..cbfe5dc8b 100644 --- a/continew-admin-generator/src/main/resources/application.yml +++ b/continew-admin-webapi/src/main/resources/config/application-generator.yml @@ -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 # 排除字段 @@ -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 @@ -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 \ No newline at end of file diff --git a/continew-admin-webapi/src/main/resources/config/application.yml b/continew-admin-webapi/src/main/resources/config/application.yml index 9617a8f79..bb8a2ea54 100644 --- a/continew-admin-webapi/src/main/resources/config/application.yml +++ b/continew-admin-webapi/src/main/resources/config/application.yml @@ -214,6 +214,8 @@ spring: profiles: # 启用的环境 active: dev + include: + - generator main: # 允许定义重名的 bean 对象覆盖原有的 bean allow-bean-definition-overriding: true