From 5c7dce3719ca67b73da5b05f28a8418e1d0f1ea7 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期五, 01 三月 2024 14:32:37 +0800
Subject: [PATCH] 代码生成新增创建表结构功能

---
 src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java       |    8 ++++
 src/main/java/com/ruoyi/common/constant/Constants.java                    |    2 
 src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java    |   46 ++++++++++++++++++++++
 src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java    |   17 ++++++--
 src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java |   16 ++++++-
 src/main/resources/mybatis/tool/GenTableMapper.xml                        |    4 ++
 6 files changed, 84 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/ruoyi/common/constant/Constants.java b/src/main/java/com/ruoyi/common/constant/Constants.java
index 8ca9f5c..48974db 100644
--- a/src/main/java/com/ruoyi/common/constant/Constants.java
+++ b/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.framework.config" };
+            "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.framework.config", "com.ruoyi.project.tool" };
 }
diff --git a/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java b/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
index 8f0ff97..820f9c3 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
@@ -1,6 +1,7 @@
 package com.ruoyi.project.tool.gen.controller;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -17,7 +18,13 @@
 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.core.text.Convert;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.sql.SqlUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
@@ -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("鍒涘缓琛ㄧ粨鏋勫紓甯�");
+        }
+    }
+
+    /**
      * 淇敼淇濆瓨浠g爜鐢熸垚涓氬姟
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
diff --git a/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java b/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java
index ddd694b..72d0ddb 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java
@@ -80,4 +80,12 @@
      * @return 缁撴灉
      */
     public int deleteGenTableByIds(Long[] ids);
+
+    /**
+     * 鍒涘缓琛�
+     *
+     * @param sql 琛ㄧ粨鏋�
+     * @return 缁撴灉
+     */
+    public int createTable(String sql);
 }
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java b/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
index b7568b3..357a7f5 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/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.project.tool.gen.domain.GenTable;
 import com.ruoyi.project.tool.gen.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/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java b/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java
index 5fb4cce..fba0cd8 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java
+++ b/src/main/java/com/ruoyi/project/tool/gen/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);
 
     /**
      * 棰勮浠g爜
diff --git a/src/main/resources/mybatis/tool/GenTableMapper.xml b/src/main/resources/mybatis/tool/GenTableMapper.xml
index de8a3b4..748c76c 100644
--- a/src/main/resources/mybatis/tool/GenTableMapper.xml
+++ b/src/main/resources/mybatis/tool/GenTableMapper.xml
@@ -171,6 +171,10 @@
          )
     </insert>
     
+    <update id="createTable">
+        ${sql}
+    </update>
+    
     <update id="updateGenTable" parameterType="GenTable">
         update gen_table
         <set>

--
Gitblit v1.9.3