From 6ea2a2fc515d565556d8bf3ab8ad3e1cf07d1f5e Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期一, 09 九月 2024 11:37:02 +0800
Subject: [PATCH] update 优化 统一sql文件命名方式
---
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java | 208 ++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 168 insertions(+), 40 deletions(-)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index 09ecb05..bb8b444 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -5,14 +5,24 @@
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.anyline.metadata.Column;
+import org.anyline.metadata.Table;
+import org.anyline.proxy.ServiceProxy;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
import org.dromara.common.core.constant.Constants;
-import org.dromara.generator.constant.GenConstants;
import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileUtils;
@@ -20,6 +30,7 @@
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.generator.constant.GenConstants;
import org.dromara.generator.domain.GenTable;
import org.dromara.generator.domain.GenTableColumn;
import org.dromara.generator.mapper.GenTableColumnMapper;
@@ -27,11 +38,6 @@
import org.dromara.generator.util.GenUtils;
import org.dromara.generator.util.VelocityInitializer;
import org.dromara.generator.util.VelocityUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.Velocity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -49,7 +55,6 @@
*
* @author Lion Li
*/
-@DS("#header.datasource")
@Slf4j
@RequiredArgsConstructor
@Service
@@ -58,6 +63,8 @@
private final GenTableMapper baseMapper;
private final GenTableColumnMapper genTableColumnMapper;
private final IdentifierGenerator identifierGenerator;
+
+ private static final String[] TABLE_IGNORE = new String[]{"sj_", "act_", "flw_", "gen_"};
/**
* 鏌ヨ涓氬姟瀛楁鍒楄〃
@@ -94,29 +101,122 @@
private QueryWrapper<GenTable> buildGenTableQueryWrapper(GenTable genTable) {
Map<String, Object> params = genTable.getParams();
QueryWrapper<GenTable> wrapper = Wrappers.query();
- wrapper.like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName()))
+ wrapper
+ .eq(StringUtils.isNotEmpty(genTable.getDataName()), "data_name", genTable.getDataName())
+ .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName()))
.like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment()))
.between(params.get("beginTime") != null && params.get("endTime") != null,
"create_time", params.get("beginTime"), params.get("endTime"));
return wrapper;
}
-
+ /**
+ * 鏌ヨ鏁版嵁搴撳垪琛�
+ *
+ * @param genTable 鍖呭惈鏌ヨ鏉′欢鐨凣enTable瀵硅薄
+ * @param pageQuery 鍖呭惈鍒嗛〉淇℃伅鐨凱ageQuery瀵硅薄
+ * @return 鍖呭惈鍒嗛〉缁撴灉鐨凾ableDataInfo瀵硅薄
+ */
+ @DS("#genTable.dataName")
@Override
public TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable, PageQuery pageQuery) {
- Page<GenTable> page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable);
+ // 鑾峰彇鏌ヨ鏉′欢
+ String tableName = genTable.getTableName();
+ String tableComment = genTable.getTableComment();
+
+ LinkedHashMap<String, Table<?>> tablesMap = ServiceProxy.metadata().tables();
+ if (CollUtil.isEmpty(tablesMap)) {
+ return TableDataInfo.build();
+ }
+ List<String> tableNames = baseMapper.selectTableNameList(genTable.getDataName());
+ String[] tableArrays;
+ if (CollUtil.isNotEmpty(tableNames)) {
+ tableArrays = tableNames.toArray(new String[0]);
+ } else {
+ tableArrays = new String[0];
+ }
+ // 杩囨护骞惰浆鎹㈣〃鏍兼暟鎹�
+ List<GenTable> tables = tablesMap.values().stream()
+ .filter(x -> !startWithAnyIgnoreCase(x.getName(), TABLE_IGNORE))
+ .filter(x -> {
+ if (CollUtil.isEmpty(tableNames)) {
+ return true;
+ }
+ return !StringUtils.equalsAnyIgnoreCase(x.getName(), tableArrays);
+ })
+ .filter(x -> {
+ boolean nameMatches = true;
+ boolean commentMatches = true;
+ // 杩涜琛ㄥ悕绉扮殑妯$硦鏌ヨ
+ if (StringUtils.isNotBlank(tableName)) {
+ nameMatches = StringUtils.containsIgnoreCase(x.getName(), tableName);
+ }
+ // 杩涜琛ㄦ弿杩扮殑妯$硦鏌ヨ
+ if (StringUtils.isNotBlank(tableComment)) {
+ commentMatches = StringUtils.containsIgnoreCase(x.getComment(), tableComment);
+ }
+ // 鍚屾椂鍖归厤鍚嶇О鍜屾弿杩�
+ return nameMatches && commentMatches;
+ })
+ .map(x -> {
+ GenTable gen = new GenTable();
+ gen.setTableName(x.getName());
+ gen.setTableComment(x.getComment());
+ gen.setCreateTime(x.getCreateTime());
+ gen.setUpdateTime(x.getUpdateTime());
+ return gen;
+ }).toList();
+
+ IPage<GenTable> page = pageQuery.build();
+ page.setTotal(tables.size());
+ // 鎵嬪姩鍒嗛〉 set鏁版嵁
+ page.setRecords(CollUtil.page((int) page.getCurrent() - 1, (int) page.getSize(), tables));
return TableDataInfo.build(page);
+ }
+
+ public static boolean startWithAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) {
+ // 鍒ゆ柇鏄惁鏄互鎸囧畾瀛楃涓插紑澶�
+ for (CharSequence searchCharSequence : searchCharSequences) {
+ if (StringUtils.startsWithIgnoreCase(cs, searchCharSequence)) {
+ return true;
+ }
+ }
+ return false;
}
/**
* 鏌ヨ鎹簱鍒楄〃
*
* @param tableNames 琛ㄥ悕绉扮粍
+ * @param dataName 鏁版嵁婧愬悕绉�
* @return 鏁版嵁搴撹〃闆嗗悎
*/
+ @DS("#dataName")
@Override
- public List<GenTable> selectDbTableListByNames(String[] tableNames) {
- return baseMapper.selectDbTableListByNames(tableNames);
+ public List<GenTable> selectDbTableListByNames(String[] tableNames, String dataName) {
+ Set<String> tableNameSet = new HashSet<>(List.of(tableNames));
+ LinkedHashMap<String, Table<?>> tablesMap = ServiceProxy.metadata().tables();
+
+ if (CollUtil.isEmpty(tablesMap)) {
+ return new ArrayList<>();
+ }
+
+ List<Table<?>> tableList = tablesMap.values().stream()
+ .filter(x -> !StringUtils.containsAnyIgnoreCase(x.getName(), TABLE_IGNORE))
+ .filter(x -> tableNameSet.contains(x.getName())).toList();
+
+ if (CollUtil.isEmpty(tableList)) {
+ return new ArrayList<>();
+ }
+ return tableList.stream().map(x -> {
+ GenTable gen = new GenTable();
+ gen.setDataName(dataName);
+ gen.setTableName(x.getName());
+ gen.setTableComment(x.getComment());
+ gen.setCreateTime(x.getCreateTime());
+ gen.setUpdateTime(x.getUpdateTime());
+ return gen;
+ }).toList();
}
/**
@@ -133,7 +233,6 @@
* 淇敼涓氬姟
*
* @param genTable 涓氬姟淇℃伅
- * @return 缁撴灉
*/
@Transactional(rollbackFor = Exception.class)
@Override
@@ -152,13 +251,12 @@
* 鍒犻櫎涓氬姟瀵硅薄
*
* @param tableIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
- * @return 缁撴灉
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteGenTableByIds(Long[] tableIds) {
List<Long> ids = Arrays.asList(tableIds);
- baseMapper.deleteBatchIds(ids);
+ baseMapper.deleteByIds(ids);
genTableColumnMapper.delete(new LambdaQueryWrapper<GenTableColumn>().in(GenTableColumn::getTableId, ids));
}
@@ -166,19 +264,21 @@
* 瀵煎叆琛ㄧ粨鏋�
*
* @param tableList 瀵煎叆琛ㄥ垪琛�
+ * @param dataName 鏁版嵁婧愬悕绉�
*/
- @Transactional(rollbackFor = Exception.class)
+ @DSTransactional
@Override
- public void importGenTable(List<GenTable> tableList) {
- String operName = LoginHelper.getUsername();
+ public void importGenTable(List<GenTable> tableList, String dataName) {
+ Long operId = LoginHelper.getUserId();
try {
for (GenTable table : tableList) {
String tableName = table.getTableName();
- GenUtils.initTable(table, operName);
+ GenUtils.initTable(table, operId);
+ table.setDataName(dataName);
int row = baseMapper.insert(table);
if (row > 0) {
// 淇濆瓨鍒椾俊鎭�
- List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+ List<GenTableColumn> genTableColumns = SpringUtils.getAopProxy(this).selectDbTableColumnsByName(tableName, dataName);
List<GenTableColumn> saveColumns = new ArrayList<>();
for (GenTableColumn column : genTableColumns) {
GenUtils.initColumnField(column, table);
@@ -192,6 +292,32 @@
} catch (Exception e) {
throw new ServiceException("瀵煎叆澶辫触锛�" + e.getMessage());
}
+ }
+
+ /**
+ * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅
+ *
+ * @param tableName 琛ㄥ悕绉�
+ * @param dataName 鏁版嵁婧愬悕绉�
+ * @return 鍒椾俊鎭�
+ */
+ @DS("#dataName")
+ @Override
+ public List<GenTableColumn> selectDbTableColumnsByName(String tableName, String dataName) {
+ LinkedHashMap<String, Column> columns = ServiceProxy.metadata().columns(tableName);
+ List<GenTableColumn> tableColumns = new ArrayList<>();
+ columns.forEach((columnName, column) -> {
+ GenTableColumn tableColumn = new GenTableColumn();
+ tableColumn.setIsPk(String.valueOf(column.isPrimaryKey()));
+ tableColumn.setColumnName(column.getName());
+ tableColumn.setColumnComment(column.getComment());
+ tableColumn.setColumnType(column.getTypeName().toLowerCase());
+ tableColumn.setSort(column.getPosition());
+ tableColumn.setIsRequired(column.isNullable() == 0 ? "1" : "0");
+ tableColumn.setIsIncrement(column.isAutoIncrement() == -1 ? "0" : "1");
+ tableColumns.add(tableColumn);
+ });
+ return tableColumns;
}
/**
@@ -231,14 +357,14 @@
/**
* 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
*
- * @param tableName 琛ㄥ悕绉�
+ * @param tableId 琛ㄥ悕绉�
* @return 鏁版嵁
*/
@Override
- public byte[] downloadCode(String tableName) {
+ public byte[] downloadCode(Long tableId) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
- generatorCode(tableName, zip);
+ generatorCode(tableId, zip);
IoUtil.close(zip);
return outputStream.toByteArray();
}
@@ -246,12 +372,12 @@
/**
* 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
*
- * @param tableName 琛ㄥ悕绉�
+ * @param tableId 琛ㄥ悕绉�
*/
@Override
- public void generatorCode(String tableName) {
+ public void generatorCode(Long tableId) {
// 鏌ヨ琛ㄤ俊鎭�
- GenTable table = baseMapper.selectGenTableByName(tableName);
+ GenTable table = baseMapper.selectGenTableById(tableId);
// 璁剧疆涓婚敭鍒椾俊鎭�
setPkColumn(table);
@@ -262,7 +388,7 @@
// 鑾峰彇妯℃澘鍒楄〃
List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
for (String template : templates) {
- if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) {
+ if (!StringUtils.containsAny(template, "sql.vm", "api.ts.vm", "types.ts.vm", "index.vue.vm", "index-tree.vue.vm")) {
// 娓叉煋妯℃澘
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, Constants.UTF8);
@@ -280,16 +406,16 @@
/**
* 鍚屾鏁版嵁搴�
*
- * @param tableName 琛ㄥ悕绉�
+ * @param tableId 琛ㄥ悕绉�
*/
- @Transactional(rollbackFor = Exception.class)
+ @DSTransactional
@Override
- public void synchDb(String tableName) {
- GenTable table = baseMapper.selectGenTableByName(tableName);
+ public void synchDb(Long tableId) {
+ GenTable table = baseMapper.selectGenTableById(tableId);
List<GenTableColumn> tableColumns = table.getColumns();
Map<String, GenTableColumn> tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName);
- List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+ List<GenTableColumn> dbTableColumns = SpringUtils.getAopProxy(this).selectDbTableColumnsByName(table.getTableName(), table.getDataName());
if (CollUtil.isEmpty(dbTableColumns)) {
throw new ServiceException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪");
}
@@ -322,22 +448,24 @@
List<GenTableColumn> delColumns = StreamUtils.filter(tableColumns, column -> !dbTableColumnNames.contains(column.getColumnName()));
if (CollUtil.isNotEmpty(delColumns)) {
List<Long> ids = StreamUtils.toList(delColumns, GenTableColumn::getColumnId);
- genTableColumnMapper.deleteBatchIds(ids);
+ if (CollUtil.isNotEmpty(ids)) {
+ genTableColumnMapper.deleteByIds(ids);
+ }
}
}
/**
* 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
*
- * @param tableNames 琛ㄦ暟缁�
+ * @param tableIds 琛↖D鏁扮粍
* @return 鏁版嵁
*/
@Override
- public byte[] downloadCode(String[] tableNames) {
+ public byte[] downloadCode(String[] tableIds) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
- for (String tableName : tableNames) {
- generatorCode(tableName, zip);
+ for (String tableId : tableIds) {
+ generatorCode(Long.parseLong(tableId), zip);
}
IoUtil.close(zip);
return outputStream.toByteArray();
@@ -346,9 +474,9 @@
/**
* 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜
*/
- private void generatorCode(String tableName, ZipOutputStream zip) {
+ private void generatorCode(Long tableId, ZipOutputStream zip) {
// 鏌ヨ琛ㄤ俊鎭�
- GenTable table = baseMapper.selectGenTableByName(tableName);
+ GenTable table = baseMapper.selectGenTableById(tableId);
List<Long> menuIds = new ArrayList<>();
for (int i = 0; i < 6; i++) {
menuIds.add(identifierGenerator.nextId(null).longValue());
@@ -430,7 +558,7 @@
String treeCode = paramsObj.getStr(GenConstants.TREE_CODE);
String treeParentCode = paramsObj.getStr(GenConstants.TREE_PARENT_CODE);
String treeName = paramsObj.getStr(GenConstants.TREE_NAME);
- String parentMenuId = paramsObj.getStr(GenConstants.PARENT_MENU_ID);
+ Long parentMenuId = paramsObj.getLong(GenConstants.PARENT_MENU_ID);
String parentMenuName = paramsObj.getStr(GenConstants.PARENT_MENU_NAME);
genTable.setTreeCode(treeCode);
--
Gitblit v1.9.3