mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-22 15:21:53 +08:00
代码生成:支持设置主子表的信息
This commit is contained in:
parent
a51e9645ef
commit
a75bb825d7
@ -42,6 +42,8 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode CODEGEN_SYNC_NONE_CHANGE = new ErrorCode(1_003_001_007, "同步失败,不存在改变");
|
ErrorCode CODEGEN_SYNC_NONE_CHANGE = new ErrorCode(1_003_001_007, "同步失败,不存在改变");
|
||||||
ErrorCode CODEGEN_TABLE_INFO_TABLE_COMMENT_IS_NULL = new ErrorCode(1_003_001_008, "数据库的表注释未填写");
|
ErrorCode CODEGEN_TABLE_INFO_TABLE_COMMENT_IS_NULL = new ErrorCode(1_003_001_008, "数据库的表注释未填写");
|
||||||
ErrorCode CODEGEN_TABLE_INFO_COLUMN_COMMENT_IS_NULL = new ErrorCode(1_003_001_009, "数据库的表字段({})注释未填写");
|
ErrorCode CODEGEN_TABLE_INFO_COLUMN_COMMENT_IS_NULL = new ErrorCode(1_003_001_009, "数据库的表字段({})注释未填写");
|
||||||
|
ErrorCode CODEGEN_MASTER_TABLE_NOT_EXISTS = new ErrorCode(1_003_001_010, "主表(id={})定义不存在,请检查");
|
||||||
|
ErrorCode CODEGEN_SUB_COLUMN_NOT_EXISTS = new ErrorCode(1_003_001_011, "子表的字段(id={})不存在,请检查");
|
||||||
|
|
||||||
// ========== 文件配置 1-001-006-000 ==========
|
// ========== 文件配置 1-001-006-000 ==========
|
||||||
ErrorCode FILE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_006_000, "文件配置不存在");
|
ErrorCode FILE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_006_000, "文件配置不存在");
|
||||||
|
@ -60,10 +60,19 @@ public class CodegenController {
|
|||||||
return success(codegenService.getDatabaseTableList(dataSourceConfigId, name, comment));
|
return success(codegenService.getDatabaseTableList(dataSourceConfigId, name, comment));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/table/list")
|
||||||
|
@Operation(summary = "获得表定义列表")
|
||||||
|
@Parameter(name = "dataSourceConfigId", description = "数据源配置的编号", required = true, example = "1")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:codegen:query')")
|
||||||
|
public CommonResult<List<CodegenTableRespVO>> getCodegenTableList(@RequestParam(value = "dataSourceConfigId") Long dataSourceConfigId) {
|
||||||
|
List<CodegenTableDO> list = codegenService.getCodegenTableList(dataSourceConfigId);
|
||||||
|
return success(CodegenConvert.INSTANCE.convertList05(list));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/table/page")
|
@GetMapping("/table/page")
|
||||||
@Operation(summary = "获得表定义分页")
|
@Operation(summary = "获得表定义分页")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:codegen:query')")
|
@PreAuthorize("@ss.hasPermission('infra:codegen:query')")
|
||||||
public CommonResult<PageResult<CodegenTableRespVO>> getCodeGenTablePage(@Valid CodegenTablePageReqVO pageReqVO) {
|
public CommonResult<PageResult<CodegenTableRespVO>> getCodegenTablePage(@Valid CodegenTablePageReqVO pageReqVO) {
|
||||||
PageResult<CodegenTableDO> pageResult = codegenService.getCodegenTablePage(pageReqVO);
|
PageResult<CodegenTableDO> pageResult = codegenService.getCodegenTablePage(pageReqVO);
|
||||||
return success(CodegenConvert.INSTANCE.convertPage(pageResult));
|
return success(CodegenConvert.INSTANCE.convertPage(pageResult));
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column.CodegenC
|
|||||||
import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableBaseVO;
|
import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableBaseVO;
|
||||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
||||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
|
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
@ -38,17 +39,18 @@ public class CodegenUpdateReqVO {
|
|||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@AssertTrue(message = "上级菜单不能为空,请前往 [修改生成配置 -> 生成信息] 界面,设置“上级菜单”字段")
|
@AssertTrue(message = "上级菜单不能为空,请前往 [修改生成配置 -> 生成信息] 界面,设置“上级菜单”字段")
|
||||||
|
@JsonIgnore
|
||||||
public boolean isParentMenuIdValid() {
|
public boolean isParentMenuIdValid() {
|
||||||
// 生成场景为管理后台时,必须设置上级菜单,不然生成的菜单 SQL 是无父级菜单的
|
// 生成场景为管理后台时,必须设置上级菜单,不然生成的菜单 SQL 是无父级菜单的
|
||||||
return ObjectUtil.notEqual(getScene(), CodegenSceneEnum.ADMIN.getScene())
|
return ObjectUtil.notEqual(getScene(), CodegenSceneEnum.ADMIN.getScene())
|
||||||
|| getParentMenuId() != null;
|
|| getParentMenuId() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 芋艿:这里有问题哈;
|
@AssertTrue(message = "关联的父表信息不全")
|
||||||
@AssertTrue(message = "关联的子表与字段不能为空")
|
@JsonIgnore
|
||||||
public boolean isSubValid() {
|
public boolean isSubValid() {
|
||||||
return ObjectUtil.notEqual(getTemplateType(), CodegenTemplateTypeEnum.SUB)
|
return ObjectUtil.notEqual(getTemplateType(), CodegenTemplateTypeEnum.SUB)
|
||||||
|| (getSubTableId() != null && getSubColumnId() != null);
|
|| (ObjectUtil.isAllNotEmpty(getMasterTableId(), getSubJoinColumnId(), getSubJoinMany()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -58,9 +58,11 @@ public class CodegenTableBaseVO {
|
|||||||
@Schema(description = "父菜单编号", example = "1024")
|
@Schema(description = "父菜单编号", example = "1024")
|
||||||
private Long parentMenuId;
|
private Long parentMenuId;
|
||||||
|
|
||||||
@Schema(description = "子表的表编号", example = "2048")
|
@Schema(description = "主表的编号", example = "2048")
|
||||||
private Long subTableId;
|
private Long masterTableId;
|
||||||
@Schema(description = "子表的关联字段编号", example = "4096")
|
@Schema(description = "子表关联主表的字段编号", example = "4096")
|
||||||
private Long subColumnId;
|
private Long subJoinColumnId;
|
||||||
|
@Schema(description = "主表与子表是否一对多", example = "4096")
|
||||||
|
private Boolean subJoinMany;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public interface CodegenConvert {
|
|||||||
|
|
||||||
// ========== CodegenTableDO 相关 ==========
|
// ========== CodegenTableDO 相关 ==========
|
||||||
|
|
||||||
// List<CodegenTableRespVO> convertList02(List<CodegenTableDO> list);
|
List<CodegenTableRespVO> convertList05(List<CodegenTableDO> list);
|
||||||
|
|
||||||
CodegenTableRespVO convert(CodegenTableDO bean);
|
CodegenTableRespVO convert(CodegenTableDO bean);
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
|
|||||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
||||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
|
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
|
||||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
|
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
|
||||||
@ -124,14 +123,12 @@ public class CodegenTableDO extends BaseDO {
|
|||||||
*
|
*
|
||||||
* 关联 {@link CodegenTableDO#getId()}
|
* 关联 {@link CodegenTableDO#getId()}
|
||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
|
||||||
private Long masterTableId;
|
private Long masterTableId;
|
||||||
/**
|
/**
|
||||||
* 【自己】子表关联主表的字段编号
|
* 【自己】子表关联主表的字段编号
|
||||||
*
|
*
|
||||||
* 关联 {@link CodegenColumnDO#getId()}
|
* 关联 {@link CodegenColumnDO#getId()}
|
||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
|
||||||
private Long subJoinColumnId;
|
private Long subJoinColumnId;
|
||||||
/**
|
/**
|
||||||
* 主表与子表是否一对多
|
* 主表与子表是否一对多
|
||||||
@ -139,7 +136,6 @@ public class CodegenTableDO extends BaseDO {
|
|||||||
* true:一对多
|
* true:一对多
|
||||||
* false:一对一
|
* false:一对一
|
||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
|
||||||
private Boolean subJoinMany;
|
private Boolean subJoinMany;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.infra.enums.codegen;
|
package cn.iocoder.yudao.module.infra.enums.codegen;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -26,4 +27,15 @@ public enum CodegenTemplateTypeEnum {
|
|||||||
*/
|
*/
|
||||||
private final Integer type;
|
private final Integer type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为主表
|
||||||
|
*
|
||||||
|
* @param type 类型
|
||||||
|
* @return 是否主表
|
||||||
|
*/
|
||||||
|
public static boolean isMaster(Integer type) {
|
||||||
|
return ObjectUtils.equalsAny(type,
|
||||||
|
MASTER_NORMAL.type, MASTER_ERP.type, MASTER_INNER.type);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,14 @@ public interface CodegenService {
|
|||||||
*/
|
*/
|
||||||
void deleteCodegen(Long tableId);
|
void deleteCodegen(Long tableId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得表定义列表
|
||||||
|
*
|
||||||
|
* @param dataSourceConfigId 数据源配置的编号
|
||||||
|
* @return 表定义列表
|
||||||
|
*/
|
||||||
|
List<CodegenTableDO> getCodegenTableList(Long dataSourceConfigId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得表定义分页
|
* 获得表定义分页
|
||||||
*
|
*
|
||||||
|
@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
|
|||||||
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper;
|
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenColumnMapper;
|
||||||
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper;
|
import cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper;
|
||||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
||||||
|
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
|
||||||
import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
|
import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
|
||||||
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder;
|
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenBuilder;
|
||||||
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine;
|
import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenEngine;
|
||||||
@ -25,10 +26,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.BiPredicate;
|
import java.util.function.BiPredicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -129,6 +127,16 @@ public class CodegenServiceImpl implements CodegenService {
|
|||||||
if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) {
|
if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) {
|
||||||
throw exception(CODEGEN_TABLE_NOT_EXISTS);
|
throw exception(CODEGEN_TABLE_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
// 校验主表字段存在
|
||||||
|
if (Objects.equals(updateReqVO.getTable().getTemplateType(), CodegenTemplateTypeEnum.SUB.getType())) {
|
||||||
|
if (codegenTableMapper.selectById(updateReqVO.getTable().getMasterTableId()) == null) {
|
||||||
|
throw exception(CODEGEN_MASTER_TABLE_NOT_EXISTS, updateReqVO.getTable().getMasterTableId());
|
||||||
|
}
|
||||||
|
if (CollUtil.findOne(updateReqVO.getColumns(), // 关联主表的字段不存在
|
||||||
|
column -> column.getId().equals(updateReqVO.getTable().getSubJoinColumnId())) == null) {
|
||||||
|
throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, updateReqVO.getTable().getSubJoinColumnId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 更新 table 表定义
|
// 更新 table 表定义
|
||||||
CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable());
|
CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable());
|
||||||
@ -208,6 +216,11 @@ public class CodegenServiceImpl implements CodegenService {
|
|||||||
codegenColumnMapper.deleteListByTableId(tableId);
|
codegenColumnMapper.deleteListByTableId(tableId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CodegenTableDO> getCodegenTableList(Long dataSourceConfigId) {
|
||||||
|
return codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<CodegenTableDO> getCodegenTablePage(CodegenTablePageReqVO pageReqVO) {
|
public PageResult<CodegenTableDO> getCodegenTablePage(CodegenTablePageReqVO pageReqVO) {
|
||||||
return codegenTableMapper.selectPage(pageReqVO);
|
return codegenTableMapper.selectPage(pageReqVO);
|
||||||
@ -235,23 +248,22 @@ public class CodegenServiceImpl implements CodegenService {
|
|||||||
throw exception(CODEGEN_COLUMN_NOT_EXISTS);
|
throw exception(CODEGEN_COLUMN_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 校验子表是否已经存在
|
// 如果是主子表,则加载对应的子表信息
|
||||||
CodegenTableDO subTable = null;
|
List<CodegenTableDO> subTables = null;
|
||||||
List<CodegenColumnDO> subColumns = null;
|
List<List<CodegenColumnDO>> subColumnsList = null;
|
||||||
if (table.getMasterTableId() != null) {
|
if (CodegenTemplateTypeEnum.isMaster(table.getTemplateType())) {
|
||||||
|
subTables = codegenTableMapper.selectListByMasterTableId(tableId);
|
||||||
subTable = codegenTableMapper.selectById(table.getMasterTableId());
|
subTable = codegenTableMapper.selectById(table.getMasterTableId());
|
||||||
subColumns = codegenColumnMapper.selectListByTableId(table.getMasterTableId());
|
subColumns = codegenColumnMapper.selectListByTableId(table.getMasterTableId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 执行生成
|
// 执行生成
|
||||||
// return codegenEngine.execute(table, columns, subTable, subColumns);
|
return codegenEngine.execute(table, columns, subTable, subColumns);
|
||||||
return codegenEngine.execute(table, columns, null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DatabaseTableRespVO> getDatabaseTableList(Long dataSourceConfigId, String name, String comment) {
|
public List<DatabaseTableRespVO> getDatabaseTableList(Long dataSourceConfigId, String name, String comment) {
|
||||||
List<TableInfo> tables = databaseTableService.getTableList(dataSourceConfigId, name, comment);
|
List<TableInfo> tables = databaseTableService.getTableList(dataSourceConfigId, name, comment);
|
||||||
// 移除已经生成的表
|
|
||||||
// 移除在 Codegen 中,已经存在的
|
// 移除在 Codegen 中,已经存在的
|
||||||
Set<String> existsTables = CollectionUtils.convertSet(
|
Set<String> existsTables = CollectionUtils.convertSet(
|
||||||
codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId), CodegenTableDO::getTableName);
|
codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId), CodegenTableDO::getTableName);
|
||||||
|
Loading…
Reference in New Issue
Block a user