Skip to content

Commit

Permalink
refactor: 优化代码生成配置相关表名、 API 地址及相关描述
Browse files Browse the repository at this point in the history
1、列映射表重命名为字段配置表
  • Loading branch information
Charles7c committed Aug 10, 2023
1 parent 241a9cf commit 2d0e1f4
Show file tree
Hide file tree
Showing 10 changed files with 132 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,29 @@

package top.charles7c.cnadmin.tool.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import top.charles7c.cnadmin.common.base.BaseMapper;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.FieldConfigDO;

/**
* 列映射 Mapper
* 字段配置 Mapper
*
* @author Charles7c
* @since 2023/4/12 23:56
*/
public interface ColumnMappingMapper extends BaseMapper<ColumnMappingDO> {}
public interface FieldConfigMapper extends BaseMapper<FieldConfigDO> {

/**
* 根据表名称查询
*
* @param tableName
* 表名称
* @return 字段配置信息
*/
@Select("SELECT * FROM `gen_field_config` WHERE `table_name` = #{tableName}")
List<FieldConfigDO> selectListByTableName(@Param("tableName") String tableName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,17 @@
import top.charles7c.cnadmin.tool.enums.FormTypeEnum;

/**
* 列映射实体
* 字段配置实体
*
* @author Charles7c
* @since 2023/4/12 20:21
*/
@Data
@TableName("gen_column_mapping")
@TableName("gen_field_config")
@NoArgsConstructor
@Accessors(chain = true)
@Schema(description = "列映射信息")
public class ColumnMappingDO implements Serializable {
@Schema(description = "字段配置信息")
public class FieldConfigDO implements Serializable {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -140,7 +140,7 @@ public class ColumnMappingDO implements Serializable {
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

public ColumnMappingDO(@NonNull Column column) {
public FieldConfigDO(@NonNull Column column) {
String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0].toLowerCase();
boolean isRequired = !column.isPk() && !column.isNullable();
this.tableName = column.getTableName();
Expand All @@ -150,13 +150,13 @@ public ColumnMappingDO(@NonNull Column column) {
this.setQueryType("String".equals(this.getFieldType()) ? QueryTypeEnum.INNER_LIKE : QueryTypeEnum.EQUAL);
}

public ColumnMappingDO setColumnName(String columnName) {
public FieldConfigDO setColumnName(String columnName) {
this.columnName = columnName;
this.fieldName = StrUtil.toCamelCase(this.columnName);
return this;
}

public ColumnMappingDO setColumnType(String columnType) {
public FieldConfigDO setColumnType(String columnType) {
this.columnType = columnType;
Props generatorProp = PropsUtil.get("generator");
this.fieldType = generatorProp.getStr(columnType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

import io.swagger.v3.oas.annotations.media.Schema;

import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.FieldConfigDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;

/**
Expand All @@ -43,16 +43,16 @@ public class GenConfigRequest implements Serializable {
private static final long serialVersionUID = 1L;

/**
* 列映射信息列表
* 字段配置
*/
@Schema(description = "列映射信息列表")
@NotEmpty(message = "列映射信息不能为空")
private List<ColumnMappingDO> columnMappings = new ArrayList<>();
@Schema(description = "字段配置")
@NotEmpty(message = "字段配置不能为空")
private List<FieldConfigDO> fieldConfigs = new ArrayList<>();

/**
* 生成配置信息
* 生成配置
*/
@Schema(description = "生成配置信息")
@NotNull(message = "生成配置信息不能为空")
@Schema(description = "生成配置")
@NotNull(message = "生成配置不能为空")
private GenConfigDO genConfig;
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.FieldConfigDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
import top.charles7c.cnadmin.tool.model.query.TableQuery;
import top.charles7c.cnadmin.tool.model.request.GenConfigRequest;
Expand Down Expand Up @@ -60,15 +60,15 @@ public interface GeneratorService {
GenConfigDO getGenConfig(String tableName) throws SQLException;

/**
* 查询列映射信息列表
* 查询字段配置列表
*
* @param tableName
* 表名称
* @param requireSync
* 是否需要同步
* @return 列映射信息列表
* @return 字段配置列表
*/
List<ColumnMappingDO> listColumnMapping(String tableName, Boolean requireSync);
List<FieldConfigDO> listFieldConfig(String tableName, Boolean requireSync);

/**
* 保存代码生成配置信息
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.tool.config.properties.GeneratorProperties;
import top.charles7c.cnadmin.tool.mapper.ColumnMappingMapper;
import top.charles7c.cnadmin.tool.mapper.FieldConfigMapper;
import top.charles7c.cnadmin.tool.mapper.GenConfigMapper;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.FieldConfigDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
import top.charles7c.cnadmin.tool.model.query.TableQuery;
import top.charles7c.cnadmin.tool.model.request.GenConfigRequest;
Expand All @@ -68,7 +68,7 @@ public class GeneratorServiceImpl implements GeneratorService {

private final DataSource dataSource;
private final GeneratorProperties generatorProperties;
private final ColumnMappingMapper columnMappingMapper;
private final FieldConfigMapper fieldConfigMapper;
private final GenConfigMapper genConfigMapper;

@Override
Expand Down Expand Up @@ -113,67 +113,65 @@ public GenConfigDO getGenConfig(String tableName) throws SQLException {
}

@Override
public List<ColumnMappingDO> listColumnMapping(String tableName, Boolean requireSync) {
List<ColumnMappingDO> columnMappingList = columnMappingMapper
.selectList(Wrappers.lambdaQuery(ColumnMappingDO.class).eq(ColumnMappingDO::getTableName, tableName));
if (CollUtil.isEmpty(columnMappingList)) {
public List<FieldConfigDO> listFieldConfig(String tableName, Boolean requireSync) {
List<FieldConfigDO> fieldConfigList = fieldConfigMapper.selectListByTableName(tableName);
if (CollUtil.isEmpty(fieldConfigList)) {
Collection<Column> columnList = MetaUtils.getColumns(dataSource, tableName);
return columnList.stream().map(ColumnMappingDO::new).collect(Collectors.toList());
return columnList.stream().map(FieldConfigDO::new).collect(Collectors.toList());
}

// 同步最新数据表列信息
if (requireSync) {
Collection<Column> columnList = MetaUtils.getColumns(dataSource, tableName);
// 移除已不存在的列映射信息
// 移除已不存在的字段配置
List<String> columnNameList = columnList.stream().map(Column::getName).collect(Collectors.toList());
columnMappingList.removeIf(column -> !columnNameList.contains(column.getColumnName()));
// 新增或更新列映射信息
Map<String, ColumnMappingDO> columnMappingMap = columnMappingList.stream()
.collect(Collectors.toMap(ColumnMappingDO::getColumnName, Function.identity(), (key1, key2) -> key2));
fieldConfigList.removeIf(column -> !columnNameList.contains(column.getColumnName()));
// 新增或更新字段配置
Map<String, FieldConfigDO> fieldConfigMap = fieldConfigList.stream()
.collect(Collectors.toMap(FieldConfigDO::getColumnName, Function.identity(), (key1, key2) -> key2));
for (Column column : columnList) {
ColumnMappingDO columnMapping = columnMappingMap.get(column.getName());
if (null != columnMapping) {
// 更新已有列映射信息
FieldConfigDO fieldConfig = fieldConfigMap.get(column.getName());
if (null != fieldConfig) {
// 更新已有字段配置
String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0].toLowerCase();
columnMapping.setColumnType(columnType).setComment(column.getComment());
fieldConfig.setColumnType(columnType).setComment(column.getComment());
} else {
// 新增列映射信息
columnMapping = new ColumnMappingDO(column);
columnMappingList.add(columnMapping);
// 新增字段配置
fieldConfig = new FieldConfigDO(column);
fieldConfigList.add(fieldConfig);
}
}
}
return columnMappingList;
return fieldConfigList;
}

@Override
@Transactional(rollbackFor = Exception.class)
public void saveConfig(GenConfigRequest request, String tableName) {
// 保存列映射信息
columnMappingMapper
.delete(Wrappers.lambdaQuery(ColumnMappingDO.class).eq(ColumnMappingDO::getTableName, tableName));
List<ColumnMappingDO> columnMappingList = request.getColumnMappings();
for (ColumnMappingDO columnMapping : columnMappingList) {
if (columnMapping.getShowInForm()) {
CheckUtils.throwIfNull(columnMapping.getFormType(), "字段 [{}] 的表单类型不能为空", columnMapping.getFieldName());
// 保存字段配置
fieldConfigMapper.delete(Wrappers.lambdaQuery(FieldConfigDO.class).eq(FieldConfigDO::getTableName, tableName));
List<FieldConfigDO> fieldConfigList = request.getFieldConfigs();
for (FieldConfigDO fieldConfig : fieldConfigList) {
if (fieldConfig.getShowInForm()) {
CheckUtils.throwIfNull(fieldConfig.getFormType(), "字段 [{}] 的表单类型不能为空", fieldConfig.getFieldName());
} else {
// 在表单中不显示,不需要设置必填
columnMapping.setIsRequired(false);
fieldConfig.setIsRequired(false);
}
if (columnMapping.getShowInQuery()) {
CheckUtils.throwIfNull(columnMapping.getFormType(), "字段 [{}] 的表单类型不能为空", columnMapping.getFieldName());
CheckUtils.throwIfNull(columnMapping.getQueryType(), "字段 [{}] 的查询方式不能为空", columnMapping.getFieldName());
if (fieldConfig.getShowInQuery()) {
CheckUtils.throwIfNull(fieldConfig.getFormType(), "字段 [{}] 的表单类型不能为空", fieldConfig.getFieldName());
CheckUtils.throwIfNull(fieldConfig.getQueryType(), "字段 [{}] 的查询方式不能为空", fieldConfig.getFieldName());
} else {
// 在查询中不显示,不需要设置查询方式
columnMapping.setQueryType(null);
fieldConfig.setQueryType(null);
}
// 既不在表单也不在查询中显示,不需要设置表单类型
if (!columnMapping.getShowInForm() && !columnMapping.getShowInQuery()) {
columnMapping.setFormType(null);
if (!fieldConfig.getShowInForm() && !fieldConfig.getShowInQuery()) {
fieldConfig.setFormType(null);
}
columnMapping.setTableName(tableName);
fieldConfig.setTableName(tableName);
}
columnMappingMapper.insertBatch(columnMappingList);
fieldConfigMapper.insertBatch(fieldConfigList);

// 保存或更新生成配置信息
GenConfigDO newGenConfig = request.getGenConfig();
Expand Down
12 changes: 6 additions & 6 deletions continew-admin-ui/src/api/tool/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export function listTable(params: TableParam) {
});
}

export interface ColumnMappingRecord {
export interface FieldConfigRecord {
tableName: string;
columnName: string;
columnType: string;
Expand All @@ -45,8 +45,8 @@ export interface ColumnMappingRecord {
createTime?: string;
}

export function listColumnMapping(tableName: string, requireSync: boolean) {
return axios.get<ColumnMappingRecord[]>(`${BASE_URL}/column/${tableName}?requireSync=${requireSync}`);
export function listFieldConfig(tableName: string, requireSync: boolean) {
return axios.get<FieldConfigRecord[]>(`${BASE_URL}/field/${tableName}?requireSync=${requireSync}`);
}

export interface GenConfigRecord {
Expand All @@ -63,14 +63,14 @@ export interface GenConfigRecord {
}

export function getGenConfig(tableName: string) {
return axios.get<GenConfigRecord>(`${BASE_URL}/table/${tableName}`);
return axios.get<GenConfigRecord>(`${BASE_URL}/config/${tableName}`);
}

export interface GeneratorConfigRecord {
genConfig: GenConfigRecord;
columnMappings: ColumnMappingRecord[];
fieldConfigs: FieldConfigRecord[];
}

export function saveConfig(tableName: string, req: GeneratorConfigRecord) {
return axios.post(`${BASE_URL}/table/${tableName}`, req);
return axios.post(`${BASE_URL}/config/${tableName}`, req);
}
Loading

0 comments on commit 2d0e1f4

Please sign in to comment.