diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataBaseType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataBaseType.java new file mode 100644 index 000000000..5d0f05ad7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataBaseType.java @@ -0,0 +1,49 @@ +package com.ruoyi.common.enums; + +import com.ruoyi.common.utils.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 数据库类型 + * + * @author Lion Li + */ +@Getter +@AllArgsConstructor +public enum DataBaseType { + + /** + * MySQL + */ + MY_SQL("MySQL"), + + /** + * Oracle + */ + ORACLE("Oracle"), + + /** + * PostgreSQL + */ + POSTGRE_SQL("PostgreSQL"), + + /** + * SQL Server + */ + SQL_SERVER("Microsoft SQL Server"); + + private final String type; + + public static DataBaseType find(String databaseProductName) { + if (StringUtils.isBlank(databaseProductName)) { + return null; + } + for (DataBaseType type : values()) { + if (type.getType().equals(databaseProductName)) { + return type; + } + } + return null; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java new file mode 100644 index 000000000..3d98def50 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataBaseHelper.java @@ -0,0 +1,61 @@ +package com.ruoyi.common.helper; + +import cn.hutool.core.convert.Convert; +import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; +import com.ruoyi.common.enums.DataBaseType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import javax.sql.DataSource; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; + +/** + * 数据库助手 + * + * @author Lion Li + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class DataBaseHelper { + + /** + * 获取当前数据库类型 + */ + public static DataBaseType getDataBasyType() { + DynamicRoutingDataSource ds = (DynamicRoutingDataSource) SpringUtils.getBean(DataSource.class); + DataSource dataSource = ds.determineDataSource(); + try { + DatabaseMetaData metaData = dataSource.getConnection().getMetaData(); + String databaseProductName = metaData.getDatabaseProductName(); + return DataBaseType.find(databaseProductName); + } catch (SQLException e) { + throw new ServiceException(e.getMessage()); + } + } + + public static boolean isMySql() { + return DataBaseType.MY_SQL == getDataBasyType(); + } + + public static boolean isOracle() { + return DataBaseType.ORACLE == getDataBasyType(); + } + + public static boolean isPostgerSql() { + return DataBaseType.POSTGRE_SQL == getDataBasyType(); + } + + public static boolean isSqlServer() { + return DataBaseType.SQL_SERVER == getDataBasyType(); + } + + public static String findInSet(Object var1, String var2) { + DataBaseType dataBasyType = getDataBasyType(); + if (dataBasyType == DataBaseType.SQL_SERVER) { + return "charindex(" + Convert.toStr(var1) + ", " + var2 + ") <> 0"; + } + return "find_in_set(" + Convert.toStr(var1) + ", " + var2 + ") <> 0"; + } +} 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 index b51668fc2..6d3034fc6 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/BaseGenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/BaseGenTableServiceImpl.java @@ -3,27 +3,23 @@ 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.helper.DataBaseHelper; 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; @@ -38,30 +34,18 @@ import java.util.zip.ZipOutputStream; @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()); + if (DataBaseHelper.isMySql()) { + return SpringUtils.getBean(GenTableServiceImpl.class); + } else if (DataBaseHelper.isOracle()) { + return SpringUtils.getBean(OracleGenTableServiceImpl.class); + } else if (DataBaseHelper.isPostgerSql()) { + throw new ServiceException("当前数据库类型不支持!!!"); + } else if (DataBaseHelper.isSqlServer()) { + throw new ServiceException("当前数据库类型不支持!!!"); + } else { + throw new ServiceException("当前数据库类型不支持!!!"); } - return null; } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java index aae8f1aeb..47c5528e2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.helper.DataBaseHelper; import com.ruoyi.system.domain.SysRoleDept; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleDeptMapper; @@ -47,7 +48,7 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService { .select(SysDept::getDeptId) .eq(SysDept::getDeptId, deptId) .or() - .apply("find_in_set({0},ancestors) <> 0", deptId)); + .apply(DataBaseHelper.findInSet(deptId, "ancestors"))); if (CollUtil.isNotEmpty(list)) { return list.stream().map(d -> Convert.toStr(d.getDeptId())).collect(Collectors.joining(",")); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 3ef5eb8f0..6b6fddd35 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.DataBaseHelper; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.TreeBuildUtils; @@ -108,7 +109,7 @@ public class SysDeptServiceImpl implements ISysDeptService { public long selectNormalChildrenDeptById(Long deptId) { return baseMapper.selectCount(new LambdaQueryWrapper() .eq(SysDept::getStatus, UserConstants.DEPT_NORMAL) - .apply("find_in_set({0}, ancestors) <> 0", deptId)); + .apply(DataBaseHelper.findInSet(deptId, "ancestors"))); } /** @@ -234,7 +235,7 @@ public class SysDeptServiceImpl implements ISysDeptService { */ public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) { List children = baseMapper.selectList(new LambdaQueryWrapper() - .apply("find_in_set({0},ancestors) <> 0", deptId)); + .apply(DataBaseHelper.findInSet(deptId, "ancestors"))); List list = new ArrayList<>(); for (SysDept child : children) { SysDept dept = new SysDept(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index d236c960c..e5b54aba1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -15,6 +15,7 @@ import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.DataBaseHelper; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysPost; @@ -80,7 +81,7 @@ public class SysUserServiceImpl implements ISysUserService { .and(ObjectUtil.isNotNull(user.getDeptId()), w -> { List deptList = deptMapper.selectList(new LambdaQueryWrapper() .select(SysDept::getDeptId) - .apply("find_in_set({0},ancestors) <> 0", user.getDeptId())); + .apply(DataBaseHelper.findInSet(user.getDeptId(), "ancestors"))); w.eq("u.dept_id", user.getDeptId()) .or() .in("u.dept_id", deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList()));