This commit is contained in:
2023-07-07 17:51:48 +08:00
parent 8aad406ab0
commit d52133394c
12 changed files with 124 additions and 106 deletions

View File

@ -1,5 +1,6 @@
package com.qiaoba.module.tenant.controller;
import com.qiaoba.common.base.result.AjaxResult;
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
import com.qiaoba.module.tenant.service.SysTenantInitService;
@ -43,5 +44,10 @@ public class SysTenantInitController {
public TenantInitVo initData(@PathVariable String tenantId) throws Exception {
return sysTenantInitService.initData(tenantId);
}
@PostMapping(value = "/initCompleted/{tenantId}")
@Operation(summary = "初始化完毕")
public AjaxResult initCompleted(@PathVariable String tenantId) {
sysTenantInitService.initCompleted(tenantId);
return AjaxResult.success();
}
}

View File

@ -29,5 +29,5 @@ public interface SysTenantDatasourceMapper extends BaseMapper<SysTenantDatasourc
* @param excludeId 排除Id
* @param code 否
*/
void setBackupDatasourceExcludeId(@Param("tenantId") String tenantId, @Param("excludeId") String excludeId, @Param("result") String code);
void setBackupDatasourceExcludeId(@Param("tenantId") String tenantId, @Param("excludeId") String excludeId, @Param("code") String code);
}

View File

@ -2,6 +2,7 @@ package com.qiaoba.module.tenant.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.common.database.annotations.SelectOneRow;
/**
* 租户管理 数据层
@ -11,4 +12,13 @@ import com.qiaoba.api.tenant.entity.SysTenant;
* @since 2023/5/30 11:08
*/
public interface SysTenantMapper extends BaseMapper<SysTenant> {
/**
* 检查公司名称是否存在
*
* @param sysTenant sysTenant
* @return 已存在的名称
*/
@SelectOneRow
String checkCompanyNameIsExist(SysTenant sysTenant);
}

View File

@ -38,4 +38,11 @@ public interface SysTenantInitService {
* @throws SQLException SQLException
*/
TenantInitVo initData(String tenantId) throws SQLException;
/**
* 初始化完毕
*
* @param tenantId 租户ID
*/
void initCompleted(String tenantId);
}

View File

@ -89,6 +89,7 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
@Override
@Transactional(rollbackFor = Exception.class)
public int switchPrimary(String tenantId, String datasourceId) {
// todo 检查连接可用性
// 更新其他的为非主要
setBackupDatasourceExcludeId(tenantId, datasourceId);
// 更新他为主要
@ -97,7 +98,7 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
int result = updateById(datasource);
// 刷新PrimaryDatasourceMap
if (result > BaseConstant.HANDLE_ERROR) {
// todo
// todo 刷新PrimaryDatasourceMap
}
return result;
}

View File

@ -9,7 +9,9 @@ import com.qiaoba.api.tenant.entity.SysTenantDatasource;
import com.qiaoba.api.tenant.enums.TenantModeEnum;
import com.qiaoba.common.base.code.DatasourceErrorCode;
import com.qiaoba.common.base.code.TenantErrorCode;
import com.qiaoba.common.base.enums.BaseEnum;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.common.database.context.PrimaryDatasourceContext;
import com.qiaoba.common.database.context.TenantDbTypeContext;
import com.qiaoba.common.database.properties.TenantSchema;
@ -49,6 +51,7 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
public TenantInitCheckVo check(String tenantId) {
// 1. 查询租户信息, 获取租户名称|租户模式
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
checkInitialized(sysTenant);
// 2. 租户模式 = 3 数据源模式
if (TenantModeEnum.isDatasource(sysTenant.getMode())) {
// 3. 根据租户ID查询主要数据源(1条)
@ -91,6 +94,7 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
@Override
public TenantInitVo createTables(String tenantId) {
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
checkInitialized(sysTenant);
// 字段模式
if (TenantModeEnum.isColumn(sysTenant.getMode())) {
return new TenantInitVo(HttpStatus.HTTP_OK, "字段模式, 无需新建表");
@ -124,6 +128,7 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
@Override
public TenantInitVo initData(String tenantId) throws SQLException {
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
checkInitialized(sysTenant);
// 字段模式
if (TenantModeEnum.isColumn(sysTenant.getMode())) {
// 获取默认租户的主数据源
@ -154,6 +159,20 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
return new TenantInitVo(TenantErrorCode.MODE_NOT_FIND.getCode(), TenantErrorCode.MODE_NOT_FIND.getMsg());
}
@Override
public void initCompleted(String tenantId) {
SysTenant sysTenant = new SysTenant();
sysTenant.setTenantId(tenantId);
sysTenant.setInitialized(BaseEnum.YES.getCode());
sysTenantService.update(sysTenant);
}
private void checkInitialized(SysTenant sysTenant) {
if (BaseEnum.YES.getCode().equals(sysTenant.getInitialized())) {
throw new ServiceException(TenantErrorCode.INITIALIZED.getCode(), TenantErrorCode.INITIALIZED.getMsg());
}
}
private TenantInitVo init(Connection conn, String tenantId) {
try {

View File

@ -40,14 +40,15 @@ public class SysTenantServiceImpl implements SysTenantService, SysTenantApiServi
private final SysTenantMapper sysTenantMapper;
private final SysTenantDatasourceService sysTenantDatasourceService;
private final RedisService redisService;
@Override
public int insert(SysTenant sysTenant) {
checkCompanyNameIsExist(sysTenant);
sysTenant.setCreateTime(new Date());
sysTenant.setCreateUser(SecurityUtil.getLoginUsername());
sysTenant.setStatus(BaseEnum.NORMAL.getCode());
sysTenant.setInitialized(BaseEnum.NO.getCode());
int result = sysTenantMapper.insert(sysTenant);
if (result > BaseConstant.HANDLE_ERROR) {
toCache(sysTenant);
@ -57,6 +58,7 @@ public class SysTenantServiceImpl implements SysTenantService, SysTenantApiServi
@Override
public int update(SysTenant sysTenant) {
checkCompanyNameIsExist(sysTenant);
sysTenant.setUpdateTime(new Date());
sysTenant.setUpdateUser(SecurityUtil.getLoginUsername());
int result = sysTenantMapper.updateById(sysTenant);
@ -139,6 +141,13 @@ public class SysTenantServiceImpl implements SysTenantService, SysTenantApiServi
redisService.set(TenantConstant.TENANT_INFO_KEY_PREFIX + sysTenant.getTenantId(), sysTenant);
}
private void checkCompanyNameIsExist(SysTenant sysTenant) {
String companyName = sysTenantMapper.checkCompanyNameIsExist(sysTenant);
if (StrUtil.isNotBlank(companyName)) {
throw new ServiceException(TenantErrorCode.TENANT_NAME_EXIST.getCode(), TenantErrorCode.TENANT_NAME_EXIST.getMsg());
}
}
@Override
public List<SysTenant> selectList(SysTenantParam param) {
return sysTenantMapper.selectList(param2Wrapper(param));

View File

@ -0,0 +1,10 @@
<?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.qiaoba.module.tenant.mapper.SysTenantMapper">
<select id="checkCompanyNameIsExist" resultType="string">
SELECT company_name FROM sys_tenant where company_name = #{companyName}
<if test="tenantId != null and tenantId != ''">and tenant_id != #{tenantId}</if>
</select>
</mapper>