From 8ee749f137987de436ccd869adc43f31979286e8 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 04 三月 2022 21:09:46 +0800
Subject: [PATCH] update 初步适配oracle(未完成)

---
 ruoyi-generator/src/main/java/com/ruoyi/generator/service/BaseGenTableServiceImpl.java   |  335 +++++++++
 ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableColumnMapper.java |   24 
 ruoyi-generator/pom.xml                                                                  |   20 
 ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableMapper.java       |   62 +
 ruoyi-generator/src/main/java/com/ruoyi/generator/service/OracleGenTableServiceImpl.java |  391 ++++++++++
 ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableColumnMapper.xml       |   53 +
 ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java          |    8 
 ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableMapper.xml             |  117 +++
 ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java       |  159 ---
 /dev/null                                                                                |   44 -
 script/sql/oracle/oracle_ry_vue_4.X.sql                                                  |  954 +++++++++++++++++++++++++
 ruoyi-ui/src/api/tool/gen.js                                                             |   12 
 ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java          |    9 
 script/docker/database.yml                                                               |   17 
 14 files changed, 2,017 insertions(+), 188 deletions(-)

diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
index f44a9e5..d713c4c 100644
--- a/ruoyi-generator/pom.xml
+++ b/ruoyi-generator/pom.xml
@@ -29,6 +29,26 @@
             <artifactId>ruoyi-common</artifactId>
         </dependency>
 
+        <!-- MySql -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.oracle.database.jdbc</groupId>
+            <artifactId>ojdbc8</artifactId>
+        </dependency>
+        <!-- PostgreSql -->
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+        </dependency>
+        <!-- SqlServer -->
+        <dependency>
+            <groupId>com.microsoft.sqlserver</groupId>
+            <artifactId>mssql-jdbc</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>
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 09bf1ae..218227a 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
@@ -5,13 +5,12 @@
 import cn.hutool.core.io.IoUtil;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.generator.domain.GenTable;
 import com.ruoyi.generator.domain.GenTableColumn;
-import com.ruoyi.generator.service.IGenTableColumnService;
 import com.ruoyi.generator.service.IGenTableService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -38,7 +37,6 @@
 public class GenController extends BaseController {
 
     private final IGenTableService genTableService;
-    private final IGenTableColumnService genTableColumnService;
 
     /**
      * 鏌ヨ浠g爜鐢熸垚鍒楄〃
@@ -59,7 +57,7 @@
     public R<Map<String, Object>> getInfo(@PathVariable Long talbleId) {
         GenTable table = genTableService.selectGenTableById(talbleId);
         List<GenTable> tables = genTableService.selectGenTableAll();
-        List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
+        List<GenTableColumn> list = genTableService.selectGenTableColumnListByTableId(talbleId);
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("info", table);
         map.put("rows", list);
@@ -85,7 +83,7 @@
     @GetMapping(value = "/column/{talbleId}")
     public TableDataInfo<GenTableColumn> columnList(Long tableId) {
         TableDataInfo<GenTableColumn> dataInfo = new TableDataInfo<>();
-        List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
+        List<GenTableColumn> list = genTableService.selectGenTableColumnListByTableId(tableId);
         dataInfo.setRows(list);
         dataInfo.setTotal(list.size());
         return dataInfo;
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableColumnMapper.java
new file mode 100644
index 0000000..b14f2e6
--- /dev/null
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableColumnMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.generator.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.generator.domain.GenTableColumn;
+
+import java.util.List;
+
+/**
+ * 涓氬姟瀛楁 鏁版嵁灞�
+ *
+ * @author Lion Li
+ */
+@InterceptorIgnore(dataPermission = "true")
+public interface OracleGenTableColumnMapper extends BaseMapperPlus<OracleGenTableColumnMapper, GenTableColumn, GenTableColumn> {
+    /**
+     * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅
+     *
+     * @param tableName 琛ㄥ悕绉�
+     * @return 鍒椾俊鎭�
+     */
+    List<GenTableColumn> selectDbTableColumnsByName(String tableName);
+
+}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableMapper.java
new file mode 100644
index 0000000..23a5fed
--- /dev/null
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/OracleGenTableMapper.java
@@ -0,0 +1,62 @@
+package com.ruoyi.generator.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.generator.domain.GenTable;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 涓氬姟 鏁版嵁灞�
+ *
+ * @author Lion Li
+ */
+@InterceptorIgnore(dataPermission = "true")
+public interface OracleGenTableMapper extends BaseMapperPlus<OracleGenTableMapper, GenTable, GenTable> {
+
+    Page<GenTable> selectPageDbTableList(@Param("page") Page<GenTable> page, @Param(Constants.WRAPPER) Wrapper<Object> queryWrapper);
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     *
+     * @param queryWrapper 鏌ヨ鏉′欢
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    List<GenTable> selectDbTableList(@Param(Constants.WRAPPER) Wrapper<Object> queryWrapper);
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     *
+     * @param tableNames 琛ㄥ悕绉扮粍
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    List<GenTable> selectDbTableListByNames(String[] tableNames);
+
+    /**
+     * 鏌ヨ鎵�鏈夎〃淇℃伅
+     *
+     * @return 琛ㄤ俊鎭泦鍚�
+     */
+    List<GenTable> selectGenTableAll();
+
+    /**
+     * 鏌ヨ琛↖D涓氬姟淇℃伅
+     *
+     * @param id 涓氬姟ID
+     * @return 涓氬姟淇℃伅
+     */
+    GenTable selectGenTableById(Long id);
+
+    /**
+     * 鏌ヨ琛ㄥ悕绉颁笟鍔′俊鎭�
+     *
+     * @param tableName 琛ㄥ悕绉�
+     * @return 涓氬姟淇℃伅
+     */
+    GenTable selectGenTableByName(String tableName);
+
+}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/BaseGenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/BaseGenTableServiceImpl.java
new file mode 100644
index 0000000..b51668f
--- /dev/null
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/BaseGenTableServiceImpl.java
@@ -0,0 +1,335 @@
+package com.ruoyi.generator.service;
+
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.ruoyi.common.constant.GenConstants;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.JsonUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.generator.domain.GenTable;
+import com.ruoyi.generator.domain.GenTableColumn;
+import com.ruoyi.generator.util.VelocityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import javax.sql.DataSource;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * 涓氬姟 鏈嶅姟灞傚疄鐜�
+ *
+ * @author Lion Li
+ */
+@DS("#header.datasource")
+@Primary
+@Service
+public class BaseGenTableServiceImpl implements IGenTableService {
+
+    @Autowired
+    private DataSource dataSource;
+
+    public BaseGenTableServiceImpl getService() {
+        DynamicRoutingDataSource ds = (DynamicRoutingDataSource) this.dataSource;
+        DataSource dataSource = ds.determineDataSource();
+        try {
+            DatabaseMetaData metaData = dataSource.getConnection().getMetaData();
+            String databaseProductName = metaData.getDatabaseProductName();
+            if ("MySQL".equals(databaseProductName)) {
+                return SpringUtils.getBean(GenTableServiceImpl.class);
+            } else if ("Oracle".equals(databaseProductName)) {
+                return SpringUtils.getBean(OracleGenTableServiceImpl.class);
+            } else if ("PostgreSQL".equals(databaseProductName)) {
+
+            } else if ("Microsoft SQL Server".equals(databaseProductName)) {
+
+            } else {
+                throw new ServiceException("褰撳墠鏁版嵁搴撶被鍨嬩笉鏀寔 => " + databaseProductName);
+            }
+        } catch (SQLException e) {
+            throw new ServiceException(e.getMessage());
+        }
+        return null;
+    }
+
+    /**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     *
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+    @Override
+    public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
+        return getService().selectGenTableColumnListByTableId(tableId);
+    }
+
+    /**
+     * 鏌ヨ涓氬姟淇℃伅
+     *
+     * @param id 涓氬姟ID
+     * @return 涓氬姟淇℃伅
+     */
+    @Override
+    public GenTable selectGenTableById(Long id) {
+        return getService().selectGenTableById(id);
+    }
+
+    @Override
+    public TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable, PageQuery pageQuery) {
+        return getService().selectPageGenTableList(genTable, pageQuery);
+    }
+
+    /**
+     * 鏌ヨ涓氬姟鍒楄〃
+     *
+     * @param genTable 涓氬姟淇℃伅
+     * @return 涓氬姟闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectGenTableList(GenTable genTable) {
+        return getService().selectGenTableList(genTable);
+    }
+
+
+    @Override
+    public TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable, PageQuery pageQuery){
+        return getService().selectPageDbTableList(genTable, pageQuery);
+    }
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     *
+     * @param genTable 涓氬姟淇℃伅
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectDbTableList(GenTable genTable) {
+        return getService().selectDbTableList(genTable);
+    }
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     *
+     * @param tableNames 琛ㄥ悕绉扮粍
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectDbTableListByNames(String[] tableNames) {
+        return getService().selectDbTableListByNames(tableNames);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夎〃淇℃伅
+     *
+     * @return 琛ㄤ俊鎭泦鍚�
+     */
+    @Override
+    public List<GenTable> selectGenTableAll() {
+        return getService().selectGenTableAll();
+    }
+
+    /**
+     * 淇敼涓氬姟
+     *
+     * @param genTable 涓氬姟淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public void updateGenTable(GenTable genTable) {
+        getService().updateGenTable(genTable);
+    }
+
+    /**
+     * 鍒犻櫎涓氬姟瀵硅薄
+     *
+     * @param tableIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public void deleteGenTableByIds(Long[] tableIds) {
+        getService().deleteGenTableByIds(tableIds);
+    }
+
+    /**
+     * 瀵煎叆琛ㄧ粨鏋�
+     *
+     * @param tableList 瀵煎叆琛ㄥ垪琛�
+     */
+    @Override
+    public void importGenTable(List<GenTable> tableList) {
+        getService().importGenTable(tableList);
+    }
+
+    /**
+     * 棰勮浠g爜
+     *
+     * @param tableId 琛ㄧ紪鍙�
+     * @return 棰勮鏁版嵁鍒楄〃
+     */
+    @Override
+    public Map<String, String> previewCode(Long tableId) {
+        return getService().previewCode(tableId);
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     *
+     * @param tableName 琛ㄥ悕绉�
+     * @return 鏁版嵁
+     */
+    @Override
+    public byte[] downloadCode(String tableName) {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        ZipOutputStream zip = new ZipOutputStream(outputStream);
+        generatorCode(tableName, zip);
+        IoUtil.close(zip);
+        return outputStream.toByteArray();
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
+     *
+     * @param tableName 琛ㄥ悕绉�
+     */
+    @Override
+    public void generatorCode(String tableName) {
+        getService().generatorCode(tableName);
+    }
+
+    /**
+     * 鍚屾鏁版嵁搴�
+     *
+     * @param tableName 琛ㄥ悕绉�
+     */
+    @Override
+    public void synchDb(String tableName) {
+        getService().synchDb(tableName);
+    }
+
+    /**
+     * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
+     *
+     * @param tableNames 琛ㄦ暟缁�
+     * @return 鏁版嵁
+     */
+    @Override
+    public byte[] downloadCode(String[] tableNames) {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        ZipOutputStream zip = new ZipOutputStream(outputStream);
+        for (String tableName : tableNames) {
+            generatorCode(tableName, zip);
+        }
+        IoUtil.close(zip);
+        return outputStream.toByteArray();
+    }
+
+    /**
+     * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜
+     */
+    public void generatorCode(String tableName, ZipOutputStream zip) {
+        getService().generatorCode(tableName, zip);
+    }
+
+    /**
+     * 淇敼淇濆瓨鍙傛暟鏍¢獙
+     *
+     * @param genTable 涓氬姟淇℃伅
+     */
+    @Override
+    public void validateEdit(GenTable genTable) {
+        if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
+            String options = JsonUtils.toJsonString(genTable.getParams());
+            Dict paramsObj = JsonUtils.parseMap(options);
+            if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_CODE))) {
+                throw new ServiceException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌�");
+            } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_PARENT_CODE))) {
+                throw new ServiceException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖");
+            } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_NAME))) {
+                throw new ServiceException("鏍戝悕绉板瓧娈典笉鑳戒负绌�");
+            } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) {
+                if (StringUtils.isEmpty(genTable.getSubTableName())) {
+                    throw new ServiceException("鍏宠仈瀛愯〃鐨勮〃鍚嶄笉鑳戒负绌�");
+                } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) {
+                    throw new ServiceException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖");
+                }
+            }
+        }
+    }
+
+    /**
+     * 璁剧疆涓婚敭鍒椾俊鎭�
+     *
+     * @param table 涓氬姟琛ㄤ俊鎭�
+     */
+    public void setPkColumn(GenTable table) {
+        for (GenTableColumn column : table.getColumns()) {
+            if (column.isPk()) {
+                table.setPkColumn(column);
+                break;
+            }
+        }
+        if (ObjectUtil.isNull(table.getPkColumn())) {
+            table.setPkColumn(table.getColumns().get(0));
+        }
+        if (GenConstants.TPL_SUB.equals(table.getTplCategory())) {
+            for (GenTableColumn column : table.getSubTable().getColumns()) {
+                if (column.isPk()) {
+                    table.getSubTable().setPkColumn(column);
+                    break;
+                }
+            }
+            if (ObjectUtil.isNull(table.getSubTable().getPkColumn())) {
+                table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0));
+            }
+        }
+    }
+
+    /**
+     * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊�
+     *
+     * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄
+     */
+    public void setTableFromOptions(GenTable genTable) {
+        Dict paramsObj = JsonUtils.parseMap(genTable.getOptions());
+        if (ObjectUtil.isNotNull(paramsObj)) {
+            String treeCode = paramsObj.getStr(GenConstants.TREE_CODE);
+            String treeParentCode = paramsObj.getStr(GenConstants.TREE_PARENT_CODE);
+            String treeName = paramsObj.getStr(GenConstants.TREE_NAME);
+            String parentMenuId = paramsObj.getStr(GenConstants.PARENT_MENU_ID);
+            String parentMenuName = paramsObj.getStr(GenConstants.PARENT_MENU_NAME);
+
+            genTable.setTreeCode(treeCode);
+            genTable.setTreeParentCode(treeParentCode);
+            genTable.setTreeName(treeName);
+            genTable.setParentMenuId(parentMenuId);
+            genTable.setParentMenuName(parentMenuName);
+        }
+    }
+
+    /**
+     * 鑾峰彇浠g爜鐢熸垚鍦板潃
+     *
+     * @param table    涓氬姟琛ㄤ俊鎭�
+     * @param template 妯℃澘鏂囦欢璺緞
+     * @return 鐢熸垚鍦板潃
+     */
+    public static String getGenPath(GenTable table, String template) {
+        String genPath = table.getGenPath();
+        if (StringUtils.equals(genPath, "/")) {
+            return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table);
+        }
+        return genPath + File.separator + VelocityUtils.getFileName(template, table);
+    }
+}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java
deleted file mode 100644
index 78260aa..0000000
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ruoyi.generator.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ruoyi.generator.domain.GenTableColumn;
-import com.ruoyi.generator.mapper.GenTableColumnMapper;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 涓氬姟瀛楁 鏈嶅姟灞傚疄鐜�
- *
- * @author Lion Li
- */
-@RequiredArgsConstructor
-@Service
-public class GenTableColumnServiceImpl implements IGenTableColumnService {
-
-    private final GenTableColumnMapper baseMapper;
-
-    /**
-     * 鏌ヨ涓氬姟瀛楁鍒楄〃
-     *
-     * @param tableId 涓氬姟瀛楁缂栧彿
-     * @return 涓氬姟瀛楁闆嗗悎
-     */
-    @Override
-    public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
-        return baseMapper.selectList(new LambdaQueryWrapper<GenTableColumn>()
-            .eq(GenTableColumn::getTableId, tableId)
-            .orderByAsc(GenTableColumn::getSort));
-    }
-
-    /**
-     * 鏂板涓氬姟瀛楁
-     *
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int insertGenTableColumn(GenTableColumn genTableColumn) {
-        return baseMapper.insert(genTableColumn);
-    }
-
-    /**
-     * 淇敼涓氬姟瀛楁
-     *
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    @Override
-    public int updateGenTableColumn(GenTableColumn genTableColumn) {
-        return baseMapper.updateById(genTableColumn);
-    }
-
-    /**
-     * 鍒犻櫎涓氬姟瀛楁瀵硅薄
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    @Override
-    public int deleteGenTableColumnByIds(String ids) {
-        return baseMapper.deleteBatchIds(Arrays.asList(ids.split(",")));
-    }
-}
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 80b1c96..f957009 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
@@ -2,15 +2,12 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.lang.Dict;
-import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.constant.GenConstants;
 import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.ServiceException;
@@ -31,10 +28,7 @@
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
@@ -52,10 +46,23 @@
 @Slf4j
 @RequiredArgsConstructor
 @Service
-public class GenTableServiceImpl implements IGenTableService {
+public class GenTableServiceImpl extends BaseGenTableServiceImpl {
 
     private final GenTableMapper baseMapper;
     private final GenTableColumnMapper genTableColumnMapper;
+
+    /**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     *
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+    @Override
+    public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
+        return genTableColumnMapper.selectList(new LambdaQueryWrapper<GenTableColumn>()
+            .eq(GenTableColumn::getTableId, tableId)
+            .orderByAsc(GenTableColumn::getSort));
+    }
 
     /**
      * 鏌ヨ涓氬姟淇℃伅
@@ -119,8 +126,8 @@
         Map<String, Object> params = genTable.getParams();
         QueryWrapper<Object> wrapper = Wrappers.query();
         wrapper.apply("table_schema = (select database())")
-            .notLike("table_name", "xxl_job_%")
-            .notLike("table_name", "gen_%")
+            .notLike("table_name", "xxl_job_")
+            .notLike("table_name", "gen_")
             .notInSql("table_name", "select table_name from gen_table")
             .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName()))
             .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment()))
@@ -158,7 +165,6 @@
      * @return 缁撴灉
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void updateGenTable(GenTable genTable) {
         String options = JsonUtils.toJsonString(genTable.getParams());
         genTable.setOptions(options);
@@ -177,7 +183,6 @@
      * @return 缁撴灉
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void deleteGenTableByIds(Long[] tableIds) {
         List<Long> ids = Arrays.asList(tableIds);
         baseMapper.deleteBatchIds(ids);
@@ -190,7 +195,6 @@
      * @param tableList 瀵煎叆琛ㄥ垪琛�
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void importGenTable(List<GenTable> tableList) {
         String operName = LoginHelper.getUsername();
         try {
@@ -248,21 +252,6 @@
     }
 
     /**
-     * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
-     *
-     * @param tableName 琛ㄥ悕绉�
-     * @return 鏁版嵁
-     */
-    @Override
-    public byte[] downloadCode(String tableName) {
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        ZipOutputStream zip = new ZipOutputStream(outputStream);
-        generatorCode(tableName, zip);
-        IoUtil.close(zip);
-        return outputStream.toByteArray();
-    }
-
-    /**
      * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
      *
      * @param tableName 琛ㄥ悕绉�
@@ -304,7 +293,6 @@
      * @param tableName 琛ㄥ悕绉�
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public void synchDb(String tableName) {
         GenTable table = baseMapper.selectGenTableByName(tableName);
         List<GenTableColumn> tableColumns = table.getColumns();
@@ -328,9 +316,8 @@
                     column.setQueryType(prevColumn.getQueryType());
                 }
                 if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk()
-                        && (column.isInsert() || column.isEdit())
-                        && ((column.isUsableColumn()) || (!column.isSuperColumn())))
-                {
+                    && (column.isInsert() || column.isEdit())
+                    && ((column.isUsableColumn()) || (!column.isSuperColumn()))) {
                     // 濡傛灉鏄�(鏂板/淇敼&闈炰富閿�/闈炲拷鐣ュ強鐖跺睘鎬�)锛岀户缁繚鐣欏繀濉�/鏄剧ず绫诲瀷閫夐」
                     column.setIsRequired(prevColumn.getIsRequired());
                     column.setHtmlType(prevColumn.getHtmlType());
@@ -352,26 +339,10 @@
     }
 
     /**
-     * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級
-     *
-     * @param tableNames 琛ㄦ暟缁�
-     * @return 鏁版嵁
-     */
-    @Override
-    public byte[] downloadCode(String[] tableNames) {
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        ZipOutputStream zip = new ZipOutputStream(outputStream);
-        for (String tableName : tableNames) {
-            generatorCode(tableName, zip);
-        }
-        IoUtil.close(zip);
-        return outputStream.toByteArray();
-    }
-
-    /**
      * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜
      */
-    private void generatorCode(String tableName, ZipOutputStream zip) {
+    @Override
+    public void generatorCode(String tableName, ZipOutputStream zip) {
         // 鏌ヨ琛ㄤ俊鎭�
         GenTable table = baseMapper.selectGenTableByName(tableName);
         // 璁剧疆涓诲瓙琛ㄤ俊鎭�
@@ -404,60 +375,6 @@
     }
 
     /**
-     * 淇敼淇濆瓨鍙傛暟鏍¢獙
-     *
-     * @param genTable 涓氬姟淇℃伅
-     */
-    @Override
-    public void validateEdit(GenTable genTable) {
-        if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
-            String options = JsonUtils.toJsonString(genTable.getParams());
-            Dict paramsObj = JsonUtils.parseMap(options);
-            if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_CODE))) {
-                throw new ServiceException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌�");
-            } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_PARENT_CODE))) {
-                throw new ServiceException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖");
-            } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_NAME))) {
-                throw new ServiceException("鏍戝悕绉板瓧娈典笉鑳戒负绌�");
-            } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) {
-                if (StringUtils.isEmpty(genTable.getSubTableName())) {
-                    throw new ServiceException("鍏宠仈瀛愯〃鐨勮〃鍚嶄笉鑳戒负绌�");
-                } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) {
-                    throw new ServiceException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖");
-                }
-            }
-        }
-    }
-
-    /**
-     * 璁剧疆涓婚敭鍒椾俊鎭�
-     *
-     * @param table 涓氬姟琛ㄤ俊鎭�
-     */
-    public void setPkColumn(GenTable table) {
-        for (GenTableColumn column : table.getColumns()) {
-            if (column.isPk()) {
-                table.setPkColumn(column);
-                break;
-            }
-        }
-        if (ObjectUtil.isNull(table.getPkColumn())) {
-            table.setPkColumn(table.getColumns().get(0));
-        }
-        if (GenConstants.TPL_SUB.equals(table.getTplCategory())) {
-            for (GenTableColumn column : table.getSubTable().getColumns()) {
-                if (column.isPk()) {
-                    table.getSubTable().setPkColumn(column);
-                    break;
-                }
-            }
-            if (ObjectUtil.isNull(table.getSubTable().getPkColumn())) {
-                table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0));
-            }
-        }
-    }
-
-    /**
      * 璁剧疆涓诲瓙琛ㄤ俊鎭�
      *
      * @param table 涓氬姟琛ㄤ俊鎭�
@@ -469,40 +386,4 @@
         }
     }
 
-    /**
-     * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊�
-     *
-     * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄
-     */
-    public void setTableFromOptions(GenTable genTable) {
-        Dict paramsObj = JsonUtils.parseMap(genTable.getOptions());
-        if (ObjectUtil.isNotNull(paramsObj)) {
-            String treeCode = paramsObj.getStr(GenConstants.TREE_CODE);
-            String treeParentCode = paramsObj.getStr(GenConstants.TREE_PARENT_CODE);
-            String treeName = paramsObj.getStr(GenConstants.TREE_NAME);
-            String parentMenuId = paramsObj.getStr(GenConstants.PARENT_MENU_ID);
-            String parentMenuName = paramsObj.getStr(GenConstants.PARENT_MENU_NAME);
-
-            genTable.setTreeCode(treeCode);
-            genTable.setTreeParentCode(treeParentCode);
-            genTable.setTreeName(treeName);
-            genTable.setParentMenuId(parentMenuId);
-            genTable.setParentMenuName(parentMenuName);
-        }
-    }
-
-    /**
-     * 鑾峰彇浠g爜鐢熸垚鍦板潃
-     *
-     * @param table    涓氬姟琛ㄤ俊鎭�
-     * @param template 妯℃澘鏂囦欢璺緞
-     * @return 鐢熸垚鍦板潃
-     */
-    public static String getGenPath(GenTable table, String template) {
-        String genPath = table.getGenPath();
-        if (StringUtils.equals(genPath, "/")) {
-            return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table);
-        }
-        return genPath + File.separator + VelocityUtils.getFileName(template, table);
-    }
 }
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java
deleted file mode 100644
index f14f36a..0000000
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.ruoyi.generator.service;
-
-import com.ruoyi.generator.domain.GenTableColumn;
-
-import java.util.List;
-
-/**
- * 涓氬姟瀛楁 鏈嶅姟灞�
- *
- * @author Lion Li
- */
-public interface IGenTableColumnService {
-    /**
-     * 鏌ヨ涓氬姟瀛楁鍒楄〃
-     *
-     * @param tableId 涓氬姟瀛楁缂栧彿
-     * @return 涓氬姟瀛楁闆嗗悎
-     */
-    List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
-
-    /**
-     * 鏂板涓氬姟瀛楁
-     *
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    int insertGenTableColumn(GenTableColumn genTableColumn);
-
-    /**
-     * 淇敼涓氬姟瀛楁
-     *
-     * @param genTableColumn 涓氬姟瀛楁淇℃伅
-     * @return 缁撴灉
-     */
-    int updateGenTableColumn(GenTableColumn genTableColumn);
-
-    /**
-     * 鍒犻櫎涓氬姟瀛楁淇℃伅
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
-     * @return 缁撴灉
-     */
-    int deleteGenTableColumnByIds(String ids);
-}
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 27fac79..092020a 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
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.generator.domain.GenTable;
+import com.ruoyi.generator.domain.GenTableColumn;
 
 import java.util.List;
 import java.util.Map;
@@ -14,6 +15,14 @@
  */
 public interface IGenTableService {
 
+    /**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     *
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+    List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
+
 
     TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable, PageQuery pageQuery);
 
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/OracleGenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/OracleGenTableServiceImpl.java
new file mode 100644
index 0000000..79550d5
--- /dev/null
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/OracleGenTableServiceImpl.java
@@ -0,0 +1,391 @@
+package com.ruoyi.generator.service;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.helper.LoginHelper;
+import com.ruoyi.common.utils.JsonUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.generator.domain.GenTable;
+import com.ruoyi.generator.domain.GenTableColumn;
+import com.ruoyi.generator.mapper.OracleGenTableColumnMapper;
+import com.ruoyi.generator.mapper.OracleGenTableMapper;
+import com.ruoyi.generator.util.GenUtils;
+import com.ruoyi.generator.util.VelocityInitializer;
+import com.ruoyi.generator.util.VelocityUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * 涓氬姟 鏈嶅姟灞傚疄鐜�
+ *
+ * @author Lion Li
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class OracleGenTableServiceImpl extends BaseGenTableServiceImpl {
+
+    private final OracleGenTableMapper baseMapper;
+    private final OracleGenTableColumnMapper genTableColumnMapper;
+
+    /**
+     * 鏌ヨ涓氬姟瀛楁鍒楄〃
+     *
+     * @param tableId 涓氬姟瀛楁缂栧彿
+     * @return 涓氬姟瀛楁闆嗗悎
+     */
+    @Override
+    public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
+        return genTableColumnMapper.selectList(new LambdaQueryWrapper<GenTableColumn>()
+            .eq(GenTableColumn::getTableId, tableId)
+            .orderByAsc(GenTableColumn::getSort));
+    }
+    /**
+     * 鏌ヨ涓氬姟淇℃伅
+     *
+     * @param id 涓氬姟ID
+     * @return 涓氬姟淇℃伅
+     */
+    @Override
+    public GenTable selectGenTableById(Long id) {
+        GenTable genTable = baseMapper.selectGenTableById(id);
+        setTableFromOptions(genTable);
+        return genTable;
+    }
+
+    @Override
+    public TableDataInfo<GenTable> selectPageGenTableList(GenTable genTable, PageQuery pageQuery) {
+        Page<GenTable> page = baseMapper.selectPage(pageQuery.build(), this.buildGenTableQueryWrapper(genTable));
+        return TableDataInfo.build(page);
+    }
+
+    /**
+     * 鏌ヨ涓氬姟鍒楄〃
+     *
+     * @param genTable 涓氬姟淇℃伅
+     * @return 涓氬姟闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectGenTableList(GenTable genTable) {
+        return baseMapper.selectList(this.buildGenTableQueryWrapper(genTable));
+    }
+
+    private QueryWrapper<GenTable> buildGenTableQueryWrapper(GenTable genTable) {
+        Map<String, Object> params = genTable.getParams();
+        QueryWrapper<GenTable> wrapper = Wrappers.query();
+        wrapper.like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName()))
+            .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment()))
+            .between(params.get("beginTime") != null && params.get("endTime") != null,
+                "create_time", params.get("beginTime"), params.get("endTime"));
+        return wrapper;
+    }
+
+
+    @Override
+    public TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable, PageQuery pageQuery) {
+        Page<GenTable> page = baseMapper.selectPageDbTableList(pageQuery.build(), this.buildDbTableQueryWrapper(genTable));
+        return TableDataInfo.build(page);
+    }
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     *
+     * @param genTable 涓氬姟淇℃伅
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectDbTableList(GenTable genTable) {
+        return baseMapper.selectDbTableList(this.buildDbTableQueryWrapper(genTable));
+    }
+
+    private Wrapper<Object> buildDbTableQueryWrapper(GenTable genTable) {
+        Map<String, Object> params = genTable.getParams();
+        QueryWrapper<Object> wrapper = Wrappers.query();
+        wrapper.apply("dt.table_name = dtc.table_name")
+            .apply("dt.table_name = uo.object_name")
+            .eq("uo.object_type ", "TABLE")
+            .notLike("dt.table_name", "XXL_JOB_")
+            .notLike("dt.table_name", "GEN_")
+            .notInSql("lower(dt.table_name)", "select table_name from gen_table")
+            .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(dt.table_name)", StringUtils.lowerCase(genTable.getTableName()))
+            .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(dt.table_comment)", StringUtils.lowerCase(genTable.getTableComment()))
+            .between(params.get("beginTime") != null && params.get("endTime") != null,
+                "create_time", params.get("beginTime"), params.get("endTime"))
+            .orderByDesc("create_time");
+        return wrapper;
+    }
+
+    /**
+     * 鏌ヨ鎹簱鍒楄〃
+     *
+     * @param tableNames 琛ㄥ悕绉扮粍
+     * @return 鏁版嵁搴撹〃闆嗗悎
+     */
+    @Override
+    public List<GenTable> selectDbTableListByNames(String[] tableNames) {
+        return baseMapper.selectDbTableListByNames(tableNames);
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夎〃淇℃伅
+     *
+     * @return 琛ㄤ俊鎭泦鍚�
+     */
+    @Override
+    public List<GenTable> selectGenTableAll() {
+        return baseMapper.selectGenTableAll();
+    }
+
+    /**
+     * 淇敼涓氬姟
+     *
+     * @param genTable 涓氬姟淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public void updateGenTable(GenTable genTable) {
+        String options = JsonUtils.toJsonString(genTable.getParams());
+        genTable.setOptions(options);
+        int row = baseMapper.updateById(genTable);
+        if (row > 0) {
+            for (GenTableColumn cenTableColumn : genTable.getColumns()) {
+                genTableColumnMapper.updateById(cenTableColumn);
+            }
+        }
+    }
+
+    /**
+     * 鍒犻櫎涓氬姟瀵硅薄
+     *
+     * @param tableIds 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public void deleteGenTableByIds(Long[] tableIds) {
+        List<Long> ids = Arrays.asList(tableIds);
+        baseMapper.deleteBatchIds(ids);
+        genTableColumnMapper.delete(new LambdaQueryWrapper<GenTableColumn>().in(GenTableColumn::getTableId, ids));
+    }
+
+    /**
+     * 瀵煎叆琛ㄧ粨鏋�
+     *
+     * @param tableList 瀵煎叆琛ㄥ垪琛�
+     */
+    @Override
+    public void importGenTable(List<GenTable> tableList) {
+        String operName = LoginHelper.getUsername();
+        try {
+            for (GenTable table : tableList) {
+                String tableName = table.getTableName();
+                GenUtils.initTable(table, operName);
+                int row = baseMapper.insert(table);
+                if (row > 0) {
+                    // 淇濆瓨鍒椾俊鎭�
+                    List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+                    List<GenTableColumn> saveColumns = new ArrayList<>();
+                    for (GenTableColumn column : genTableColumns) {
+                        GenUtils.initColumnField(column, table);
+                        saveColumns.add(column);
+                    }
+                    if (CollUtil.isNotEmpty(saveColumns)) {
+                        genTableColumnMapper.insertBatch(saveColumns);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            throw new ServiceException("瀵煎叆澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 棰勮浠g爜
+     *
+     * @param tableId 琛ㄧ紪鍙�
+     * @return 棰勮鏁版嵁鍒楄〃
+     */
+    @Override
+    public Map<String, String> previewCode(Long tableId) {
+        Map<String, String> dataMap = new LinkedHashMap<>();
+        // 鏌ヨ琛ㄤ俊鎭�
+        GenTable table = baseMapper.selectGenTableById(tableId);
+        // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+        setSubTable(table);
+        // 璁剧疆涓婚敭鍒椾俊鎭�
+        setPkColumn(table);
+        VelocityInitializer.initVelocity();
+
+        VelocityContext context = VelocityUtils.prepareContext(table);
+
+        // 鑾峰彇妯℃澘鍒楄〃
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
+        for (String template : templates) {
+            // 娓叉煋妯℃澘
+            StringWriter sw = new StringWriter();
+            Template tpl = Velocity.getTemplate(template, Constants.UTF8);
+            tpl.merge(context, sw);
+            dataMap.put(template, sw.toString());
+        }
+        return dataMap;
+    }
+
+    /**
+     * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
+     *
+     * @param tableName 琛ㄥ悕绉�
+     */
+    @Override
+    public void generatorCode(String tableName) {
+        // 鏌ヨ琛ㄤ俊鎭�
+        GenTable table = baseMapper.selectGenTableByName(tableName);
+        // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+        setSubTable(table);
+        // 璁剧疆涓婚敭鍒椾俊鎭�
+        setPkColumn(table);
+
+        VelocityInitializer.initVelocity();
+
+        VelocityContext context = VelocityUtils.prepareContext(table);
+
+        // 鑾峰彇妯℃澘鍒楄〃
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
+        for (String template : templates) {
+            if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) {
+                // 娓叉煋妯℃澘
+                StringWriter sw = new StringWriter();
+                Template tpl = Velocity.getTemplate(template, Constants.UTF8);
+                tpl.merge(context, sw);
+                try {
+                    String path = getGenPath(table, template);
+                    FileUtils.writeUtf8String(sw.toString(), path);
+                } catch (Exception e) {
+                    throw new ServiceException("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName());
+                }
+            }
+        }
+    }
+
+    /**
+     * 鍚屾鏁版嵁搴�
+     *
+     * @param tableName 琛ㄥ悕绉�
+     */
+    @Override
+    public void synchDb(String tableName) {
+        GenTable table = baseMapper.selectGenTableByName(tableName);
+        List<GenTableColumn> tableColumns = table.getColumns();
+        Map<String, GenTableColumn> tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity()));
+
+        List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+        if (CollUtil.isEmpty(dbTableColumns)) {
+            throw new ServiceException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪");
+        }
+        List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
+
+        List<GenTableColumn> saveColumns = new ArrayList<>();
+        dbTableColumns.forEach(column -> {
+            GenUtils.initColumnField(column, table);
+            if (tableColumnMap.containsKey(column.getColumnName())) {
+                GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName());
+                column.setColumnId(prevColumn.getColumnId());
+                if (column.isList()) {
+                    // 濡傛灉鏄垪琛紝缁х画淇濈暀鏌ヨ鏂瑰紡/瀛楀吀绫诲瀷閫夐」
+                    column.setDictType(prevColumn.getDictType());
+                    column.setQueryType(prevColumn.getQueryType());
+                }
+                if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk()
+                    && (column.isInsert() || column.isEdit())
+                    && ((column.isUsableColumn()) || (!column.isSuperColumn())))
+                {
+                    // 濡傛灉鏄�(鏂板/淇敼&闈炰富閿�/闈炲拷鐣ュ強鐖跺睘鎬�)锛岀户缁繚鐣欏繀濉�/鏄剧ず绫诲瀷閫夐」
+                    column.setIsRequired(prevColumn.getIsRequired());
+                    column.setHtmlType(prevColumn.getHtmlType());
+                }
+                genTableColumnMapper.updateById(column);
+            } else {
+                genTableColumnMapper.insert(column);
+            }
+        });
+        if (CollUtil.isNotEmpty(saveColumns)) {
+            genTableColumnMapper.insertBatch(saveColumns);
+        }
+
+        List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(delColumns)) {
+            List<Long> ids = delColumns.stream().map(GenTableColumn::getColumnId).collect(Collectors.toList());
+            genTableColumnMapper.deleteBatchIds(ids);
+        }
+    }
+
+    /**
+     * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜
+     */
+    @Override
+    public void generatorCode(String tableName, ZipOutputStream zip) {
+        // 鏌ヨ琛ㄤ俊鎭�
+        GenTable table = baseMapper.selectGenTableByName(tableName);
+        // 璁剧疆涓诲瓙琛ㄤ俊鎭�
+        setSubTable(table);
+        // 璁剧疆涓婚敭鍒椾俊鎭�
+        setPkColumn(table);
+
+        VelocityInitializer.initVelocity();
+
+        VelocityContext context = VelocityUtils.prepareContext(table);
+
+        // 鑾峰彇妯℃澘鍒楄〃
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
+        for (String template : templates) {
+            // 娓叉煋妯℃澘
+            StringWriter sw = new StringWriter();
+            Template tpl = Velocity.getTemplate(template, Constants.UTF8);
+            tpl.merge(context, sw);
+            try {
+                // 娣诲姞鍒皕ip
+                zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table)));
+                IoUtil.write(zip, StandardCharsets.UTF_8, false, sw.toString());
+                IoUtil.close(sw);
+                zip.flush();
+                zip.closeEntry();
+            } catch (IOException e) {
+                log.error("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName(), e);
+            }
+        }
+    }
+
+    /**
+     * 璁剧疆涓诲瓙琛ㄤ俊鎭�
+     *
+     * @param table 涓氬姟琛ㄤ俊鎭�
+     */
+    public void setSubTable(GenTable table) {
+        String subTableName = table.getSubTableName();
+        if (StringUtils.isNotEmpty(subTableName)) {
+            table.setSubTable(baseMapper.selectGenTableByName(subTableName));
+        }
+    }
+
+}
diff --git a/ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableColumnMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableColumnMapper.xml
new file mode 100644
index 0000000..9317ab1
--- /dev/null
+++ b/ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableColumnMapper.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.generator.mapper.OracleGenTableColumnMapper">
+
+    <resultMap type="GenTableColumn" id="GenTableColumnResult">
+        <id     property="columnId"       column="column_id"      />
+        <result property="tableId"        column="table_id"       />
+        <result property="columnName"     column="column_name"    />
+        <result property="columnComment"  column="column_comment" />
+        <result property="columnType"     column="column_type"    />
+        <result property="javaType"       column="java_type"      />
+        <result property="javaField"      column="java_field"     />
+        <result property="isPk"           column="is_pk"          />
+        <result property="isIncrement"    column="is_increment"   />
+        <result property="isRequired"     column="is_required"    />
+        <result property="isInsert"       column="is_insert"      />
+        <result property="isEdit"         column="is_edit"        />
+        <result property="isList"         column="is_list"        />
+        <result property="isQuery"        column="is_query"       />
+        <result property="queryType"      column="query_type"     />
+        <result property="htmlType"       column="html_type"      />
+        <result property="dictType"       column="dict_type"      />
+        <result property="sort"           column="sort"           />
+        <result property="createBy"       column="create_by"      />
+        <result property="createTime"     column="create_time"    />
+        <result property="updateBy"       column="update_by"      />
+        <result property="updateTime"     column="update_time"    />
+    </resultMap>
+
+    <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
+        select lower(temp.column_name) as column_name,
+               (case when (temp.nullable = 'N'  and  temp.constraint_type != 'P') then '1' else null end) as is_required,
+               (case when temp.constraint_type = 'P' then '1' else '0' end) as is_pk,
+               temp.column_id as sort,
+               temp.comments as column_comment,
+               (case when temp.constraint_type = 'P' then '1' else '0' end) as is_increment,
+               lower(temp.data_type) as column_type
+        from (
+                 select col.column_id, col.column_name,col.nullable, col.data_type, colc.comments, uc.constraint_type
+                      , row_number() over (partition by col.column_name order by uc.constraint_type desc) as row_flg
+                 from user_tab_columns col
+                          left join user_col_comments colc on colc.table_name = col.table_name and colc.column_name = col.column_name
+                          left join user_cons_columns ucc on ucc.table_name = col.table_name and ucc.column_name = col.column_name
+                          left join user_constraints uc on uc.constraint_name = ucc.constraint_name
+                 where col.table_name = upper(#{tableName})
+             ) temp
+        WHERE temp.row_flg = 1
+        ORDER BY temp.column_id
+    </select>
+
+</mapper>
diff --git a/ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableMapper.xml
new file mode 100644
index 0000000..5bf1a20
--- /dev/null
+++ b/ruoyi-generator/src/main/resources/mapper/generator/OracleGenTableMapper.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.generator.mapper.OracleGenTableMapper">
+
+    <resultMap type="GenTable" id="GenTableResult">
+        <id     property="tableId"        column="table_id"          />
+        <result property="tableName"      column="table_name"        />
+        <result property="tableComment"   column="table_comment"     />
+        <result property="subTableName"   column="sub_table_name"    />
+        <result property="subTableFkName" column="sub_table_fk_name" />
+        <result property="className"      column="class_name"        />
+        <result property="tplCategory"    column="tpl_category"      />
+        <result property="packageName"    column="package_name"      />
+        <result property="moduleName"     column="module_name"       />
+        <result property="businessName"   column="business_name"     />
+        <result property="functionName"   column="function_name"     />
+        <result property="functionAuthor" column="function_author"   />
+        <result property="genType"        column="gen_type"          />
+        <result property="genPath"        column="gen_path"          />
+        <result property="options"        column="options"           />
+        <result property="createBy"       column="create_by"         />
+        <result property="createTime"     column="create_time"       />
+        <result property="updateBy"       column="update_by"         />
+        <result property="updateTime"     column="update_time"       />
+        <result property="remark"         column="remark"            />
+        <collection  property="columns"  javaType="java.util.List"  resultMap="GenTableColumnResult" />
+    </resultMap>
+
+    <resultMap type="GenTableColumn" id="GenTableColumnResult">
+        <id     property="columnId"       column="column_id"      />
+        <result property="tableId"        column="table_id"       />
+        <result property="columnName"     column="column_name"    />
+        <result property="columnComment"  column="column_comment" />
+        <result property="columnType"     column="column_type"    />
+        <result property="javaType"       column="java_type"      />
+        <result property="javaField"      column="java_field"     />
+        <result property="isPk"           column="is_pk"          />
+        <result property="isIncrement"    column="is_increment"   />
+        <result property="isRequired"     column="is_required"    />
+        <result property="isInsert"       column="is_insert"      />
+        <result property="isEdit"         column="is_edit"        />
+        <result property="isList"         column="is_list"        />
+        <result property="isQuery"        column="is_query"       />
+        <result property="queryType"      column="query_type"     />
+        <result property="htmlType"       column="html_type"      />
+        <result property="dictType"       column="dict_type"      />
+        <result property="sort"           column="sort"           />
+        <result property="createBy"       column="create_by"      />
+        <result property="createTime"     column="create_time"    />
+        <result property="updateBy"       column="update_by"      />
+        <result property="updateTime"     column="update_time"    />
+    </resultMap>
+
+    <select id="selectPageDbTableList" resultMap="GenTableResult">
+        select lower(dt.table_name) as table_name, dtc.comments as table_comment, uo.created as create_time, uo.last_ddl_time as update_time
+        from user_tables dt, user_tab_comments dtc, user_objects uo
+        ${ew.getCustomSqlSegment}
+    </select>
+
+    <select id="selectDbTableList" resultMap="GenTableResult">
+        select lower(dt.table_name) as table_name, dtc.comments as table_comment, uo.created as create_time, uo.last_ddl_time as update_time
+        from user_tables dt, user_tab_comments dtc, user_objects uo
+        ${ew.getCustomSqlSegment}
+    </select>
+
+    <select id="selectDbTableListByNames" resultMap="GenTableResult">
+        select lower(dt.table_name) as table_name, dtc.comments as table_comment, uo.created as create_time, uo.last_ddl_time as update_time
+        from user_tables dt, user_tab_comments dtc, user_objects uo
+        where dt.table_name = dtc.table_name
+        and dt.table_name = uo.object_name
+        and uo.object_type = 'TABLE'
+        AND dt.table_name NOT LIKE 'XXL_JOB_%' AND dt.table_name NOT LIKE 'GEN_%'
+        AND dt.table_name NOT IN (select table_name from gen_table)
+        and lower(dt.table_name) in
+        <foreach collection="array" item="name" open="(" separator="," close=")">
+            #{name}
+        </foreach>
+    </select>
+
+    <select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
+        select lower(dt.table_name) as table_name, dtc.comments as table_comment, uo.created as create_time, uo.last_ddl_time as update_time
+        from user_tables dt, user_tab_comments dtc, user_objects uo
+        where dt.table_name = dtc.table_name
+        and dt.table_name = uo.object_name
+        and uo.object_type = 'TABLE'
+        AND dt.table_name NOT LIKE 'XXL_JOB_%' AND dt.table_name NOT LIKE 'GEN_%'
+        AND dt.table_name NOT IN (select table_name from gen_table)
+        and lower(dt.table_name) = #{tableName}
+    </select>
+
+    <select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
+        SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
+               c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+        FROM gen_table t
+             LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+        where t.table_id = #{tableId} order by c.sort
+    </select>
+
+    <select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
+        SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
+               c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+        FROM gen_table t
+             LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+        where t.table_name = #{tableName} order by c.sort
+    </select>
+
+    <select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult">
+        SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+               c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
+        FROM gen_table t
+             LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+        order by c.sort
+    </select>
+
+</mapper>
diff --git a/ruoyi-ui/src/api/tool/gen.js b/ruoyi-ui/src/api/tool/gen.js
index 4506927..5bea272 100644
--- a/ruoyi-ui/src/api/tool/gen.js
+++ b/ruoyi-ui/src/api/tool/gen.js
@@ -1,16 +1,21 @@
 import request from '@/utils/request'
 
+const dataName = "master";
+
 // 鏌ヨ鐢熸垚琛ㄦ暟鎹�
 export function listTable(query) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/list',
     method: 'get',
     params: query
   })
 }
+
 // 鏌ヨdb鏁版嵁搴撳垪琛�
 export function listDbTable(query) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/db/list',
     method: 'get',
     params: query
@@ -20,6 +25,7 @@
 // 鏌ヨ琛ㄨ缁嗕俊鎭�
 export function getGenTable(tableId) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/' + tableId,
     method: 'get'
   })
@@ -28,6 +34,7 @@
 // 淇敼浠g爜鐢熸垚淇℃伅
 export function updateGenTable(data) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen',
     method: 'put',
     data: data
@@ -37,6 +44,7 @@
 // 瀵煎叆琛�
 export function importTable(data) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/importTable',
     method: 'post',
     params: data
@@ -46,6 +54,7 @@
 // 棰勮鐢熸垚浠g爜
 export function previewTable(tableId) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/preview/' + tableId,
     method: 'get'
   })
@@ -54,6 +63,7 @@
 // 鍒犻櫎琛ㄦ暟鎹�
 export function delTable(tableId) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/' + tableId,
     method: 'delete'
   })
@@ -62,6 +72,7 @@
 // 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛�
 export function genCode(tableName) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/genCode/' + tableName,
     method: 'get'
   })
@@ -70,6 +81,7 @@
 // 鍚屾鏁版嵁搴�
 export function synchDb(tableName) {
   return request({
+    headers: { datasource: dataName },
     url: '/tool/gen/synchDb/' + tableName,
     method: 'get'
   })
diff --git a/script/docker/database.yml b/script/docker/database.yml
new file mode 100644
index 0000000..e7c276f
--- /dev/null
+++ b/script/docker/database.yml
@@ -0,0 +1,17 @@
+version: '3'
+
+services:
+  oracle:
+    image: tekintian/oracle12c:latest
+    container_name: oracle
+    environment:
+      # 鏃跺尯涓婃捣
+      TZ: Asia/Shanghai
+      DBCA_TOTAL_MEMORY: 16192
+    ports:
+      - "18080:8080"
+      - "1521:1521"
+    volumes:
+      # 鏁版嵁鎸傝浇
+      - "/docker/oracle/data:/u01/app/oracle"
+    restart: always
diff --git a/script/sql/oracle/oracle_ry_vue_4.X.sql b/script/sql/oracle/oracle_ry_vue_4.X.sql
new file mode 100644
index 0000000..c13f5ac
--- /dev/null
+++ b/script/sql/oracle/oracle_ry_vue_4.X.sql
@@ -0,0 +1,954 @@
+-- ----------------------------
+-- 1銆侀儴闂ㄨ〃
+-- ----------------------------
+create table sys_dept (
+  dept_id           number(20)      not null,
+  parent_id         number(20)      default 0,
+  ancestors         varchar2(50)    default '',
+  dept_name         varchar2(30)    default '',
+  order_num         number(4)       default 0,
+  leader            varchar2(20)    default null,
+  phone             varchar2(11)    default null,
+  email             varchar2(50)    default null,
+  status            char(1)         default '0',
+  del_flag          char(1)         default '0',
+  create_by         varchar2(64)    default '',
+  create_time       date,
+  update_by         varchar2(64)    default '',
+  update_time       date
+);
+
+alter table sys_dept add constraint pk_sys_dept primary key (dept_id);
+
+comment on table  sys_dept              is '閮ㄩ棬琛�';
+comment on column sys_dept.dept_id      is '閮ㄩ棬id';
+comment on column sys_dept.parent_id    is '鐖堕儴闂╥d';
+comment on column sys_dept.ancestors    is '绁栫骇鍒楄〃';
+comment on column sys_dept.dept_name    is '閮ㄩ棬鍚嶇О';
+comment on column sys_dept.order_num    is '鏄剧ず椤哄簭';
+comment on column sys_dept.leader       is '璐熻矗浜�';
+comment on column sys_dept.phone        is '鑱旂郴鐢佃瘽';
+comment on column sys_dept.email        is '閭';
+comment on column sys_dept.status       is '閮ㄩ棬鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_dept.del_flag     is '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�';
+comment on column sys_dept.create_by    is '鍒涘缓鑰�';
+comment on column sys_dept.create_time  is '鍒涘缓鏃堕棿';
+comment on column sys_dept.update_by    is '鏇存柊鑰�';
+comment on column sys_dept.update_time  is '鏇存柊鏃堕棿';
+
+-- ----------------------------
+-- 鍒濆鍖�-閮ㄩ棬琛ㄦ暟鎹�
+-- ----------------------------
+insert into sys_dept values(100,  0,   '0',          '鑻ヤ緷绉戞妧',   0, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(101,  100, '0,100',      '娣卞湷鎬诲叕鍙�', 1, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(102,  100, '0,100',      '闀挎矙鍒嗗叕鍙�', 2, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(103,  101, '0,100,101',  '鐮斿彂閮ㄩ棬',   1, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(104,  101, '0,100,101',  '甯傚満閮ㄩ棬',   2, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(105,  101, '0,100,101',  '娴嬭瘯閮ㄩ棬',   3, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(106,  101, '0,100,101',  '璐㈠姟閮ㄩ棬',   4, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(107,  101, '0,100,101',  '杩愮淮閮ㄩ棬',   5, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(108,  102, '0,100,102',  '甯傚満閮ㄩ棬',   1, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+insert into sys_dept values(109,  102, '0,100,102',  '璐㈠姟閮ㄩ棬',   2, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate, '', null);
+
+
+-- ----------------------------
+-- 2銆佺敤鎴蜂俊鎭〃
+-- ----------------------------
+create table sys_user (
+  user_id           number(20)      not null,
+  dept_id           number(20)      default null,
+  user_name         varchar2(30)    not null,
+  nick_name         varchar2(30)    not null,
+  user_type         varchar2(10)    default 'sys_user',
+  email             varchar2(50)    default '',
+  phonenumber       varchar2(11)    default '',
+  sex               char(1)         default '0',
+  avatar            varchar2(100)   default '',
+  password          varchar2(100)   default '',
+  status            char(1)         default '0',
+  del_flag          char(1)         default '0',
+  login_ip          varchar2(128)   default '',
+  login_date        date,
+  create_by         varchar2(64),
+  create_time       date,
+  update_by         varchar2(64)    default '',
+  update_time       date,
+  remark            varchar2(500)   default ''
+);
+
+alter table sys_user add constraint pk_sys_user primary key (user_id);
+
+comment on table  sys_user              is '鐢ㄦ埛淇℃伅琛�';
+comment on column sys_user.user_id      is '鐢ㄦ埛ID';
+comment on column sys_user.dept_id      is '閮ㄩ棬ID';
+comment on column sys_user.user_name    is '鐢ㄦ埛璐﹀彿';
+comment on column sys_user.nick_name    is '鐢ㄦ埛鏄电О';
+comment on column sys_user.user_type    is '鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛�';
+comment on column sys_user.email        is '鐢ㄦ埛閭';
+comment on column sys_user.phonenumber  is '鎵嬫満鍙风爜';
+comment on column sys_user.sex          is '鐢ㄦ埛鎬у埆锛�0鐢� 1濂� 2鏈煡锛�';
+comment on column sys_user.avatar       is '澶村儚璺緞';
+comment on column sys_user.password     is '瀵嗙爜';
+comment on column sys_user.status       is '甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_user.del_flag     is '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�';
+comment on column sys_user.login_ip     is '鏈�鍚庣櫥褰旾P';
+comment on column sys_user.login_date   is '鏈�鍚庣櫥褰曟椂闂�';
+comment on column sys_user.create_by    is '鍒涘缓鑰�';
+comment on column sys_user.create_time  is '鍒涘缓鏃堕棿';
+comment on column sys_user.update_by    is '鏇存柊鑰�';
+comment on column sys_user.update_time  is '鏇存柊鏃堕棿';
+comment on column sys_user.remark       is '澶囨敞';
+
+-- ----------------------------
+-- 鍒濆鍖�-鐢ㄦ埛淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+insert into sys_user values(1,  103, 'admin', '鐤媯鐨勭嫯瀛怢i', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate, 'admin', sysdate, '', null, '绠$悊鍛�');
+insert into sys_user values(2,  105, 'lionli', '鐤媯鐨勭嫯瀛怢i', 'sys_user', 'crazyLionLi@qq.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate, 'admin', sysdate, '', null, '娴嬭瘯鍛�');
+
+
+-- ----------------------------
+-- 3銆佸矖浣嶄俊鎭〃
+-- ----------------------------
+create table sys_post (
+  post_id           number(20)      not null,
+  post_code         varchar2(64)    not null,
+  post_name         varchar2(50)    not null,
+  post_sort         number(4)       not null,
+  status            char(1)         not null,
+  create_by         varchar2(64)    default '',
+  create_time       date,
+  update_by         varchar2(64)    default '',
+  update_time       date,
+  remark            varchar2(500)
+);
+
+alter table sys_post add constraint pk_sys_post primary key (post_id);
+
+comment on table  sys_post              is '宀椾綅淇℃伅琛�';
+comment on column sys_post.post_id      is '宀椾綅ID';
+comment on column sys_post.post_code    is '宀椾綅缂栫爜';
+comment on column sys_post.post_name    is '宀椾綅鍚嶇О';
+comment on column sys_post.post_sort    is '鏄剧ず椤哄簭';
+comment on column sys_post.status       is '鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_post.create_by    is '鍒涘缓鑰�';
+comment on column sys_post.create_time  is '鍒涘缓鏃堕棿';
+comment on column sys_post.update_by    is '鏇存柊鑰�';
+comment on column sys_post.update_time  is '鏇存柊鏃堕棿';
+comment on column sys_post.remark       is '澶囨敞';
+
+-- ----------------------------
+-- 鍒濆鍖�-宀椾綅淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+insert into sys_post values(1, 'ceo',  '钁d簨闀�',    1, '0', 'admin', sysdate, '', null, '');
+insert into sys_post values(2, 'se',   '椤圭洰缁忕悊',  2, '0', 'admin', sysdate, '', null, '');
+insert into sys_post values(3, 'hr',   '浜哄姏璧勬簮',  3, '0', 'admin', sysdate, '', null, '');
+insert into sys_post values(4, 'user', '鏅�氬憳宸�',  4, '0', 'admin', sysdate, '', null, '');
+
+
+-- ----------------------------
+-- 4銆佽鑹蹭俊鎭〃
+-- ----------------------------
+create table sys_role (
+  role_id              number(20)      not null,
+  role_name            varchar2(30)    not null,
+  role_key             varchar2(100)   not null,
+  role_sort            number(4)       not null,
+  data_scope           char(1)         default '1',
+  menu_check_strictly  number(1)       default 1,
+  dept_check_strictly  number(1)       default 1,
+  status               char(1)         not null,
+  del_flag             char(1)         default '0',
+  create_by            varchar2(64)    default '',
+  create_time          date,
+  update_by            varchar2(64)    default '',
+  update_time          date,
+  remark               varchar2(500)   default null
+);
+
+alter table sys_role add constraint pk_sys_role primary key (role_id);
+
+comment on table  sys_role                       is '瑙掕壊淇℃伅琛�';
+comment on column sys_role.role_id               is '瑙掕壊ID';
+comment on column sys_role.role_name             is '瑙掕壊鍚嶇О';
+comment on column sys_role.role_key              is '瑙掕壊鏉冮檺瀛楃涓�';
+comment on column sys_role.role_sort             is '鏄剧ず椤哄簭';
+comment on column sys_role.data_scope            is '鏁版嵁鑼冨洿锛�1锛氬叏閮ㄦ暟鎹潈闄� 2锛氳嚜瀹氭暟鎹潈闄� 3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶級';
+comment on column sys_role.menu_check_strictly   is '鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�';
+comment on column sys_role.dept_check_strictly   is '閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�';
+comment on column sys_role.status                is '瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_role.del_flag              is '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�';
+comment on column sys_role.create_by             is '鍒涘缓鑰�';
+comment on column sys_role.create_time           is '鍒涘缓鏃堕棿';
+comment on column sys_role.update_by             is '鏇存柊鑰�';
+comment on column sys_role.update_time           is '鏇存柊鏃堕棿';
+comment on column sys_role.remark                is '澶囨敞';
+
+-- ----------------------------
+-- 鍒濆鍖�-瑙掕壊淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+insert into sys_role values('1', '瓒呯骇绠$悊鍛�',  'admin',  1, 1, 1, 1, '0', '0', 'admin', sysdate, '', null, '瓒呯骇绠$悊鍛�');
+insert into sys_role values('2', '鏅�氳鑹�',    'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate, '', null, '鏅�氳鑹�');
+
+
+-- ----------------------------
+-- 5銆佽彍鍗曟潈闄愯〃
+-- ----------------------------
+create table sys_menu (
+  menu_id           number(20)      not null,
+  menu_name         varchar2(50)    not null,
+  parent_id         number(20)      default 0,
+  order_num         number(4)       default 0,
+  path              varchar(200)    default '',
+  component         varchar(255)    default null,
+  query             varchar(255)    default null,
+  is_frame          number(1)       default 1,
+  is_cache          number(1)       default 0,
+  menu_type         char(1)         default '',
+  visible           char(1)         default 0,
+  status            char(1)         default 0,
+  perms             varchar2(100)   default null,
+  icon              varchar2(100)   default '#',
+  create_by         varchar2(64)    default '',
+  create_time       date,
+  update_by         varchar2(64)    default '',
+  update_time       date ,
+  remark            varchar2(500)   default ''
+);
+
+alter table sys_menu add constraint pk_sys_menu primary key (menu_id);
+
+comment on table  sys_menu              is '鑿滃崟鏉冮檺琛�';
+comment on column sys_menu.menu_id      is '鑿滃崟ID';
+comment on column sys_menu.menu_name    is '鑿滃崟鍚嶇О';
+comment on column sys_menu.parent_id    is '鐖惰彍鍗旾D';
+comment on column sys_menu.order_num    is '鏄剧ず椤哄簭';
+comment on column sys_menu.path         is '璇锋眰鍦板潃';
+comment on column sys_menu.component    is '璺敱鍦板潃';
+comment on column sys_menu.query        is '璺敱鍙傛暟';
+comment on column sys_menu.is_frame     is '鏄惁涓哄閾撅紙0鏄� 1鍚︼級';
+comment on column sys_menu.is_cache     is '鏄惁缂撳瓨锛�0缂撳瓨 1涓嶇紦瀛橈級';
+comment on column sys_menu.menu_type    is '鑿滃崟绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛�';
+comment on column sys_menu.visible      is '鑿滃崟鐘舵�侊紙0鏄剧ず 1闅愯棌锛�';
+comment on column sys_menu.status       is '鑿滃崟鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_menu.perms        is '鏉冮檺鏍囪瘑';
+comment on column sys_menu.icon         is '鑿滃崟鍥炬爣';
+comment on column sys_menu.create_by    is '鍒涘缓鑰�';
+comment on column sys_menu.create_time  is '鍒涘缓鏃堕棿';
+comment on column sys_menu.update_by    is '鏇存柊鑰�';
+comment on column sys_menu.update_time  is '鏇存柊鏃堕棿';
+comment on column sys_menu.remark       is '澶囨敞';
+
+-- ----------------------------
+-- 鍒濆鍖�-鑿滃崟淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+-- 涓�绾ц彍鍗�
+insert into sys_menu values('1', '绯荤粺绠$悊', '0', '1', 'system',           null, '', 1, 0, 'M', '0', '0', '', 'system',   'admin', sysdate, '', null, '绯荤粺绠$悊鐩綍');
+insert into sys_menu values('2', '绯荤粺鐩戞帶', '0', '2', 'monitor',          null, '', 1, 0, 'M', '0', '0', '', 'monitor',  'admin', sysdate, '', null, '绯荤粺鐩戞帶鐩綍');
+insert into sys_menu values('3', '绯荤粺宸ュ叿', '0', '3', 'tool',             null, '', 1, 0, 'M', '0', '0', '', 'tool',     'admin', sysdate, '', null, '绯荤粺宸ュ叿鐩綍');
+insert into sys_menu values('4', 'PLUS瀹樼綉', '0', '4', 'https://gitee.com/JavaLionLi/RuoYi-Vue-Plus', null, '', 0, 0, 'M', '0', '0', '', 'guide',    'admin', sysdate, '', null, 'RuoYi-Vue-Plus瀹樼綉鍦板潃');
+-- 浜岀骇鑿滃崟
+insert into sys_menu values('100',  '鐢ㄦ埛绠$悊', '1',   '1', 'user',       'system/user/index',        '', 1, 0, 'C', '0', '0', 'system:user:list',        'user',          'admin', sysdate, '', null, '鐢ㄦ埛绠$悊鑿滃崟');
+insert into sys_menu values('101',  '瑙掕壊绠$悊', '1',   '2', 'role',       'system/role/index',        '', 1, 0, 'C', '0', '0', 'system:role:list',        'peoples',       'admin', sysdate, '', null, '瑙掕壊绠$悊鑿滃崟');
+insert into sys_menu values('102',  '鑿滃崟绠$悊', '1',   '3', 'menu',       'system/menu/index',        '', 1, 0, 'C', '0', '0', 'system:menu:list',        'tree-table',    'admin', sysdate, '', null, '鑿滃崟绠$悊鑿滃崟');
+insert into sys_menu values('103',  '閮ㄩ棬绠$悊', '1',   '4', 'dept',       'system/dept/index',        '', 1, 0, 'C', '0', '0', 'system:dept:list',        'tree',          'admin', sysdate, '', null, '閮ㄩ棬绠$悊鑿滃崟');
+insert into sys_menu values('104',  '宀椾綅绠$悊', '1',   '5', 'post',       'system/post/index',        '', 1, 0, 'C', '0', '0', 'system:post:list',        'post',          'admin', sysdate, '', null, '宀椾綅绠$悊鑿滃崟');
+insert into sys_menu values('105',  '瀛楀吀绠$悊', '1',   '6', 'dict',       'system/dict/index',        '', 1, 0, 'C', '0', '0', 'system:dict:list',        'dict',          'admin', sysdate, '', null, '瀛楀吀绠$悊鑿滃崟');
+insert into sys_menu values('106',  '鍙傛暟璁剧疆', '1',   '7', 'config',     'system/config/index',      '', 1, 0, 'C', '0', '0', 'system:config:list',      'edit',          'admin', sysdate, '', null, '鍙傛暟璁剧疆鑿滃崟');
+insert into sys_menu values('107',  '閫氱煡鍏憡', '1',   '8', 'notice',     'system/notice/index',      '', 1, 0, 'C', '0', '0', 'system:notice:list',      'message',       'admin', sysdate, '', null, '閫氱煡鍏憡鑿滃崟');
+insert into sys_menu values('108',  '鏃ュ織绠$悊', '1',   '9', 'log',        '',                         '', 1, 0, 'M', '0', '0', '',                        'log',           'admin', sysdate, '', null, '鏃ュ織绠$悊鑿滃崟');
+insert into sys_menu values('109',  '鍦ㄧ嚎鐢ㄦ埛', '2',   '1', 'online',     'monitor/online/index',     '', 1, 0, 'C', '0', '0', 'monitor:online:list',     'online',        'admin', sysdate, '', null, '鍦ㄧ嚎鐢ㄦ埛鑿滃崟');
+insert into sys_menu values('111',  '鏁版嵁鐩戞帶', '2',   '3', 'druid',      'monitor/druid/index',      '', 1, 0, 'C', '0', '0', 'monitor:druid:list',      'druid',         'admin', sysdate, '', null, '鏁版嵁鐩戞帶鑿滃崟');
+insert into sys_menu values('113',  '缂撳瓨鐩戞帶', '2',   '5', 'cache',      'monitor/cache/index',      '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis',         'admin', sysdate, '', null, '缂撳瓨鐩戞帶鑿滃崟');
+insert into sys_menu values('114',  '琛ㄥ崟鏋勫缓', '3',   '1', 'build',      'tool/build/index',         '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate, '', null, '琛ㄥ崟鏋勫缓鑿滃崟');
+insert into sys_menu values('115',  '浠g爜鐢熸垚', '3',   '2', 'gen',        'tool/gen/index',           '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate, '', null, '浠g爜鐢熸垚鑿滃崟');
+insert into sys_menu values('116',  '绯荤粺鎺ュ彛', '3',   '3', 'swagger',    'tool/swagger/index',       '', 1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate, '', null, '绯荤粺鎺ュ彛鑿滃崟');
+-- springboot-admin鐩戞帶
+insert into sys_menu values('117',  'Admin鐩戞帶', '2',  '5', 'Admin',      'monitor/admin/index',      '', 1, 0, 'C', '0', '0', 'monitor:admin:list',      'dashboard',     'admin', sysdate, '', null, 'Admin鐩戞帶鑿滃崟');
+-- oss鑿滃崟
+insert into sys_menu values('118',  '鏂囦欢绠$悊', '1', '10', 'oss', 'system/oss/index', '', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', sysdate, '', null, '鏂囦欢绠$悊鑿滃崟');
+-- xxl-job-admin鎺у埗鍙�
+insert into sys_menu values('120',  '浠诲姟璋冨害涓績', '2',  '5', 'XxlJob',      'monitor/xxljob/index',      '', 1, 0, 'C', '0', '0', 'monitor:xxljob:list',      'job',     'admin', sysdate, '', null, 'Xxl-Job鎺у埗鍙拌彍鍗�');
+
+-- 涓夌骇鑿滃崟
+insert into sys_menu values('500',  '鎿嶄綔鏃ュ織', '108', '1', 'operlog',    'monitor/operlog/index',    '', 1, 0, 'C', '0', '0', 'monitor:operlog:list',    'form',          'admin', sysdate, '', null, '鎿嶄綔鏃ュ織鑿滃崟');
+insert into sys_menu values('501',  '鐧诲綍鏃ュ織', '108', '2', 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor',    'admin', sysdate, '', null, '鐧诲綍鏃ュ織鑿滃崟');
+-- 鐢ㄦ埛绠$悊鎸夐挳
+insert into sys_menu values('1001', '鐢ㄦ埛鏌ヨ', '100', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:query',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1002', '鐢ㄦ埛鏂板', '100', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:add',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1003', '鐢ㄦ埛淇敼', '100', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1004', '鐢ㄦ埛鍒犻櫎', '100', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1005', '鐢ㄦ埛瀵煎嚭', '100', '5',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:export',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1006', '鐢ㄦ埛瀵煎叆', '100', '6',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:import',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1007', '閲嶇疆瀵嗙爜', '100', '7',  '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd',       '#', 'admin', sysdate, '', null, '');
+-- 瑙掕壊绠$悊鎸夐挳
+insert into sys_menu values('1008', '瑙掕壊鏌ヨ', '101', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:query',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1009', '瑙掕壊鏂板', '101', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:add',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1010', '瑙掕壊淇敼', '101', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1011', '瑙掕壊鍒犻櫎', '101', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1012', '瑙掕壊瀵煎嚭', '101', '5',  '', '', '', 1, 0, 'F', '0', '0', 'system:role:export',         '#', 'admin', sysdate, '', null, '');
+-- 鑿滃崟绠$悊鎸夐挳
+insert into sys_menu values('1013', '鑿滃崟鏌ヨ', '102', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1014', '鑿滃崟鏂板', '102', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1015', '鑿滃崟淇敼', '102', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1016', '鑿滃崟鍒犻櫎', '102', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove',         '#', 'admin', sysdate, '', null, '');
+-- 閮ㄩ棬绠$悊鎸夐挳
+insert into sys_menu values('1017', '閮ㄩ棬鏌ヨ', '103', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1018', '閮ㄩ棬鏂板', '103', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1019', '閮ㄩ棬淇敼', '103', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1020', '閮ㄩ棬鍒犻櫎', '103', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove',         '#', 'admin', sysdate, '', null, '');
+-- 宀椾綅绠$悊鎸夐挳
+insert into sys_menu values('1021', '宀椾綅鏌ヨ', '104', '1',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:query',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1022', '宀椾綅鏂板', '104', '2',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:add',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1023', '宀椾綅淇敼', '104', '3',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1024', '宀椾綅鍒犻櫎', '104', '4',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1025', '宀椾綅瀵煎嚭', '104', '5',  '', '', '', 1, 0, 'F', '0', '0', 'system:post:export',         '#', 'admin', sysdate, '', null, '');
+-- 瀛楀吀绠$悊鎸夐挳
+insert into sys_menu values('1026', '瀛楀吀鏌ヨ', '105', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1027', '瀛楀吀鏂板', '105', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1028', '瀛楀吀淇敼', '105', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1029', '瀛楀吀鍒犻櫎', '105', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1030', '瀛楀吀瀵煎嚭', '105', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export',         '#', 'admin', sysdate, '', null, '');
+-- 鍙傛暟璁剧疆鎸夐挳
+insert into sys_menu values('1031', '鍙傛暟鏌ヨ', '106', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query',        '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1032', '鍙傛暟鏂板', '106', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1033', '鍙傛暟淇敼', '106', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1034', '鍙傛暟鍒犻櫎', '106', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove',       '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1035', '鍙傛暟瀵煎嚭', '106', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export',       '#', 'admin', sysdate, '', null, '');
+-- 閫氱煡鍏憡鎸夐挳
+insert into sys_menu values('1036', '鍏憡鏌ヨ', '107', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query',        '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1037', '鍏憡鏂板', '107', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1038', '鍏憡淇敼', '107', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit',         '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1039', '鍏憡鍒犻櫎', '107', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove',       '#', 'admin', sysdate, '', null, '');
+-- 鎿嶄綔鏃ュ織鎸夐挳
+insert into sys_menu values('1040', '鎿嶄綔鏌ヨ', '500', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query',      '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1041', '鎿嶄綔鍒犻櫎', '500', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove',     '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1042', '鏃ュ織瀵煎嚭', '500', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export',     '#', 'admin', sysdate, '', null, '');
+-- 鐧诲綍鏃ュ織鎸夐挳
+insert into sys_menu values('1043', '鐧诲綍鏌ヨ', '501', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query',   '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1044', '鐧诲綍鍒犻櫎', '501', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove',  '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1045', '鏃ュ織瀵煎嚭', '501', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export',  '#', 'admin', sysdate, '', null, '');
+-- 鍦ㄧ嚎鐢ㄦ埛鎸夐挳
+insert into sys_menu values('1046', '鍦ㄧ嚎鏌ヨ', '109', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1047', '鎵归噺寮洪��', '109', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1048', '鍗曟潯寮洪��', '109', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate, '', null, '');
+-- 浠g爜鐢熸垚鎸夐挳
+insert into sys_menu values('1055', '鐢熸垚鏌ヨ', '115', '1', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1056', '鐢熸垚淇敼', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1057', '鐢熸垚鍒犻櫎', '115', '3', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1058', '瀵煎叆浠g爜', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1059', '棰勮浠g爜', '115', '4', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1060', '鐢熸垚浠g爜', '115', '5', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', sysdate, '', null, '');
+-- oss鐩稿叧鎸夐挳
+insert into sys_menu values('1600', '鏂囦欢鏌ヨ', '118', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:query',        '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1601', '鏂囦欢涓婁紶', '118', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:upload',       '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1602', '鏂囦欢涓嬭浇', '118', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:download',     '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1603', '鏂囦欢鍒犻櫎', '118', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:remove',       '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1604', '閰嶇疆娣诲姞', '118', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:add',          '#', 'admin', sysdate, '', null, '');
+insert into sys_menu values('1605', '閰嶇疆缂栬緫', '118', '6', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:edit',         '#', 'admin', sysdate, '', null, '');
+
+
+-- ----------------------------
+-- 6銆佺敤鎴峰拰瑙掕壊鍏宠仈琛�  鐢ㄦ埛N-1瑙掕壊
+-- ----------------------------
+create table sys_user_role (
+  user_id  number(20)  not null,
+  role_id  number(20)  not null
+);
+
+alter table sys_user_role add constraint pk_sys_user_role primary key (user_id, role_id);
+
+comment on table  sys_user_role              is '鐢ㄦ埛鍜岃鑹插叧鑱旇〃';
+comment on column sys_user_role.user_id      is '鐢ㄦ埛ID';
+comment on column sys_user_role.role_id      is '瑙掕壊ID';
+
+-- ----------------------------
+-- 鍒濆鍖�-鐢ㄦ埛鍜岃鑹插叧鑱旇〃鏁版嵁
+-- ----------------------------
+insert into sys_user_role values ('1', '1');
+insert into sys_user_role values ('2', '2');
+
+
+-- ----------------------------
+-- 7銆佽鑹插拰鑿滃崟鍏宠仈琛�  瑙掕壊1-N鑿滃崟
+-- ----------------------------
+create table sys_role_menu (
+  role_id  number(20)  not null,
+  menu_id  number(20)  not null
+);
+
+alter table sys_role_menu add constraint pk_sys_role_menu primary key (role_id, menu_id);
+
+comment on table  sys_role_menu              is '瑙掕壊鍜岃彍鍗曞叧鑱旇〃';
+comment on column sys_role_menu.role_id      is '瑙掕壊ID';
+comment on column sys_role_menu.menu_id      is '鑿滃崟ID';
+
+-- ----------------------------
+-- 鍒濆鍖�-瑙掕壊鍜岃彍鍗曞叧鑱旇〃鏁版嵁
+-- ----------------------------
+insert into sys_role_menu values ('2', '1');
+insert into sys_role_menu values ('2', '2');
+insert into sys_role_menu values ('2', '3');
+insert into sys_role_menu values ('2', '4');
+insert into sys_role_menu values ('2', '100');
+insert into sys_role_menu values ('2', '101');
+insert into sys_role_menu values ('2', '102');
+insert into sys_role_menu values ('2', '103');
+insert into sys_role_menu values ('2', '104');
+insert into sys_role_menu values ('2', '105');
+insert into sys_role_menu values ('2', '106');
+insert into sys_role_menu values ('2', '107');
+insert into sys_role_menu values ('2', '108');
+insert into sys_role_menu values ('2', '109');
+insert into sys_role_menu values ('2', '110');
+insert into sys_role_menu values ('2', '111');
+insert into sys_role_menu values ('2', '112');
+insert into sys_role_menu values ('2', '113');
+insert into sys_role_menu values ('2', '114');
+insert into sys_role_menu values ('2', '115');
+insert into sys_role_menu values ('2', '116');
+insert into sys_role_menu values ('2', '500');
+insert into sys_role_menu values ('2', '501');
+insert into sys_role_menu values ('2', '1000');
+insert into sys_role_menu values ('2', '1001');
+insert into sys_role_menu values ('2', '1002');
+insert into sys_role_menu values ('2', '1003');
+insert into sys_role_menu values ('2', '1004');
+insert into sys_role_menu values ('2', '1005');
+insert into sys_role_menu values ('2', '1006');
+insert into sys_role_menu values ('2', '1007');
+insert into sys_role_menu values ('2', '1008');
+insert into sys_role_menu values ('2', '1009');
+insert into sys_role_menu values ('2', '1010');
+insert into sys_role_menu values ('2', '1011');
+insert into sys_role_menu values ('2', '1012');
+insert into sys_role_menu values ('2', '1013');
+insert into sys_role_menu values ('2', '1014');
+insert into sys_role_menu values ('2', '1015');
+insert into sys_role_menu values ('2', '1016');
+insert into sys_role_menu values ('2', '1017');
+insert into sys_role_menu values ('2', '1018');
+insert into sys_role_menu values ('2', '1019');
+insert into sys_role_menu values ('2', '1020');
+insert into sys_role_menu values ('2', '1021');
+insert into sys_role_menu values ('2', '1022');
+insert into sys_role_menu values ('2', '1023');
+insert into sys_role_menu values ('2', '1024');
+insert into sys_role_menu values ('2', '1025');
+insert into sys_role_menu values ('2', '1026');
+insert into sys_role_menu values ('2', '1027');
+insert into sys_role_menu values ('2', '1028');
+insert into sys_role_menu values ('2', '1029');
+insert into sys_role_menu values ('2', '1030');
+insert into sys_role_menu values ('2', '1031');
+insert into sys_role_menu values ('2', '1032');
+insert into sys_role_menu values ('2', '1033');
+insert into sys_role_menu values ('2', '1034');
+insert into sys_role_menu values ('2', '1035');
+insert into sys_role_menu values ('2', '1036');
+insert into sys_role_menu values ('2', '1037');
+insert into sys_role_menu values ('2', '1038');
+insert into sys_role_menu values ('2', '1039');
+insert into sys_role_menu values ('2', '1040');
+insert into sys_role_menu values ('2', '1041');
+insert into sys_role_menu values ('2', '1042');
+insert into sys_role_menu values ('2', '1043');
+insert into sys_role_menu values ('2', '1044');
+insert into sys_role_menu values ('2', '1045');
+insert into sys_role_menu values ('2', '1046');
+insert into sys_role_menu values ('2', '1047');
+insert into sys_role_menu values ('2', '1048');
+insert into sys_role_menu values ('2', '1055');
+insert into sys_role_menu values ('2', '1056');
+insert into sys_role_menu values ('2', '1057');
+insert into sys_role_menu values ('2', '1058');
+insert into sys_role_menu values ('2', '1059');
+insert into sys_role_menu values ('2', '1060');
+
+-- ----------------------------
+-- 8銆佽鑹插拰閮ㄩ棬鍏宠仈琛�  瑙掕壊1-N閮ㄩ棬
+-- ----------------------------
+create table sys_role_dept (
+  role_id  number(20)  not null,
+  dept_id  number(20)  not null
+);
+
+alter table sys_role_dept add constraint pk_sys_role_dept primary key (role_id, dept_id);
+
+comment on table  sys_role_dept              is '瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃';
+comment on column sys_role_dept.role_id      is '瑙掕壊ID';
+comment on column sys_role_dept.dept_id      is '閮ㄩ棬ID';
+
+-- ----------------------------
+-- 鍒濆鍖�-瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃鏁版嵁
+-- ----------------------------
+insert into sys_role_dept values ('2', '100');
+insert into sys_role_dept values ('2', '101');
+insert into sys_role_dept values ('2', '105');
+
+
+-- ----------------------------
+-- 9銆佺敤鎴蜂笌宀椾綅鍏宠仈琛�  鐢ㄦ埛1-N宀椾綅
+-- ----------------------------
+create table sys_user_post (
+  user_id number(20)  not null,
+  post_id number(20)  not null
+);
+
+alter table sys_user_post add constraint pk_sys_user_post primary key (user_id, post_id);
+
+comment on table  sys_user_post              is '鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃';
+comment on column sys_user_post.user_id      is '鐢ㄦ埛ID';
+comment on column sys_user_post.post_id      is '宀椾綅ID';
+
+-- ----------------------------
+-- 鍒濆鍖�-鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃鏁版嵁
+-- ----------------------------
+insert into sys_user_post values ('1', '1');
+insert into sys_user_post values ('2', '2');
+
+
+-- ----------------------------
+-- 10銆佹搷浣滄棩蹇楄褰�
+-- ----------------------------
+create table sys_oper_log (
+  oper_id           number(20)      not null ,
+  title             varchar2(50)    default '',
+  business_type     number(2)       default 0,
+  method            varchar2(100)   default '',
+  request_method    varchar(10)     default '',
+  operator_type     number(1)       default 0,
+  oper_name         varchar2(50)    default '',
+  dept_name         varchar2(50)    default '',
+  oper_url          varchar2(255)   default '',
+  oper_ip           varchar2(128)   default '',
+  oper_location     varchar2(255)   default '',
+  oper_param        varchar2(2000)  default '',
+  json_result       varchar2(2000)  default '',
+  status            number(1)       default 0,
+  error_msg         varchar2(2000)  default '' ,
+  oper_time         date
+);
+
+alter table sys_oper_log add constraint pk_sys_oper_log primary key (oper_id);
+
+comment on table  sys_oper_log                is '鎿嶄綔鏃ュ織璁板綍';
+comment on column sys_oper_log.oper_id        is '鏃ュ織涓婚敭';
+comment on column sys_oper_log.title          is '妯″潡鏍囬';
+comment on column sys_oper_log.business_type  is '涓氬姟绫诲瀷锛�0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛�';
+comment on column sys_oper_log.method         is '鏂规硶鍚嶇О';
+comment on column sys_oper_log.request_method is '璇锋眰鏂瑰紡';
+comment on column sys_oper_log.operator_type  is '鎿嶄綔绫诲埆锛�0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級';
+comment on column sys_oper_log.oper_name      is '鎿嶄綔浜哄憳';
+comment on column sys_oper_log.dept_name      is '閮ㄩ棬鍚嶇О';
+comment on column sys_oper_log.oper_url       is '璇锋眰URL';
+comment on column sys_oper_log.oper_ip        is '涓绘満鍦板潃';
+comment on column sys_oper_log.oper_location  is '鎿嶄綔鍦扮偣';
+comment on column sys_oper_log.oper_param     is '璇锋眰鍙傛暟';
+comment on column sys_oper_log.json_result    is '杩斿洖鍙傛暟';
+comment on column sys_oper_log.status         is '鎿嶄綔鐘舵�侊紙0姝e父 1寮傚父锛�';
+comment on column sys_oper_log.error_msg      is '閿欒娑堟伅';
+comment on column sys_oper_log.oper_time      is '鎿嶄綔鏃堕棿';
+
+
+-- ----------------------------
+-- 11銆佸瓧鍏哥被鍨嬭〃
+-- ----------------------------
+create table sys_dict_type (
+  dict_id           number(20)      not null,
+  dict_name         varchar2(100)   default '',
+  dict_type         varchar2(100)   default '',
+  status            char(1)         default '0',
+  create_by         varchar2(64)    default '',
+  create_time       date,
+  update_by         varchar2(64)    default '',
+  update_time       date,
+  remark            varchar2(500)   default null
+);
+
+alter table sys_dict_type add constraint pk_sys_dict_type primary key (dict_id);
+create unique index sys_dict_type_index1 on sys_dict_type (dict_type);
+
+comment on table  sys_dict_type               is '瀛楀吀绫诲瀷琛�';
+comment on column sys_dict_type.dict_id       is '瀛楀吀涓婚敭';
+comment on column sys_dict_type.dict_name     is '瀛楀吀鍚嶇О';
+comment on column sys_dict_type.dict_type     is '瀛楀吀绫诲瀷';
+comment on column sys_dict_type.status        is '鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_dict_type.create_by     is '鍒涘缓鑰�';
+comment on column sys_dict_type.create_time   is '鍒涘缓鏃堕棿';
+comment on column sys_dict_type.update_by     is '鏇存柊鑰�';
+comment on column sys_dict_type.update_time   is '鏇存柊鏃堕棿';
+comment on column sys_dict_type.remark        is '澶囨敞';
+
+insert into sys_dict_type values(1,  '鐢ㄦ埛鎬у埆', 'sys_user_sex',        '0', 'admin', sysdate, '', null, '鐢ㄦ埛鎬у埆鍒楄〃');
+insert into sys_dict_type values(2,  '鑿滃崟鐘舵��', 'sys_show_hide',       '0', 'admin', sysdate, '', null, '鑿滃崟鐘舵�佸垪琛�');
+insert into sys_dict_type values(3,  '绯荤粺寮�鍏�', 'sys_normal_disable',  '0', 'admin', sysdate, '', null, '绯荤粺寮�鍏冲垪琛�');
+insert into sys_dict_type values(6,  '绯荤粺鏄惁', 'sys_yes_no',          '0', 'admin', sysdate, '', null, '绯荤粺鏄惁鍒楄〃');
+insert into sys_dict_type values(7,  '閫氱煡绫诲瀷', 'sys_notice_type',     '0', 'admin', sysdate, '', null, '閫氱煡绫诲瀷鍒楄〃');
+insert into sys_dict_type values(8,  '閫氱煡鐘舵��', 'sys_notice_status',   '0', 'admin', sysdate, '', null, '閫氱煡鐘舵�佸垪琛�');
+insert into sys_dict_type values(9,  '鎿嶄綔绫诲瀷', 'sys_oper_type',       '0', 'admin', sysdate, '', null, '鎿嶄綔绫诲瀷鍒楄〃');
+insert into sys_dict_type values(10, '绯荤粺鐘舵��', 'sys_common_status',   '0', 'admin', sysdate, '', null, '鐧诲綍鐘舵�佸垪琛�');
+
+
+-- ----------------------------
+-- 12銆佸瓧鍏告暟鎹〃
+-- ----------------------------
+create table sys_dict_data (
+  dict_code        number(20)      not null,
+  dict_sort        number(4)       default 0,
+  dict_label       varchar2(100)   default '',
+  dict_value       varchar2(100)   default '',
+  dict_type        varchar2(100)   default '',
+  css_class        varchar2(100)   default null,
+  list_class       varchar2(100)   default null,
+  is_default       char(1)         default 'N',
+  status           char(1)         default '0',
+  create_by        varchar2(64)    default '',
+  create_time      date,
+  update_by        varchar2(64)    default '',
+  update_time      date,
+  remark           varchar2(500)   default null
+);
+
+alter table sys_dict_data add constraint pk_sys_dict_data primary key (dict_code);
+
+comment on table  sys_dict_data               is '瀛楀吀鏁版嵁琛�';
+comment on column sys_dict_data.dict_code     is '瀛楀吀涓婚敭';
+comment on column sys_dict_data.dict_sort     is '瀛楀吀鎺掑簭';
+comment on column sys_dict_data.dict_label    is '瀛楀吀鏍囩';
+comment on column sys_dict_data.dict_value    is '瀛楀吀閿��';
+comment on column sys_dict_data.dict_type     is '瀛楀吀绫诲瀷';
+comment on column sys_dict_data.css_class     is '鏍峰紡灞炴�э紙鍏朵粬鏍峰紡鎵╁睍锛�';
+comment on column sys_dict_data.list_class    is '琛ㄦ牸鍥炴樉鏍峰紡';
+comment on column sys_dict_data.is_default    is '鏄惁榛樿锛圷鏄� N鍚︼級';
+comment on column sys_dict_data.status        is '鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+comment on column sys_dict_data.create_by     is '鍒涘缓鑰�';
+comment on column sys_dict_data.create_time   is '鍒涘缓鏃堕棿';
+comment on column sys_dict_data.update_by     is '鏇存柊鑰�';
+comment on column sys_dict_data.update_time   is '鏇存柊鏃堕棿';
+comment on column sys_dict_data.remark        is '澶囨敞';
+
+insert into sys_dict_data values(1,  1,  '鐢�',       '0',       'sys_user_sex',        '',   '',        'Y', '0', 'admin', sysdate, '', null, '鎬у埆鐢�');
+insert into sys_dict_data values(2,  2,  '濂�',       '1',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate, '', null, '鎬у埆濂�');
+insert into sys_dict_data values(3,  3,  '鏈煡',     '2',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate, '', null, '鎬у埆鏈煡');
+insert into sys_dict_data values(4,  1,  '鏄剧ず',     '0',       'sys_show_hide',       '',   'primary', 'Y', '0', 'admin', sysdate, '', null, '鏄剧ず鑿滃崟');
+insert into sys_dict_data values(5,  2,  '闅愯棌',     '1',       'sys_show_hide',       '',   'danger',  'N', '0', 'admin', sysdate, '', null, '闅愯棌鑿滃崟');
+insert into sys_dict_data values(6,  1,  '姝e父',     '0',       'sys_normal_disable',  '',   'primary', 'Y', '0', 'admin', sysdate, '', null, '姝e父鐘舵��');
+insert into sys_dict_data values(7,  2,  '鍋滅敤',     '1',       'sys_normal_disable',  '',   'danger',  'N', '0', 'admin', sysdate, '', null, '鍋滅敤鐘舵��');
+insert into sys_dict_data values(12, 1,  '鏄�',       'Y',       'sys_yes_no',          '',   'primary', 'Y', '0', 'admin', sysdate, '', null, '绯荤粺榛樿鏄�');
+insert into sys_dict_data values(13, 2,  '鍚�',       'N',       'sys_yes_no',          '',   'danger',  'N', '0', 'admin', sysdate, '', null, '绯荤粺榛樿鍚�');
+insert into sys_dict_data values(14, 1,  '閫氱煡',     '1',       'sys_notice_type',     '',   'warning', 'Y', '0', 'admin', sysdate, '', null, '閫氱煡');
+insert into sys_dict_data values(15, 2,  '鍏憡',     '2',       'sys_notice_type',     '',   'success', 'N', '0', 'admin', sysdate, '', null, '鍏憡');
+insert into sys_dict_data values(16, 1,  '姝e父',     '0',       'sys_notice_status',   '',   'primary', 'Y', '0', 'admin', sysdate, '', null, '姝e父鐘舵��');
+insert into sys_dict_data values(17, 2,  '鍏抽棴',     '1',       'sys_notice_status',   '',   'danger',  'N', '0', 'admin', sysdate, '', null, '鍏抽棴鐘舵��');
+insert into sys_dict_data values(18, 1,  '鏂板',     '1',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate, '', null, '鏂板鎿嶄綔');
+insert into sys_dict_data values(19, 2,  '淇敼',     '2',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate, '', null, '淇敼鎿嶄綔');
+insert into sys_dict_data values(20, 3,  '鍒犻櫎',     '3',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate, '', null, '鍒犻櫎鎿嶄綔');
+insert into sys_dict_data values(21, 4,  '鎺堟潈',     '4',       'sys_oper_type',       '',   'primary', 'N', '0', 'admin', sysdate, '', null, '鎺堟潈鎿嶄綔');
+insert into sys_dict_data values(22, 5,  '瀵煎嚭',     '5',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate, '', null, '瀵煎嚭鎿嶄綔');
+insert into sys_dict_data values(23, 6,  '瀵煎叆',     '6',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate, '', null, '瀵煎叆鎿嶄綔');
+insert into sys_dict_data values(24, 7,  '寮洪��',     '7',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate, '', null, '寮洪��鎿嶄綔');
+insert into sys_dict_data values(25, 8,  '鐢熸垚浠g爜', '8',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate, '', null, '鐢熸垚鎿嶄綔');
+insert into sys_dict_data values(26, 9,  '娓呯┖鏁版嵁', '9',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate, '', null, '娓呯┖鎿嶄綔');
+insert into sys_dict_data values(27, 1,  '鎴愬姛',     '0',       'sys_common_status',   '',   'primary', 'N', '0', 'admin', sysdate, '', null, '姝e父鐘舵��');
+insert into sys_dict_data values(28, 2,  '澶辫触',     '1',       'sys_common_status',   '',   'danger',  'N', '0', 'admin', sysdate, '', null, '鍋滅敤鐘舵��');
+
+
+-- ----------------------------
+-- 13銆佸弬鏁伴厤缃〃
+-- ----------------------------
+create table sys_config (
+  config_id         number(20)     not null,
+  config_name       varchar2(100)  default '',
+  config_key        varchar2(100)  default '',
+  config_value      varchar2(100)  default '',
+  config_type       char(1)        default 'N',
+  create_by         varchar2(64)   default '',
+  create_time       date,
+  update_by         varchar2(64)   default '',
+  update_time       date,
+  remark            varchar2(500)  default null
+);
+alter table sys_config add constraint pk_sys_config primary key (config_id);
+
+comment on table  sys_config               is '鍙傛暟閰嶇疆琛�';
+comment on column sys_config.config_id     is '鍙傛暟涓婚敭';
+comment on column sys_config.config_name   is '鍙傛暟鍚嶇О';
+comment on column sys_config.config_key    is '鍙傛暟閿悕';
+comment on column sys_config.config_value  is '鍙傛暟閿��';
+comment on column sys_config.config_type   is '绯荤粺鍐呯疆锛圷鏄� N鍚︼級';
+comment on column sys_config.create_by     is '鍒涘缓鑰�';
+comment on column sys_config.create_time   is '鍒涘缓鏃堕棿';
+comment on column sys_config.update_by     is '鏇存柊鑰�';
+comment on column sys_config.update_time   is '鏇存柊鏃堕棿';
+comment on column sys_config.remark        is '澶囨敞';
+
+insert into sys_config values(1, '涓绘鏋堕〉-榛樿鐨偆鏍峰紡鍚嶇О',     'sys.index.skinName',            'skin-blue',     'Y', 'admin', sysdate, '', null, '钃濊壊 skin-blue銆佺豢鑹� skin-green銆佺传鑹� skin-purple銆佺孩鑹� skin-red銆侀粍鑹� skin-yellow' );
+insert into sys_config values(2, '鐢ㄦ埛绠$悊-璐﹀彿鍒濆瀵嗙爜',         'sys.user.initPassword',         '123456',        'Y', 'admin', sysdate, '', null, '鍒濆鍖栧瘑鐮� 123456' );
+insert into sys_config values(3, '涓绘鏋堕〉-渚ц竟鏍忎富棰�',           'sys.index.sideTheme',           'theme-dark',    'Y', 'admin', sysdate, '', null, '娣辫壊涓婚theme-dark锛屾祬鑹蹭富棰榯heme-light' );
+insert into sys_config values(4, '璐﹀彿鑷姪-楠岃瘉鐮佸紑鍏�',           'sys.account.captchaOnOff',      'true',          'Y', 'admin', sysdate, '', null, '鏄惁寮�鍚獙璇佺爜鍔熻兘锛坱rue寮�鍚紝false鍏抽棴锛�');
+insert into sys_config values(5, '璐﹀彿鑷姪-鏄惁寮�鍚敤鎴锋敞鍐屽姛鑳�', 'sys.account.registerUser',      'false',         'Y', 'admin', sysdate, '', null, '鏄惁寮�鍚敞鍐岀敤鎴峰姛鑳斤紙true寮�鍚紝false鍏抽棴锛�');
+insert into sys_config values(11, 'OSS棰勮鍒楄〃璧勬簮寮�鍏�', 'sys.oss.previewListResource', 'true', 'Y', 'admin', sysdate, '', null, 'true:寮�鍚�, false:鍏抽棴');
+
+
+-- ----------------------------
+-- 14銆佺郴缁熻闂褰�
+-- ----------------------------
+create table sys_logininfor (
+  info_id         number(20)     not null,
+  user_name       varchar2(50)   default '',
+  ipaddr          varchar2(128)  default '',
+  login_location  varchar2(255)  default '',
+  browser         varchar2(50)   default '',
+  os              varchar2(50)   default '',
+  status          char(1)        default '0',
+  msg             varchar2(255)  default '',
+  login_time      date
+);
+
+alter table sys_logininfor add constraint pk_sys_logininfor primary key (info_id);
+
+comment on table  sys_logininfor                is '绯荤粺璁块棶璁板綍';
+comment on column sys_logininfor.info_id        is '璁块棶ID';
+comment on column sys_logininfor.user_name      is '鐧诲綍璐﹀彿';
+comment on column sys_logininfor.ipaddr         is '鐧诲綍IP鍦板潃';
+comment on column sys_logininfor.login_location is '鐧诲綍鍦扮偣';
+comment on column sys_logininfor.browser        is '娴忚鍣ㄧ被鍨�';
+comment on column sys_logininfor.os             is '鎿嶄綔绯荤粺';
+comment on column sys_logininfor.status         is '鐧诲綍鐘舵�侊紙0鎴愬姛 1澶辫触锛�';
+comment on column sys_logininfor.msg            is '鎻愮ず娑堟伅';
+comment on column sys_logininfor.login_time     is '璁块棶鏃堕棿';
+
+
+-- ----------------------------
+-- 17銆侀�氱煡鍏憡琛�
+-- ----------------------------
+create table sys_notice (
+  notice_id         number(20)      not null,
+  notice_title      varchar2(50)    not null,
+  notice_type       char(1)         not null,
+  notice_content    clob            default null,
+  status            char(1)         default '0',
+  create_by         varchar2(64)    default '',
+  create_time       date,
+  update_by         varchar2(64)    default '',
+  update_time       date,
+  remark            varchar2(255)   default null
+);
+
+alter table sys_notice add constraint pk_sys_notice primary key (notice_id);
+
+comment on table  sys_notice                   is '閫氱煡鍏憡琛�';
+comment on column sys_notice.notice_id         is '鍏憡涓婚敭';
+comment on column sys_notice.notice_title      is '鍏憡鏍囬';
+comment on column sys_notice.notice_type       is '鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛�';
+comment on column sys_notice.notice_content    is '鍏憡鍐呭';
+comment on column sys_notice.status            is '鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛�';
+comment on column sys_notice.create_by         is '鍒涘缓鑰�';
+comment on column sys_notice.create_time       is '鍒涘缓鏃堕棿';
+comment on column sys_notice.update_by         is '鏇存柊鑰�';
+comment on column sys_notice.update_time       is '鏇存柊鏃堕棿';
+comment on column sys_notice.remark            is '澶囨敞';
+
+-- ----------------------------
+-- 鍒濆鍖�-鍏憡淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+insert into sys_notice values('1', '娓╅Θ鎻愰啋锛�2018-07-01 鏂扮増鏈彂甯冨暒', '2', '鏂扮増鏈唴瀹�', '0', 'admin', sysdate, '', null, '绠$悊鍛�');
+insert into sys_notice values('2', '缁存姢閫氱煡锛�2018-07-01 绯荤粺鍑屾櫒缁存姢', '1', '缁存姢鍐呭',   '0', 'admin', sysdate, '', null, '绠$悊鍛�');
+
+
+-- ----------------------------
+-- 18銆佷唬鐮佺敓鎴愪笟鍔¤〃
+-- ----------------------------
+create table gen_table (
+  table_id          number(20)       not null,
+  table_name        varchar2(200)    default '',
+  table_comment     varchar2(500)    default '',
+  sub_table_name    varchar(64)      default null,
+  sub_table_fk_name varchar(64)      default null,
+  class_name        varchar2(100)    default '',
+  tpl_category      varchar2(200)    default 'crud',
+  package_name      varchar2(100),
+  module_name       varchar2(30),
+  business_name     varchar2(30),
+  function_name     varchar2(50),
+  function_author   varchar2(50),
+  gen_type          char(1)          default '0',
+  gen_path          varchar2(200)    default '/',
+  options           varchar2(1000),
+  create_by         varchar2(64)     default '',
+  create_time       date,
+  update_by         varchar2(64)     default '',
+  update_time       date,
+  remark            varchar2(500)    default null
+);
+
+alter table gen_table add constraint pk_gen_table primary key (table_id);
+
+comment on table  gen_table                   is '浠g爜鐢熸垚涓氬姟琛�';
+comment on column gen_table.table_id          is '缂栧彿';
+comment on column gen_table.table_name        is '琛ㄥ悕绉�';
+comment on column gen_table.table_comment     is '琛ㄦ弿杩�';
+comment on column gen_table.sub_table_name    is '鍏宠仈瀛愯〃鐨勮〃鍚�';
+comment on column gen_table.sub_table_fk_name is '瀛愯〃鍏宠仈鐨勫閿悕';
+comment on column gen_table.class_name        is '瀹炰綋绫诲悕绉�';
+comment on column gen_table.tpl_category      is '浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛�';
+comment on column gen_table.package_name      is '鐢熸垚鍖呰矾寰�';
+comment on column gen_table.module_name       is '鐢熸垚妯″潡鍚�';
+comment on column gen_table.business_name     is '鐢熸垚涓氬姟鍚�';
+comment on column gen_table.function_name     is '鐢熸垚鍔熻兘鍚�';
+comment on column gen_table.function_author   is '鐢熸垚鍔熻兘浣滆��';
+comment on column gen_table.gen_type          is '鐢熸垚浠g爜鏂瑰紡锛�0zip鍘嬬缉鍖� 1鑷畾涔夎矾寰勶級';
+comment on column gen_table.gen_path          is '鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級';
+comment on column gen_table.options           is '鍏跺畠鐢熸垚閫夐」';
+comment on column gen_table.create_by         is '鍒涘缓鑰�';
+comment on column gen_table.create_time       is '鍒涘缓鏃堕棿';
+comment on column gen_table.update_by         is '鏇存柊鑰�';
+comment on column gen_table.update_time       is '鏇存柊鏃堕棿';
+comment on column gen_table.remark            is '澶囨敞';
+
+
+-- ----------------------------
+-- 19銆佷唬鐮佺敓鎴愪笟鍔¤〃瀛楁
+-- ----------------------------
+create table gen_table_column (
+  column_id         number(20)      not null,
+  table_id          varchar2(64),
+  column_name       varchar2(200),
+  column_comment    varchar2(500),
+  column_type       varchar2(100),
+  java_type         varchar2(500),
+  java_field        varchar2(200),
+  is_pk             char(1),
+  is_increment      char(1),
+  is_required       char(1),
+  is_insert         char(1),
+  is_edit           char(1),
+  is_list           char(1),
+  is_query          char(1),
+  query_type        varchar(200)    default 'EQ',
+  html_type         varchar(200),
+  dict_type         varchar(200)    default '',
+  sort              number(4),
+  create_by         varchar(64)     default '',
+  create_time       date ,
+  update_by         varchar(64)     default '',
+  update_time       date
+);
+
+alter table gen_table_column add constraint pk_gen_table_column primary key (column_id);
+
+comment on table  gen_table_column                is '浠g爜鐢熸垚涓氬姟琛ㄥ瓧娈�';
+comment on column gen_table_column.column_id      is '缂栧彿';
+comment on column gen_table_column.table_id       is '褰掑睘琛ㄧ紪鍙�';
+comment on column gen_table_column.column_name    is '鍒楀悕绉�';
+comment on column gen_table_column.column_comment is '鍒楁弿杩�';
+comment on column gen_table_column.column_type    is '鍒楃被鍨�';
+comment on column gen_table_column.java_type      is 'JAVA绫诲瀷';
+comment on column gen_table_column.java_field     is 'JAVA瀛楁鍚�';
+comment on column gen_table_column.is_pk          is '鏄惁涓婚敭锛�1鏄級';
+comment on column gen_table_column.is_increment   is '鏄惁鑷锛�1鏄級';
+comment on column gen_table_column.is_required    is '鏄惁蹇呭~锛�1鏄級';
+comment on column gen_table_column.is_insert      is '鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級';
+comment on column gen_table_column.is_edit        is '鏄惁缂栬緫瀛楁锛�1鏄級';
+comment on column gen_table_column.is_list        is '鏄惁鍒楄〃瀛楁锛�1鏄級';
+comment on column gen_table_column.is_query       is '鏄惁鏌ヨ瀛楁锛�1鏄級';
+comment on column gen_table_column.query_type     is '鏌ヨ鏂瑰紡锛堢瓑浜庛�佷笉绛変簬銆佸ぇ浜庛�佸皬浜庛�佽寖鍥达級';
+comment on column gen_table_column.html_type      is '鏄剧ず绫诲瀷锛堟枃鏈銆佹枃鏈煙銆佷笅鎷夋銆佸閫夋銆佸崟閫夋銆佹棩鏈熸帶浠讹級';
+comment on column gen_table_column.dict_type      is '瀛楀吀绫诲瀷';
+comment on column gen_table_column.sort           is '鎺掑簭';
+comment on column gen_table_column.create_by      is '鍒涘缓鑰�';
+comment on column gen_table_column.create_time    is '鍒涘缓鏃堕棿';
+comment on column gen_table_column.update_by      is '鏇存柊鑰�';
+comment on column gen_table_column.update_time    is '鏇存柊鏃堕棿';
+
+
+-- ----------------------------
+-- OSS瀵硅薄瀛樺偍琛�
+-- ----------------------------
+create table sys_oss (
+  oss_id          number(20)   not null,
+  file_name       varchar(255)  not null,
+  original_name   varchar(255)  not null,
+  file_suffix     varchar(10)  not null,
+  url             varchar(500) not null,
+  service         varchar(10)  default 'minio' not null,
+  create_by       varchar(64)  default '',
+  create_time     date,
+  update_by       varchar(64)  default '',
+  update_time     date
+);
+
+alter table sys_oss add constraint pk_sys_oss primary key (oss_id);
+
+comment on table sys_oss is 'OSS瀵硅薄瀛樺偍琛�';
+comment on column sys_oss.oss_id is '瀵硅薄瀛樺偍涓婚敭';
+comment on column sys_oss.file_name is '鏂囦欢鍚�';
+comment on column sys_oss.original_name is '鍘熷悕';
+comment on column sys_oss.file_suffix is '鏂囦欢鍚庣紑鍚�';
+comment on column sys_oss.url is 'URL鍦板潃';
+comment on column sys_oss.service is '鏈嶅姟鍟�';
+comment on column sys_oss.create_time is '鍒涘缓鏃堕棿';
+comment on column sys_oss.create_by is '涓婁紶鑰�';
+comment on column sys_oss.update_time is '鏇存柊鏃堕棿';
+comment on column sys_oss.update_by is '鏇存柊鑰�';
+
+
+-- ----------------------------
+-- OSS瀵硅薄瀛樺偍鍔ㄦ�侀厤缃〃
+-- ----------------------------
+create table sys_oss_config (
+  oss_config_id   number(20)    not null,
+  config_key      varchar(255)  not null,
+  access_key      varchar(255)  default '',
+  secret_key      varchar(255)  default '',
+  bucket_name     varchar(255)  default '',
+  prefix          varchar(255)  default '',
+  endpoint        varchar(255)  default '',
+  is_https        char(1)       default 'N',
+  region          varchar(255)  default '',
+  status          char(1)       default '1',
+  ext1            varchar(255)  default '',
+  create_by       varchar(64)   default '',
+  remark          varchar(500)  default null,
+  create_time     date,
+  update_by       varchar(64)   default '',
+  update_time     date
+);
+
+alter table sys_oss_config add constraint pk_sys_oss_config primary key (oss_config_id);
+
+comment on table sys_oss_config is '瀵硅薄瀛樺偍閰嶇疆琛�';
+comment on column sys_oss_config.oss_config_id is '涓诲缓';
+comment on column sys_oss_config.config_key is '閰嶇疆key';
+comment on column sys_oss_config.access_key is 'accesskey';
+comment on column sys_oss_config.secret_key is '绉橀挜';
+comment on column sys_oss_config.bucket_name is '妗跺悕绉�';
+comment on column sys_oss_config.prefix is '鍓嶇紑';
+comment on column sys_oss_config.endpoint is '璁块棶绔欑偣';
+comment on column sys_oss_config.is_https is '鏄惁https锛圷=鏄�,N=鍚︼級';
+comment on column sys_oss_config.region is '鍩�';
+comment on column sys_oss_config.status is '鐘舵�侊紙0=姝e父,1=鍋滅敤锛�';
+comment on column sys_oss_config.ext1 is '鎵╁睍瀛楁';
+comment on column sys_oss_config.remark is '澶囨敞';
+comment on column sys_oss_config.create_by is '鍒涘缓鑰�';
+comment on column sys_oss_config.create_time is '鍒涘缓鏃堕棿';
+comment on column sys_oss_config.update_by is '鏇存柊鑰�';
+comment on column sys_oss_config.update_time is '鏇存柊鏃堕棿';
+
+insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'http://localhost:9000',                'N', '',            '0', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://XXX.XXXX.com',                  'N', 'z0',          '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://oss-cn-beijing.aliyuncs.com',   'N', '',            '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'http://cos.ap-beijing.myqcloud.com',   'N', 'ap-beijing',  '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+
+
+-- ----------------------------
+-- 鍑芥暟 锛屼唬鏇縨ysql鐨刦ind_in_set
+-- 渚嬪锛� select * from sys_dept where FIND_IN_SET (101,ancestors) <> 0
+-- mysql鍙帴鍙�0鎴栧叾瀹僴umber鍋氫负where 鏉′欢锛宱racle鍙帴鍙楄〃杈惧紡鍋氫负where 鏉′欢
+-- ----------------------------
+create or replace function find_in_set(arg1 in varchar2,arg2 in varchar)
+return number is Result number;
+begin
+select instr(','||arg2||',' , ','||arg1||',') into Result from dual;
+return(Result);
+end find_in_set;

--
Gitblit v1.9.3