代码生成新增创建表结构功能
This commit is contained in:
		
							parent
							
								
									80f96b4915
								
							
						
					
					
						commit
						2f624ab5f4
					
				| @ -163,5 +163,5 @@ public class Constants | ||||
|      * 定时任务违规的字符 | ||||
|      */ | ||||
|     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" }; | ||||
| } | ||||
|  | ||||
| @ -17,24 +17,24 @@ | ||||
| 
 | ||||
|     <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> | ||||
| 
 | ||||
|         <!-- 通用工具--> | ||||
|         <dependency> | ||||
|             <groupId>com.ruoyi</groupId> | ||||
|             <artifactId>ruoyi-common</artifactId> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <!-- 阿里数据库连接池 --> | ||||
|         <dependency> | ||||
|             <groupId>com.alibaba</groupId> | ||||
|             <artifactId>druid-spring-boot-starter</artifactId> | ||||
|         </dependency> | ||||
| 
 | ||||
|     </dependencies> | ||||
| 
 | ||||
| </project> | ||||
| @ -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.PutMapping; | ||||
| 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,10 +116,47 @@ public class GenController extends BaseController | ||||
|         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("创建表结构异常"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 修改保存代码生成业务 | ||||
|      */ | ||||
|  | ||||
| @ -80,4 +80,12 @@ public interface GenTableMapper | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int deleteGenTableByIds(Long[] ids); | ||||
| 
 | ||||
|     /** | ||||
|      * 创建表 | ||||
|      * | ||||
|      * @param sql 表结构 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     public int createTable(String sql); | ||||
| } | ||||
|  | ||||
| @ -27,7 +27,6 @@ import com.ruoyi.common.constant.Constants; | ||||
| 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; | ||||
| @ -150,6 +149,18 @@ public class GenTableServiceImpl implements IGenTableService | ||||
|         genTableColumnMapper.deleteGenTableColumnByIds(tableIds); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 创建表 | ||||
|      * | ||||
|      * @param sql 创建表语句 | ||||
|      * @return 结果 | ||||
|      */ | ||||
|     @Override | ||||
|     public boolean createTable(String sql) | ||||
|     { | ||||
|         return genTableMapper.createTable(sql) == 0; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 导入表结构 | ||||
|      *  | ||||
| @ -157,9 +168,8 @@ public class GenTableServiceImpl implements IGenTableService | ||||
|      */ | ||||
|     @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) | ||||
|  | ||||
| @ -67,11 +67,20 @@ public interface IGenTableService | ||||
|     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); | ||||
| 
 | ||||
|     /** | ||||
|      * 预览代码 | ||||
|  | ||||
| @ -171,6 +171,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
|          ) | ||||
|     </insert> | ||||
|      | ||||
|     <update id="createTable"> | ||||
|         ${sql} | ||||
|     </update> | ||||
|      | ||||
|     <update id="updateGenTable" parameterType="GenTable"> | ||||
|         update gen_table | ||||
|         <set> | ||||
|  | ||||
| @ -43,6 +43,15 @@ export function importTable(data) { | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
| // 创建表
 | ||||
| export function createTable(data) { | ||||
|   return request({ | ||||
|     url: '/tool/gen/createTable', | ||||
|     method: 'post', | ||||
|     params: data | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
| // 预览生成代码
 | ||||
| export function previewTable(tableId) { | ||||
|   return request({ | ||||
|  | ||||
							
								
								
									
										45
									
								
								ruoyi-ui/src/views/tool/gen/createTable.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ruoyi-ui/src/views/tool/gen/createTable.vue
									
									
									
									
									
										Normal file
									
								
							| @ -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> | ||||
| @ -41,10 +41,21 @@ | ||||
|           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 | ||||
|           type="info" | ||||
| @ -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 @@ hljs.registerLanguage("sql", require("highlight.js/lib/languages/sql")); | ||||
| 
 | ||||
| export default { | ||||
|   name: "Gen", | ||||
|   components: { importTable }, | ||||
|   components: { importTable, createTable }, | ||||
|   data() { | ||||
|     return { | ||||
|       // 遮罩层 | ||||
| @ -283,6 +296,10 @@ export default { | ||||
|     openImportTable() { | ||||
|       this.$refs.import.show(); | ||||
|     }, | ||||
|     /** 打开创建表弹窗 */ | ||||
|     openCreateTable() { | ||||
|       this.$refs.create.show(); | ||||
|     }, | ||||
|     /** 重置按钮操作 */ | ||||
|     resetQuery() { | ||||
|       this.dateRange = []; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user