Browse Source

初始化创建数据库(查询当前数据源类型的基础模版1.0)

韩帛霖 1 năm trước cách đây
mục cha
commit
20e152eb4e

+ 3 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/TableInfoController.java

@@ -25,7 +25,7 @@ public class TableInfoController {
 //        if (tableInfoService.mysqlTableExist(dataBaseName, tableName) > 0) {
 //            return AjaxResult.warn("当前数据库中表已存在");
 //        }
-//        tableInfoService.createMysqlDataBase(map);
+//        tableInfoService.createMysqlTable(map);
 //        return AjaxResult.success();
 //    }
 //
@@ -147,9 +147,8 @@ public class TableInfoController {
      * 初始化数据库,基础表
      */
     @PostMapping("/initDatabase")
-    public AjaxResult initDatabase(@RequestBody DataSource dataSource){
-
-
+    public AjaxResult initDatabase(@RequestBody DataSource dataSource) {
+        tableInfoService.initDatabase(dataSource);
         return AjaxResult.success();
     }
 

+ 9 - 3
ruoyi-admin/src/main/resources/application.yml

@@ -9,7 +9,7 @@ ruoyi:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/ruoyi/uploadPath
+  profile: /Users/zrwj/Desktop/ZKQY_LJJ/log
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
@@ -73,13 +73,13 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: localhost
+    host: 192.168.110.15
     # 端口,默认为6379
     port: 6379
     # 数据库索引
     database: 0
     # 密码
-    password: 123456
+    password:
     # 连接超时时间
     timeout: 10s
     lettuce:
@@ -134,3 +134,9 @@ xss:
   excludes: /system/notice
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*
+
+# 参数配置项
+parameter:
+  ip:
+    # 主题项目字典查询地址
+    MAIN_DICTIONARY_IP: http://192.168.110.59:8080/system/dict/data/type/

+ 46 - 24
zkqy-datamodeling/src/main/java/com/zkqy/datamodeling/mapper/TableInfoMapper.java

@@ -10,15 +10,29 @@ import java.util.Map;
 public interface TableInfoMapper {
 
     //---------------------------------mysql------------------------------------------
+
     /**
      * 使用数据库
      */
     void useDataBase(String dataBaseName);
 
+
+    /**
+     * 创建mysql数据表
+     *
+     * @param tableName    表明
+     * @param tableComment 表注释
+     * @param filedList    表字段信息
+     */
+    void createMysqlTable(@Param("tableName") String tableName, @Param("tableComment") String tableComment, @Param("filedList") List<String> filedList);
+
     /**
-     * 创建msql数据库表
+     * 创建mysql数据库
+     *
+     * @param dataBaseName 创建的数据源名称
+     * @return
      */
-    void createMysqlDataBase(@Param("tableName") String tableName,@Param("tableComment") String tableComment,@Param("filedList") List<String> filedList);
+    int createMysqlDataBase(String dataBaseName);
 
     /**
      * 查询mysql数据库是否存在
@@ -28,12 +42,12 @@ public interface TableInfoMapper {
     /**
      * 查询数据库表是否存在
      */
-    int mysqlTableExist(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+    int mysqlTableExist(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);
 
     /**
      * 查询数据库中的表信息
      */
-    List<TableInfoVO> tableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String,Object> map);
+    List<TableInfoVO> tableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);
 
     /**
      * 查询表中有没有数据
@@ -48,7 +62,7 @@ public interface TableInfoMapper {
     /**
      * 修改mysql数据表
      */
-    void updateMysqlTable(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName,@Param("tableComment") String tableComment,@Param("filedList") List<String> filedList);
+    void updateMysqlTable(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName, @Param("tableComment") String tableComment, @Param("filedList") List<String> filedList);
 
     /**
      * 获取表结构
@@ -68,14 +82,22 @@ public interface TableInfoMapper {
     int sqlServerTableExist(String tableName);
 
     /**
-     * 创建数据库
+     * 创建sqlserver数据库
+     *
+     * @param dataBaseName 创建的数据库名称
+     * @return
      */
-//    void createSqlServerDataBase(String dataBaseName);
+    int createSqlServerDataBase(String dataBaseName);
 
     /**
-     * 创建数据表
+     * 创建sqlserver 数据表
+     *
+     * @param tableName       表明
+     * @param filedList       表字段
+     * @param descriptionList 表字段描述
+     * @param tableComment    表描述
      */
-    void createSqlServerTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList,@Param("descriptionList") List<String> descriptionList,@Param("tableComment") String tableComment);
+    void createSqlServerTable(@Param("tableName") String tableName, @Param("filedList") List<String> filedList, @Param("descriptionList") List<String> descriptionList, @Param("tableComment") String tableComment);
 
     /**
      * 判断数据库是否存在
@@ -85,7 +107,7 @@ public interface TableInfoMapper {
     /**
      * 获取当前库中所有表信息
      */
-    List<TableInfoVO> sqlServerTableInfoList(@Param("databaseName") String databaseName,@Param("map") Map<String,Object> map);
+    List<TableInfoVO> sqlServerTableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);
 
     /**
      * 查询表中是否有数据
@@ -100,7 +122,7 @@ public interface TableInfoMapper {
     /**
      * 修改sqlserver数据表
      */
-    void updateSqlserverTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList,@Param("descriptionList") List<String> descriptionList,@Param("tableComment") String tableComment);
+    void updateSqlserverTable(@Param("tableName") String tableName, @Param("filedList") List<String> filedList, @Param("descriptionList") List<String> descriptionList, @Param("tableComment") String tableComment);
 
     /**
      * 查询表结构
@@ -112,7 +134,7 @@ public interface TableInfoMapper {
     /**
      * 查询数据库表是否存在
      */
-    int dmTableExist(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+    int dmTableExist(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);
 
     /**
      * 查询数据库是否存在
@@ -120,14 +142,16 @@ public interface TableInfoMapper {
     int dmDataBaseExist(String databaseName);
 
     /**
-     * 创建数据库
+     * 创建达梦数据库
+     *
+     * @param databaseName 创建数据库名称
      */
-    void createDmDataBase(String databaseName);
+    int createDmDataBase(String databaseName);
 
     /**
      * 创建数据表
      */
-    void createDmTable(@Param("databaseName") String databaseName,@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
+    void createDmTable(@Param("databaseName") String databaseName, @Param("tableName") String tableName, @Param("filedList") List<String> filedList);
 
     /**
      * 添加表字段注释
@@ -137,12 +161,12 @@ public interface TableInfoMapper {
     /**
      * 添加表描述
      */
-    void addDmTableComment(@Param("databaseName") String databaseName,@Param("tableName") String tableName,@Param("tableComment") String tableComment);
+    void addDmTableComment(@Param("databaseName") String databaseName, @Param("tableName") String tableName, @Param("tableComment") String tableComment);
 
     /**
      * 库中所有表信息
      */
-    List<TableInfoVO> dmTableInfoList(@Param("databaseName") String databaseName,@Param("map") Map<String,Object> map);
+    List<TableInfoVO> dmTableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);
 
     /**
      * 查询表行数
@@ -152,17 +176,17 @@ public interface TableInfoMapper {
     /**
      * 删除数据表
      */
-    void dropDmTable(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+    void dropDmTable(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);
 
     /**
      * 查询数据库中表数量
      */
-    int queryDmTableCount(@Param("databaseName") String databaseName,@Param("map") Map<String,Object> map);
+    int queryDmTableCount(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);
 
     /**
      * 查询表结构
      */
-    List<TableInfo> dmTableFieldInfo(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+    List<TableInfo> dmTableFieldInfo(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);
 
 
     //---------------------------------oracle------------------------------------------
@@ -170,7 +194,7 @@ public interface TableInfoMapper {
     /**
      * 创建新用户
      */
-    void createOracleUser(@Param("username") String username,@Param("password") String password);
+    void createOracleUser(@Param("username") String username, @Param("password") String password);
 
     /**
      * 授予全部权限
@@ -185,7 +209,7 @@ public interface TableInfoMapper {
     /**
      * 创建oracle数据表
      */
-    void createOracleTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
+    void createOracleTable(@Param("tableName") String tableName, @Param("filedList") List<String> filedList);
 
 //    void createOracleTable(@Param("username") String username,@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
 
@@ -196,6 +220,4 @@ public interface TableInfoMapper {
     void addOracleTableDescription(String description);
 
 
-
-
 }

+ 3 - 2
zkqy-datamodeling/src/main/java/com/zkqy/datamodeling/service/ITableInfoService.java

@@ -1,6 +1,7 @@
 package com.zkqy.datamodeling.service;
 
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.DataSource;
 import com.zkqy.datamodeling.domain.TableInfo;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -14,7 +15,7 @@ public interface ITableInfoService {
     /**
      * 创建mysql表
      */
-    void createMysqlDataBase(Map<String,Object> map);
+    void createMysqlTable(Map<String,Object> map);
 
     /**
      * 查询mysql数据库是否存在
@@ -131,5 +132,5 @@ public interface ITableInfoService {
     /**
      * 初始化数据库
      */
-    void initDatabase(String databaseName);
+    int initDatabase(DataSource dataSource);
 }

+ 106 - 5
zkqy-datamodeling/src/main/java/com/zkqy/datamodeling/service/impl/TableInfoServiceImpl.java

@@ -4,6 +4,13 @@ import com.alibaba.fastjson2.JSON;
 import com.ruoyi.common.constant.DataSourceType;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.DataSource;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import javax.sql.rowset.JdbcRowSet;
+
+import com.sun.rowset.JdbcRowSetImpl;
+
 import com.zkqy.datamodeling.domain.TableInfo;
 import com.zkqy.datamodeling.domain.vo.TableInfoVO;
 import com.zkqy.datamodeling.mapper.TableInfoMapper;
@@ -14,6 +21,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
@@ -35,7 +43,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
 
     @Override
     @Transactional
-    public void createMysqlDataBase(Map<String, Object> map) {
+    public void createMysqlTable(Map<String, Object> map) {
 //        String dataBaseName = (String) map.get("dataBaseName");
         String tableName = (String) map.get("tableName");
         String tableComment = (String) map.get("tableComment");
@@ -56,7 +64,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
             stringBuilder.append("COMMENT '" + filed.getFieldDescription() + "'");
             return stringBuilder.toString();
         }).collect(Collectors.toList());
-        tableInfoMapper.createMysqlDataBase(tableName, tableComment, list);
+        tableInfoMapper.createMysqlTable(tableName, tableComment, list);
     }
 
     @Override
@@ -212,7 +220,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
             if (tableInfoMapper.mysqlTableExist(dataBaseName, tableName) > 0) {
                 return AjaxResult.warn("当前数据库中表已存在");
             }
-            createMysqlDataBase(map);
+            createMysqlTable(map);
             return AjaxResult.success();
         } else if (databaseType.equals(DataSourceType.SQLSERVER.getDataSourceName())) {
             if (sqlServerTableExist(dataBaseName, tableName) > 0) {
@@ -236,7 +244,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
         if (tableInfoMapper.mysqlTableExist(dataBaseName, tableName) > 0) {
             return AjaxResult.warn("当前数据库中表已存在");
         }
-        createMysqlDataBase(map);
+        createMysqlTable(map);
         return AjaxResult.success();
     }
 
@@ -525,8 +533,101 @@ public class TableInfoServiceImpl implements ITableInfoService {
         descriptionList.stream().forEach(f -> tableInfoMapper.addOracleTableDescription(f));
     }
 
+    @Value("${parameter.ip.MAIN_DICTIONARY_IP}")
+    private String dictIp;
+
     @Override
-    public void initDatabase(String databaseName) {
+    public int initDatabase(DataSource dataSource) {
+        RestTemplate restTemplate = new RestTemplate();
+        // 得到基础模版库的连接信息
+        String result = restTemplate.getForObject(dictIp + dataSource.getDatabaseType() + "_connection_information", String.class);
+        Map<String, Object> objectMap = (Map<String, Object>) JSON.parse(result);
+        List<Map<String, Object>> dictList = (List<Map<String, Object>>) objectMap.get("data");
+        // 封住基础模版库的信息
+        DataSource dataSource2 = new DataSource();
+        try {
+            this.asd();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        for (Map<String, Object> map : dictList) {
+            switch (map.get("dictLabel").toString()) {
+                case "databaseName":
+                    dataSource2.setDatabaseName(map.get("dictValue").toString());
+                    break;
+                case "databaseIp":
+                    dataSource2.setDatabaseIp(map.get("dictValue").toString());
+                    break;
+                case "username":
+                    dataSource2.setUsername(map.get("dictValue").toString());
+                    break;
+                case "password":
+                    dataSource2.setPassword(map.get("dictValue").toString());
+                    break;
+                case "portNumber":
+                    dataSource2.setPortNumber(Long.parseLong(map.get("dictValue").toString()));
+                    break;
+                case "databaseType":
+                    dataSource2.setDatabaseType(map.get("dictValue").toString());
+                    break;
+                // 如果还有其他字段需要处理,可以继续添加case分支
+                default:
+                    break;
+            }
+        }
+
+        // 得到数据源信息 创建连接后进行创建数据库,以及基础数据表
+        switch (dataSource.getDatabaseType()) {
+            case "mysql":
+                // 创建数据库
+                tableInfoMapper.createMysqlDataBase(dataSource.getDatabaseName());
+                // 读取基础表信息
+
+                // /system/dict/data/type/{dictType}
+
 
+                // 查询主库中字典数据源信息
+
+
+                // 创建所需的基础表
+                List<String> sd = new ArrayList<>();
+                tableInfoMapper.createMysqlTable("表名", "表描述", sd);
+
+
+                break;
+            case "sqlserver":
+                tableInfoMapper.createSqlServerDataBase(dataSource.getDatabaseName());
+
+                // tableInfoMapper.createSqlServerTable();
+                break;
+            case "dm":
+                tableInfoMapper.createDmDataBase(dataSource.getDatabaseName());
+                break;
+            case "oracle":
+                tableInfoMapper.createOracleUser(dataSource.getUsername(), dataSource.getPassword());
+                break;
+        }
+        return 1;
     }
+
+    public static void asd() throws Exception {
+        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
+        try (
+//                Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.110.52", "sa", "root1234");
+                Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.110.52:1433;", "sa", "root1234");
+                JdbcRowSet jrs = new JdbcRowSetImpl(con);
+        ) {
+//            jrs.setCommand("use test"); //执行选择数据库操作
+//            jrs.execute();
+            jrs.setCommand("select name from sys.databases;");
+            jrs.execute();
+            while (jrs.next()) {
+                System.out.println(jrs.getString(1));
+//                System.out.println(jrs.getString(1) + "\t" + jrs.getString(2) + "\t" + jrs.getString(3));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 }

+ 15 - 1
zkqy-datamodeling/src/main/resources/mapper/datamodeling/TableInfoMapper.xml

@@ -16,7 +16,7 @@
         use ${dataBaseName}
     </update>
 
-    <update id="createMysqlDataBase">
+    <update id="createMysqlTable">
         CREATE TABLE IF NOT EXISTS `${tableName}`
         (
         <foreach collection="filedList" item="filed" separator=",">
@@ -25,6 +25,20 @@
         )COMMENT #{tableComment};
     </update>
 
+    <insert id="createMysqlDataBase">
+        CREATE
+        DATABASE
+        #{dataBaseName};
+    </insert>
+
+    <insert id="createSqlServerDataBase">
+        CREATE
+        DATABASE
+        #{dataBaseName};
+    </insert>
+
+
+
     <select id="mysqlDataBaseExist" resultType="int">
         SELECT count(1) FROM information_schema.SCHEMATA where SCHEMA_NAME= #{dataBaseName};
     </select>