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