|
@@ -1,22 +1,24 @@
|
|
|
-package cn.iocoder.yudao.adminserver.modules.tool.service.codegen.impl;
|
|
|
+package cn.iocoder.yudao.module.tool.service.codegen;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.framework.codegen.config.CodegenProperties;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.convert.codegen.ToolCodegenConvert;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolCodegenColumnMapper;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolCodegenTableMapper;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolSchemaColumnMapper;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.dal.mysql.codegen.ToolSchemaTableMapper;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.enums.codegen.ToolCodegenImportTypeEnum;
|
|
|
-import cn.iocoder.yudao.adminserver.modules.tool.service.codegen.ToolCodegenService;
|
|
|
+import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties;
|
|
|
+import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO;
|
|
|
+import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO;
|
|
|
+import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenColumnMapper;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenTableMapper;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.mysql.codegen.SchemaColumnMapper;
|
|
|
+import cn.iocoder.yudao.module.tool.dal.mysql.codegen.SchemaTableMapper;
|
|
|
+import cn.iocoder.yudao.module.tool.enums.codegen.CodegenImportTypeEnum;
|
|
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
|
|
+import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenBuilder;
|
|
|
+import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenEngine;
|
|
|
+import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenSQLParser;
|
|
|
import org.apache.commons.collections4.KeyValue;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -29,7 +31,7 @@ import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
-import static cn.iocoder.yudao.adminserver.modules.tool.enums.ToolErrorCodeConstants.*;
|
|
|
+import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.*;
|
|
|
|
|
|
/**
|
|
|
* 代码生成 Service 实现类
|
|
@@ -37,27 +39,27 @@ import static cn.iocoder.yudao.adminserver.modules.tool.enums.ToolErrorCodeConst
|
|
|
* @author 芋道源码
|
|
|
*/
|
|
|
@Service
|
|
|
-public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
+public class CodegenServiceImpl implements CodegenService {
|
|
|
|
|
|
@Resource
|
|
|
- private ToolSchemaTableMapper schemaTableMapper;
|
|
|
+ private SchemaTableMapper schemaTableMapper;
|
|
|
@Resource
|
|
|
- private ToolSchemaColumnMapper schemaColumnMapper;
|
|
|
+ private SchemaColumnMapper schemaColumnMapper;
|
|
|
@Resource
|
|
|
- private ToolCodegenTableMapper codegenTableMapper;
|
|
|
+ private CodegenTableMapper codegenTableMapper;
|
|
|
@Resource
|
|
|
- private ToolCodegenColumnMapper codegenColumnMapper;
|
|
|
+ private CodegenColumnMapper codegenColumnMapper;
|
|
|
|
|
|
@Resource
|
|
|
- private ToolCodegenBuilder codegenBuilder;
|
|
|
+ private CodegenBuilder codegenBuilder;
|
|
|
@Resource
|
|
|
- private ToolCodegenEngine codegenEngine;
|
|
|
+ private CodegenEngine codegenEngine;
|
|
|
|
|
|
@Resource
|
|
|
private CodegenProperties codegenProperties;
|
|
|
|
|
|
- private Long createCodegen0(ToolCodegenImportTypeEnum importType,
|
|
|
- ToolSchemaTableDO schemaTable, List<ToolSchemaColumnDO> schemaColumns) {
|
|
|
+ private Long createCodegen0(CodegenImportTypeEnum importType,
|
|
|
+ SchemaTableDO schemaTable, List<SchemaColumnDO> schemaColumns) {
|
|
|
// 校验导入的表和字段非空
|
|
|
if (schemaTable == null) {
|
|
|
throw exception(CODEGEN_IMPORT_TABLE_NULL);
|
|
@@ -70,12 +72,12 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
throw exception(CODEGEN_TABLE_EXISTS);
|
|
|
}
|
|
|
|
|
|
- // 构建 ToolCodegenTableDO 对象,插入到 DB 中
|
|
|
- ToolCodegenTableDO table = codegenBuilder.buildTable(schemaTable);
|
|
|
+ // 构建 CodegenTableDO 对象,插入到 DB 中
|
|
|
+ CodegenTableDO table = codegenBuilder.buildTable(schemaTable);
|
|
|
table.setImportType(importType.getType());
|
|
|
codegenTableMapper.insert(table);
|
|
|
- // 构建 ToolCodegenColumnDO 数组,插入到 DB 中
|
|
|
- List<ToolCodegenColumnDO> columns = codegenBuilder.buildColumns(schemaColumns);
|
|
|
+ // 构建 CodegenColumnDO 数组,插入到 DB 中
|
|
|
+ List<CodegenColumnDO> columns = codegenBuilder.buildColumns(schemaColumns);
|
|
|
columns.forEach(column -> {
|
|
|
column.setTableId(table.getId());
|
|
|
codegenColumnMapper.insert(column); // TODO 批量插入
|
|
@@ -86,17 +88,17 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
@Override
|
|
|
public Long createCodegenListFromSQL(String sql) {
|
|
|
// 从 SQL 中,获得数据库表结构
|
|
|
- ToolSchemaTableDO schemaTable;
|
|
|
- List<ToolSchemaColumnDO> schemaColumns;
|
|
|
+ SchemaTableDO schemaTable;
|
|
|
+ List<SchemaColumnDO> schemaColumns;
|
|
|
try {
|
|
|
- KeyValue<ToolSchemaTableDO, List<ToolSchemaColumnDO>> result = ToolCodegenSQLParser.parse(sql);
|
|
|
+ KeyValue<SchemaTableDO, List<SchemaColumnDO>> result = CodegenSQLParser.parse(sql);
|
|
|
schemaTable = result.getKey();
|
|
|
schemaColumns = result.getValue();
|
|
|
} catch (Exception ex) {
|
|
|
throw exception(CODEGEN_PARSE_SQL_ERROR);
|
|
|
}
|
|
|
// 导入
|
|
|
- return this.createCodegen0(ToolCodegenImportTypeEnum.SQL, schemaTable, schemaColumns);
|
|
|
+ return this.createCodegen0(CodegenImportTypeEnum.SQL, schemaTable, schemaColumns);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -104,10 +106,10 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
// 获取当前schema
|
|
|
String tableSchema = codegenProperties.getDbSchemas().iterator().next();
|
|
|
// 从数据库中,获得数据库表结构
|
|
|
- ToolSchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName);
|
|
|
- List<ToolSchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName);
|
|
|
+ SchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName);
|
|
|
+ List<SchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName);
|
|
|
// 导入
|
|
|
- return this.createCodegen0(ToolCodegenImportTypeEnum.DB, schemaTable, schemaColumns);
|
|
|
+ return this.createCodegen0(CodegenImportTypeEnum.DB, schemaTable, schemaColumns);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -121,17 +123,17 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void updateCodegen(ToolCodegenUpdateReqVO updateReqVO) {
|
|
|
+ public void updateCodegen(CodegenUpdateReqVO updateReqVO) {
|
|
|
// 校验是否已经存在
|
|
|
if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) {
|
|
|
throw exception(CODEGEN_TABLE_NOT_EXISTS);
|
|
|
}
|
|
|
|
|
|
// 更新 table 表定义
|
|
|
- ToolCodegenTableDO updateTableObj = ToolCodegenConvert.INSTANCE.convert(updateReqVO.getTable());
|
|
|
+ CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable());
|
|
|
codegenTableMapper.updateById(updateTableObj);
|
|
|
// 更新 column 字段定义
|
|
|
- List<ToolCodegenColumnDO> updateColumnObjs = ToolCodegenConvert.INSTANCE.convertList03(updateReqVO.getColumns());
|
|
|
+ List<CodegenColumnDO> updateColumnObjs = CodegenConvert.INSTANCE.convertList03(updateReqVO.getColumns());
|
|
|
updateColumnObjs.forEach(updateColumnObj -> codegenColumnMapper.updateById(updateColumnObj));
|
|
|
}
|
|
|
|
|
@@ -139,13 +141,13 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void syncCodegenFromDB(Long tableId) {
|
|
|
// 校验是否已经存在
|
|
|
- ToolCodegenTableDO table = codegenTableMapper.selectById(tableId);
|
|
|
+ CodegenTableDO table = codegenTableMapper.selectById(tableId);
|
|
|
if (table == null) {
|
|
|
throw exception(CODEGEN_TABLE_NOT_EXISTS);
|
|
|
}
|
|
|
String tableSchema = codegenProperties.getDbSchemas().iterator().next();
|
|
|
// 从数据库中,获得数据库表结构
|
|
|
- List<ToolSchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, table.getTableName());
|
|
|
+ List<SchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, table.getTableName());
|
|
|
|
|
|
// 执行同步
|
|
|
this.syncCodegen0(tableId, schemaColumns);
|
|
@@ -155,14 +157,14 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void syncCodegenFromSQL(Long tableId, String sql) {
|
|
|
// 校验是否已经存在
|
|
|
- ToolCodegenTableDO table = codegenTableMapper.selectById(tableId);
|
|
|
+ CodegenTableDO table = codegenTableMapper.selectById(tableId);
|
|
|
if (table == null) {
|
|
|
throw exception(CODEGEN_TABLE_NOT_EXISTS);
|
|
|
}
|
|
|
// 从 SQL 中,获得数据库表结构
|
|
|
- List<ToolSchemaColumnDO> schemaColumns;
|
|
|
+ List<SchemaColumnDO> schemaColumns;
|
|
|
try {
|
|
|
- KeyValue<ToolSchemaTableDO, List<ToolSchemaColumnDO>> result = ToolCodegenSQLParser.parse(sql);
|
|
|
+ KeyValue<SchemaTableDO, List<SchemaColumnDO>> result = CodegenSQLParser.parse(sql);
|
|
|
schemaColumns = result.getValue();
|
|
|
} catch (Exception ex) {
|
|
|
throw exception(CODEGEN_PARSE_SQL_ERROR);
|
|
@@ -172,27 +174,27 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
this.syncCodegen0(tableId, schemaColumns);
|
|
|
}
|
|
|
|
|
|
- private void syncCodegen0(Long tableId, List<ToolSchemaColumnDO> schemaColumns) {
|
|
|
+ private void syncCodegen0(Long tableId, List<SchemaColumnDO> schemaColumns) {
|
|
|
// 校验导入的字段不为空
|
|
|
if (CollUtil.isEmpty(schemaColumns)) {
|
|
|
throw exception(CODEGEN_SYNC_COLUMNS_NULL);
|
|
|
}
|
|
|
- Set<String> schemaColumnNames = CollectionUtils.convertSet(schemaColumns, ToolSchemaColumnDO::getColumnName);
|
|
|
+ Set<String> schemaColumnNames = CollectionUtils.convertSet(schemaColumns, SchemaColumnDO::getColumnName);
|
|
|
|
|
|
- // 构建 ToolCodegenColumnDO 数组,只同步新增的字段
|
|
|
- List<ToolCodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId);
|
|
|
- Set<String> codegenColumnNames = CollectionUtils.convertSet(codegenColumns, ToolCodegenColumnDO::getColumnName);
|
|
|
+ // 构建 CodegenColumnDO 数组,只同步新增的字段
|
|
|
+ List<CodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId);
|
|
|
+ Set<String> codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName);
|
|
|
// 移除已经存在的字段
|
|
|
schemaColumns.removeIf(column -> codegenColumnNames.contains(column.getColumnName()));
|
|
|
// 计算需要删除的字段
|
|
|
Set<Long> deleteColumnIds = codegenColumns.stream().filter(column -> !schemaColumnNames.contains(column.getColumnName()))
|
|
|
- .map(ToolCodegenColumnDO::getId).collect(Collectors.toSet());
|
|
|
+ .map(CodegenColumnDO::getId).collect(Collectors.toSet());
|
|
|
if (CollUtil.isEmpty(schemaColumns) && CollUtil.isEmpty(deleteColumnIds)) {
|
|
|
throw exception(CODEGEN_SYNC_NONE_CHANGE);
|
|
|
}
|
|
|
|
|
|
// 插入新增的字段
|
|
|
- List<ToolCodegenColumnDO> columns = codegenBuilder.buildColumns(schemaColumns);
|
|
|
+ List<CodegenColumnDO> columns = codegenBuilder.buildColumns(schemaColumns);
|
|
|
columns.forEach(column -> {
|
|
|
column.setTableId(tableId);
|
|
|
codegenColumnMapper.insert(column); // TODO 批量插入
|
|
@@ -218,33 +220,33 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public PageResult<ToolCodegenTableDO> getCodegenTablePage(ToolCodegenTablePageReqVO pageReqVO) {
|
|
|
+ public PageResult<CodegenTableDO> getCodegenTablePage(CodegenTablePageReqVO pageReqVO) {
|
|
|
return codegenTableMapper.selectPage(pageReqVO);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ToolCodegenTableDO getCodegenTablePage(Long id) {
|
|
|
+ public CodegenTableDO getCodegenTablePage(Long id) {
|
|
|
return codegenTableMapper.selectById(id);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<ToolCodegenTableDO> getCodeGenTableList() {
|
|
|
+ public List<CodegenTableDO> getCodeGenTableList() {
|
|
|
return codegenTableMapper.selectList();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<ToolCodegenColumnDO> getCodegenColumnListByTableId(Long tableId) {
|
|
|
+ public List<CodegenColumnDO> getCodegenColumnListByTableId(Long tableId) {
|
|
|
return codegenColumnMapper.selectListByTableId(tableId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Map<String, String> generationCodes(Long tableId) {
|
|
|
// 校验是否已经存在
|
|
|
- ToolCodegenTableDO table = codegenTableMapper.selectById(tableId);
|
|
|
+ CodegenTableDO table = codegenTableMapper.selectById(tableId);
|
|
|
if (codegenTableMapper.selectById(tableId) == null) {
|
|
|
throw exception(CODEGEN_TABLE_NOT_EXISTS);
|
|
|
}
|
|
|
- List<ToolCodegenColumnDO> columns = codegenColumnMapper.selectListByTableId(tableId);
|
|
|
+ List<CodegenColumnDO> columns = codegenColumnMapper.selectListByTableId(tableId);
|
|
|
if (CollUtil.isEmpty(columns)) {
|
|
|
throw exception(CODEGEN_COLUMN_NOT_EXISTS);
|
|
|
}
|
|
@@ -254,8 +256,8 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<ToolSchemaTableDO> getSchemaTableList(String tableName, String tableComment) {
|
|
|
- List<ToolSchemaTableDO> tables = schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment);
|
|
|
+ public List<SchemaTableDO> getSchemaTableList(String tableName, String tableComment) {
|
|
|
+ List<SchemaTableDO> tables = schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment);
|
|
|
// TODO 强制移除 Quartz 的表,未来做成可配置
|
|
|
tables.removeIf(table -> table.getTableName().startsWith("QRTZ_"));
|
|
|
tables.removeIf(table -> table.getTableName().startsWith("ACT_"));
|