mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-11-03 22:57:14 +08:00 
			
		
		
		
	feat(generator): 代码生成同步最新数据表结构支持同步排序
This commit is contained in:
		@@ -37,6 +37,6 @@ public interface FieldConfigMapper extends BaseMapper<FieldConfigDO> {
 | 
			
		||||
     * @param tableName 表名称
 | 
			
		||||
     * @return 字段配置信息
 | 
			
		||||
     */
 | 
			
		||||
    @Select("SELECT * FROM gen_field_config WHERE table_name = #{tableName}")
 | 
			
		||||
    @Select("SELECT * FROM gen_field_config WHERE table_name = #{tableName} ORDER BY field_sort ASC")
 | 
			
		||||
    List<FieldConfigDO> selectListByTableName(@Param("tableName") String tableName);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.TableName;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import jakarta.validation.constraints.NotBlank;
 | 
			
		||||
import jakarta.validation.constraints.NotNull;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.NonNull;
 | 
			
		||||
@@ -93,6 +94,13 @@ public class FieldConfigDO implements Serializable {
 | 
			
		||||
    @NotBlank(message = "字段类型不能为空")
 | 
			
		||||
    private String fieldType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 字段排序
 | 
			
		||||
     */
 | 
			
		||||
    @Schema(description = "字段排序", example = "字段排序")
 | 
			
		||||
    @NotNull(message = "字段排序不能为空")
 | 
			
		||||
    private Integer fieldSort;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注释
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -130,36 +130,29 @@ public class GeneratorServiceImpl implements GeneratorService {
 | 
			
		||||
    @Override
 | 
			
		||||
    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(FieldConfigDO::new).toList();
 | 
			
		||||
        if (CollUtil.isNotEmpty(fieldConfigList) && Boolean.FALSE.equals(requireSync)) {
 | 
			
		||||
            return fieldConfigList;
 | 
			
		||||
        }
 | 
			
		||||
        // 同步最新数据表列信息
 | 
			
		||||
        if (Boolean.TRUE.equals(requireSync)) {
 | 
			
		||||
            Collection<Column> columnList = MetaUtils.getColumns(dataSource, tableName);
 | 
			
		||||
            // 移除已不存在的字段配置
 | 
			
		||||
            List<String> columnNameList = columnList.stream().map(Column::getName).toList();
 | 
			
		||||
            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) {
 | 
			
		||||
                FieldConfigDO fieldConfig = fieldConfigMap.get(column.getName());
 | 
			
		||||
                if (null != fieldConfig) {
 | 
			
		||||
                    // 更新已有字段配置
 | 
			
		||||
                    String columnType = StrUtil.splitToArray(column.getTypeName(), StringConstants.SPACE)[0]
 | 
			
		||||
                        .toLowerCase();
 | 
			
		||||
                    fieldConfig.setColumnType(columnType);
 | 
			
		||||
                    fieldConfig.setColumnSize(Convert.toStr(column.getSize()));
 | 
			
		||||
                    fieldConfig.setComment(column.getComment());
 | 
			
		||||
                } else {
 | 
			
		||||
                    // 新增字段配置
 | 
			
		||||
                    fieldConfig = new FieldConfigDO(column);
 | 
			
		||||
                    fieldConfigList.add(fieldConfig);
 | 
			
		||||
                }
 | 
			
		||||
        List<FieldConfigDO> latestFieldConfigList = new ArrayList<>();
 | 
			
		||||
        // 获取最新数据表列信息
 | 
			
		||||
        Collection<Column> columnList = MetaUtils.getColumns(dataSource, tableName);
 | 
			
		||||
        // 新增或更新字段配置
 | 
			
		||||
        Map<String, FieldConfigDO> fieldConfigMap = fieldConfigList.stream()
 | 
			
		||||
            .collect(Collectors.toMap(FieldConfigDO::getColumnName, Function.identity(), (key1, key2) -> key2));
 | 
			
		||||
        int i = 1;
 | 
			
		||||
        for (Column column : columnList) {
 | 
			
		||||
            FieldConfigDO fieldConfig = Optional.ofNullable(fieldConfigMap.get(column.getName()))
 | 
			
		||||
                .orElseGet(() -> new FieldConfigDO(column));
 | 
			
		||||
            fieldConfig.setFieldSort(i++);
 | 
			
		||||
            // 更新已有字段配置
 | 
			
		||||
            if (null != fieldConfig.getCreateTime()) {
 | 
			
		||||
                String columnType = StrUtil.splitToArray(column.getTypeName(), StringConstants.SPACE)[0].toLowerCase();
 | 
			
		||||
                fieldConfig.setColumnType(columnType);
 | 
			
		||||
                fieldConfig.setColumnSize(Convert.toStr(column.getSize()));
 | 
			
		||||
            }
 | 
			
		||||
            latestFieldConfigList.add(fieldConfig);
 | 
			
		||||
        }
 | 
			
		||||
        return fieldConfigList;
 | 
			
		||||
        return latestFieldConfigList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user