diff --git a/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/model/entity/ColumnMappingDO.java b/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/model/entity/ColumnMappingDO.java index 9fa573a8..747089af 100644 --- a/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/model/entity/ColumnMappingDO.java +++ b/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/model/entity/ColumnMappingDO.java @@ -23,6 +23,7 @@ import javax.validation.constraints.NotBlank; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.NonNull; import lombok.experimental.Accessors; import io.swagger.v3.oas.annotations.media.Schema; @@ -32,9 +33,11 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import cn.hutool.core.util.StrUtil; +import cn.hutool.db.meta.Column; import cn.hutool.setting.dialect.Props; import cn.hutool.setting.dialect.PropsUtil; +import top.charles7c.cnadmin.common.constant.StringConsts; import top.charles7c.cnadmin.common.enums.QueryTypeEnum; import top.charles7c.cnadmin.tool.enums.FormTypeEnum; @@ -137,8 +140,14 @@ public class ColumnMappingDO implements Serializable { @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; - public ColumnMappingDO(String tableName) { - this.tableName = tableName; + public ColumnMappingDO(@NonNull Column column) { + String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0].toLowerCase(); + boolean isRequired = !column.isPk() && !column.isNullable(); + this.tableName = column.getTableName(); + this.setColumnName(column.getName()).setColumnType(columnType).setComment(column.getComment()) + .setIsRequired(isRequired).setShowInList(true).setShowInForm(isRequired).setShowInQuery(isRequired) + .setFormType(FormTypeEnum.TEXT); + this.setQueryType("String".equals(this.getFieldType()) ? QueryTypeEnum.INNER_LIKE : QueryTypeEnum.EQUAL); } public ColumnMappingDO setColumnName(String columnName) { diff --git a/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/GeneratorService.java b/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/GeneratorService.java index b1ff8592..2aba94b7 100644 --- a/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/GeneratorService.java +++ b/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/GeneratorService.java @@ -64,9 +64,11 @@ public interface GeneratorService { * * @param tableName * 表名称 + * @param requireSync + * 是否需要同步 * @return 列映射信息列表 */ - List listColumnMapping(String tableName); + List listColumnMapping(String tableName, Boolean requireSync); /** * 保存代码生成配置信息 diff --git a/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/impl/GeneratorServiceImpl.java b/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/impl/GeneratorServiceImpl.java index 5a0fc1d9..d2ccfe10 100644 --- a/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/impl/GeneratorServiceImpl.java +++ b/continew-admin-tool/src/main/java/top/charles7c/cnadmin/tool/service/impl/GeneratorServiceImpl.java @@ -17,9 +17,11 @@ package top.charles7c.cnadmin.tool.service.impl; import java.sql.SQLException; -import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.sql.DataSource; @@ -38,12 +40,10 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.db.meta.Column; import top.charles7c.cnadmin.common.constant.StringConsts; -import top.charles7c.cnadmin.common.enums.QueryTypeEnum; import top.charles7c.cnadmin.common.model.query.PageQuery; 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.enums.FormTypeEnum; import top.charles7c.cnadmin.tool.mapper.ColumnMappingMapper; import top.charles7c.cnadmin.tool.mapper.GenConfigMapper; import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO; @@ -113,22 +113,34 @@ public class GeneratorServiceImpl implements GeneratorService { } @Override - public List listColumnMapping(String tableName) { + public List listColumnMapping(String tableName, Boolean requireSync) { List columnMappingList = columnMappingMapper .selectList(Wrappers.lambdaQuery(ColumnMappingDO.class).eq(ColumnMappingDO::getTableName, tableName)); if (CollUtil.isEmpty(columnMappingList)) { Collection columnList = MetaUtils.getColumns(dataSource, tableName); - columnMappingList = new ArrayList<>(columnList.size()); + return columnList.stream().map(ColumnMappingDO::new).collect(Collectors.toList()); + } + + // 同步最新数据表列信息 + if (requireSync) { + Collection columnList = MetaUtils.getColumns(dataSource, tableName); + // 移除已不存在的列映射信息 + List columnNameList = columnList.stream().map(Column::getName).collect(Collectors.toList()); + columnMappingList.removeIf(column -> !columnNameList.contains(column.getColumnName())); + // 新增或更新列映射信息 + Map columnMappingMap = columnMappingList.stream() + .collect(Collectors.toMap(ColumnMappingDO::getColumnName, Function.identity(), (key1, key2) -> key2)); for (Column column : columnList) { - String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0]; - boolean isRequired = !column.isPk() && !column.isNullable(); - ColumnMappingDO columnMapping = new ColumnMappingDO(tableName).setColumnName(column.getName()) - .setColumnType(columnType.toLowerCase()).setComment(column.getComment()).setIsRequired(isRequired) - .setShowInList(true).setShowInForm(isRequired).setShowInQuery(isRequired) - .setFormType(FormTypeEnum.TEXT); - columnMapping.setQueryType( - "String".equals(columnMapping.getFieldType()) ? QueryTypeEnum.INNER_LIKE : QueryTypeEnum.EQUAL); - columnMappingList.add(columnMapping); + ColumnMappingDO columnMapping = columnMappingMap.get(column.getName()); + if (null != columnMapping) { + // 更新已有列映射信息 + String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0].toLowerCase(); + columnMapping.setColumnType(columnType).setComment(column.getComment()); + } else { + // 新增列映射信息 + columnMapping = new ColumnMappingDO(column); + columnMappingList.add(columnMapping); + } } } return columnMappingList; diff --git a/continew-admin-ui/src/api/tool/generator.ts b/continew-admin-ui/src/api/tool/generator.ts index 2852582e..09c8eeac 100644 --- a/continew-admin-ui/src/api/tool/generator.ts +++ b/continew-admin-ui/src/api/tool/generator.ts @@ -42,12 +42,11 @@ export interface ColumnMappingRecord { showInQuery: boolean; formType: string; queryType: string; - createTime: string; - updateTime: string; + createTime?: string; } -export function listColumnMapping(tableName: string) { - return axios.get(`${BASE_URL}/column/${tableName}`); +export function listColumnMapping(tableName: string, requireSync: boolean) { + return axios.get(`${BASE_URL}/column/${tableName}?requireSync=${requireSync}`); } export interface GenConfigRecord { @@ -59,8 +58,8 @@ export interface GenConfigRecord { author: string; tablePrefix: string; isOverride: boolean; - createTime: string; - updateTime: string; + createTime?: string; + updateTime?: string; } export function getGenConfig(tableName: string) { diff --git a/continew-admin-ui/src/views/tool/generator/index.vue b/continew-admin-ui/src/views/tool/generator/index.vue index 4052ff05..2ae528c7 100644 --- a/continew-admin-ui/src/views/tool/generator/index.vue +++ b/continew-admin-ui/src/views/tool/generator/index.vue @@ -126,17 +126,26 @@ > { + form.value = res.data; + form.value.isOverride = false; + }); + }; + + /** + * 同步 + * + * @param tableName 表名称 + */ + const handleRefresh = (tableName: string) => { + getColumnMappingList(tableName, true); + }; + + /** + * 查询列映射信息 + * + * @param tableName 表名称 + * @param requireSync 是否需要同步 + */ + const getColumnMappingList = (tableName: string, requireSync: boolean) => { // 查询列映射信息 columnMappingLoading.value = true; - listColumnMapping(tableName) + listColumnMapping(tableName, requireSync) .then((res) => { columnMappingList.value = res.data; }) .finally(() => { columnMappingLoading.value = false; }); - // 查询生成配置 - getGenConfig(tableName).then((res) => { - form.value = res.data; - form.value.isOverride = false; - }); }; /** diff --git a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/tool/GeneratorController.java b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/tool/GeneratorController.java index cb4b4324..c2e9e97e 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/tool/GeneratorController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/tool/GeneratorController.java @@ -66,8 +66,9 @@ public class GeneratorController { @Operation(summary = "查询列映射信息列表", description = "查询列映射信息列表") @GetMapping("/column/{tableName}") - public R> listColumnMapping(@PathVariable String tableName) { - return R.ok(generatorService.listColumnMapping(tableName)); + public R> listColumnMapping(@PathVariable String tableName, + @RequestParam(required = false, defaultValue = "false") Boolean requireSync) { + return R.ok(generatorService.listColumnMapping(tableName, requireSync)); } @Operation(summary = "保存配置信息", description = "保存配置信息") diff --git a/continew-admin-webapi/src/main/resources/db/changelog/v1.1.0/continew-admin_table.sql b/continew-admin-webapi/src/main/resources/db/changelog/v1.1.0/continew-admin_table.sql index 832f1a56..555b07c3 100644 --- a/continew-admin-webapi/src/main/resources/db/changelog/v1.1.0/continew-admin_table.sql +++ b/continew-admin-webapi/src/main/resources/db/changelog/v1.1.0/continew-admin_table.sql @@ -2,9 +2,9 @@ -- changeset Charles7c:1 CREATE TABLE IF NOT EXISTS `gen_config` ( - `table_name` varchar(100) COMMENT '表名称', - `module_name` varchar(50) NOT NULL COMMENT '模块名称', - `package_name` varchar(50) NOT NULL COMMENT '包名称', + `table_name` varchar(64) COMMENT '表名称', + `module_name` varchar(60) NOT NULL COMMENT '模块名称', + `package_name` varchar(60) NOT NULL COMMENT '包名称', `frontend_path` varchar(255) DEFAULT NULL COMMENT '前端路径', `business_name` varchar(50) NOT NULL COMMENT '业务名称', `author` varchar(100) NOT NULL COMMENT '作者', @@ -16,10 +16,10 @@ CREATE TABLE IF NOT EXISTS `gen_config` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生成配置表'; CREATE TABLE IF NOT EXISTS `gen_column_mapping` ( - `table_name` varchar(100) NOT NULL COMMENT '表名称', - `column_name` varchar(50) NOT NULL COMMENT '列名称', + `table_name` varchar(64) NOT NULL COMMENT '表名称', + `column_name` varchar(64) NOT NULL COMMENT '列名称', `column_type` varchar(25) NOT NULL COMMENT '列类型', - `field_name` varchar(50) NOT NULL COMMENT '字段名称', + `field_name` varchar(64) NOT NULL COMMENT '字段名称', `field_type` varchar(25) NOT NULL COMMENT '字段类型', `comment` varchar(512) DEFAULT NULL COMMENT '注释', `is_required` bit(1) DEFAULT b'1' COMMENT '是否必填',