feat: 新增保存代码生成配置信息接口

This commit is contained in:
Charles7c 2023-08-08 23:59:57 +08:00
parent abae964970
commit 0fae13e779
11 changed files with 194 additions and 93 deletions

View File

@ -16,10 +16,6 @@
package top.charles7c.cnadmin.tool.mapper; package top.charles7c.cnadmin.tool.mapper;
import java.util.Date;
import org.apache.ibatis.annotations.Param;
import top.charles7c.cnadmin.common.base.BaseMapper; import top.charles7c.cnadmin.common.base.BaseMapper;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO; import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
@ -29,14 +25,4 @@ import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
* @author Charles7c * @author Charles7c
* @since 2023/4/12 23:56 * @since 2023/4/12 23:56
*/ */
public interface GenConfigMapper extends BaseMapper<GenConfigDO> { public interface GenConfigMapper extends BaseMapper<GenConfigDO> {}
/**
* 查询推荐作者名
*
* @param lessThanDate
* 截止时间
* @return 推荐作者名
*/
String selectRecommendAuthor(@Param("lessThanDate") Date lessThanDate);
}

View File

@ -19,14 +19,16 @@ package top.charles7c.cnadmin.tool.model.entity;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -44,47 +46,46 @@ import top.charles7c.cnadmin.tool.enums.FormTypeEnum;
*/ */
@Data @Data
@TableName("gen_column_mapping") @TableName("gen_column_mapping")
@NoArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
@Schema(description = "列映射信息") @Schema(description = "列映射信息")
public class ColumnMappingDO implements Serializable { public class ColumnMappingDO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId
@Schema(description = "ID")
private Long id;
/** /**
* 表名称 * 表名称
*/ */
@Schema(description = "表名称") @Schema(description = "表名称")
@NotBlank(message = "表名称不能为空")
private String tableName; private String tableName;
/** /**
* 列名称 * 列名称
*/ */
@Schema(description = "列名称") @Schema(description = "列名称")
@NotBlank(message = "列名称不能为空")
private String columnName; private String columnName;
/** /**
* 列类型 * 列类型
*/ */
@Schema(description = "列类型") @Schema(description = "列类型")
@NotBlank(message = "列类型不能为空")
private String columnType; private String columnType;
/** /**
* 字段名称 * 字段名称
*/ */
@Schema(description = "字段名称") @Schema(description = "字段名称")
@NotBlank(message = "字段名称不能为空")
private String fieldName; private String fieldName;
/** /**
* 字段类型 * 字段类型
*/ */
@Schema(description = "字段类型") @Schema(description = "字段类型")
@NotBlank(message = "字段类型不能为空")
private String fieldType; private String fieldType;
/** /**
@ -93,12 +94,6 @@ public class ColumnMappingDO implements Serializable {
@Schema(description = "注释") @Schema(description = "注释")
private String comment; private String comment;
/**
* 排序
*/
@Schema(description = "排序")
private Integer sort;
/** /**
* 是否必填 * 是否必填
*/ */
@ -142,12 +137,9 @@ public class ColumnMappingDO implements Serializable {
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime; private LocalDateTime createTime;
/** public ColumnMappingDO(String tableName) {
* 修改时间 this.tableName = tableName;
*/ }
@Schema(description = "修改时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
public ColumnMappingDO setColumnName(String columnName) { public ColumnMappingDO setColumnName(String columnName) {
this.columnName = columnName; this.columnName = columnName;

View File

@ -19,15 +19,16 @@ package top.charles7c.cnadmin.tool.model.entity;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/** /**
* 生成配置实体 * 生成配置实体
@ -37,35 +38,33 @@ import com.baomidou.mybatisplus.annotation.TableName;
*/ */
@Data @Data
@TableName("gen_config") @TableName("gen_config")
@NoArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
@Schema(description = "生成配置信息") @Schema(description = "生成配置信息")
public class GenConfigDO implements Serializable { public class GenConfigDO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId
@Schema(description = "ID")
private Long id;
/** /**
* 表名称 * 表名称
*/ */
@TableId(type = IdType.INPUT)
@Schema(description = "表名称") @Schema(description = "表名称")
@NotBlank(message = "表名称不能为空")
private String tableName; private String tableName;
/** /**
* 模块名称 * 模块名称
*/ */
@Schema(description = "模块名称") @Schema(description = "模块名称")
@NotBlank(message = "模块名称不能为空")
private String moduleName; private String moduleName;
/** /**
* 包名称 * 包名称
*/ */
@Schema(description = "包名称") @Schema(description = "包名称")
@NotBlank(message = "包名称不能为空")
private String packageName; private String packageName;
/** /**
@ -78,12 +77,14 @@ public class GenConfigDO implements Serializable {
* 业务名称 * 业务名称
*/ */
@Schema(description = "业务名称") @Schema(description = "业务名称")
@NotBlank(message = "业务名称不能为空")
private String businessName; private String businessName;
/** /**
* 作者 * 作者
*/ */
@Schema(description = "作者") @Schema(description = "作者")
@NotBlank(message = "作者名称不能为空")
private String author; private String author;
/** /**
@ -96,6 +97,7 @@ public class GenConfigDO implements Serializable {
* 是否覆盖 * 是否覆盖
*/ */
@Schema(description = "是否覆盖") @Schema(description = "是否覆盖")
@NotNull(message = "是否覆盖不能为空")
private Boolean isOverride; private Boolean isOverride;
/** /**
@ -111,4 +113,8 @@ public class GenConfigDO implements Serializable {
@Schema(description = "修改时间") @Schema(description = "修改时间")
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime; private LocalDateTime updateTime;
public GenConfigDO(String tableName) {
this.tableName = tableName;
}
} }

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.charles7c.cnadmin.tool.model.request;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
/**
* 代码生成配置信息
*
* @author Charles7c
* @since 2023/8/8 20:40
*/
@Data
@Schema(description = "代码生成配置信息")
public class GenConfigRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 列映射信息列表
*/
@Schema(description = "列映射信息列表")
private List<ColumnMappingDO> columnMappings = new ArrayList<>();
/**
* 生成配置信息
*/
@Schema(description = "生成配置信息")
private GenConfigDO genConfig;
}

View File

@ -24,6 +24,7 @@ import top.charles7c.cnadmin.common.model.vo.PageDataVO;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO; import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO; import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
import top.charles7c.cnadmin.tool.model.query.TableQuery; import top.charles7c.cnadmin.tool.model.query.TableQuery;
import top.charles7c.cnadmin.tool.model.request.GenConfigRequest;
import top.charles7c.cnadmin.tool.model.vo.TableVO; import top.charles7c.cnadmin.tool.model.vo.TableVO;
/** /**
@ -66,4 +67,14 @@ public interface GeneratorService {
* @return 列映射信息列表 * @return 列映射信息列表
*/ */
List<ColumnMappingDO> listColumnMapping(String tableName); List<ColumnMappingDO> listColumnMapping(String tableName);
/**
* 保存代码生成配置信息
*
* @param request
* 代码生成配置信息
* @param tableName
* 表名称
*/
void saveConfig(GenConfigRequest request, String tableName);
} }

View File

@ -27,12 +27,12 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.db.meta.Column; import cn.hutool.db.meta.Column;
@ -41,6 +41,7 @@ import top.charles7c.cnadmin.common.constant.StringConsts;
import top.charles7c.cnadmin.common.enums.QueryTypeEnum; import top.charles7c.cnadmin.common.enums.QueryTypeEnum;
import top.charles7c.cnadmin.common.model.query.PageQuery; import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageDataVO; 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.config.properties.GeneratorProperties;
import top.charles7c.cnadmin.tool.enums.FormTypeEnum; import top.charles7c.cnadmin.tool.enums.FormTypeEnum;
import top.charles7c.cnadmin.tool.mapper.ColumnMappingMapper; import top.charles7c.cnadmin.tool.mapper.ColumnMappingMapper;
@ -48,6 +49,7 @@ import top.charles7c.cnadmin.tool.mapper.GenConfigMapper;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO; import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO; import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
import top.charles7c.cnadmin.tool.model.query.TableQuery; import top.charles7c.cnadmin.tool.model.query.TableQuery;
import top.charles7c.cnadmin.tool.model.request.GenConfigRequest;
import top.charles7c.cnadmin.tool.model.vo.TableVO; import top.charles7c.cnadmin.tool.model.vo.TableVO;
import top.charles7c.cnadmin.tool.service.GeneratorService; import top.charles7c.cnadmin.tool.service.GeneratorService;
import top.charles7c.cnadmin.tool.util.MetaUtils; import top.charles7c.cnadmin.tool.util.MetaUtils;
@ -83,21 +85,25 @@ public class GeneratorServiceImpl implements GeneratorService {
@Override @Override
public GenConfigDO getGenConfig(String tableName) throws SQLException { public GenConfigDO getGenConfig(String tableName) throws SQLException {
GenConfigDO genConfig = GenConfigDO genConfig = genConfigMapper.selectById(tableName);
genConfigMapper.selectOne(Wrappers.lambdaQuery(GenConfigDO.class).eq(GenConfigDO::getTableName, tableName));
if (null == genConfig) { if (null == genConfig) {
genConfig = new GenConfigDO().setTableName(tableName); genConfig = new GenConfigDO(tableName);
// 默认包名当前包名
String packageName = ClassUtil.getPackage(GeneratorService.class); String packageName = ClassUtil.getPackage(GeneratorService.class);
genConfig.setPackageName(StrUtil.subBefore(packageName, StringConsts.DOT, true)); genConfig.setPackageName(StrUtil.subBefore(packageName, StringConsts.DOT, true));
// 默认业务名表注释
List<Table> tableList = MetaUtils.getTables(dataSource, tableName); List<Table> tableList = MetaUtils.getTables(dataSource, tableName);
if (CollUtil.isNotEmpty(tableList)) { if (CollUtil.isNotEmpty(tableList)) {
Table table = tableList.get(0); Table table = tableList.get(0);
genConfig.setBusinessName(StrUtil.replace(table.getComment(), "", StringConsts.EMPTY)); genConfig.setBusinessName(StrUtil.replace(table.getComment(), "", StringConsts.EMPTY));
} }
String recommendAuthor = genConfigMapper.selectRecommendAuthor(DateUtil.lastWeek().toJdkDate()); // 默认作者名称上次保存使用的作者名称
if (StrUtil.isNotBlank(recommendAuthor)) { GenConfigDO lastGenConfig = genConfigMapper.selectOne(
genConfig.setAuthor(recommendAuthor); Wrappers.lambdaQuery(GenConfigDO.class).orderByDesc(GenConfigDO::getCreateTime).last("LIMIT 1"));
if (null != lastGenConfig) {
genConfig.setAuthor(lastGenConfig.getAuthor());
} }
// 默认表前缀sys_user -> sys_
int underLineIndex = StrUtil.indexOf(tableName, StringConsts.C_UNDERLINE); int underLineIndex = StrUtil.indexOf(tableName, StringConsts.C_UNDERLINE);
if (-1 != underLineIndex) { if (-1 != underLineIndex) {
genConfig.setTablePrefix(StrUtil.subPre(tableName, underLineIndex + 1)); genConfig.setTablePrefix(StrUtil.subPre(tableName, underLineIndex + 1));
@ -116,10 +122,10 @@ public class GeneratorServiceImpl implements GeneratorService {
for (Column column : columnList) { for (Column column : columnList) {
String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0]; String columnType = StrUtil.splitToArray(column.getTypeName(), StringConsts.SPACE)[0];
boolean isRequired = !column.isPk() && !column.isNullable(); boolean isRequired = !column.isPk() && !column.isNullable();
ColumnMappingDO columnMapping = new ColumnMappingDO().setTableName(tableName) ColumnMappingDO columnMapping = new ColumnMappingDO(tableName).setColumnName(column.getName())
.setColumnName(column.getName()).setColumnType(columnType.toLowerCase()) .setColumnType(columnType.toLowerCase()).setComment(column.getComment()).setIsRequired(isRequired)
.setComment(column.getComment()).setIsRequired(isRequired).setShowInList(true) .setShowInList(true).setShowInForm(isRequired).setShowInQuery(isRequired)
.setShowInForm(isRequired).setShowInQuery(isRequired).setFormType(FormTypeEnum.TEXT); .setFormType(FormTypeEnum.TEXT);
columnMapping.setQueryType( columnMapping.setQueryType(
"String".equals(columnMapping.getFieldType()) ? QueryTypeEnum.INNER_LIKE : QueryTypeEnum.EQUAL); "String".equals(columnMapping.getFieldType()) ? QueryTypeEnum.INNER_LIKE : QueryTypeEnum.EQUAL);
columnMappingList.add(columnMapping); columnMappingList.add(columnMapping);
@ -127,4 +133,44 @@ public class GeneratorServiceImpl implements GeneratorService {
} }
return columnMappingList; return columnMappingList;
} }
@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());
} else {
// 在表单中不显示不需要设置必填
columnMapping.setIsRequired(false);
}
if (columnMapping.getShowInQuery()) {
CheckUtils.throwIfNull(columnMapping.getFormType(), "字段 [{}] 的表单类型不能为空", columnMapping.getFieldName());
CheckUtils.throwIfNull(columnMapping.getQueryType(), "字段 [{}] 的查询方式不能为空", columnMapping.getFieldName());
} else {
// 在查询中不显示不需要设置查询方式
columnMapping.setQueryType(null);
}
// 既不在表单也不在查询中显示不需要设置表单类型
if (!columnMapping.getShowInForm() && !columnMapping.getShowInQuery()) {
columnMapping.setFormType(null);
}
columnMapping.setTableName(tableName);
}
columnMappingMapper.insertBatch(columnMappingList);
// 保存或更新生成配置信息
GenConfigDO newGenConfig = request.getGenConfig();
GenConfigDO oldGenConfig = genConfigMapper.selectById(tableName);
if (null != oldGenConfig) {
BeanUtil.copyProperties(newGenConfig, oldGenConfig);
genConfigMapper.updateById(oldGenConfig);
} else {
genConfigMapper.insert(newGenConfig);
}
}
} }

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="top.charles7c.cnadmin.tool.mapper.GenConfigMapper">
<select id="selectRecommendAuthor" resultType="java.lang.String">
SELECT `author`
FROM `gen_config`
WHERE #{lessThanDate} > `create_time`
GROUP BY `author`
ORDER BY COUNT(*) DESC
LIMIT 1
</select>
</mapper>

View File

@ -30,14 +30,12 @@ export function listTable(params: TableParam) {
} }
export interface ColumnMappingRecord { export interface ColumnMappingRecord {
id: string;
tableName: string; tableName: string;
columnName: string; columnName: string;
columnType: string; columnType: string;
fieldName: string; fieldName: string;
fieldType: string; fieldType: string;
comment: string; comment: string;
sort: number;
isRequired: boolean; isRequired: boolean;
showInList: boolean; showInList: boolean;
showInForm: boolean; showInForm: boolean;
@ -53,7 +51,6 @@ export function listColumnMapping(tableName: string) {
} }
export interface GenConfigRecord { export interface GenConfigRecord {
id: string;
tableName: string; tableName: string;
moduleName: string; moduleName: string;
packageName: string; packageName: string;
@ -69,3 +66,12 @@ export interface GenConfigRecord {
export function getGenConfig(tableName: string) { export function getGenConfig(tableName: string) {
return axios.get<GenConfigRecord>(`${BASE_URL}/table/${tableName}`); return axios.get<GenConfigRecord>(`${BASE_URL}/table/${tableName}`);
} }
export interface GeneratorConfigRecord {
genConfig: GenConfigRecord;
columnMappings: ColumnMappingRecord[];
}
export function saveConfig(tableName: string, req: GeneratorConfigRecord) {
return axios.post(`${BASE_URL}/table/${tableName}`, req);
}

View File

@ -153,14 +153,14 @@
<a-table-column <a-table-column
title="名称" title="名称"
data-index="fieldName" data-index="fieldName"
:width="130" :width="125"
ellipsis ellipsis
tooltip tooltip
/> />
<a-table-column <a-table-column
title="类型" title="类型"
data-index="fieldType" data-index="fieldType"
:width="90" :width="95"
ellipsis ellipsis
tooltip tooltip
/> />
@ -303,6 +303,8 @@
listTable, listTable,
listColumnMapping, listColumnMapping,
getGenConfig, getGenConfig,
GeneratorConfigRecord,
saveConfig,
} from '@/api/tool/generator'; } from '@/api/tool/generator';
const { proxy } = getCurrentInstance() as any; const { proxy } = getCurrentInstance() as any;
@ -333,15 +335,16 @@
}, },
// //
form: {} as GenConfigRecord, form: {} as GenConfigRecord,
config: {} as GeneratorConfigRecord,
// //
rules: { rules: {
author: [{ required: true, message: '请输入作者名称' }], author: [{ required: true, message: '请输入作者名称' }],
moduleName: [{ required: true, message: '请输入模块名称' }], moduleName: [{ required: true, message: '请输入所属模块' }],
packageName: [{ required: true, message: '请输入包名' }], packageName: [{ required: true, message: '请输入模块包名' }],
businessName: [{ required: true, message: '请输入业务名称' }], businessName: [{ required: true, message: '请输入业务名称' }],
}, },
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules, config } = toRefs(data);
/** /**
* 查询列表 * 查询列表
@ -393,8 +396,17 @@
* 确定 * 确定
*/ */
const handleOk = () => { const handleOk = () => {
visible.value = false; proxy.$refs.formRef.validate((valid: any) => {
proxy.$message.info('功能尚在开发中'); if (!valid) {
config.value.columnMappings = columnMappingList.value;
config.value.genConfig = form.value;
saveConfig(form.value.tableName, config.value).then((res) => {
handleCancel();
getList();
proxy.$message.success(res.msg);
});
}
});
}; };
/** /**
@ -402,6 +414,8 @@
*/ */
const handleCancel = () => { const handleCancel = () => {
visible.value = false; visible.value = false;
proxy.$refs.formRef?.resetFields();
columnMappingList.value = [];
}; };
/** /**
@ -410,7 +424,7 @@
* @param tableName 表名称 * @param tableName 表名称
*/ */
const toGenerate = (tableName: string) => { const toGenerate = (tableName: string) => {
proxy.$message.info(tableName); proxy.$message.info('功能尚在开发中');
}; };
/** /**

View File

@ -25,10 +25,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.charles7c.cnadmin.common.model.query.PageQuery; import top.charles7c.cnadmin.common.model.query.PageQuery;
import top.charles7c.cnadmin.common.model.vo.PageDataVO; import top.charles7c.cnadmin.common.model.vo.PageDataVO;
@ -36,6 +33,7 @@ import top.charles7c.cnadmin.common.model.vo.R;
import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO; import top.charles7c.cnadmin.tool.model.entity.ColumnMappingDO;
import top.charles7c.cnadmin.tool.model.entity.GenConfigDO; import top.charles7c.cnadmin.tool.model.entity.GenConfigDO;
import top.charles7c.cnadmin.tool.model.query.TableQuery; import top.charles7c.cnadmin.tool.model.query.TableQuery;
import top.charles7c.cnadmin.tool.model.request.GenConfigRequest;
import top.charles7c.cnadmin.tool.model.vo.TableVO; import top.charles7c.cnadmin.tool.model.vo.TableVO;
import top.charles7c.cnadmin.tool.service.GeneratorService; import top.charles7c.cnadmin.tool.service.GeneratorService;
@ -71,4 +69,11 @@ public class GeneratorController {
public R<List<ColumnMappingDO>> listColumnMapping(@PathVariable String tableName) { public R<List<ColumnMappingDO>> listColumnMapping(@PathVariable String tableName) {
return R.ok(generatorService.listColumnMapping(tableName)); return R.ok(generatorService.listColumnMapping(tableName));
} }
@Operation(summary = "保存配置信息", description = "保存配置信息")
@PostMapping("/table/{tableName}")
public R saveConfig(@Validated @RequestBody GenConfigRequest request, @PathVariable String tableName) {
generatorService.saveConfig(request, tableName);
return R.ok("保存成功");
}
} }

View File

@ -2,30 +2,26 @@
-- changeset Charles7c:1 -- changeset Charles7c:1
CREATE TABLE IF NOT EXISTS `gen_config` ( CREATE TABLE IF NOT EXISTS `gen_config` (
`id` bigint(20) UNSIGNED AUTO_INCREMENT COMMENT 'ID', `table_name` varchar(100) COMMENT '表名称',
`table_name` varchar(100) NOT NULL COMMENT '表名称',
`module_name` varchar(50) NOT NULL COMMENT '模块名称', `module_name` varchar(50) NOT NULL COMMENT '模块名称',
`package_name` varchar(50) NOT NULL COMMENT '包名称', `package_name` varchar(50) NOT NULL COMMENT '包名称',
`frontend_path` varchar(255) NOT NULL COMMENT '前端路径', `frontend_path` varchar(255) DEFAULT NULL COMMENT '前端路径',
`business_name` varchar(50) NOT NULL COMMENT '业务名称', `business_name` varchar(50) NOT NULL COMMENT '业务名称',
`author` varchar(100) NOT NULL COMMENT '作者', `author` varchar(100) NOT NULL COMMENT '作者',
`table_prefix` varchar(20) DEFAULT NULL COMMENT '表前缀', `table_prefix` varchar(20) DEFAULT NULL COMMENT '表前缀',
`is_override` bit(1) DEFAULT b'0' COMMENT '是否覆盖', `is_override` bit(1) DEFAULT b'0' COMMENT '是否覆盖',
`create_time` datetime NOT NULL COMMENT '创建时间', `create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间', `update_time` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`table_name`) USING BTREE
UNIQUE INDEX `uk_table_name`(`table_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生成配置表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生成配置表';
CREATE TABLE IF NOT EXISTS `gen_column_mapping` ( CREATE TABLE IF NOT EXISTS `gen_column_mapping` (
`id` bigint(20) UNSIGNED AUTO_INCREMENT COMMENT 'ID',
`table_name` varchar(100) NOT NULL COMMENT '表名称', `table_name` varchar(100) NOT NULL COMMENT '表名称',
`column_name` varchar(50) NOT NULL COMMENT '列名称', `column_name` varchar(50) NOT NULL COMMENT '列名称',
`column_type` varchar(25) NOT NULL COMMENT '列类型', `column_type` varchar(25) NOT NULL COMMENT '列类型',
`field_name` varchar(50) NOT NULL COMMENT '字段名称', `field_name` varchar(50) NOT NULL COMMENT '字段名称',
`field_type` varchar(25) NOT NULL COMMENT '字段类型', `field_type` varchar(25) NOT NULL COMMENT '字段类型',
`comment` varchar(512) DEFAULT NULL COMMENT '注释', `comment` varchar(512) DEFAULT NULL COMMENT '注释',
`sort` int(11) UNSIGNED DEFAULT 999 COMMENT '排序',
`is_required` bit(1) DEFAULT b'1' COMMENT '是否必填', `is_required` bit(1) DEFAULT b'1' COMMENT '是否必填',
`show_in_list` bit(1) DEFAULT b'1' COMMENT '是否在列表中显示', `show_in_list` bit(1) DEFAULT b'1' COMMENT '是否在列表中显示',
`show_in_form` bit(1) DEFAULT b'1' COMMENT '是否在表单中显示', `show_in_form` bit(1) DEFAULT b'1' COMMENT '是否在表单中显示',
@ -33,7 +29,5 @@ CREATE TABLE IF NOT EXISTS `gen_column_mapping` (
`form_type` tinyint(1) UNSIGNED DEFAULT NULL COMMENT '表单类型', `form_type` tinyint(1) UNSIGNED DEFAULT NULL COMMENT '表单类型',
`query_type` tinyint(1) UNSIGNED DEFAULT NULL COMMENT '查询方式', `query_type` tinyint(1) UNSIGNED DEFAULT NULL COMMENT '查询方式',
`create_time` datetime NOT NULL COMMENT '创建时间', `create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_table_name`(`table_name`) USING BTREE INDEX `idx_table_name`(`table_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='列映射表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='列映射表';