From e8c1bae9f8279cfa6e8d2b492308ea104c8b2e6e Mon Sep 17 00:00:00 2001 From: dazer007 Date: Wed, 5 Mar 2025 14:24:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(all):=20=E8=87=AA=E5=8A=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E5=88=87=E6=8D=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/OracleSlaveDataAutoPushService.java | 6 +- .../his/service/impl/Db1DataServiceImpl.java | 3 +- .../impl/Db1VpMessageRecordServiceImpl.java | 4 +- .../his/service/impl/Db2DataServiceImpl.java | 2 +- .../impl/Db2VpMessageRecordServiceImpl.java | 6 +- .../his/service/impl/Db3DataServiceImpl.java | 2 +- .../impl/Db3VpMessageRecordServiceImpl.java | 4 +- .../impl/winlis/WinLisServiceImpl.java | 6 +- .../main/resources/application-xyzxhis.yml | 74 +-- .../src/main/resources/application.yml | 3 +- .../ruoyi/common/enums/DataSourceType.java | 21 +- .../ruoyi/framework/config/DruidConfig.java | 43 +- .../com/ruoyi/generator/config/GenConfig.java | 9 + .../generator/controller/GenController.java | 141 ++++- .../mapper/GenTableColumnMapper.java | 2 + .../generator/mapper/GenTableMapper.java | 2 + .../oracle/GenTableColumnOracleMapper.java | 61 ++ .../mapper/oracle/GenTableOracleMapper.java | 96 ++++ .../impl/GenTableColumnServiceImpl.java | 2 + .../service/impl/GenTableServiceImpl.java | 4 + .../oracle/GenTableColumnServiceImpl.java | 73 +++ .../impl/oracle/GenTableServiceImpl.java | 538 ++++++++++++++++++ .../src/main/resources/generator.yml | 4 +- .../oracle/GenTableColumnOracleMapper.xml | 147 +++++ .../generator/oracle/GenTableOracleMapper.xml | 226 ++++++++ 25 files changed, 1354 insertions(+), 125 deletions(-) create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableColumnOracleMapper.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableOracleMapper.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableColumnServiceImpl.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableServiceImpl.java create mode 100644 ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableColumnOracleMapper.xml create mode 100644 ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableOracleMapper.xml diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/push/OracleSlaveDataAutoPushService.java b/ruoyi-admin/src/main/java/com/neuhis/his/push/OracleSlaveDataAutoPushService.java index 88e722167..71c47e3ac 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/push/OracleSlaveDataAutoPushService.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/push/OracleSlaveDataAutoPushService.java @@ -44,11 +44,11 @@ public class OracleSlaveDataAutoPushService { @Resource(name = "His") VpMessageRecordService vpMessageRecordService; - @Resource(name = "Db1") + @Resource(name = "db1") VpMessageRecordService db1vpMessageRecordService; - @Resource(name = "Db2") + @Resource(name = "db2") VpMessageRecordService db2vpMessageRecordService; - @Resource(name = "Db3") + @Resource(name = "db3") VpMessageRecordService db3vpMessageRecordService; private String url; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1DataServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1DataServiceImpl.java index 6cb596bf5..a369bae78 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1DataServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1DataServiceImpl.java @@ -6,7 +6,6 @@ import com.neuhis.his.domain.entity.VpComPatientinfo; import com.neuhis.his.mapper.Db1DataMapper; import com.neuhis.his.service.Db1DataService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -15,7 +14,7 @@ import java.util.List; import java.util.Map; @Service -@DataSource(value = DataSourceType.Db1) +@DataSource(value = DataSourceType.WINLIS) public class Db1DataServiceImpl implements Db1DataService { @Resource diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1VpMessageRecordServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1VpMessageRecordServiceImpl.java index 9e0b921a3..3ed902029 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1VpMessageRecordServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db1VpMessageRecordServiceImpl.java @@ -9,8 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; // Robin 2024-7-5 -@Service("Db1") -@DataSource(value = DataSourceType.Db1) +@Service("db1") +@DataSource(value = DataSourceType.WINLIS) public class Db1VpMessageRecordServiceImpl implements VpMessageRecordService { @Autowired private VpMessageRecordMapper vpMessageRecordMapper; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2DataServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2DataServiceImpl.java index 4584fe889..23891607b 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2DataServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2DataServiceImpl.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.Map; @Service -@DataSource(value = DataSourceType.Db2) +@DataSource(value = DataSourceType.DB2) public class Db2DataServiceImpl implements Db2DataService { @Resource diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2VpMessageRecordServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2VpMessageRecordServiceImpl.java index 51636f453..52ec6a402 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2VpMessageRecordServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db2VpMessageRecordServiceImpl.java @@ -6,13 +6,11 @@ import com.neuhis.his.domain.entity.VpMessageRecord; import com.neuhis.his.mapper.VpMessageRecordMapper; import com.neuhis.his.service.VpMessageRecordService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; // Robin 2024-7-5 -@Service("Db2") -@DataSource(value = DataSourceType.Db2) +@Service("db2") +@DataSource(value = DataSourceType.DB2) public class Db2VpMessageRecordServiceImpl implements VpMessageRecordService { @Autowired private VpMessageRecordMapper vpMessageRecordMapper; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3DataServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3DataServiceImpl.java index 8857a088e..bbc37ad0a 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3DataServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3DataServiceImpl.java @@ -15,7 +15,7 @@ import java.util.List; import java.util.Map; @Service -@DataSource(value = DataSourceType.Db3) +@DataSource(value = DataSourceType.DB3) public class Db3DataServiceImpl implements Db3DataService { @Resource diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3VpMessageRecordServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3VpMessageRecordServiceImpl.java index b0044526e..a65c1b36c 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3VpMessageRecordServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/Db3VpMessageRecordServiceImpl.java @@ -9,8 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; // Robin 2024-7-5 -@Service("Db3") -@DataSource(value = DataSourceType.Db3) +@Service("db3") +@DataSource(value = DataSourceType.DB3) public class Db3VpMessageRecordServiceImpl implements VpMessageRecordService { @Autowired private VpMessageRecordMapper vpMessageRecordMapper; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java index 3808223e3..7f0783242 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java @@ -3,12 +3,8 @@ package com.neuhis.his.service.impl.winlis; import com.neuhis.his.service.lis.IWinLisService; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; -import org.apache.commons.compress.utils.Lists; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.stream.Collectors; - /** * Winlis相关 * @@ -16,7 +12,7 @@ import java.util.stream.Collectors; * @date 2025/3/4 17:38 **/ @Service -@DataSource(value = DataSourceType.Db2) +@DataSource(value = DataSourceType.DB2) public class WinLisServiceImpl implements IWinLisService { @Override public String getLisCaOriginText(String testdate, String barcode, String machineid) { diff --git a/ruoyi-admin/src/main/resources/application-xyzxhis.yml b/ruoyi-admin/src/main/resources/application-xyzxhis.yml index e232b586b..87661dab3 100644 --- a/ruoyi-admin/src/main/resources/application-xyzxhis.yml +++ b/ruoyi-admin/src/main/resources/application-xyzxhis.yml @@ -58,7 +58,7 @@ spring: url: jdbc:oracle:thin:@20.0.0.40:1521/hisdb username: hit_app password: hit - db1: + winlis: #参考类:DruidConfig、DataSourceType # 从数据源开关/默认关闭 enabled: true driverClassName: oracle.jdbc.OracleDriver @@ -126,75 +126,12 @@ spring: charset: UTF-8 enabled: true force: true - # 模板引擎 - thymeleaf: - mode: HTML - encoding: utf-8 - # 禁用缓存 - cache: false - # 资源信息 - messages: - # 国际化资源文件路径 - basename: static/i18n/messages - jackson: - time-zone: GMT+8 - date-format: yyyy-MM-dd HH:mm:ss - # 文件上传 - servlet: - multipart: - # 单个文件大小 - max-file-size: 10MB - # 设置总上传的文件大小 - max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true -# PageHelper分页插件 -pagehelper: - helperDialect: mysql - supportMethodsArguments: true - params: count=countSql -# Shiro -shiro: - user: - # 登录地址 - loginUrl: /login - # 权限认证失败地址 - unauthorizedUrl: /unauth - # 首页地址 - indexUrl: /index - # 验证码开关 - captchaEnabled: true - # 验证码类型 math 数字计算 char 字符验证 - captchaType: math - cookie: - # 设置Cookie的域名 默认空,即当前访问的域名 - domain: - # 设置cookie的有效访问路径 - path: / - # 设置HttpOnly属性 - httpOnly: true - # 设置Cookie的过期时间,天为单位 - maxAge: 30 - # 设置密钥,务必保持唯一性(生成方式,直接拷贝到main运行即可)Base64.encodeToString(CipherUtils.generateNewKey(128, "AES").getEncoded()) (默认启动生成随机秘钥,随机秘钥会导致之前客户端RememberMe Cookie无效,如设置固定秘钥RememberMe Cookie则有效) - cipherKey: - session: - # Session超时时间,-1代表永不过期(默认30分钟) - expireTime: 30 - # 同步session到数据库的周期(默认1分钟) - dbSyncPeriod: 1 - # 相隔多久检查一次session的有效性,默认就是10分钟 - validationInterval: 10 - # 同一个用户最大会话数,比如2的意思是同一个账号允许最多同时两个人登录(默认-1不限制) - maxSession: -1 - # 踢出之前登录的/之后登录的用户,默认踢出之前登录的用户 - kickoutAfter: false - rememberMe: - # 是否开启记住我 - enabled: true # 日志配置 logging: level: @@ -217,15 +154,6 @@ task: #删除数据推送历史日志 deleteLogPushRecordHis: false -# 防止XSS攻击 -xss: - # 过滤开关 - enabled: true - # 排除链接(多个用逗号分隔) - excludes: /system/notice/*,/system/post/* - # 匹配链接 - urlPatterns: /system/*,/monitor/*,/tool/* - # Swagger配置 swagger: # 是否开启swagger diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 72d44dff9..f824db1b9 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -84,7 +84,8 @@ mybatis: # PageHelper分页插件 pagehelper: - helperDialect: mysql + #helperDialect: mysql #多数据,注释这里 + autoRuntimeDialect: true #多数据源,添加此句, supportMethodsArguments: true params: count=countSql diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java index 4656e1c37..d958522dd 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java @@ -1,9 +1,12 @@ package com.ruoyi.common.enums; +import com.ruoyi.common.annotation.DataSource; + /** * 数据源 * * @author ruoyi + * {@link DataSource} */ public enum DataSourceType { @@ -17,8 +20,20 @@ public enum DataSourceType */ SLAVE, - Db1,//如:WinLis - Db2,//如:Pacs - Db3,//如,手麻 + /** + * DruidConfig#winlisDataSource + */ + WINLIS, + /** + * DruidConfig#pacsDataSource + */ + PACS, + /** + * DruidConfig#orisDataSource + */ + ORIS, + DB1, + DB2, + DB3, ; } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java index aa71550c5..def557b4d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java @@ -26,7 +26,7 @@ import com.ruoyi.framework.datasource.DynamicDataSource; /** * druid 配置多数据源 - * + * {@link DataSourceType#SLAVE} * @author ruoyi */ @Configuration @@ -49,6 +49,41 @@ public class DruidConfig return druidProperties.dataSource(dataSource); } + @Bean + @ConfigurationProperties("spring.datasource.druid.winlis") + @ConditionalOnProperty( + prefix = "spring.datasource.druid.winlis", + name = {"enabled"}, + havingValue = "true" + ) + public DataSource winlisDataSource(DruidProperties druidProperties) { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean + @ConfigurationProperties("spring.datasource.druid.pacs") + @ConditionalOnProperty( + prefix = "spring.datasource.druid.pacs", + name = {"enabled"}, + havingValue = "true" + ) + public DataSource pacsDataSource(DruidProperties druidProperties) { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean + @ConfigurationProperties("spring.datasource.druid.oris") + @ConditionalOnProperty( + prefix = "spring.datasource.druid.oris", + name = {"enabled"}, + havingValue = "true" + ) + public DataSource orisDataSource(DruidProperties druidProperties) { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } @Bean @ConfigurationProperties("spring.datasource.druid.db1") @@ -82,6 +117,12 @@ public class DruidConfig Map targetDataSources = new HashMap<>(); targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource"); + setDataSource(targetDataSources, DataSourceType.WINLIS.name(), "winlisDataSource"); + setDataSource(targetDataSources, DataSourceType.PACS.name(), "pacsDataSource"); + setDataSource(targetDataSources, DataSourceType.ORIS.name(), "orisDataSource"); + setDataSource(targetDataSources, DataSourceType.DB1.name(), "db1DataSource"); + setDataSource(targetDataSources, DataSourceType.DB2.name(), "db2DataSource"); + setDataSource(targetDataSources, DataSourceType.DB3.name(), "db3DataSource"); return new DynamicDataSource(masterDataSource, targetDataSources); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java index 43320f5ef..9b8ea5a57 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java @@ -1,5 +1,6 @@ package com.ruoyi.generator.config; +import com.alibaba.druid.DbType; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; @@ -30,6 +31,9 @@ public class GenConfig /** 是否允许生成文件覆盖到本地(自定义路径) */ public static boolean allowOverwrite; + /** 数据库类型: mysql、oracle、sqlite、postgresql */ + public static DbType dbType; + public static String getAuthor() { return author; @@ -84,4 +88,9 @@ public class GenConfig { GenConfig.allowOverwrite = allowOverwrite; } + + @Value("${dbType}") + public void setDbType(DbType dbType) { + GenConfig.dbType = dbType; + } } 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 02fa6d937..e42951565 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 @@ -2,9 +2,15 @@ package com.ruoyi.generator.controller; import java.io.IOException; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.config.datasource.DynamicDataSourceContextHolder; +import com.ruoyi.common.enums.DataSourceType; import org.apache.commons.io.IOUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresRoles; @@ -49,11 +55,15 @@ public class GenController extends BaseController { private String prefix = "tool/gen"; - @Autowired + @Resource private IGenTableService genTableService; + @Resource(name = "IGenTableService_Oracle") + private IGenTableService genTableService2Oracle; - @Autowired + @Resource private IGenTableColumnService genTableColumnService; + @Resource(name = "IGenTableColumnService_Oracle") + private IGenTableColumnService genTableColumnService2Oracle; @RequiresPermissions("tool:gen:view") @GetMapping() @@ -71,7 +81,12 @@ public class GenController extends BaseController public TableDataInfo genList(GenTable genTable) { startPage(); - List list = genTableService.selectGenTableList(genTable); + List list = new ArrayList<>(); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + list = genTableService.selectGenTableList(genTable); + } else { + list = genTableService2Oracle.selectGenTableList(genTable); + } return getDataTable(list); } @@ -84,7 +99,13 @@ public class GenController extends BaseController public TableDataInfo dataList(GenTable genTable) { startPage(); - List list = genTableService.selectDbTableList(genTable); + List list = new ArrayList<>(); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + list = genTableService.selectDbTableList(genTable); + } else { + + list = genTableService2Oracle.selectDbTableList(genTable); + } return getDataTable(list); } @@ -97,7 +118,12 @@ public class GenController extends BaseController public TableDataInfo columnList(GenTableColumn genTableColumn) { TableDataInfo dataInfo = new TableDataInfo(); - List list = genTableColumnService.selectGenTableColumnListByTableId(genTableColumn); + List list = new ArrayList<>(); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + list = genTableColumnService.selectGenTableColumnListByTableId(genTableColumn); + } else { + list = genTableColumnService2Oracle.selectGenTableColumnListByTableId(genTableColumn); + } dataInfo.setRows(list); dataInfo.setTotal(list.size()); return dataInfo; @@ -133,9 +159,18 @@ public class GenController extends BaseController { String[] tableNames = Convert.toStrArray(tables); // 查询表信息 - List tableList = genTableService.selectDbTableListByNames(tableNames); + List tableList = new ArrayList<>(); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + tableList = genTableService.selectDbTableListByNames(tableNames); + } else { + tableList = genTableService2Oracle.selectDbTableListByNames(tableNames); + } String operName = Convert.toStr(PermissionUtils.getPrincipalProperty("loginName")); - genTableService.importGenTable(tableList, operName); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + genTableService.importGenTable(tableList, operName); + } else { + genTableService2Oracle.importGenTable(tableList, operName); + } return AjaxResult.success(); } @@ -146,8 +181,16 @@ public class GenController extends BaseController @GetMapping("/edit/{tableId}") public String edit(@PathVariable("tableId") Long tableId, ModelMap mmap) { - GenTable table = genTableService.selectGenTableById(tableId); - List genTables = genTableService.selectGenTableAll(); + GenTable table = null; + List genTables = new ArrayList<>(); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + genTables = genTableService.selectGenTableAll(); + table = genTableService.selectGenTableById(tableId); + } else { + genTables = genTableService2Oracle.selectGenTableAll(); + table = genTableService2Oracle.selectGenTableById(tableId); + } + List cxSelect = new ArrayList(); for (GenTable genTable : genTables) { @@ -177,8 +220,13 @@ public class GenController extends BaseController @ResponseBody public AjaxResult editSave(@Validated GenTable genTable) { - genTableService.validateEdit(genTable); - genTableService.updateGenTable(genTable); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + genTableService.validateEdit(genTable); + genTableService.updateGenTable(genTable); + } else { + genTableService2Oracle.validateEdit(genTable); + genTableService2Oracle.updateGenTable(genTable); + } return AjaxResult.success(); } @@ -188,7 +236,11 @@ public class GenController extends BaseController @ResponseBody public AjaxResult remove(String ids) { - genTableService.deleteGenTableByIds(ids); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + genTableService.deleteGenTableByIds(ids); + } else { + genTableService2Oracle.deleteGenTableByIds(ids); + } return AjaxResult.success(); } @@ -208,16 +260,30 @@ public class GenController extends BaseController if (sqlStatement instanceof MySqlCreateTableStatement) { MySqlCreateTableStatement createTableStatement = (MySqlCreateTableStatement) sqlStatement; - if (genTableService.createTable(createTableStatement.toString())) - { - String tableName = createTableStatement.getTableName().replaceAll("`", ""); - tableNames.add(tableName); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + if (genTableService.createTable(createTableStatement.toString())) + { + String tableName = createTableStatement.getTableName().replaceAll("`", ""); + tableNames.add(tableName); + } + } else { + if (genTableService2Oracle.createTable(createTableStatement.toString())) + { + String tableName = createTableStatement.getTableName().replaceAll("`", ""); + tableNames.add(tableName); + } } } } - List tableList = genTableService.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()])); - String operName = Convert.toStr(PermissionUtils.getPrincipalProperty("loginName")); - genTableService.importGenTable(tableList, operName); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + List tableList = genTableService.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()])); + String operName = Convert.toStr(PermissionUtils.getPrincipalProperty("loginName")); + genTableService.importGenTable(tableList, operName); + } else { + List tableList = genTableService2Oracle.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()])); + String operName = Convert.toStr(PermissionUtils.getPrincipalProperty("loginName")); + genTableService2Oracle.importGenTable(tableList, operName); + } return AjaxResult.success(); } catch (Exception e) @@ -235,7 +301,12 @@ public class GenController extends BaseController @ResponseBody public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException { - Map dataMap = genTableService.previewCode(tableId); + Map dataMap = new LinkedHashMap<>(); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + dataMap = genTableService.previewCode(tableId); + } else { + dataMap = genTableService2Oracle.previewCode(tableId); + } return AjaxResult.success(dataMap); } @@ -247,8 +318,13 @@ public class GenController extends BaseController @GetMapping("/download/{tableName}") public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException { - byte[] data = genTableService.downloadCode(tableName); - genCode(response, data); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + byte[] data = genTableService.downloadCode(tableName); + genCode(response, data); + } else { + byte[] data = genTableService2Oracle.downloadCode(tableName); + genCode(response, data); + } } /** @@ -264,7 +340,11 @@ public class GenController extends BaseController { return AjaxResult.error("【系统预设】不允许生成文件覆盖到本地"); } - genTableService.generatorCode(tableName); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + genTableService.generatorCode(tableName); + } else { + genTableService2Oracle.generatorCode(tableName); + } return AjaxResult.success(); } @@ -277,7 +357,11 @@ public class GenController extends BaseController @ResponseBody public AjaxResult synchDb(@PathVariable("tableName") String tableName) { - genTableService.synchDb(tableName); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + genTableService.synchDb(tableName); + } else { + genTableService2Oracle.synchDb(tableName); + } return AjaxResult.success(); } @@ -291,8 +375,13 @@ public class GenController extends BaseController public void batchGenCode(HttpServletResponse response, String tables) throws IOException { String[] tableNames = Convert.toStrArray(tables); - byte[] data = genTableService.downloadCode(tableNames); - genCode(response, data); + if (GenConfig.dbType == DbType.mysql || GenConfig.dbType == null) { + byte[] data = genTableService.downloadCode(tableNames); + genCode(response, data); + } else { + byte[] data = genTableService2Oracle.downloadCode(tableNames); + genCode(response, data); + } } /** diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java index a819c741b..6541d0832 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -2,12 +2,14 @@ package com.ruoyi.generator.mapper; import java.util.List; import com.ruoyi.generator.domain.GenTableColumn; +import org.springframework.context.annotation.Primary; /** * 业务字段 数据层 * * @author ruoyi */ +@Primary public interface GenTableColumnMapper { /** diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java index 7265d423b..efb3aecb9 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java @@ -2,12 +2,14 @@ package com.ruoyi.generator.mapper; import java.util.List; import com.ruoyi.generator.domain.GenTable; +import org.springframework.context.annotation.Primary; /** * 业务 数据层 * * @author ruoyi */ +@Primary public interface GenTableMapper { /** diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableColumnOracleMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableColumnOracleMapper.java new file mode 100644 index 000000000..2038d30a1 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableColumnOracleMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.generator.mapper.oracle; + +import com.ruoyi.generator.domain.GenTableColumn; + +import java.util.List; + +/** + * 业务字段 数据层 + * + * @author dazer007 + */ +public interface GenTableColumnOracleMapper +{ + /** + * 根据表名称查询列信息 + * + * @param tableName 表名称 + * @return 列信息 + */ + public List selectDbTableColumnsByName(String tableName); + + /** + * 查询业务字段列表 + * + * @param genTableColumn 业务字段信息 + * @return 业务字段集合 + */ + public List selectGenTableColumnListByTableId(GenTableColumn genTableColumn); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 删除业务字段 + * + * @param genTableColumns 列数据 + * @return 结果 + */ + public int deleteGenTableColumns(List genTableColumns); + + /** + * 批量删除业务字段 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableColumnByIds(Long[] ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableOracleMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableOracleMapper.java new file mode 100644 index 000000000..6705ca095 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/oracle/GenTableOracleMapper.java @@ -0,0 +1,96 @@ +package com.ruoyi.generator.mapper.oracle; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.generator.domain.GenTable; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.Mapping; + +import java.util.List; + +/** + * 业务 数据层 + * + * @author dazer007 + */ +public interface GenTableOracleMapper +{ + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + public List selectGenTableAll(); + + /** + * 查询表ID业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + public GenTable selectGenTableById(Long id); + + /** + * 查询表名称业务信息 + * + * @param tableName 表名称 + * @return 业务信息 + */ + public GenTable selectGenTableByName(String tableName); + + /** + * 新增业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public int insertGenTable(GenTable genTable); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public int updateGenTable(GenTable genTable); + + /** + * 批量删除业务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableByIds(Long[] ids); + + /** + * 创建表 + * + * @param sql + * @return 结果 + */ + public int createTable(String sql); +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java index 45d015af2..55855c379 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.generator.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import com.ruoyi.common.core.text.Convert; import com.ruoyi.generator.domain.GenTableColumn; @@ -14,6 +15,7 @@ import com.ruoyi.generator.service.IGenTableColumnService; * @author ruoyi */ @Service +@Primary public class GenTableColumnServiceImpl implements IGenTableColumnService { @Autowired diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java index 1f25c534f..407c762b6 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java @@ -19,6 +19,7 @@ import org.apache.velocity.app.Velocity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; @@ -38,11 +39,14 @@ import com.ruoyi.generator.util.GenUtils; import com.ruoyi.generator.util.VelocityInitializer; import com.ruoyi.generator.util.VelocityUtils; +import javax.annotation.Resource; + /** * 业务 服务层实现 * * @author ruoyi */ +@Primary @Service public class GenTableServiceImpl implements IGenTableService { diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableColumnServiceImpl.java new file mode 100644 index 000000000..d68cc70e6 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableColumnServiceImpl.java @@ -0,0 +1,73 @@ +package com.ruoyi.generator.service.impl.oracle; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.oracle.GenTableColumnOracleMapper; +import com.ruoyi.generator.service.IGenTableColumnService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 业务字段 服务层实现 + * + * @author ruoyi + */ +@Service("IGenTableColumnService_Oracle") +@DataSource(value = DataSourceType.WINLIS) +public class GenTableColumnServiceImpl implements IGenTableColumnService +{ + @Autowired + private GenTableColumnOracleMapper genTableColumnMapper; + + /** + * 查询业务字段列表 + * + * @param genTableColumn 业务字段信息 + * @return 业务字段集合 + */ + @Override + public List selectGenTableColumnListByTableId(GenTableColumn genTableColumn) + { + return genTableColumnMapper.selectGenTableColumnListByTableId(genTableColumn); + } + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + @Override + public int insertGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + @Override + public int updateGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 删除业务字段对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteGenTableColumnByIds(String ids) + { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableServiceImpl.java new file mode 100644 index 000000000..4c4013d76 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/oracle/GenTableServiceImpl.java @@ -0,0 +1,538 @@ +package com.ruoyi.generator.service.impl.oracle; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.text.CharsetKit; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.oracle.GenTableColumnOracleMapper; +import com.ruoyi.generator.mapper.oracle.GenTableOracleMapper; +import com.ruoyi.generator.service.IGenTableService; +import com.ruoyi.generator.util.GenUtils; +import com.ruoyi.generator.util.VelocityInitializer; +import com.ruoyi.generator.util.VelocityUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +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.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * 业务 服务层实现 + * + * @author ruoyi + */ +@Service("IGenTableService_Oracle") +@DataSource(value = DataSourceType.WINLIS) +public class GenTableServiceImpl implements IGenTableService +{ + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableOracleMapper genTableMapper; + + @Autowired + private GenTableColumnOracleMapper genTableColumnMapper; + + /** + * 查询业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + @Override + public GenTable selectGenTableById(Long id) + { + GenTable genTable = genTableMapper.selectGenTableById(id); + setTableFromOptions(genTable); + return genTable; + } + + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + @Override + public List selectGenTableList(GenTable genTable) + { + return genTableMapper.selectGenTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + @Override + public List selectDbTableList(GenTable genTable) + { + return genTableMapper.selectDbTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + @Override + public List selectDbTableListByNames(String[] tableNames) + { + return genTableMapper.selectDbTableListByNames(tableNames); + } + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + @Override + public List selectGenTableAll() + { + return genTableMapper.selectGenTableAll(); + } + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + @Override + @Transactional + public void updateGenTable(GenTable genTable) + { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) + { + for (GenTableColumn genTableColumn : genTable.getColumns()) + { + genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + } + } + + /** + * 删除业务对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + @Transactional + public void deleteGenTableByIds(String ids) + { + genTableMapper.deleteGenTableByIds(Convert.toLongArray(ids)); + genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } + + /** + * 创建表 + * + * @param sql 创建表语句 + * @return 结果 + */ + @Override + public boolean createTable(String sql) + { + return genTableMapper.createTable(sql) == 0; + } + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + * @param operName 操作人员 + */ + @Override + @Transactional + public void importGenTable(List tableList, String operName) + { + try + { + for (GenTable table : tableList) + { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) + { + // 保存列信息 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) + { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + } + } + } + catch (Exception e) + { + throw new ServiceException("导入失败:" + e.getMessage()); + } + } + + /** + * 预览代码 + * + * @param tableId 表编号 + * @return 预览数据列表 + */ + @Override + public Map previewCode(Long tableId) + { + Map dataMap = new LinkedHashMap<>(); + // 查询表信息 + GenTable table = genTableMapper.selectGenTableById(tableId); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List 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; + } + + /** + * 生成代码(下载方式) + * + * @param tableName 表名称 + * @return 数据 + */ + @Override + public byte[] downloadCode(String tableName) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 生成代码(自定义路径) + * + * @param tableName 表名称 + */ + @Override + public void generatorCode(String tableName) + { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) + { + if (!StringUtils.contains(template, "sql.vm")) + { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + String path = getGenPath(table, template); + FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8); + } + catch (IOException e) + { + throw new ServiceException("渲染模板失败,表名:" + table.getTableName()); + } + } + } + } + + /** + * 同步数据库 + * + * @param tableName 表名称 + */ + @Override + @Transactional + public void synchDb(String tableName) + { + GenTable table = genTableMapper.selectGenTableByName(tableName); + List tableColumns = table.getColumns(); + Map tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); + + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + if (StringUtils.isEmpty(dbTableColumns)) + { + throw new ServiceException("同步数据失败,原表结构不存在"); + } + List dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); + + 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.updateGenTableColumn(column); + } + else + { + genTableColumnMapper.insertGenTableColumn(column); + } + }); + + List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(delColumns)) + { + genTableColumnMapper.deleteGenTableColumns(delColumns); + } + } + + /** + * 批量生成代码(下载方式) + * + * @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); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 查询表信息并生成代码 + */ + private void generatorCode(String tableName, ZipOutputStream zip) + { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List 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 + { + // 添加到zip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IOUtils.write(sw.toString(), zip, Constants.UTF8); + IOUtils.closeQuietly(sw); + zip.flush(); + zip.closeEntry(); + } + catch (IOException e) + { + log.error("渲染模板失败,表名:" + table.getTableName(), e); + } + } + } + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + @Override + public void validateEdit(GenTable genTable) + { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) + { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSONObject.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) + { + throw new ServiceException("树编码字段不能为空"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) + { + throw new ServiceException("树父编码字段不能为空"); + } + else if (StringUtils.isEmpty(paramsObj.getString(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 (StringUtils.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 (StringUtils.isNull(table.getSubTable().getPkColumn())) + { + table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); + } + } + } + + /** + * 设置主子表信息 + * + * @param table 业务表信息 + */ + public void setSubTable(GenTable table) + { + String subTableName = table.getSubTableName(); + if (StringUtils.isNotEmpty(subTableName)) + { + table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); + } + } + + /** + * 设置代码生成其他选项值 + * + * @param genTable 设置后的生成对象 + */ + public void setTableFromOptions(GenTable genTable) + { + JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) + { + String treeCode = paramsObj.getString(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID); + String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME); + + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + genTable.setParentMenuId(parentMenuId); + genTable.setParentMenuName(parentMenuName); + } + } + + /** + * 获取代码生成地址 + * + * @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); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-generator/src/main/resources/generator.yml index b05254fd2..8b50b7282 100644 --- a/ruoyi-generator/src/main/resources/generator.yml +++ b/ruoyi-generator/src/main/resources/generator.yml @@ -10,4 +10,6 @@ gen: # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) tablePrefix: sys_ # 是否允许生成文件覆盖到本地(自定义路径),默认不允许 - allowOverwrite: false \ No newline at end of file + allowOverwrite: false + # 数据库类型,mysql、oracle、sqlite、postgresql + dbType: oracle \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableColumnOracleMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableColumnOracleMapper.xml new file mode 100644 index 000000000..31056b324 --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableColumnOracleMapper.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column + + + + + + + + + SELECT seq_gen_table_column.NEXTVAL as columnId FROM DUAL + + insert into gen_table_column ( + column_id, + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{columnId}, + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert,jdbcType=CHAR}, + is_edit = #{isEdit,jdbcType=CHAR}, + is_list = #{isList,jdbcType=CHAR}, + is_query = #{isQuery,jdbcType=CHAR}, + is_required = #{isRequired,jdbcType=CHAR}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy,jdbcType=VARCHAR}, + update_time = sysdate + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableOracleMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableOracleMapper.xml new file mode 100644 index 000000000..85e66121b --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/oracle/GenTableOracleMapper.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, form_col_num, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + + + + + + + + + + + + + + + + + + + + + SELECT seq_gen_table.NEXTVAL as tableId FROM DUAL + + insert into gen_table ( + table_id, + table_name, + table_comment, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + form_col_num, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableId}, + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{formColNum}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate + ) + + + + ${sql} + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + sub_table_name = #{subTableName}, + sub_table_fk_name = #{subTableFkName}, + class_name = #{className}, + function_author = #{functionAuthor}, + form_col_num = #{formColNum}, + gen_type = #{genType}, + gen_path = #{genPath}, + tpl_category = #{tplCategory}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + \ No newline at end of file