add
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -38,4 +38,11 @@ public interface SysTenantInitService {
|
||||
* @throws SQLException SQLException
|
||||
*/
|
||||
TenantInitVo initData(String tenantId) throws SQLException;
|
||||
|
||||
/**
|
||||
* 初始化完毕
|
||||
*
|
||||
* @param tenantId 租户ID
|
||||
*/
|
||||
void initCompleted(String tenantId);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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));
|
||||
|
@ -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>
|
Reference in New Issue
Block a user