wip: 代码生成临时提交

This commit is contained in:
ray
2024-07-26 08:18:43 +08:00
parent 7f6d429540
commit bf0e898752
10 changed files with 211 additions and 37 deletions

View File

@@ -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<TablePageVO> getTablePage(TablePageQuery queryParams);
Page<TableMetaData> getTablePage(TablePageQuery queryParams);
/**
* 获取预览生成代码

View File

@@ -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<TablePageVO> getTablePage(TablePageQuery queryParams) {
Page<TablePageVO> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize());
public Page<TableMetaData> getTablePage(TablePageQuery queryParams) {
Page<TableMetaData> 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<GenFieldConfig> 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<GenFieldConfig> genFieldConfigs = null;
// 获取表的列信息
List<ColumnMetaData> tableColumns = databaseMapper.getTableColumns(tableName);
if (CollectionUtil.isNotEmpty(tableColumns)) {
// 查询字段生成配置
List<GenFieldConfig> 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<GenFieldConfig> genFieldConfigs = genConfigConverter.toGenFieldConfigList(formData.getFieldConfigs());
List<GenFieldConfig> genFieldConfigs = genConfigConverter.toGenFieldConfigEntity(formData.getFieldConfigs());
if (CollectionUtil.isEmpty(genFieldConfigs)) {
throw new BusinessException("字段配置不能为空");