From 2f624ab5f41f15a4a1093867e4519b7ddc7ccedf Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期五, 01 三月 2024 14:33:09 +0800
Subject: [PATCH] 代码生成新增创建表结构功能
---
ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java | 16 ++++-
ruoyi-ui/src/views/tool/gen/createTable.vue | 45 +++++++++++++++
ruoyi-ui/src/views/tool/gen/index.vue | 19 ++++++
ruoyi-ui/src/api/tool/gen.js | 9 +++
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java | 2
ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java | 17 ++++-
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml | 4 +
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java | 8 ++
ruoyi-generator/pom.xml | 14 ++--
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java | 46 +++++++++++++++
10 files changed, 163 insertions(+), 17 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
index 5fbfc73..e97ef4f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -163,5 +163,5 @@
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
- "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };
+ "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" };
}
diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
index 83fde2f..8663be6 100644
--- a/ruoyi-generator/pom.xml
+++ b/ruoyi-generator/pom.xml
@@ -17,16 +17,10 @@
<dependencies>
- <!--velocity代码生成使用模板 -->
+ <!-- velocity代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
- </dependency>
-
- <!-- collections工具类 -->
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
</dependency>
<!-- 通用工具-->
@@ -35,6 +29,12 @@
<artifactId>ruoyi-common</artifactId>
</dependency>
+ <!-- 阿里数据库连接池 -->
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>druid-spring-boot-starter</artifactId>
+ </dependency>
+
</dependencies>
</project>
\ No newline at end of file
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
index af9f4ee..75f7fbe 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
@@ -1,6 +1,7 @@
package com.ruoyi.generator.controller;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -17,12 +18,18 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import com.alibaba.druid.DbType;
+import com.alibaba.druid.sql.SQLUtils;
+import com.alibaba.druid.sql.ast.SQLStatement;
+import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.sql.SqlUtil;
import com.ruoyi.generator.domain.GenTable;
import com.ruoyi.generator.domain.GenTableColumn;
import com.ruoyi.generator.service.IGenTableColumnService;
@@ -109,11 +116,48 @@
String[] tableNames = Convert.toStrArray(tables);
// 查询表信息
List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
- genTableService.importGenTable(tableList);
+ genTableService.importGenTable(tableList, SecurityUtils.getUsername());
return success();
}
/**
+ * 创建表结构(保存)
+ */
+ @PreAuthorize("@ss.hasRole('admin')")
+ @Log(title = "创建表", businessType = BusinessType.OTHER)
+ @PostMapping("/createTable")
+ public AjaxResult createTableSave(String sql)
+ {
+ try
+ {
+ SqlUtil.filterKeyword(sql);
+ List<SQLStatement> sqlStatements = SQLUtils.parseStatements(sql, DbType.mysql);
+ List<String> tableNames = new ArrayList<>();
+ for (SQLStatement sqlStatement : sqlStatements)
+ {
+ if (sqlStatement instanceof MySqlCreateTableStatement)
+ {
+ MySqlCreateTableStatement createTableStatement = (MySqlCreateTableStatement) sqlStatement;
+ if (genTableService.createTable(createTableStatement.toString()))
+ {
+ String tableName = createTableStatement.getTableName().replaceAll("`", "");
+ tableNames.add(tableName);
+ }
+ }
+ }
+ List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()]));
+ String operName = SecurityUtils.getUsername();
+ genTableService.importGenTable(tableList, operName);
+ return AjaxResult.success();
+ }
+ catch (Exception e)
+ {
+ logger.error(e.getMessage(), e);
+ return AjaxResult.error("创建表结构异常");
+ }
+ }
+
+ /**
* 修改保存代码生成业务
*/
@PreAuthorize("@ss.hasPermi('tool:gen:edit')")
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java
index c2fdf71..a5ce3c6 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java
@@ -80,4 +80,12 @@
* @return 结果
*/
public int deleteGenTableByIds(Long[] ids);
+
+ /**
+ * 创建表
+ *
+ * @param sql 表结构
+ * @return 结果
+ */
+ public int createTable(String sql);
}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
index ff6291d..18231eb 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
@@ -27,7 +27,6 @@
import com.ruoyi.common.constant.GenConstants;
import com.ruoyi.common.core.text.CharsetKit;
import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.generator.domain.GenTable;
import com.ruoyi.generator.domain.GenTableColumn;
@@ -151,15 +150,26 @@
}
/**
+ * 创建表
+ *
+ * @param sql 创建表语句
+ * @return 结果
+ */
+ @Override
+ public boolean createTable(String sql)
+ {
+ return genTableMapper.createTable(sql) == 0;
+ }
+
+ /**
* 导入表结构
*
* @param tableList 导入表列表
*/
@Override
@Transactional
- public void importGenTable(List<GenTable> tableList)
+ public void importGenTable(List<GenTable> tableList, String operName)
{
- String operName = SecurityUtils.getUsername();
try
{
for (GenTable table : tableList)
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
index 955b326..526038d 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
@@ -67,11 +67,20 @@
public void deleteGenTableByIds(Long[] tableIds);
/**
- * 导入表结构
- *
- * @param tableList 导入表列表
+ * 创建表
+ *
+ * @param sql 创建表语句
+ * @return 结果
*/
- public void importGenTable(List<GenTable> tableList);
+ public boolean createTable(String sql);
+
+ /**
+ * 导入表结构
+ *
+ * @param tableList 导入表列表
+ * @param operName 操作人员
+ */
+ public void importGenTable(List<GenTable> tableList, String operName);
/**
* 预览代码
diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
index 9c65e4c..8ec8211 100644
--- a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
+++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
@@ -171,6 +171,10 @@
)
</insert>
+ <update id="createTable">
+ ${sql}
+ </update>
+
<update id="updateGenTable" parameterType="GenTable">
update gen_table
<set>
diff --git a/ruoyi-ui/src/api/tool/gen.js b/ruoyi-ui/src/api/tool/gen.js
index afaf2a9..5728980 100644
--- a/ruoyi-ui/src/api/tool/gen.js
+++ b/ruoyi-ui/src/api/tool/gen.js
@@ -43,6 +43,15 @@
})
}
+// 创建表
+export function createTable(data) {
+ return request({
+ url: '/tool/gen/createTable',
+ method: 'post',
+ params: data
+ })
+}
+
// 预览生成代码
export function previewTable(tableId) {
return request({
diff --git a/ruoyi-ui/src/views/tool/gen/createTable.vue b/ruoyi-ui/src/views/tool/gen/createTable.vue
new file mode 100644
index 0000000..f914b5d
--- /dev/null
+++ b/ruoyi-ui/src/views/tool/gen/createTable.vue
@@ -0,0 +1,45 @@
+<template>
+ <!-- 创建表 -->
+ <el-dialog title="创建表" :visible.sync="visible" width="800px" top="5vh" append-to-body>
+ <span>创建表语句(支持多个建表语句):</span>
+ <el-input type="textarea" :rows="10" placeholder="请输入文本" v-model="content"></el-input>
+ <div slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="handleCreateTable">确 定</el-button>
+ <el-button @click="visible = false">取 消</el-button>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import { createTable } from "@/api/tool/gen";
+export default {
+ data() {
+ return {
+ // 遮罩层
+ visible: false,
+ // 文本内容
+ content: ""
+ };
+ },
+ methods: {
+ // 显示弹框
+ show() {
+ this.visible = true;
+ },
+ /** 创建按钮操作 */
+ handleCreateTable() {
+ if (this.content === "") {
+ this.$modal.msgError("请输入建表语句");
+ return;
+ }
+ createTable({ sql: this.content }).then(res => {
+ this.$modal.msgSuccess(res.msg);
+ if (res.code === 200) {
+ this.visible = false;
+ this.$emit("ok");
+ }
+ });
+ }
+ }
+};
+</script>
diff --git a/ruoyi-ui/src/views/tool/gen/index.vue b/ruoyi-ui/src/views/tool/gen/index.vue
index 3f1f930..9237c30 100644
--- a/ruoyi-ui/src/views/tool/gen/index.vue
+++ b/ruoyi-ui/src/views/tool/gen/index.vue
@@ -41,9 +41,20 @@
plain
icon="el-icon-download"
size="mini"
+ :disabled="multiple"
@click="handleGenTable"
v-hasPermi="['tool:gen:code']"
>生成</el-button>
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="openCreateTable"
+ v-hasRole="['admin']"
+ >创建</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@@ -172,12 +183,14 @@
</el-tabs>
</el-dialog>
<import-table ref="import" @ok="handleQuery" />
+ <create-table ref="create" @ok="handleQuery" />
</div>
</template>
<script>
import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen";
import importTable from "./importTable";
+import createTable from "./createTable";
import hljs from "highlight.js/lib/highlight";
import "highlight.js/styles/github-gist.css";
hljs.registerLanguage("java", require("highlight.js/lib/languages/java"));
@@ -189,7 +202,7 @@
export default {
name: "Gen",
- components: { importTable },
+ components: { importTable, createTable },
data() {
return {
// 遮罩层
@@ -283,6 +296,10 @@
openImportTable() {
this.$refs.import.show();
},
+ /** 打开创建表弹窗 */
+ openCreateTable() {
+ this.$refs.create.show();
+ },
/** 重置按钮操作 */
resetQuery() {
this.dateRange = [];
--
Gitblit v1.9.2