From 7f6d42954085ca633027e33715e6e17b7e8c938c Mon Sep 17 00:00:00 2001 From: ray <1490493387@qq.com> Date: Thu, 25 Jul 2024 08:17:36 +0800 Subject: [PATCH 1/5] =?UTF-8?q?wip:=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/system/config/JacksonConfig.java | 17 +++++ .../controller/GeneratorController.java | 31 ++++----- .../system/converter/GenConfigConverter.java | 21 +++--- .../youlai/system/enums/QueryTypeEnum.java | 18 ++++- .../system/model/form/GenConfigForm.java | 3 + .../system/service/GenConfigService.java | 24 +++++++ .../system/service/GenFieldConfigService.java | 15 +++++ .../system/service/GeneratorService.java | 21 ++---- .../service/impl/GenConfigServiceImpl.java | 20 ++++++ .../impl/GenFieldConfigServiceImpl.java | 21 ++++++ .../service/impl/GeneratorServiceImpl.java | 65 ++++++++++--------- 11 files changed, 181 insertions(+), 75 deletions(-) create mode 100644 src/main/java/com/youlai/system/config/JacksonConfig.java create mode 100644 src/main/java/com/youlai/system/service/GenConfigService.java create mode 100644 src/main/java/com/youlai/system/service/GenFieldConfigService.java create mode 100644 src/main/java/com/youlai/system/service/impl/GenConfigServiceImpl.java create mode 100644 src/main/java/com/youlai/system/service/impl/GenFieldConfigServiceImpl.java diff --git a/src/main/java/com/youlai/system/config/JacksonConfig.java b/src/main/java/com/youlai/system/config/JacksonConfig.java new file mode 100644 index 00000000..d7e3571d --- /dev/null +++ b/src/main/java/com/youlai/system/config/JacksonConfig.java @@ -0,0 +1,17 @@ +package com.youlai.system.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JacksonConfig { + + @Bean + public ObjectMapper objectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true); + return objectMapper; + } +} \ No newline at end of file diff --git a/src/main/java/com/youlai/system/controller/GeneratorController.java b/src/main/java/com/youlai/system/controller/GeneratorController.java index de3db805..05dbce74 100644 --- a/src/main/java/com/youlai/system/controller/GeneratorController.java +++ b/src/main/java/com/youlai/system/controller/GeneratorController.java @@ -9,6 +9,7 @@ import com.youlai.system.model.vo.GeneratorPreviewVO; import com.youlai.system.model.vo.TablePageVO; import com.youlai.system.service.GeneratorService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -32,6 +33,21 @@ public class GeneratorController { return PageResult.success(result); } + @Operation(summary = "获取代码生成配置") + @GetMapping("/{tableName}/config") + public Result getGenConfig( + @Parameter(description = "表名", example = "sys_user") @PathVariable String tableName) { + GenConfigForm formData = generatorService.getGenConfig(tableName); + return Result.success(formData); + } + + @Operation(summary = "保存代码生成配置") + @PostMapping("/{tableName}/config") + public Result saveGenConfig(@RequestBody GenConfigForm formData) { + generatorService.saveGenConfig(formData); + return Result.success(); + } + @Operation(summary = "获取预览生成代码") @GetMapping("/{tableName}/preview") public Result> getTablePreviewData(@PathVariable String tableName) { @@ -39,19 +55,4 @@ public class GeneratorController { return Result.success(list); } - - @Operation(summary = "获取代码生成配置") - @GetMapping("/{tableName}/config") - public Result getGenConfig(@PathVariable String tableName) { - GenConfigForm formData = generatorService.getGenConfig(tableName); - return Result.success(formData); - } - - @Operation(summary = "保存代码生成配置") - @PostMapping("/{tableName}/config") - public Result saveGenCodeConfig(@RequestBody GenConfigForm formData) { - boolean result = generatorService.saveGenCodeConfig(formData); - return Result.judge(result); - } - } diff --git a/src/main/java/com/youlai/system/converter/GenConfigConverter.java b/src/main/java/com/youlai/system/converter/GenConfigConverter.java index 738c103e..44a80452 100644 --- a/src/main/java/com/youlai/system/converter/GenConfigConverter.java +++ b/src/main/java/com/youlai/system/converter/GenConfigConverter.java @@ -28,18 +28,15 @@ public interface GenConfigConverter { List toFieldConfigList(List fieldConfigs); - @Mapping(source = "configId", target = "configId") - @Mapping(source = "columnName", target = "columnName") - @Mapping(source = "columnType", target = "columnType") - @Mapping(source = "fieldName", target = "fieldName") - @Mapping(source = "fieldType", target = "fieldType") - @Mapping(source = "comment", target = "comment") - @Mapping(source = "formType", target = "formType") - @Mapping(source = "queryType", target = "queryType") - @Mapping(source = "isShowInList", target = "isShowInList") - @Mapping(source = "isShowInForm", target = "isShowInForm") - @Mapping(source = "isShowInQuery", target = "isShowInQuery") - @Mapping(source = "isRequired", target = "isRequired") GenConfigForm.FieldConfig toFieldConfig(GenFieldConfig genFieldConfig); + + + @Mapping(source = "formData", target = "genConfig") + @Mapping(source = "formData.fieldConfigs", target = "fieldConfigs") + GenConfig toGenConfig(GenConfigForm formData); + + @Mapping(source = "formData.fieldConfigs", target = "fieldConfigs") + List toGenFieldConfigList(List fieldConfigs); + } \ No newline at end of file diff --git a/src/main/java/com/youlai/system/enums/QueryTypeEnum.java b/src/main/java/com/youlai/system/enums/QueryTypeEnum.java index 53bae2c7..024591e5 100644 --- a/src/main/java/com/youlai/system/enums/QueryTypeEnum.java +++ b/src/main/java/com/youlai/system/enums/QueryTypeEnum.java @@ -1,6 +1,8 @@ package com.youlai.system.enums; import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; import com.youlai.system.common.base.IBaseEnum; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -48,11 +50,23 @@ public enum QueryTypeEnum implements IBaseEnum { IS_NOT_NULL(14, "IS NOT NULL") ; - // Mybatis-Plus 提供注解表示插入数据库时插入该值 + // 存储在数据库中的枚举属性值 @EnumValue + @JsonValue private final Integer value; - // @JsonValue // 表示对枚举序列化时返回此字段 + // 序列化成 JSON 时的属性值 private final String label; + + @JsonCreator + public static QueryTypeEnum fromValue(Integer value) { + for (QueryTypeEnum type : QueryTypeEnum.values()) { + if (type.getValue().equals(value)) { + return type; + } + } + throw new IllegalArgumentException("No enum constant with value " + value); + } + } diff --git a/src/main/java/com/youlai/system/model/form/GenConfigForm.java b/src/main/java/com/youlai/system/model/form/GenConfigForm.java index a561a8ba..36e6e6ea 100644 --- a/src/main/java/com/youlai/system/model/form/GenConfigForm.java +++ b/src/main/java/com/youlai/system/model/form/GenConfigForm.java @@ -11,6 +11,9 @@ import java.util.List; @Data public class GenConfigForm { + @Schema(description = "主键") + private Long id; + @Schema(description = "表名") private String tableName; diff --git a/src/main/java/com/youlai/system/service/GenConfigService.java b/src/main/java/com/youlai/system/service/GenConfigService.java new file mode 100644 index 00000000..7e91e33a --- /dev/null +++ b/src/main/java/com/youlai/system/service/GenConfigService.java @@ -0,0 +1,24 @@ +package com.youlai.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.youlai.system.model.entity.GenConfig; +import com.youlai.system.model.form.GenConfigForm; +import com.youlai.system.model.query.TablePageQuery; +import com.youlai.system.model.vo.GeneratorPreviewVO; +import com.youlai.system.model.vo.TableColumnVO; +import com.youlai.system.model.vo.TablePageVO; + +import java.util.List; + +/** + * 代码生成配置接口 + * + * @author Ray + * @since 2.10.0 + */ +public interface GenConfigService extends IService { + + + +} diff --git a/src/main/java/com/youlai/system/service/GenFieldConfigService.java b/src/main/java/com/youlai/system/service/GenFieldConfigService.java new file mode 100644 index 00000000..c5007cb2 --- /dev/null +++ b/src/main/java/com/youlai/system/service/GenFieldConfigService.java @@ -0,0 +1,15 @@ +package com.youlai.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.youlai.system.model.entity.GenConfig; +import com.youlai.system.model.entity.GenFieldConfig; + +/** + * 代码生成配置接口 + * + * @author Ray + * @since 2.10.0 + */ +public interface GenFieldConfigService extends IService { + +} diff --git a/src/main/java/com/youlai/system/service/GeneratorService.java b/src/main/java/com/youlai/system/service/GeneratorService.java index d009587f..0187f6a6 100644 --- a/src/main/java/com/youlai/system/service/GeneratorService.java +++ b/src/main/java/com/youlai/system/service/GeneratorService.java @@ -3,21 +3,20 @@ package com.youlai.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; -import com.youlai.system.model.vo.TableColumnVO; import com.youlai.system.model.vo.GeneratorPreviewVO; +import com.youlai.system.model.vo.TableColumnVO; import com.youlai.system.model.vo.TablePageVO; import java.util.List; /** - * 代码生成业务接口 + * 代码生成配置接口 * - * @author haoxr - * @since 2.11.0 + * @author Ray + * @since 2.10.0 */ public interface GeneratorService { - /** * 获取数据表分页列表 * @@ -26,14 +25,6 @@ public interface GeneratorService { */ Page getTablePage(TablePageQuery queryParams); - /** - * 获取数据表字段列表 - * - * @param tableName 表名 - * @return - */ - List getTableColumns(String tableName); - /** * 获取预览生成代码 * @@ -56,5 +47,7 @@ public interface GeneratorService { * @param formData 表单数据 * @return */ - boolean saveGenCodeConfig(GenConfigForm formData); + void saveGenConfig(GenConfigForm formData); + + } diff --git a/src/main/java/com/youlai/system/service/impl/GenConfigServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GenConfigServiceImpl.java new file mode 100644 index 00000000..746cd496 --- /dev/null +++ b/src/main/java/com/youlai/system/service/impl/GenConfigServiceImpl.java @@ -0,0 +1,20 @@ +package com.youlai.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.youlai.system.mapper.GenConfigMapper; +import com.youlai.system.model.entity.GenConfig; +import com.youlai.system.service.GenConfigService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * 数据库服务实现类 + * + * @author Ray + * @since 2.10.0 + */ +@Service +@RequiredArgsConstructor +public class GenConfigServiceImpl extends ServiceImpl implements GenConfigService { + +} diff --git a/src/main/java/com/youlai/system/service/impl/GenFieldConfigServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GenFieldConfigServiceImpl.java new file mode 100644 index 00000000..76b7c27d --- /dev/null +++ b/src/main/java/com/youlai/system/service/impl/GenFieldConfigServiceImpl.java @@ -0,0 +1,21 @@ +package com.youlai.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.youlai.system.mapper.GenFieldConfigMapper; +import com.youlai.system.model.entity.GenFieldConfig; +import com.youlai.system.service.GenFieldConfigService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * 代码生成字段配置服务实现类 + * + * @author Ray + * @since 2.10.0 + */ +@Service +@RequiredArgsConstructor +public class GenFieldConfigServiceImpl extends ServiceImpl implements GenFieldConfigService { + + +} diff --git a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java index ecbe40a3..9d3b176b 100644 --- a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java @@ -3,6 +3,7 @@ package com.youlai.system.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; @@ -11,22 +12,23 @@ import cn.hutool.extra.template.TemplateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.system.config.property.GeneratorProperties; +import com.youlai.system.converter.GenConfigConverter; +import com.youlai.system.exception.BusinessException; import com.youlai.system.mapper.DatabaseMapper; -import com.youlai.system.mapper.GenConfigMapper; -import com.youlai.system.mapper.GenFieldConfigMapper; import com.youlai.system.model.entity.GenConfig; import com.youlai.system.model.entity.GenFieldConfig; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; -import com.youlai.system.model.vo.TableColumnVO; import com.youlai.system.model.vo.GeneratorPreviewVO; +import com.youlai.system.model.vo.TableColumnVO; import com.youlai.system.model.vo.TablePageVO; import com.youlai.system.service.GeneratorService; +import com.youlai.system.service.GenConfigService; +import com.youlai.system.service.GenFieldConfigService; import lombok.RequiredArgsConstructor; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import cn.hutool.extra.template.TemplateConfig.ResourceMode; import java.io.File; import java.util.*; @@ -35,23 +37,23 @@ import java.util.*; * 数据库服务实现类 * * @author Ray - * @since 2.11.0 + * @since 2.10.0 */ @Service @RequiredArgsConstructor public class GeneratorServiceImpl implements GeneratorService { private final DatabaseMapper databaseMapper; - private final GeneratorProperties generatorProperties; - - private final GenConfigMapper genConfigMapper; - private final GenFieldConfigMapper genFieldConfigMapper; + private final GenConfigService genConfigService; + private final GenFieldConfigService genFieldConfigService; // 注入 spring.application.name @Value("${spring.application.name}") private String applicationName; + private final GenConfigConverter genConfigConverter; + /** * 数据表分页列表 * @@ -63,17 +65,6 @@ public class GeneratorServiceImpl implements GeneratorService { return databaseMapper.getTablePage(page, queryParams); } - /** - * 获取数据表字段列表 - * - * @param tableName 表名 - * @return 字段列表 - */ - @Override - public List getTableColumns(String tableName) { - return databaseMapper.getTableColumns(tableName); - } - /** * 获取代码生成配置 * @@ -83,27 +74,36 @@ public class GeneratorServiceImpl implements GeneratorService { @Override public GenConfigForm getGenConfig(String tableName) { // 查询表生成配置 - GenConfig genConfig = genConfigMapper.selectOne( + GenConfig genConfig = genConfigService.getOne( new LambdaQueryWrapper<>(GenConfig.class) .eq(GenConfig::getTableName, tableName) .last("LIMIT 1") ); // 查询字段生成配置 - List fieldConfigs = genFieldConfigMapper.selectList( + List fieldConfigs = genFieldConfigService.list( new LambdaQueryWrapper<>(GenFieldConfig.class) .eq(GenFieldConfig::getConfigId, genConfig.getId()) ); - GenConfigForm genConfigForm = new GenConfigForm(); - - - return null; + GenConfigForm configFormData = genConfigConverter.toGenConfigForm(genConfig, fieldConfigs); + return configFormData; } @Override - public boolean saveGenCodeConfig(GenConfigForm formData) { - return false; + public void saveGenConfig(GenConfigForm formData) { + GenConfig genConfig = genConfigConverter.toGenConfig(formData); + genConfigService.saveOrUpdate(genConfig); + + List genFieldConfigs = genConfigConverter.toGenFieldConfigList(formData.getFieldConfigs()); + + if (CollectionUtil.isEmpty(genFieldConfigs)) { + throw new BusinessException("字段配置不能为空"); + } + genFieldConfigs.forEach(genFieldConfig -> { + genFieldConfig.setConfigId(genConfig.getId()); + }); + genFieldConfigService.saveOrUpdateBatch(genFieldConfigs); } @@ -118,12 +118,12 @@ public class GeneratorServiceImpl implements GeneratorService { List list = new ArrayList<>(); - GenConfig genConfig = genConfigMapper.selectOne(new LambdaQueryWrapper() + GenConfig genConfig = genConfigService.getOne(new LambdaQueryWrapper() .eq(GenConfig::getTableName, tableName) ); Assert.isTrue(genConfig != null, "未找到表生成配置"); - List fieldConfigs = genFieldConfigMapper.selectList(new LambdaQueryWrapper() + List fieldConfigs = genFieldConfigService.list(new LambdaQueryWrapper() .eq(GenFieldConfig::getConfigId, genConfig.getId()) ); Assert.isTrue(CollectionUtil.isNotEmpty(fieldConfigs), "未找到字段生成配置"); @@ -233,14 +233,15 @@ public class GeneratorServiceImpl implements GeneratorService { for (GenFieldConfig fieldConfig : fieldConfigs) { bindMap.put("hasLocalDateTime", "LocalDateTime".equals(fieldConfig.getFieldType())); bindMap.put("hasBigDecimal", "BigDecimal".equals(fieldConfig.getFieldType())); - bindMap.put("hasRequiredField", Boolean.TRUE.equals(fieldConfig.getIsRequired())); + bindMap.put("hasRequiredField", ObjectUtil.equals(fieldConfig.getIsRequired(), 1)); } - TemplateEngine templateEngine = TemplateUtil.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH)); + TemplateEngine templateEngine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH)); Template template = templateEngine.getTemplate(templateConfig.getTemplatePath()); String content = template.render(bindMap); return content; } + } From bf0e89875223c2de9fa74b6b1eaf4426983d335f Mon Sep 17 00:00:00 2001 From: ray <1490493387@qq.com> Date: Fri, 26 Jul 2024 08:18:43 +0800 Subject: [PATCH 2/5] =?UTF-8?q?wip:=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GeneratorController.java | 5 +- .../system/converter/GenConfigConverter.java | 10 ++- .../youlai/system/mapper/DatabaseMapper.java | 7 +- .../system/model/bo/ColumnMetaData.java | 50 +++++++++++ .../youlai/system/model/bo/TableMetaData.java | 45 ++++++++++ .../youlai/system/model/entity/GenConfig.java | 16 ++-- .../youlai/system/model/vo/TablePageVO.java | 10 +-- .../system/service/GeneratorService.java | 3 +- .../service/impl/GeneratorServiceImpl.java | 82 +++++++++++++++---- src/main/resources/mapper/DatabaseMapper.xml | 20 ++++- 10 files changed, 211 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/youlai/system/model/bo/ColumnMetaData.java create mode 100644 src/main/java/com/youlai/system/model/bo/TableMetaData.java diff --git a/src/main/java/com/youlai/system/controller/GeneratorController.java b/src/main/java/com/youlai/system/controller/GeneratorController.java index 05dbce74..e217de96 100644 --- a/src/main/java/com/youlai/system/controller/GeneratorController.java +++ b/src/main/java/com/youlai/system/controller/GeneratorController.java @@ -3,6 +3,7 @@ package com.youlai.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; +import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; import com.youlai.system.model.vo.GeneratorPreviewVO; @@ -26,10 +27,10 @@ public class GeneratorController { @Operation(summary = "获取数据表分页列表") @GetMapping("/table/page") - public PageResult getTablePage( + public PageResult getTablePage( TablePageQuery queryParams ) { - Page result = generatorService.getTablePage(queryParams); + Page result = generatorService.getTablePage(queryParams); return PageResult.success(result); } diff --git a/src/main/java/com/youlai/system/converter/GenConfigConverter.java b/src/main/java/com/youlai/system/converter/GenConfigConverter.java index 44a80452..3a4d5377 100644 --- a/src/main/java/com/youlai/system/converter/GenConfigConverter.java +++ b/src/main/java/com/youlai/system/converter/GenConfigConverter.java @@ -26,17 +26,19 @@ public interface GenConfigConverter { @Mapping(source = "fieldConfigs", target = "fieldConfigs") GenConfigForm toGenConfigForm(GenConfig genConfig, List fieldConfigs); - List toFieldConfigList(List fieldConfigs); + List toGenFieldConfigForm(List fieldConfigs); - GenConfigForm.FieldConfig toFieldConfig(GenFieldConfig genFieldConfig); + GenConfigForm.FieldConfig toGenFieldConfigForm(GenFieldConfig genFieldConfig); @Mapping(source = "formData", target = "genConfig") @Mapping(source = "formData.fieldConfigs", target = "fieldConfigs") - GenConfig toGenConfig(GenConfigForm formData); + GenConfig toGenConfigEntity(GenConfigForm formData); @Mapping(source = "formData.fieldConfigs", target = "fieldConfigs") - List toGenFieldConfigList(List fieldConfigs); + List toGenFieldConfigEntity(List fieldConfigs); + + GenFieldConfig toGenFieldConfigEntity(GenConfigForm.FieldConfig fieldConfig); } \ No newline at end of file diff --git a/src/main/java/com/youlai/system/mapper/DatabaseMapper.java b/src/main/java/com/youlai/system/mapper/DatabaseMapper.java index abc91f4a..9ce548a9 100644 --- a/src/main/java/com/youlai/system/mapper/DatabaseMapper.java +++ b/src/main/java/com/youlai/system/mapper/DatabaseMapper.java @@ -2,6 +2,8 @@ package com.youlai.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.youlai.system.model.bo.ColumnMetaData; +import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.entity.SysDept; import com.youlai.system.model.query.TablePageQuery; import com.youlai.system.model.vo.TableColumnVO; @@ -21,9 +23,10 @@ import java.util.List; public interface DatabaseMapper extends BaseMapper { - Page getTablePage(Page page, TablePageQuery queryParams); + Page getTablePage(Page page, TablePageQuery queryParams); - List getTableColumns(String tableName); + List getTableColumns(String tableName); + TableMetaData getTableMetadata(String tableName); } diff --git a/src/main/java/com/youlai/system/model/bo/ColumnMetaData.java b/src/main/java/com/youlai/system/model/bo/ColumnMetaData.java new file mode 100644 index 00000000..c3137a2a --- /dev/null +++ b/src/main/java/com/youlai/system/model/bo/ColumnMetaData.java @@ -0,0 +1,50 @@ +package com.youlai.system.model.bo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "数据表字段VO") +@Data +public class ColumnMetaData { + + /** + * 字段名称 + */ + private String columnName; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 字段描述 + */ + private String columnComment; + + /** + * 字段长度 + */ + private Integer characterMaximumLength; + + /** + * 是否主键(1-是 0-否) + */ + private Integer isPrimaryKey; + + /** + * 是否可为空(1-是 0-否) + */ + private String isNullable; + + /** + * 字符集 + */ + private String characterSetName; + + /** + * 排序规则 + */ + private String collationName; + +} diff --git a/src/main/java/com/youlai/system/model/bo/TableMetaData.java b/src/main/java/com/youlai/system/model/bo/TableMetaData.java new file mode 100644 index 00000000..d4b78792 --- /dev/null +++ b/src/main/java/com/youlai/system/model/bo/TableMetaData.java @@ -0,0 +1,45 @@ +package com.youlai.system.model.bo; + +import lombok.Data; + + +/** + * 数据表元数据 + * + * @author Ray + * @since 2.10.0 + */ +@Data +public class TableMetaData { + + /** + * 表名称 + */ + private String tableName; + + /** + * 表描述 + */ + private String tableComment; + + /** + * 排序规则 + */ + private String tableCollation; + + /** + * 存储引擎 + */ + private String engine; + + /** + * 字符集 + */ + private String charset; + + /** + * 创建时间 + */ + private String createTime; + +} diff --git a/src/main/java/com/youlai/system/model/entity/GenConfig.java b/src/main/java/com/youlai/system/model/entity/GenConfig.java index 90a2f844..49420341 100644 --- a/src/main/java/com/youlai/system/model/entity/GenConfig.java +++ b/src/main/java/com/youlai/system/model/entity/GenConfig.java @@ -4,12 +4,18 @@ import com.baomidou.mybatisplus.annotation.*; import com.youlai.system.common.base.BaseEntity; import lombok.Data; +import lombok.Getter; +import lombok.Setter; /** * 代码生成基础配置 + * + * @author Ray + * @since 2.10.0 */ -@TableName(value ="gen_config") -@Data +@TableName(value = "gen_config") +@Getter +@Setter public class GenConfig extends BaseEntity { /** @@ -28,14 +34,14 @@ public class GenConfig extends BaseEntity { private String moduleName; /** - * 实体名 + * 实体类名 */ private String entityName; /** - * 类描述 + * 业务名 */ - private String comment; + private String businessName; /** * 上级菜单ID diff --git a/src/main/java/com/youlai/system/model/vo/TablePageVO.java b/src/main/java/com/youlai/system/model/vo/TablePageVO.java index b9756f58..8c709831 100644 --- a/src/main/java/com/youlai/system/model/vo/TablePageVO.java +++ b/src/main/java/com/youlai/system/model/vo/TablePageVO.java @@ -4,23 +4,23 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -@Schema(description = "数据表分页VO") +@Schema(description = "数据表VO") @Data public class TablePageVO { - @Schema(description = "数据表名称", example = "sys_user") + @Schema(description = "表名称", example = "sys_user") private String tableName; - @Schema(description = "数据表注释",example = "用户表") + @Schema(description = "表描述",example = "用户表") private String tableComment; - @Schema(description = "数据表排序规则",example = "用户表") + @Schema(description = "表排序规则",example = "utf8mb4_general_ci") private String tableCollation; @Schema(description = "存储引擎",example = "InnoDB") private String engine; - @Schema(description = "字符集",example = "utf8mb4_general_ci") + @Schema(description = "字符集",example = "utf8mb4") private String charset; @Schema(description = "创建时间",example = "2023-08-08 08:08:08") diff --git a/src/main/java/com/youlai/system/service/GeneratorService.java b/src/main/java/com/youlai/system/service/GeneratorService.java index 0187f6a6..e6fd51ba 100644 --- a/src/main/java/com/youlai/system/service/GeneratorService.java +++ b/src/main/java/com/youlai/system/service/GeneratorService.java @@ -1,6 +1,7 @@ package com.youlai.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; import com.youlai.system.model.vo.GeneratorPreviewVO; @@ -23,7 +24,7 @@ public interface GeneratorService { * @param queryParams 查询参数 * @return */ - Page getTablePage(TablePageQuery queryParams); + Page getTablePage(TablePageQuery queryParams); /** * 获取预览生成代码 diff --git a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java index 9d3b176b..8f3105f7 100644 --- a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java @@ -11,17 +11,18 @@ import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.youlai.system.SystemApplication; import com.youlai.system.config.property.GeneratorProperties; import com.youlai.system.converter.GenConfigConverter; import com.youlai.system.exception.BusinessException; import com.youlai.system.mapper.DatabaseMapper; +import com.youlai.system.model.bo.ColumnMetaData; +import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.entity.GenConfig; import com.youlai.system.model.entity.GenFieldConfig; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; import com.youlai.system.model.vo.GeneratorPreviewVO; -import com.youlai.system.model.vo.TableColumnVO; -import com.youlai.system.model.vo.TablePageVO; import com.youlai.system.service.GeneratorService; import com.youlai.system.service.GenConfigService; import com.youlai.system.service.GenFieldConfigService; @@ -43,15 +44,14 @@ import java.util.*; @RequiredArgsConstructor public class GeneratorServiceImpl implements GeneratorService { + @Value("${spring.application.name}") + private String applicationName; + private final DatabaseMapper databaseMapper; private final GeneratorProperties generatorProperties; private final GenConfigService genConfigService; private final GenFieldConfigService genFieldConfigService; - // 注入 spring.application.name - @Value("${spring.application.name}") - private String applicationName; - private final GenConfigConverter genConfigConverter; /** @@ -60,8 +60,8 @@ public class GeneratorServiceImpl implements GeneratorService { * @param queryParams 查询参数 * @return 分页结果 */ - public Page getTablePage(TablePageQuery queryParams) { - Page page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); + public Page getTablePage(TablePageQuery queryParams) { + Page page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); return databaseMapper.getTablePage(page, queryParams); } @@ -79,23 +79,73 @@ public class GeneratorServiceImpl implements GeneratorService { .eq(GenConfig::getTableName, tableName) .last("LIMIT 1") ); + // 如果没有代码生成配置,则根据表的元数据生成默认配置 + if (genConfig == null) { + TableMetaData tableMetadata = databaseMapper.getTableMetadata(tableName); + Assert.isTrue(tableMetadata != null, "未找到表元数据"); - // 查询字段生成配置 - List fieldConfigs = genFieldConfigService.list( - new LambdaQueryWrapper<>(GenFieldConfig.class) - .eq(GenFieldConfig::getConfigId, genConfig.getId()) - ); - GenConfigForm configFormData = genConfigConverter.toGenConfigForm(genConfig, fieldConfigs); + genConfig = new GenConfig(); + genConfig.setTableName(tableName); + + String tableComment = tableMetadata.getTableComment(); + if (StrUtil.isNotBlank(tableComment)) { + genConfig.setBusinessName(tableComment.replace("表", "")); + } + // 实体类名 = 表名去掉前缀后转驼峰,前缀默认为下划线分割的第一个元素 + String entityName = StrUtil.toCamelCase(StrUtil.removePrefix(tableName, tableName.split("_")[0])); + genConfig.setEntityName(entityName); + + String packageName = SystemApplication.class.getPackageName(); + genConfig.setPackageName(packageName); + + } + + + List genFieldConfigs = null; + + // 获取表的列信息 + List tableColumns = databaseMapper.getTableColumns(tableName); + + if (CollectionUtil.isNotEmpty(tableColumns)) { + + // 查询字段生成配置 + List configList = genFieldConfigService.list( + new LambdaQueryWrapper<>(GenFieldConfig.class) + .eq(GenFieldConfig::getConfigId, genConfig.getId()) + ); + genFieldConfigs = new ArrayList<>(); + for (ColumnMetaData tableColumn : tableColumns) { + GenFieldConfig fieldConfig = new GenFieldConfig(); + fieldConfig.setFieldName(tableColumn.getColumnName()); + fieldConfig.setFieldType(tableColumn.getDataType()); + fieldConfig.setComment(tableColumn.getColumnComment()); + + + // 如果没有字段生成配置,则根据表的元数据生成默认配置 + if (CollectionUtil.isNotEmpty(configList)) { + for (GenFieldConfig config : configList) { + if (StrUtil.equals(config.getFieldName(), fieldConfig.getFieldName())) { + fieldConfig = config; + break; + } + } + } + + genFieldConfigs.add(fieldConfig); + } + } + + GenConfigForm configFormData = genConfigConverter.toGenConfigForm(genConfig, genFieldConfigs); return configFormData; } @Override public void saveGenConfig(GenConfigForm formData) { - GenConfig genConfig = genConfigConverter.toGenConfig(formData); + GenConfig genConfig = genConfigConverter.toGenConfigEntity(formData); genConfigService.saveOrUpdate(genConfig); - List genFieldConfigs = genConfigConverter.toGenFieldConfigList(formData.getFieldConfigs()); + List genFieldConfigs = genConfigConverter.toGenFieldConfigEntity(formData.getFieldConfigs()); if (CollectionUtil.isEmpty(genFieldConfigs)) { throw new BusinessException("字段配置不能为空"); diff --git a/src/main/resources/mapper/DatabaseMapper.xml b/src/main/resources/mapper/DatabaseMapper.xml index df33c68f..7aecef51 100644 --- a/src/main/resources/mapper/DatabaseMapper.xml +++ b/src/main/resources/mapper/DatabaseMapper.xml @@ -5,7 +5,7 @@ - SELECT TABLE_NAME , TABLE_COMMENT , @@ -24,7 +24,21 @@ CREATE_TIME DESC - + SELECT + TABLE_NAME , + TABLE_COMMENT , + TABLE_COLLATION, + ENGINE, + CREATE_TIME + FROM + information_schema.tables + WHERE + TABLE_SCHEMA = (SELECT DATABASE()) + AND TABLE_NAME = #{tableName} + + + + + From 41917686b12032d384388b136d6403a2c56442f9 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Fri, 26 Jul 2024 23:05:33 +0800 Subject: [PATCH 3/5] =?UTF-8?q?wip:=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GeneratorController.java | 6 ++ .../system/converter/GenConfigConverter.java | 12 +-- .../com/youlai/system/enums/FormTypeEnum.java | 14 ++++ .../system/model/entity/GenFieldConfig.java | 1 + .../system/model/form/GenConfigForm.java | 25 +++++-- .../service/impl/GeneratorServiceImpl.java | 74 +++++++++---------- 6 files changed, 79 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/youlai/system/controller/GeneratorController.java b/src/main/java/com/youlai/system/controller/GeneratorController.java index e217de96..cdf35a58 100644 --- a/src/main/java/com/youlai/system/controller/GeneratorController.java +++ b/src/main/java/com/youlai/system/controller/GeneratorController.java @@ -17,6 +17,12 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +/** + * 代码生成器控制层 + * + * @author Ray + * @since 2.10.0 + */ @Tag(name = "09.代码生成") @RestController @RequestMapping("/api/v1/generator") diff --git a/src/main/java/com/youlai/system/converter/GenConfigConverter.java b/src/main/java/com/youlai/system/converter/GenConfigConverter.java index 3a4d5377..0ab99507 100644 --- a/src/main/java/com/youlai/system/converter/GenConfigConverter.java +++ b/src/main/java/com/youlai/system/converter/GenConfigConverter.java @@ -18,7 +18,7 @@ import java.util.List; public interface GenConfigConverter { @Mapping(source = "genConfig.tableName", target = "tableName") - @Mapping(source = "genConfig.comment", target = "comment") + @Mapping(source = "genConfig.businessName", target = "businessName") @Mapping(source = "genConfig.moduleName", target = "moduleName") @Mapping(source = "genConfig.packageName", target = "packageName") @Mapping(source = "genConfig.entityName", target = "entityName") @@ -31,14 +31,10 @@ public interface GenConfigConverter { GenConfigForm.FieldConfig toGenFieldConfigForm(GenFieldConfig genFieldConfig); + GenConfig toGenConfig(GenConfigForm formData); - @Mapping(source = "formData", target = "genConfig") - @Mapping(source = "formData.fieldConfigs", target = "fieldConfigs") - GenConfig toGenConfigEntity(GenConfigForm formData); + List toGenFieldConfig(List fieldConfigs); - @Mapping(source = "formData.fieldConfigs", target = "fieldConfigs") - List toGenFieldConfigEntity(List fieldConfigs); - - GenFieldConfig toGenFieldConfigEntity(GenConfigForm.FieldConfig fieldConfig); + GenFieldConfig toGenFieldConfig(GenConfigForm.FieldConfig fieldConfig); } \ No newline at end of file diff --git a/src/main/java/com/youlai/system/enums/FormTypeEnum.java b/src/main/java/com/youlai/system/enums/FormTypeEnum.java index 8a0aa8b8..6383934a 100644 --- a/src/main/java/com/youlai/system/enums/FormTypeEnum.java +++ b/src/main/java/com/youlai/system/enums/FormTypeEnum.java @@ -1,6 +1,8 @@ package com.youlai.system.enums; import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; import com.youlai.system.common.base.IBaseEnum; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -63,8 +65,20 @@ public enum FormTypeEnum implements IBaseEnum { // Mybatis-Plus 提供注解表示插入数据库时插入该值 @EnumValue + @JsonValue private final Integer value; // @JsonValue // 表示对枚举序列化时返回此字段 private final String label; + + + @JsonCreator + public static QueryTypeEnum fromValue(Integer value) { + for (QueryTypeEnum type : QueryTypeEnum.values()) { + if (type.getValue().equals(value)) { + return type; + } + } + throw new IllegalArgumentException("No enum constant with value " + value); + } } diff --git a/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java b/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java index 9c789670..ee48674b 100644 --- a/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java +++ b/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java @@ -19,6 +19,7 @@ import lombok.Setter; @Setter public class GenFieldConfig extends BaseEntity { + /** * 关联的配置ID */ diff --git a/src/main/java/com/youlai/system/model/form/GenConfigForm.java b/src/main/java/com/youlai/system/model/form/GenConfigForm.java index 36e6e6ea..c212c0a2 100644 --- a/src/main/java/com/youlai/system/model/form/GenConfigForm.java +++ b/src/main/java/com/youlai/system/model/form/GenConfigForm.java @@ -7,29 +7,35 @@ import lombok.Data; import java.util.List; +/** + * 代码生成配置表单 + * + * @author Ray + * @since 2.10.0 + */ @Schema(description = "代码生成配置表单") @Data public class GenConfigForm { - @Schema(description = "主键") + @Schema(description = "主键",example = "1") private Long id; - @Schema(description = "表名") + @Schema(description = "表名",example = "sys_user") private String tableName; - @Schema(description = "类描述") - private String comment; + @Schema(description = "业务名",example = "用户") + private String businessName; - @Schema(description = "模块名") + @Schema(description = "模块名",example = "system") private String moduleName; - @Schema(description = "包名") + @Schema(description = "包名",example = "com.youlai.system") private String packageName; - @Schema(description = "实体名") + @Schema(description = "实体名",example = "User") private String entityName; - @Schema(description = "作者") + @Schema(description = "作者",example = "youlaitech") private String author; @Schema(description = "字段配置列表") @@ -39,6 +45,9 @@ public class GenConfigForm { @Data public static class FieldConfig { + @Schema(description = "主键") + private Long id; + @Schema(description = "列名") private String columnName; diff --git a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java index 8f3105f7..0c2e41cc 100644 --- a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java @@ -14,15 +14,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.system.SystemApplication; import com.youlai.system.config.property.GeneratorProperties; import com.youlai.system.converter.GenConfigConverter; +import com.youlai.system.enums.FormTypeEnum; +import com.youlai.system.enums.QueryTypeEnum; import com.youlai.system.exception.BusinessException; import com.youlai.system.mapper.DatabaseMapper; -import com.youlai.system.model.bo.ColumnMetaData; -import com.youlai.system.model.bo.TableMetaData; -import com.youlai.system.model.entity.GenConfig; import com.youlai.system.model.entity.GenFieldConfig; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; -import com.youlai.system.model.vo.GeneratorPreviewVO; import com.youlai.system.service.GeneratorService; import com.youlai.system.service.GenConfigService; import com.youlai.system.service.GenFieldConfigService; @@ -84,7 +82,6 @@ public class GeneratorServiceImpl implements GeneratorService { TableMetaData tableMetadata = databaseMapper.getTableMetadata(tableName); Assert.isTrue(tableMetadata != null, "未找到表元数据"); - genConfig = new GenConfig(); genConfig.setTableName(tableName); @@ -101,51 +98,54 @@ public class GeneratorServiceImpl implements GeneratorService { } + // 根据表的列 + 已经存在的字段生成配置 得到 组合后的字段生成配置 + List genFieldConfigs = new ArrayList<>(); - List genFieldConfigs = null; - - // 获取表的列信息 + // 获取表的列 List tableColumns = databaseMapper.getTableColumns(tableName); - if (CollectionUtil.isNotEmpty(tableColumns)) { - // 查询字段生成配置 - List configList = genFieldConfigService.list( + List fieldConfigList = genFieldConfigService.list( new LambdaQueryWrapper<>(GenFieldConfig.class) .eq(GenFieldConfig::getConfigId, genConfig.getId()) ); - genFieldConfigs = new ArrayList<>(); for (ColumnMetaData tableColumn : tableColumns) { - GenFieldConfig fieldConfig = new GenFieldConfig(); - fieldConfig.setFieldName(tableColumn.getColumnName()); - fieldConfig.setFieldType(tableColumn.getDataType()); - fieldConfig.setComment(tableColumn.getColumnComment()); + // 根据列名获取字段生成配置 + String columnName = tableColumn.getColumnName(); + GenFieldConfig genFieldConfig = fieldConfigList.stream() + .filter(item -> StrUtil.equals(item.getColumnName(), columnName)) + .findFirst().orElseGet(() -> { + GenFieldConfig fieldConfig = new GenFieldConfig(); + fieldConfig.setColumnName(tableColumn.getColumnName()); + fieldConfig.setColumnType(tableColumn.getDataType()); + fieldConfig.setComment(tableColumn.getColumnComment()); + fieldConfig.setFieldName(StrUtil.toCamelCase(columnName)); + fieldConfig.setFieldType(StrUtil.toCamelCase(tableColumn.getDataType())); + fieldConfig.setIsRequired("YES".equals(tableColumn.getIsNullable()) ? 1 : 0); + fieldConfig.setFormType(FormTypeEnum.INPUT); + fieldConfig.setQueryType(QueryTypeEnum.EQ); + return fieldConfig; - - // 如果没有字段生成配置,则根据表的元数据生成默认配置 - if (CollectionUtil.isNotEmpty(configList)) { - for (GenFieldConfig config : configList) { - if (StrUtil.equals(config.getFieldName(), fieldConfig.getFieldName())) { - fieldConfig = config; - break; - } - } - } - - genFieldConfigs.add(fieldConfig); + }); + genFieldConfigs.add(genFieldConfig); } } - GenConfigForm configFormData = genConfigConverter.toGenConfigForm(genConfig, genFieldConfigs); return configFormData; } + + /** + * 保存代码生成配置 + * + * @param formData 代码生成配置表单 + */ @Override public void saveGenConfig(GenConfigForm formData) { - GenConfig genConfig = genConfigConverter.toGenConfigEntity(formData); + GenConfig genConfig = genConfigConverter.toGenConfig(formData); genConfigService.saveOrUpdate(genConfig); - List genFieldConfigs = genConfigConverter.toGenFieldConfigEntity(formData.getFieldConfigs()); + List genFieldConfigs = genConfigConverter.toGenFieldConfig(formData.getFieldConfigs()); if (CollectionUtil.isEmpty(genFieldConfigs)) { throw new BusinessException("字段配置不能为空"); @@ -221,13 +221,13 @@ public class GeneratorServiceImpl implements GeneratorService { private String getFileName(String entityName, String templateName, String extension) { - if (templateName.equals("Entity")) { + if ("Entity".equals(templateName)) { return entityName + extension; } - if (templateName.equals("MapperXml")) { + if ("MapperXml".equals(templateName)) { return entityName + "Mapper" + extension; } - if (templateName.equals("API") || templateName.equals("VIEW")) { + if ("API".equals(templateName) || "VIEW".equals(templateName)) { return StrUtil.toSymbolCase(entityName, '-') + extension; } return entityName + templateName + extension; @@ -235,13 +235,13 @@ public class GeneratorServiceImpl implements GeneratorService { private String getFilePath(String templateName, String packageName, String subPackageName) { String path; - if (templateName.equals("MapperXml")) { + if ("MapperXml".equals(templateName)) { path = (applicationName + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + subPackageName ).replace(".", File.separator); - } else if (templateName.equals("API") || templateName.equals("VIEW")) { + } else if ("API".equals(templateName) || "VIEW".equals(templateName)) { path = ("vue3-element-admin" + File.separator + "src" + File.separator + subPackageName @@ -277,7 +277,7 @@ public class GeneratorServiceImpl implements GeneratorService { bindMap.put("tableName", genConfig.getTableName()); bindMap.put("author", genConfig.getAuthor()); bindMap.put("lowerFirstEntityName", StrUtil.lowerFirst(entityName)); - bindMap.put("tableComment", StrUtil.replace(genConfig.getComment(), "表", Strings.EMPTY)); + bindMap.put("tableComment", genConfig.getBusinessName()); bindMap.put("fieldConfigs", fieldConfigs); for (GenFieldConfig fieldConfig : fieldConfigs) { From 888882943759a1da93062d1bd85647dbbce86480 Mon Sep 17 00:00:00 2001 From: ray <1490493387@qq.com> Date: Sun, 28 Jul 2024 23:33:08 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=20Beta=20=E5=85=AC=E6=B5=8B=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/property/GeneratorProperties.java | 36 +- .../controller/GeneratorController.java | 9 +- .../system/controller/SysUserController.java | 2 +- .../com/youlai/system/enums/FormTypeEnum.java | 16 +- .../com/youlai/system/enums/JavaTypeEnum.java | 84 +++++ .../youlai/system/enums/QueryTypeEnum.java | 41 +-- .../filter/CaptchaValidationFilter.java | 2 +- .../system/filter/JwtValidationFilter.java | 2 +- .../youlai/system/mapper/DatabaseMapper.java | 3 +- .../system/model/entity/GenFieldConfig.java | 12 +- .../system/model/form/GenConfigForm.java | 2 +- .../youlai/system/model/vo/TableColumnVO.java | 34 -- .../youlai/system/model/vo/TablePageVO.java | 2 +- .../plugin/syslog/aspect/LogAspect.java | 4 +- .../exception/MyAccessDeniedHandler.java | 2 +- .../exception/MyAuthenticationEntryPoint.java | 2 +- .../system/service/GenConfigService.java | 8 - .../system/service/GeneratorService.java | 6 +- .../service/impl/GeneratorServiceImpl.java | 99 ++++-- .../service/impl/SysLogServiceImpl.java | 2 +- .../service/impl/SysUserServiceImpl.java | 2 +- .../system/{common => }/util/DateUtils.java | 2 +- .../system/{common => }/util/ExcelUtils.java | 2 +- .../system/{common => }/util/IPUtils.java | 2 +- .../{common => }/util/ResponseUtils.java | 2 +- src/main/resources/application-generator.yml | 9 +- src/main/resources/mapper/DatabaseMapper.xml | 2 +- .../resources/mapper/GenFieldConfigMapper.xml | 21 -- .../resources/templates/generator/api.ts.vm | 114 +++---- .../templates/generator/controller.java.vm | 20 +- .../templates/generator/converter.java.vm | 2 +- .../templates/generator/entity.java.vm | 2 +- .../templates/generator/form.java.vm | 6 +- .../templates/generator/index.vue.vm | 314 ++++++++++++------ .../templates/generator/mapper.java.vm | 4 +- .../templates/generator/mapper.xml.vm | 2 +- .../templates/generator/query.java.vm | 8 +- .../templates/generator/service.java.vm | 22 +- .../templates/generator/serviceImpl.java.vm | 26 +- .../resources/templates/generator/vo.java.vm | 10 +- 40 files changed, 556 insertions(+), 384 deletions(-) create mode 100644 src/main/java/com/youlai/system/enums/JavaTypeEnum.java delete mode 100644 src/main/java/com/youlai/system/model/vo/TableColumnVO.java rename src/main/java/com/youlai/system/{common => }/util/DateUtils.java (98%) rename src/main/java/com/youlai/system/{common => }/util/ExcelUtils.java (91%) rename src/main/java/com/youlai/system/{common => }/util/IPUtils.java (99%) rename src/main/java/com/youlai/system/{common => }/util/ResponseUtils.java (97%) diff --git a/src/main/java/com/youlai/system/config/property/GeneratorProperties.java b/src/main/java/com/youlai/system/config/property/GeneratorProperties.java index 126680b8..c4325645 100644 --- a/src/main/java/com/youlai/system/config/property/GeneratorProperties.java +++ b/src/main/java/com/youlai/system/config/property/GeneratorProperties.java @@ -19,13 +19,34 @@ import java.util.Map; @Data public class GeneratorProperties { + + /** + * 默认配置 + */ + private DefaultConfig defaultConfig ; + + /** + * 模板配置 + */ private Map templateConfigs = MapUtil.newHashMap(true); + + /** + * 后端应用名 + */ + + private String backendAppName; + + /** + * 前端应用名 + */ + private String frontendAppName; + /** * 模板配置 */ @Data - public static class TemplateConfig{ + public static class TemplateConfig { private String templatePath; @@ -34,7 +55,18 @@ public class GeneratorProperties { /** * 文件扩展名,如 .java */ - private String extension= FileNameUtil.EXT_JAVA; + private String extension = FileNameUtil.EXT_JAVA; + + } + + /** + * 默认配置 + */ + @Data + public static class DefaultConfig { + + private String author; + } diff --git a/src/main/java/com/youlai/system/controller/GeneratorController.java b/src/main/java/com/youlai/system/controller/GeneratorController.java index cdf35a58..82754898 100644 --- a/src/main/java/com/youlai/system/controller/GeneratorController.java +++ b/src/main/java/com/youlai/system/controller/GeneratorController.java @@ -3,7 +3,6 @@ package com.youlai.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; -import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; import com.youlai.system.model.vo.GeneratorPreviewVO; @@ -33,18 +32,18 @@ public class GeneratorController { @Operation(summary = "获取数据表分页列表") @GetMapping("/table/page") - public PageResult getTablePage( + public PageResult getTablePage( TablePageQuery queryParams ) { - Page result = generatorService.getTablePage(queryParams); + Page result = generatorService.getTablePage(queryParams); return PageResult.success(result); } @Operation(summary = "获取代码生成配置") @GetMapping("/{tableName}/config") - public Result getGenConfig( + public Result getGenConfigFormData( @Parameter(description = "表名", example = "sys_user") @PathVariable String tableName) { - GenConfigForm formData = generatorService.getGenConfig(tableName); + GenConfigForm formData = generatorService.getGenConfigFormData(tableName); return Result.success(formData); } diff --git a/src/main/java/com/youlai/system/controller/SysUserController.java b/src/main/java/com/youlai/system/controller/SysUserController.java index 9fe8faa5..d2b1cd27 100644 --- a/src/main/java/com/youlai/system/controller/SysUserController.java +++ b/src/main/java/com/youlai/system/controller/SysUserController.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; -import com.youlai.system.common.util.ExcelUtils; +import com.youlai.system.util.ExcelUtils; import com.youlai.system.enums.LogModuleEnum; import com.youlai.system.model.dto.UserImportDTO; import com.youlai.system.plugin.norepeat.annotation.PreventRepeatSubmit; diff --git a/src/main/java/com/youlai/system/enums/FormTypeEnum.java b/src/main/java/com/youlai/system/enums/FormTypeEnum.java index 6383934a..349cbd2d 100644 --- a/src/main/java/com/youlai/system/enums/FormTypeEnum.java +++ b/src/main/java/com/youlai/system/enums/FormTypeEnum.java @@ -32,20 +32,20 @@ public enum FormTypeEnum implements IBaseEnum { */ RADIO(3, "单选框"), + /** + * 复选框 + */ + CHECK_BOX(4, "复选框"), + /** * 数字输入框 */ - INPUT_NUMBER(4, "数字输入框"), + INPUT_NUMBER(5, "数字输入框"), /** * 开关 */ - SWITCH(5, "开关"), - - /** - * 复选框 - */ - CHECK_BOX(6, "复选框"), + SWITCH(6, "开关"), /** * 文本域 @@ -60,7 +60,7 @@ public enum FormTypeEnum implements IBaseEnum { /** * 日期框 */ - DATE(9, "日期框"),; + DATE(9, "日期框"); // Mybatis-Plus 提供注解表示插入数据库时插入该值 diff --git a/src/main/java/com/youlai/system/enums/JavaTypeEnum.java b/src/main/java/com/youlai/system/enums/JavaTypeEnum.java new file mode 100644 index 00000000..52bed42f --- /dev/null +++ b/src/main/java/com/youlai/system/enums/JavaTypeEnum.java @@ -0,0 +1,84 @@ +package com.youlai.system.enums; + +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 表单类型枚举 + * + * @author Ray + * @since 2.10.0 + */ +@Getter +public enum JavaTypeEnum { + + VARCHAR("varchar", "String", "string"), + CHAR("char", "String", "string"), + BLOB("blob", "byte[]", "Uint8Array"), + TEXT("text", "String", "string"), + JSON("json", "String", "any"), + INTEGER("int", "Integer", "number"), + TINYINT("tinyint", "Integer", "number"), + SMALLINT("smallint", "Integer", "number"), + MEDIUMINT("mediumint", "Integer", "number"), + BIGINT("bigint", "Long", "bigint"), + FLOAT("float", "Float", "number"), + DOUBLE("double", "Double", "number"), + DECIMAL("decimal", "BigDecimal", "number"), + DATE("date", "LocalDate", "Date"), + DATETIME("datetime", "LocalDateTime", "Date"); + + // 数据库类型 + private final String dbType; + // Java类型 + private final String javaType; + // TypeScript类型 + private final String tsType; + + // 数据库类型和Java类型的映射 + private static final Map typeMap = new HashMap<>(); + + // 初始化映射关系 + static { + for (JavaTypeEnum javaTypeEnum : JavaTypeEnum.values()) { + typeMap.put(javaTypeEnum.getDbType(), javaTypeEnum); + } + } + + JavaTypeEnum(String dbType, String javaType, String tsType) { + this.dbType = dbType; + this.javaType = javaType; + this.tsType = tsType; + } + + /** + * 根据数据库类型获取对应的Java类型 + * + * @param dbType 数据库类型 + * @return 对应的Java类型 + */ + public static String getJavaTypeByDbType(String dbType) { + JavaTypeEnum javaTypeEnum = typeMap.get(dbType); + if (javaTypeEnum != null) { + return javaTypeEnum.getJavaType(); + } + return null; + } + + /** + * 根据Java类型获取对应的TypeScript类型 + * + * @param javaType Java类型 + * @return 对应的TypeScript类型 + */ + public static String getTsTypeByJavaType(String javaType) { + for (JavaTypeEnum javaTypeEnum : JavaTypeEnum.values()) { + if (javaTypeEnum.getJavaType().equals(javaType)) { + return javaTypeEnum.getTsType(); + } + } + return null; + } +} diff --git a/src/main/java/com/youlai/system/enums/QueryTypeEnum.java b/src/main/java/com/youlai/system/enums/QueryTypeEnum.java index 024591e5..c6e15470 100644 --- a/src/main/java/com/youlai/system/enums/QueryTypeEnum.java +++ b/src/main/java/com/youlai/system/enums/QueryTypeEnum.java @@ -17,38 +17,39 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public enum QueryTypeEnum implements IBaseEnum { - + /** 等于 */ EQ(1, "="), + /** 模糊匹配 */ + LIKE(2, "LIKE '%s%'"), - NE(2, "!="), + /** 包含 */ + IN(3, "IN"), + /** 范围 */ + BETWEEN(4, "BETWEEN"), - GT(3, ">"), + /** 大于 */ + GT(5, ">"), + /** 大于等于 */ + GE(6, ">="), - GE(4, ">="), + /** 小于 */ + LT(7, "<"), - LT(5, "<"), + /** 小于等于 */ + LE(8, "<="), - LE(6, "<="), + /** 不等于 */ + NE(9, "!="), - BETWEEN(7, "BETWEEN"), + /** 左模糊匹配 */ + LIKE_LEFT(10, "LIKE '%s'"), - LIKE(8, "LIKE '%s%'"), + /** 右模糊匹配 */ + LIKE_RIGHT(11, "LIKE 's%'"); - LIKE_LEFT(9, "LIKE '%s'"), - - LIKE_RIGHT(10, "LIKE 's%'"), - - IN(11, "IN"), - - NOT_IN(12, "NOT IN"), - - IS_NULL(13, "IS NULL"), - - IS_NOT_NULL(14, "IS NOT NULL") - ; // 存储在数据库中的枚举属性值 @EnumValue diff --git a/src/main/java/com/youlai/system/filter/CaptchaValidationFilter.java b/src/main/java/com/youlai/system/filter/CaptchaValidationFilter.java index 310c59b3..291570ba 100644 --- a/src/main/java/com/youlai/system/filter/CaptchaValidationFilter.java +++ b/src/main/java/com/youlai/system/filter/CaptchaValidationFilter.java @@ -4,7 +4,7 @@ import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.core.util.StrUtil; import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.result.ResultCode; -import com.youlai.system.common.util.ResponseUtils; +import com.youlai.system.util.ResponseUtils; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/src/main/java/com/youlai/system/filter/JwtValidationFilter.java b/src/main/java/com/youlai/system/filter/JwtValidationFilter.java index 1a5f69b2..f541083a 100644 --- a/src/main/java/com/youlai/system/filter/JwtValidationFilter.java +++ b/src/main/java/com/youlai/system/filter/JwtValidationFilter.java @@ -8,7 +8,7 @@ import cn.hutool.jwt.JWTUtil; import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.result.ResultCode; import com.youlai.system.security.util.JwtUtils; -import com.youlai.system.common.util.ResponseUtils; +import com.youlai.system.util.ResponseUtils; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/src/main/java/com/youlai/system/mapper/DatabaseMapper.java b/src/main/java/com/youlai/system/mapper/DatabaseMapper.java index 9ce548a9..870c0119 100644 --- a/src/main/java/com/youlai/system/mapper/DatabaseMapper.java +++ b/src/main/java/com/youlai/system/mapper/DatabaseMapper.java @@ -6,7 +6,6 @@ import com.youlai.system.model.bo.ColumnMetaData; import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.entity.SysDept; import com.youlai.system.model.query.TablePageQuery; -import com.youlai.system.model.vo.TableColumnVO; import com.youlai.system.model.vo.TablePageVO; import org.apache.ibatis.annotations.Mapper; @@ -23,7 +22,7 @@ import java.util.List; public interface DatabaseMapper extends BaseMapper { - Page getTablePage(Page page, TablePageQuery queryParams); + Page getTablePage(Page page, TablePageQuery queryParams); List getTableColumns(String tableName); diff --git a/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java b/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java index ee48674b..bb8b0d07 100644 --- a/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java +++ b/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java @@ -1,7 +1,9 @@ package com.youlai.system.model.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.youlai.system.common.base.BaseEntity; import com.youlai.system.enums.FormTypeEnum; import com.youlai.system.enums.QueryTypeEnum; @@ -53,7 +55,7 @@ public class GenFieldConfig extends BaseEntity { /** * 字段描述 */ - private String comment; + private String fieldComment; /** * 表单类型 @@ -86,4 +88,12 @@ public class GenFieldConfig extends BaseEntity { private Integer isRequired; + /** + * TypeScript类型 + */ + @TableField(exist = false) + @JsonIgnore + private String tsType; + + } \ No newline at end of file diff --git a/src/main/java/com/youlai/system/model/form/GenConfigForm.java b/src/main/java/com/youlai/system/model/form/GenConfigForm.java index c212c0a2..3f03aec1 100644 --- a/src/main/java/com/youlai/system/model/form/GenConfigForm.java +++ b/src/main/java/com/youlai/system/model/form/GenConfigForm.java @@ -61,7 +61,7 @@ public class GenConfigForm { private String fieldType; @Schema(description = "字段描述") - private String comment; + private String fieldComment; @Schema(description = "是否在列表显示") private Integer isShowInList; diff --git a/src/main/java/com/youlai/system/model/vo/TableColumnVO.java b/src/main/java/com/youlai/system/model/vo/TableColumnVO.java deleted file mode 100644 index 8559c6d4..00000000 --- a/src/main/java/com/youlai/system/model/vo/TableColumnVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.youlai.system.model.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(description = "数据表字段VO") -@Data -public class TableColumnVO { - - @Schema(description = "字段名称", example = "id") - private String columnName; - - @Schema(description = "字段类型", example = "bigint") - private String dataType; - - @Schema(description = "字段描述", example = "主键") - private String columnComment; - - @Schema(description = "字段长度", example = "20") - private Integer characterMaximumLength; - - @Schema(description = "是否主键(1-是 0-否)", example = "1") - private Integer isPrimaryKey; - - @Schema(description = "是否可为空(1-是 0-否)", example = "1") - private String isNullable; - - @Schema(description = "字符集", example = "utf8mb4") - private String characterSetName; - - @Schema(description = "字符集排序规则", example = "utf8mb4_general_ci") - private String collationName; - -} diff --git a/src/main/java/com/youlai/system/model/vo/TablePageVO.java b/src/main/java/com/youlai/system/model/vo/TablePageVO.java index 8c709831..c4e3b4d2 100644 --- a/src/main/java/com/youlai/system/model/vo/TablePageVO.java +++ b/src/main/java/com/youlai/system/model/vo/TablePageVO.java @@ -4,7 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -@Schema(description = "数据表VO") +@Schema(description = "表视图对象") @Data public class TablePageVO { diff --git a/src/main/java/com/youlai/system/plugin/syslog/aspect/LogAspect.java b/src/main/java/com/youlai/system/plugin/syslog/aspect/LogAspect.java index 5c8d682b..f103766c 100644 --- a/src/main/java/com/youlai/system/plugin/syslog/aspect/LogAspect.java +++ b/src/main/java/com/youlai/system/plugin/syslog/aspect/LogAspect.java @@ -3,12 +3,10 @@ package com.youlai.system.plugin.syslog.aspect; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.TimeInterval; import cn.hutool.core.util.StrUtil; -import cn.hutool.http.useragent.Browser; -import cn.hutool.http.useragent.OS; import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgentUtil; import com.youlai.system.common.constant.SecurityConstants; -import com.youlai.system.common.util.IPUtils; +import com.youlai.system.util.IPUtils; import com.youlai.system.model.entity.SysLog; import com.youlai.system.plugin.syslog.annotation.LogAnnotation; import com.youlai.system.security.util.SecurityUtils; diff --git a/src/main/java/com/youlai/system/security/exception/MyAccessDeniedHandler.java b/src/main/java/com/youlai/system/security/exception/MyAccessDeniedHandler.java index 1da85cd7..484b24ee 100644 --- a/src/main/java/com/youlai/system/security/exception/MyAccessDeniedHandler.java +++ b/src/main/java/com/youlai/system/security/exception/MyAccessDeniedHandler.java @@ -1,7 +1,7 @@ package com.youlai.system.security.exception; import com.youlai.system.common.result.ResultCode; -import com.youlai.system.common.util.ResponseUtils; +import com.youlai.system.util.ResponseUtils; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java b/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java index 7d197533..28552173 100644 --- a/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java +++ b/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java @@ -1,7 +1,7 @@ package com.youlai.system.security.exception; import com.youlai.system.common.result.ResultCode; -import com.youlai.system.common.util.ResponseUtils; +import com.youlai.system.util.ResponseUtils; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; diff --git a/src/main/java/com/youlai/system/service/GenConfigService.java b/src/main/java/com/youlai/system/service/GenConfigService.java index 7e91e33a..76156819 100644 --- a/src/main/java/com/youlai/system/service/GenConfigService.java +++ b/src/main/java/com/youlai/system/service/GenConfigService.java @@ -1,15 +1,7 @@ package com.youlai.system.service; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.youlai.system.model.entity.GenConfig; -import com.youlai.system.model.form.GenConfigForm; -import com.youlai.system.model.query.TablePageQuery; -import com.youlai.system.model.vo.GeneratorPreviewVO; -import com.youlai.system.model.vo.TableColumnVO; -import com.youlai.system.model.vo.TablePageVO; - -import java.util.List; /** * 代码生成配置接口 diff --git a/src/main/java/com/youlai/system/service/GeneratorService.java b/src/main/java/com/youlai/system/service/GeneratorService.java index e6fd51ba..0aae0491 100644 --- a/src/main/java/com/youlai/system/service/GeneratorService.java +++ b/src/main/java/com/youlai/system/service/GeneratorService.java @@ -1,11 +1,9 @@ package com.youlai.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.youlai.system.model.bo.TableMetaData; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; import com.youlai.system.model.vo.GeneratorPreviewVO; -import com.youlai.system.model.vo.TableColumnVO; import com.youlai.system.model.vo.TablePageVO; import java.util.List; @@ -24,7 +22,7 @@ public interface GeneratorService { * @param queryParams 查询参数 * @return */ - Page getTablePage(TablePageQuery queryParams); + Page getTablePage(TablePageQuery queryParams); /** * 获取预览生成代码 @@ -40,7 +38,7 @@ public interface GeneratorService { * @param tableName 表名 * @return */ - GenConfigForm getGenConfig(String tableName); + GenConfigForm getGenConfigFormData(String tableName); /** * 保存代码生成配置 diff --git a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java index 0c2e41cc..d96d0635 100644 --- a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java @@ -15,18 +15,22 @@ import com.youlai.system.SystemApplication; import com.youlai.system.config.property.GeneratorProperties; import com.youlai.system.converter.GenConfigConverter; import com.youlai.system.enums.FormTypeEnum; +import com.youlai.system.enums.JavaTypeEnum; import com.youlai.system.enums.QueryTypeEnum; import com.youlai.system.exception.BusinessException; import com.youlai.system.mapper.DatabaseMapper; +import com.youlai.system.model.bo.ColumnMetaData; +import com.youlai.system.model.bo.TableMetaData; +import com.youlai.system.model.entity.GenConfig; import com.youlai.system.model.entity.GenFieldConfig; import com.youlai.system.model.form.GenConfigForm; import com.youlai.system.model.query.TablePageQuery; +import com.youlai.system.model.vo.GeneratorPreviewVO; +import com.youlai.system.model.vo.TablePageVO; import com.youlai.system.service.GeneratorService; import com.youlai.system.service.GenConfigService; import com.youlai.system.service.GenFieldConfigService; import lombok.RequiredArgsConstructor; -import org.apache.logging.log4j.util.Strings; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; @@ -42,14 +46,10 @@ import java.util.*; @RequiredArgsConstructor public class GeneratorServiceImpl implements GeneratorService { - @Value("${spring.application.name}") - private String applicationName; - private final DatabaseMapper databaseMapper; private final GeneratorProperties generatorProperties; private final GenConfigService genConfigService; private final GenFieldConfigService genFieldConfigService; - private final GenConfigConverter genConfigConverter; /** @@ -58,8 +58,8 @@ public class GeneratorServiceImpl implements GeneratorService { * @param queryParams 查询参数 * @return 分页结果 */ - public Page getTablePage(TablePageQuery queryParams) { - Page page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); + public Page getTablePage(TablePageQuery queryParams) { + Page page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); return databaseMapper.getTablePage(page, queryParams); } @@ -70,7 +70,7 @@ public class GeneratorServiceImpl implements GeneratorService { * @return 代码生成配置 */ @Override - public GenConfigForm getGenConfig(String tableName) { + public GenConfigForm getGenConfigFormData(String tableName) { // 查询表生成配置 GenConfig genConfig = genConfigService.getOne( new LambdaQueryWrapper<>(GenConfig.class) @@ -96,6 +96,8 @@ public class GeneratorServiceImpl implements GeneratorService { String packageName = SystemApplication.class.getPackageName(); genConfig.setPackageName(packageName); + genConfig.setAuthor(generatorProperties.getDefaultConfig().getAuthor()); + } // 根据表的列 + 已经存在的字段生成配置 得到 组合后的字段生成配置 @@ -114,19 +116,15 @@ public class GeneratorServiceImpl implements GeneratorService { String columnName = tableColumn.getColumnName(); GenFieldConfig genFieldConfig = fieldConfigList.stream() .filter(item -> StrUtil.equals(item.getColumnName(), columnName)) - .findFirst().orElseGet(() -> { - GenFieldConfig fieldConfig = new GenFieldConfig(); - fieldConfig.setColumnName(tableColumn.getColumnName()); - fieldConfig.setColumnType(tableColumn.getDataType()); - fieldConfig.setComment(tableColumn.getColumnComment()); - fieldConfig.setFieldName(StrUtil.toCamelCase(columnName)); - fieldConfig.setFieldType(StrUtil.toCamelCase(tableColumn.getDataType())); - fieldConfig.setIsRequired("YES".equals(tableColumn.getIsNullable()) ? 1 : 0); - fieldConfig.setFormType(FormTypeEnum.INPUT); - fieldConfig.setQueryType(QueryTypeEnum.EQ); - return fieldConfig; + .findFirst() + .orElseGet(() -> createDefaultFieldConfig(tableColumn)); - }); + // 根据列类型设置字段类型 + String fieldType = genFieldConfig.getFieldType(); + if (StrUtil.isBlank(fieldType)) { + String javaType = JavaTypeEnum.getJavaTypeByDbType(genFieldConfig.getColumnType()); + genFieldConfig.setFieldType(javaType); + } genFieldConfigs.add(genFieldConfig); } } @@ -135,6 +133,24 @@ public class GeneratorServiceImpl implements GeneratorService { } + /** + * 创建默认字段配置 + * + * @param tableColumn 表字段元数据 + * @return + */ + private GenFieldConfig createDefaultFieldConfig(ColumnMetaData tableColumn) { + GenFieldConfig fieldConfig = new GenFieldConfig(); + fieldConfig.setColumnName(tableColumn.getColumnName()); + fieldConfig.setColumnType(tableColumn.getDataType()); + fieldConfig.setFieldComment(tableColumn.getColumnComment()); + fieldConfig.setFieldName(StrUtil.toCamelCase(tableColumn.getColumnName())); + fieldConfig.setIsRequired("YES".equals(tableColumn.getIsNullable()) ? 1 : 0); + fieldConfig.setFormType(FormTypeEnum.INPUT); + fieldConfig.setQueryType(QueryTypeEnum.EQ); + return fieldConfig; + } + /** * 保存代码生成配置 * @@ -204,7 +220,7 @@ public class GeneratorServiceImpl implements GeneratorService { // controller String subPackageName = templateConfig.getPackageName(); // 文件路径 com.youlai.system.controller - String filePath = getFilePath(templateName, packageName, subPackageName); + String filePath = getFilePath(templateName, packageName, subPackageName,entityName); previewVO.setPath(filePath); /* 3. 生成文件内容 */ @@ -227,32 +243,48 @@ public class GeneratorServiceImpl implements GeneratorService { if ("MapperXml".equals(templateName)) { return entityName + "Mapper" + extension; } - if ("API".equals(templateName) || "VIEW".equals(templateName)) { + if ("API".equals(templateName)) { return StrUtil.toSymbolCase(entityName, '-') + extension; } + + if ("VIEW".equals(templateName)) { + return "index.vue"; + } + return entityName + templateName + extension; } - private String getFilePath(String templateName, String packageName, String subPackageName) { + private String getFilePath(String templateName, String packageName, String subPackageName,String entityName) { String path; if ("MapperXml".equals(templateName)) { - path = (applicationName + path = (generatorProperties.getBackendAppName() + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + subPackageName - ).replace(".", File.separator); - } else if ("API".equals(templateName) || "VIEW".equals(templateName)) { - path = ("vue3-element-admin" + ); + } else if ("API".equals(templateName) ) { + path = (generatorProperties.getFrontendAppName() + File.separator + "src" + File.separator + subPackageName - ).replace(".", File.separator); - } else { - path = (applicationName + ); + } else if("VIEW".equals(templateName)){ + path = (generatorProperties.getFrontendAppName() + + File.separator + + "src" + File.separator + subPackageName + + File.separator + + StrUtil.toSymbolCase(entityName, '-') + ); + }else { + path = (generatorProperties.getBackendAppName() + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator + packageName + File.separator + subPackageName - ).replace(".", File.separator); + ); } + + // subPackageName = model.entity => model/entity + path = path.replace(".", File.separator); + return path; } @@ -277,13 +309,14 @@ public class GeneratorServiceImpl implements GeneratorService { bindMap.put("tableName", genConfig.getTableName()); bindMap.put("author", genConfig.getAuthor()); bindMap.put("lowerFirstEntityName", StrUtil.lowerFirst(entityName)); - bindMap.put("tableComment", genConfig.getBusinessName()); + bindMap.put("businessName", genConfig.getBusinessName()); bindMap.put("fieldConfigs", fieldConfigs); for (GenFieldConfig fieldConfig : fieldConfigs) { bindMap.put("hasLocalDateTime", "LocalDateTime".equals(fieldConfig.getFieldType())); bindMap.put("hasBigDecimal", "BigDecimal".equals(fieldConfig.getFieldType())); bindMap.put("hasRequiredField", ObjectUtil.equals(fieldConfig.getIsRequired(), 1)); + fieldConfig.setTsType(JavaTypeEnum.getTsTypeByJavaType(fieldConfig.getFieldType())); } TemplateEngine templateEngine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH)); diff --git a/src/main/java/com/youlai/system/service/impl/SysLogServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysLogServiceImpl.java index 5839a7d1..65d4baec 100644 --- a/src/main/java/com/youlai/system/service/impl/SysLogServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysLogServiceImpl.java @@ -2,7 +2,7 @@ package com.youlai.system.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.system.common.util.DateUtils; +import com.youlai.system.util.DateUtils; import com.youlai.system.model.bo.VisitCount; import com.youlai.system.model.entity.SysLog; import com.youlai.system.model.query.LogPageQuery; diff --git a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java index a8fca05a..2db14b96 100644 --- a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.system.common.constant.SystemConstants; -import com.youlai.system.common.util.DateUtils; +import com.youlai.system.util.DateUtils; import com.youlai.system.converter.UserConverter; import com.youlai.system.security.util.SecurityUtils; import com.youlai.system.mapper.SysUserMapper; diff --git a/src/main/java/com/youlai/system/common/util/DateUtils.java b/src/main/java/com/youlai/system/util/DateUtils.java similarity index 98% rename from src/main/java/com/youlai/system/common/util/DateUtils.java rename to src/main/java/com/youlai/system/util/DateUtils.java index 6066bc7a..167fce20 100644 --- a/src/main/java/com/youlai/system/common/util/DateUtils.java +++ b/src/main/java/com/youlai/system/util/DateUtils.java @@ -1,5 +1,5 @@ -package com.youlai.system.common.util; +package com.youlai.system.util; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; diff --git a/src/main/java/com/youlai/system/common/util/ExcelUtils.java b/src/main/java/com/youlai/system/util/ExcelUtils.java similarity index 91% rename from src/main/java/com/youlai/system/common/util/ExcelUtils.java rename to src/main/java/com/youlai/system/util/ExcelUtils.java index d25921fe..14894baf 100644 --- a/src/main/java/com/youlai/system/common/util/ExcelUtils.java +++ b/src/main/java/com/youlai/system/util/ExcelUtils.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.util; +package com.youlai.system.util; import com.alibaba.excel.EasyExcel; import com.youlai.system.plugin.easyexcel.MyAnalysisEventListener; diff --git a/src/main/java/com/youlai/system/common/util/IPUtils.java b/src/main/java/com/youlai/system/util/IPUtils.java similarity index 99% rename from src/main/java/com/youlai/system/common/util/IPUtils.java rename to src/main/java/com/youlai/system/util/IPUtils.java index 816c42a2..2d77f90d 100644 --- a/src/main/java/com/youlai/system/common/util/IPUtils.java +++ b/src/main/java/com/youlai/system/util/IPUtils.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.util; +package com.youlai.system.util; import cn.hutool.core.util.StrUtil; import jakarta.annotation.PostConstruct; diff --git a/src/main/java/com/youlai/system/common/util/ResponseUtils.java b/src/main/java/com/youlai/system/util/ResponseUtils.java similarity index 97% rename from src/main/java/com/youlai/system/common/util/ResponseUtils.java rename to src/main/java/com/youlai/system/util/ResponseUtils.java index cc46a6fc..3bb84286 100644 --- a/src/main/java/com/youlai/system/common/util/ResponseUtils.java +++ b/src/main/java/com/youlai/system/util/ResponseUtils.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.util; +package com.youlai.system.util; import cn.hutool.json.JSONUtil; import com.youlai.system.common.result.Result; diff --git a/src/main/resources/application-generator.yml b/src/main/resources/application-generator.yml index 2a7e3996..d8359790 100644 --- a/src/main/resources/application-generator.yml +++ b/src/main/resources/application-generator.yml @@ -1,5 +1,9 @@ -### 代码生成器配置 +# 代码生成器配置 generator: + defaultConfig: + author: youlaitech + backendAppName: youlai-boot + frontendAppName: vue3-element-admin ## 模板配置 templateConfigs: Controller: @@ -18,6 +22,9 @@ generator: templatePath: generator/mapper.xml.vm packageName: mapper extension: .xml + Converter: + templatePath: generator/converter.java.vm + packageName: converter Query: templatePath: generator/query.java.vm packageName: model.query diff --git a/src/main/resources/mapper/DatabaseMapper.xml b/src/main/resources/mapper/DatabaseMapper.xml index 7aecef51..646ec80a 100644 --- a/src/main/resources/mapper/DatabaseMapper.xml +++ b/src/main/resources/mapper/DatabaseMapper.xml @@ -5,7 +5,7 @@ - SELECT TABLE_NAME , TABLE_COMMENT , diff --git a/src/main/resources/mapper/GenFieldConfigMapper.xml b/src/main/resources/mapper/GenFieldConfigMapper.xml index 03607e26..475c8cf1 100644 --- a/src/main/resources/mapper/GenFieldConfigMapper.xml +++ b/src/main/resources/mapper/GenFieldConfigMapper.xml @@ -4,25 +4,4 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - id,config_id,name, - type,description,show_in_list, - show_in_form,show_in_query,form_type, - query_method,create_time,update_time - diff --git a/src/main/resources/templates/generator/api.ts.vm b/src/main/resources/templates/generator/api.ts.vm index 4fb19ad1..fda318e2 100644 --- a/src/main/resources/templates/generator/api.ts.vm +++ b/src/main/resources/templates/generator/api.ts.vm @@ -1,121 +1,93 @@ import request from "@/utils/request"; -const ${className.toUpperCase()}_BASE_URL = "/api/v1/${className.toLowerCase()}s"; +const ${entityName.toUpperCase()}_BASE_URL = "/api/v1/${entityName.toLowerCase()}s"; -class ${className}API { - /** 获取${className}分页数据 */ - static getPage(queryParams?: ${className}PageQuery) { - return request>({ - url: `${${className.toUpperCase()}_BASE_URL}/page`, +class ${entityName}API { + /** 获取${businessName}分页数据 */ + static getPage(queryParams?: ${entityName}PageQuery) { + return request>({ + url: `${${entityName.toUpperCase()}_BASE_URL}/page`, method: "get", params: queryParams, }); } - - /** 获取${className}下拉数据源 */ - static getOptions() { - return request({ - url: `${${className.toUpperCase()}_BASE_URL}/options`, - method: "get", - }); - } - /** - * 获取${className}的菜单ID集合 + * 获取${businessName}表单数据 * - * @param ${className.toLowerCase()}Id ${className}ID - * @returns ${className}的菜单ID集合 - */ - static get${className}MenuIds(${className.toLowerCase()}Id: number) { - return request({ - url: `${${className.toUpperCase()}_BASE_URL}/${${className.toLowerCase()}Id}/menuIds`, - method: "get", - }); - } - - /** - * 分配菜单权限 - * - * @param ${className.toLowerCase()}Id ${className}ID - * @param data 菜单ID集合 - */ - static update${className}Menus(${className.toLowerCase()}Id: number, data: number[]) { - return request({ - url: `${${className.toUpperCase()}_BASE_URL}/${${className.toLowerCase()}Id}/menus`, - method: "put", - data: data, - }); - } - - /** - * 获取${className}表单数据 - * - * @param id ${className}ID - * @returns ${className}表单数据 + * @param id ${entityName}ID + * @returns ${entityName}表单数据 */ static getFormData(id: number) { - return request({ - url: `${${className.toUpperCase()}_BASE_URL}/${id}/form`, + return request({ + url: `${${entityName.toUpperCase()}_BASE_URL}/${id}/form`, method: "get", }); } - /** 添加${className} */ - static add(data: ${className}Form) { + /** 添加${businessName}*/ + static add(data: ${entityName}Form) { return request({ - url: `${${className.toUpperCase()}_BASE_URL}`, + url: `${${entityName.toUpperCase()}_BASE_URL}`, method: "post", data: data, }); } /** - * 更新${className} + * 更新${businessName} * - * @param id ${className}ID - * @param data ${className}表单数据 + * @param id ${entityName}ID + * @param data ${entityName}表单数据 */ - static update(id: number, data: ${className}Form) { + static update(id: number, data: ${entityName}Form) { return request({ - url: `${${className.toUpperCase()}_BASE_URL}/${id}`, + url: `${${entityName.toUpperCase()}_BASE_URL}/${id}`, method: "put", data: data, }); } /** - * 批量删除${className},多个以英文逗号(,)分割 + * 批量删除${businessName},多个以英文逗号(,)分割 * - * @param ids ${className}ID字符串,多个以英文逗号(,)分割 + * @param ids ${businessName}ID字符串,多个以英文逗号(,)分割 */ static deleteByIds(ids: string) { return request({ - url: `${${className.toUpperCase()}_BASE_URL}/${ids}`, + url: `${${entityName.toUpperCase()}_BASE_URL}/${ids}`, method: "delete", }); } } -export default ${className}API; +export default ${entityName}API; -/** ${className}分页查询参数 */ -export interface ${className}PageQuery extends PageQuery { +/** $${businessName}分页查询参数 */ +export interface ${entityName}PageQuery extends PageQuery { /** 搜索关键字 */ keywords?: string; } -/** ${className}分页对象 */ -export interface ${className}PageVO { - #foreach($field in $fields) - /** ${field.comment} */ - ${field.name}?: ${field.type}; +/** ${businessName}表单对象 */ +export interface ${entityName}Form { + #foreach($fieldConfig in $fieldConfigs) + #if($fieldConfig.isShowInForm) + #if("$!fieldConfig.fieldComment" != "") + /** ${fieldConfig.fieldComment} */ + #end + ${fieldConfig.fieldName}?: ${fieldConfig.tsType}; + #end #end } -/** ${className}表单对象 */ -export interface ${className}Form { - #foreach($field in $fields) - /** ${field.comment} */ - ${field.name}?: ${field.type}; +/** ${businessName}分页对象 */ +export interface ${entityName}PageVO { + #foreach($fieldConfig in $fieldConfigs) + #if($fieldConfig.isShowInList) + #if("$!fieldConfig.fieldComment" != "") + /** ${fieldConfig.fieldComment} */ + #end + ${fieldConfig.fieldName}?: ${fieldConfig.tsType}; + #end #end } diff --git a/src/main/resources/templates/generator/controller.java.vm b/src/main/resources/templates/generator/controller.java.vm index 292830e4..5982a4f0 100644 --- a/src/main/resources/templates/generator/controller.java.vm +++ b/src/main/resources/templates/generator/controller.java.vm @@ -17,12 +17,12 @@ import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; /** - * $!{tableComment}前端控制层 + * $!{businessName}前端控制层 * * @author ${author} * @since ${date} */ -@Tag(name = "${tableComment}接口") +@Tag(name = "${businessName}接口") @RestController @RequestMapping("/api/v1/${lowerFirstEntityName}s") @RequiredArgsConstructor @@ -30,41 +30,41 @@ public class ${entityName}Controller { private final ${entityName}Serivie ${lowerFirstEntityName}Service; - @Operation(summary = "$!{tableComment}分页列表") + @Operation(summary = "$!{businessName}分页列表") @GetMapping("/page") public PageResult<${entityName}PageVO> get${entityName}Page(${entityName}PageQuery queryParams ) { IPage<${entityName}PageVO> result = ${lowerFirstEntityName}Service.get${entityName}Page(queryParams); return PageResult.success(result); } - @Operation(summary = "新增$!{tableComment}") + @Operation(summary = "新增${businessName}") @PostMapping public Result save${entityName}(@RequestBody @Valid ${entityName}Form formData ) { boolean result = ${lowerFirstEntityName}Service.save${entityName}(formData); return Result.judge(result); } - @Operation(summary = "获取$!{tableComment}表单数据") + @Operation(summary = "获取${businessName}表单数据") @GetMapping("/{id}/form") public Result<${entityName}Form> get${entityName}Form( - @Parameter(description = "$!{tableComment}ID") @PathVariable Long id + @Parameter(description = "$!{businessName}ID") @PathVariable Long id ) { ${entityName}Form formData = ${lowerFirstEntityName}Service.get${entityName}FormData(id); return Result.success(formData); } - @Operation(summary = "修改$!{tableComment}") + @Operation(summary = "修改${businessName}") @PutMapping(value = "/{id}") - public Result update${entityName}(@Parameter(description = "$!{tableComment}ID") @PathVariable Long id, + public Result update${entityName}(@Parameter(description = "$!{businessName}ID") @PathVariable Long id, @RequestBody @Validated ${entityName}Form formData) { boolean result = ${lowerFirstEntityName}Service.update${entityName}(id, formData); return Result.judge(result); } - @Operation(summary = "删除$!{tableComment}") + @Operation(summary = "删除${businessName}") @DeleteMapping("/{ids}") public Result delete${entityName}s( - @Parameter(description = "$!{tableComment}ID,多个以英文逗号(,)分割") @PathVariable String ids + @Parameter(description = "$!{businessName}ID,多个以英文逗号(,)分割") @PathVariable String ids ) { boolean result = ${lowerFirstEntityName}Service.delete${entityName}s(ids); return Result.judge(result); diff --git a/src/main/resources/templates/generator/converter.java.vm b/src/main/resources/templates/generator/converter.java.vm index 6907a4d5..b98c48f0 100644 --- a/src/main/resources/templates/generator/converter.java.vm +++ b/src/main/resources/templates/generator/converter.java.vm @@ -6,7 +6,7 @@ import ${package}.model.entity.${entityName}; import ${package}.model.form.${entityName}Form; /** - * $!{tableComment}对象转换器 + * $!{businessName}对象转换器 * * @author ${author} * @since ${date} diff --git a/src/main/resources/templates/generator/entity.java.vm b/src/main/resources/templates/generator/entity.java.vm index ca994871..0af92e93 100644 --- a/src/main/resources/templates/generator/entity.java.vm +++ b/src/main/resources/templates/generator/entity.java.vm @@ -12,7 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.youlai.system.common.base.BaseEntity; /** - * $!{tableComment}实体对象 + * $!{businessName}实体对象 * * @author ${author} * @since ${date} diff --git a/src/main/resources/templates/generator/form.java.vm b/src/main/resources/templates/generator/form.java.vm index ea493d0f..aa4767f0 100644 --- a/src/main/resources/templates/generator/form.java.vm +++ b/src/main/resources/templates/generator/form.java.vm @@ -16,14 +16,14 @@ import jakarta.validation.constraints.*; #end /** - * $!{tableComment}表单对象 + * $!{businessName}表单对象 * * @author ${author} * @since ${date} */ @Getter @Setter -@Schema(description = "$!{tableComment}表单对象") +@Schema(description = "$!{businessName}表单对象") public class ${entityName}Form implements Serializable { @Serial @@ -32,7 +32,7 @@ public class ${entityName}Form implements Serializable { ## ---------- BEGIN 字段循环遍历 ---------- #if($fieldConfigs) #foreach($fieldConfig in ${fieldConfigs}) - #if($fieldConfig.showInForm) + #if($fieldConfig.isShowInForm) #if($fieldConfig.isRequired) #if($fieldConfig.fieldType == 'String') @NotBlank(message = "$fieldConfig.fieldComment不能为空") diff --git a/src/main/resources/templates/generator/index.vue.vm b/src/main/resources/templates/generator/index.vue.vm index bdd146fa..1d023ac5 100644 --- a/src/main/resources/templates/generator/index.vue.vm +++ b/src/main/resources/templates/generator/index.vue.vm @@ -2,114 +2,127 @@
- - - - + #foreach($fieldConfig in $fieldConfigs) + #if($fieldConfig.isShowInQuery == 1) + + #if($fieldConfig.formType == "INPUT") + + #elseif($fieldConfig.formType == "SELECT") + + + + + #elseif($fieldConfig.formType == "RADIO") + + {{ option.label }} + + #elseif($fieldConfig.formType == "CHECK_BOX") + + {{ option.label }} + + #elseif($fieldConfig.formType == "INPUT_NUMBER") + + #elseif($fieldConfig.formType == "SWITCH") + + #elseif($fieldConfig.formType == "TEXT_AREA") + + #elseif($fieldConfig.formType == "DATE_TIME") + + #elseif($fieldConfig.formType == "DATE") + + #end + + #end + #end - - - 搜索 - - - - 重置 - + 搜索 + 重置
- #foreach($field in $fields) - + #foreach($fieldConfig in $fieldConfigs) + #if($fieldConfig.isShowInList == 1) + #end - + #end - - - - #foreach($field in $fields) - - - + + + + #foreach($fieldConfig in $fieldConfigs) + #if($fieldConfig.isShowInForm == 1) + + #if($fieldConfig.formType == "INPUT") + + #elseif($fieldConfig.formType == "SELECT") + + + + + #elseif($fieldConfig.formType == "RADIO") + + {{ option.label }} + + #elseif($fieldConfig.formType == "CHECK_BOX") + + {{ option.label }} + + #elseif($fieldConfig.formType == "INPUT_NUMBER") + + #elseif($fieldConfig.formType == "SWITCH") + + #elseif($fieldConfig.formType == "TEXT_AREA") + + #elseif($fieldConfig.formType == "DATE_TIME") + + #elseif($fieldConfig.formType == "DATE") + + #end + #end + #end - @@ -118,55 +131,60 @@ diff --git a/src/main/resources/templates/generator/mapper.java.vm b/src/main/resources/templates/generator/mapper.java.vm index fa9bbbf7..378b98b0 100644 --- a/src/main/resources/templates/generator/mapper.java.vm +++ b/src/main/resources/templates/generator/mapper.java.vm @@ -7,7 +7,7 @@ import ${package}.model.query.${entityName}Query; import org.apache.ibatis.annotations.Mapper; /** - * $!{tableComment}Mapper接口 + * $!{businessName}Mapper接口 * * @author ${author} * @since ${date} @@ -16,7 +16,7 @@ import org.apache.ibatis.annotations.Mapper; public interface ${entityName}Mapper extends BaseMapper<${entityName}> { /** - * 获取$!{tableComment}分页数据 + * 获取${businessName}分页数据 * * @param page 分页对象 * @param queryParams 查询参数 diff --git a/src/main/resources/templates/generator/mapper.xml.vm b/src/main/resources/templates/generator/mapper.xml.vm index 06984819..91fe442e 100644 --- a/src/main/resources/templates/generator/mapper.xml.vm +++ b/src/main/resources/templates/generator/mapper.xml.vm @@ -2,7 +2,7 @@ - +