|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.qiaoba.module.tenant.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.alibaba.druid.pool.DruidDataSource;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.qiaoba.auth.utils.SecurityUtil;
|
|
|
|
|
import com.qiaoba.common.base.constants.BaseConstant;
|
|
|
|
@ -22,10 +23,10 @@ import com.qiaoba.module.tenant.mapper.SysTenantMapper;
|
|
|
|
|
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
|
|
|
|
|
import com.qiaoba.module.tenant.service.SysTenantService;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
@ -38,32 +39,18 @@ import java.util.Objects;
|
|
|
|
|
* @version 1.0
|
|
|
|
|
* @since 2023/5/30 10:55
|
|
|
|
|
*/
|
|
|
|
|
@Service
|
|
|
|
|
@Configuration
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class SysTenantServiceImpl implements SysTenantService {
|
|
|
|
|
|
|
|
|
|
@Value("${qiaoba.datasource.master.driver}")
|
|
|
|
|
private String driver;
|
|
|
|
|
@Value("${qiaoba.datasource.master.url}")
|
|
|
|
|
private String url;
|
|
|
|
|
@Value("${qiaoba.datasource.master.username}")
|
|
|
|
|
private String username;
|
|
|
|
|
@Value("${qiaoba.datasource.master.password}")
|
|
|
|
|
private String password;
|
|
|
|
|
@Value("${spring.application.name}")
|
|
|
|
|
private String baseDatabase;
|
|
|
|
|
|
|
|
|
|
private final SysTenantMapper sysTenantMapper;
|
|
|
|
|
private final SysTenantDatasourceService sysTenantDatasourceService;
|
|
|
|
|
private final DynamicDataSourceConfig dynamicDataSourceConfig;
|
|
|
|
|
private final RedisService redisService;
|
|
|
|
|
|
|
|
|
|
@PostConstruct
|
|
|
|
|
public void init() {
|
|
|
|
|
BaseContext.setTenantId(TenantConstant.DEFAULT_TENANT_ID);
|
|
|
|
|
resetCache();
|
|
|
|
|
BaseContext.clearTenantId();
|
|
|
|
|
}
|
|
|
|
|
@Value("${spring.application.name}")
|
|
|
|
|
private String baseDatabase;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int insert(SysTenant sysTenant) {
|
|
|
|
@ -177,29 +164,32 @@ public class SysTenantServiceImpl implements SysTenantService {
|
|
|
|
|
* 处理字段模式
|
|
|
|
|
*/
|
|
|
|
|
private Connection column() {
|
|
|
|
|
return JdbcUtil.getConnection(driver, url, username, password);
|
|
|
|
|
DruidDataSource dataSource = DynamicDataSourceConfig.getPrimaryDataSource(TenantConstant.DEFAULT_TENANT_ID);
|
|
|
|
|
return JdbcUtil.getConnection(dataSource.getDriverClassName(), dataSource.getUrl(), dataSource.getUsername(), dataSource.getPassword());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理数据库模式
|
|
|
|
|
*/
|
|
|
|
|
private Connection schema(String tenantId) {
|
|
|
|
|
String realUrl = this.url.replaceFirst(baseDatabase, baseDatabase + BaseConstant.HYPHEN_JOIN_STR + tenantId);
|
|
|
|
|
return JdbcUtil.getConnection(driver, realUrl, username, password);
|
|
|
|
|
DruidDataSource dataSource = DynamicDataSourceConfig.getPrimaryDataSource(TenantConstant.DEFAULT_TENANT_ID);
|
|
|
|
|
String realUrl = dataSource.getUrl().replaceFirst(baseDatabase, baseDatabase + BaseConstant.HYPHEN_JOIN_STR + tenantId);
|
|
|
|
|
return JdbcUtil.getConnection(dataSource.getDriverClassName(), realUrl, dataSource.getUsername(), dataSource.getPassword());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理数据源模式
|
|
|
|
|
*/
|
|
|
|
|
private Connection datasource(String tenantId) {
|
|
|
|
|
SysTenantDatasource master = sysTenantDatasourceService.selectPrimary(tenantId);
|
|
|
|
|
if (Objects.isNull(master)) {
|
|
|
|
|
SysTenantDatasource primary = sysTenantDatasourceService.selectPrimary(tenantId);
|
|
|
|
|
if (Objects.isNull(primary)) {
|
|
|
|
|
throw new ServiceException("未找到租户主数据源信息");
|
|
|
|
|
}
|
|
|
|
|
return JdbcUtil.getConnection(DataBaseEnum.getDriver(master.getType()), DataBaseEnum.getUrl(master.getType(), master.getIp(), master.getPort(), master.getName()), master.getUsername(), master.getPassword());
|
|
|
|
|
return JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()), DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getName()), primary.getUsername(), primary.getPassword());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void toCache(SysTenant sysTenant) {
|
|
|
|
|
log.debug("加载租户信息进缓存, 租户ID: {}", sysTenant.getTenantId());
|
|
|
|
|
redisService.set(TenantConstant.TENANT_INFO_KEY_PREFIX + sysTenant.getTenantId(), sysTenant);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|