This commit is contained in:
2023-07-14 15:13:02 +08:00
parent cda84d8600
commit c5eb3c09d6
13 changed files with 40 additions and 41 deletions

View File

@ -20,4 +20,9 @@ public interface SysDictApiService {
* @return 字典数据集合信息
*/
List<SysDictData> selectFromCache(String dictType);
/**
* 重置字典缓存数据
*/
void resetDictCache();
}

View File

@ -41,17 +41,26 @@ public class SysTenantParam implements Serializable {
@Schema(description = "类型(1正常 2过期)")
private String type;
@Schema(description = "是否初始化(1是 0否)")
private String initialized;
/**
* 是否是登陆接口
*/
private Boolean isLogin = false;
public static SysTenantParam buildNormalSelectParam() {
return buildNormalSelectParam(null);
}
public static SysTenantParam buildNormalSelectParam(String companyName) {
SysTenantParam param = new SysTenantParam();
param.setCompanyName(companyName);
param.setTime(new Date());
param.setStatus(BaseEnum.NORMAL.getCode());
param.setType(SysTenantParam.TYPE_NOT_EXPIRED);
param.setIsLogin(true);
param.setInitialized(BaseEnum.YES.getCode());
return param;
}
}

View File

@ -1,5 +1,6 @@
package com.qiaoba.module.system.runner;
import com.qiaoba.api.system.service.SysDictApiService;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.param.SysTenantParam;
import com.qiaoba.api.tenant.service.SysTenantApiService;
@ -29,6 +30,8 @@ public class SyncDataToCacheRunner implements ApplicationRunner {
private final SysTenantApiService sysTenantApiService;
private final SysConfigService sysConfigService;
private final SysDictApiService sysDictApiService;
@Override
public void run(ApplicationArguments args) throws Exception {
@ -42,14 +45,16 @@ public class SyncDataToCacheRunner implements ApplicationRunner {
BaseContext.clearTenantId();
}
// 对租户类型进行分类
for (SysTenant sysTenant : sysTenantList) {
try {
TenantUtil.setContext(sysTenant);
// 系统配置
sysConfigService.resetConfigCache();
log.info("同步[系统配置]完成, 租户ID: {}", sysTenant.getTenantId());
// 字典数据
sysDictApiService.resetDictCache();
log.info("初始化租户数据完成, 租户ID: {}", sysTenant.getTenantId());
} catch (Exception e) {
log.error("同步[系统配置]失败, 租户ID: {}, 错误原因: {}", sysTenant.getTenantId(), e.getMessage());
log.error("初始化租户数据完成, 租户ID: {}, 错误原因: {}", sysTenant.getTenantId(), e.getMessage());
} finally {
BaseContext.clearAllHolder();
}

View File

@ -84,9 +84,5 @@ public interface SysDictDataService extends SysDictApiService {
*/
List<SysDictData> selectByDictType(String dictType);
/**
* 重置字典缓存数据
*/
void resetDictCache();
}

View File

@ -67,8 +67,8 @@ public class SysTenantController {
@GetMapping("/normal-list")
@Operation(summary = "获取正常列表[开放接口]")
public TableDataInfo<SysTenant> normalPageList(PageQuery pageQuery) {
return sysTenantService.selectPageList(SysTenantParam.buildNormalSelectParam(), pageQuery);
public TableDataInfo<SysTenant> normalPageList(@RequestParam(required = false) String companyName,PageQuery pageQuery) {
return sysTenantService.selectPageList(SysTenantParam.buildNormalSelectParam(companyName), pageQuery);
}
@PreAuthorize("hasAuthority('tenant:edit')")

View File

@ -15,13 +15,6 @@ import java.util.List;
*/
public interface SysTenantDatasourceMapper extends BaseMapper<SysTenantDatasource> {
/**
* 查询所有数据源模式的租户ID
*
* @return tenantIds
*/
List<String> selectTenantIds();
/**
* 通过IP查询租户数据源信息 todo select *
*

View File

@ -6,7 +6,7 @@ import com.qiaoba.module.tenant.service.SysTenantService;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
/**
* 项目启动完成后-将主库中的租户信息同步到 Redis 中
@ -15,7 +15,7 @@ import org.springframework.stereotype.Service;
* @version 1.0
* @since 2022-09-22 04:20:28
*/
@Service
@Component
@RequiredArgsConstructor
public class SysTenantRunner implements ApplicationRunner {

View File

@ -81,13 +81,6 @@ public interface SysTenantDatasourceService {
*/
List<SysTenantDatasource> selectList(SysTenantDatasourceParam param);
/**
* 查询所有数据源模式的租户ID
*
* @return tenantIds
*/
List<String> selectTenantIds();
/**
* 将租户下的除datasourceId之外的其他数据源设置为备用
*

View File

@ -3,6 +3,7 @@ package com.qiaoba.module.tenant.service;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.dto.SysTenantDto;
import com.qiaoba.api.tenant.entity.param.SysTenantParam;
import com.qiaoba.api.tenant.service.SysTenantApiService;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.module.tenant.entity.dto.TenantSettingDto;
@ -14,7 +15,7 @@ import com.qiaoba.module.tenant.entity.dto.TenantSettingDto;
* @version 1.0
* @since 2023/5/30 10:55
*/
public interface SysTenantService {
public interface SysTenantService extends SysTenantApiService {
/**
* 新增租户

View File

@ -1,15 +1,16 @@
package com.qiaoba.module.tenant.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.SysTenantDatasource;
import com.qiaoba.api.tenant.entity.param.SysTenantDatasourceParam;
import com.qiaoba.api.tenant.entity.param.SysTenantParam;
import com.qiaoba.common.base.enums.BaseEnum;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exception.ServiceException;
import com.qiaoba.common.database.entity.DynamicDataSource;
import com.qiaoba.common.database.service.DynamicDatasourceService;
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
import com.qiaoba.module.tenant.service.SysTenantService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -27,14 +28,16 @@ import java.util.*;
public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
private final SysTenantDatasourceService sysTenantDatasourceService;
private final SysTenantService sysTenantService;
@Override
public Map<String, List<DynamicDataSource>> loadAllTenantDatasource() {
Map<String, List<DynamicDataSource>> datasourceMap = new LinkedHashMap<>();
List<String> tenantIds = sysTenantDatasourceService.selectTenantIds();
for (String tenantId : tenantIds) {
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(new SysTenantDatasourceParam(tenantId));
datasourceMap.put(tenantId, transformList(datasourceList));
List<SysTenant> sysTenants = sysTenantService.selectList(SysTenantParam.buildNormalSelectParam());
for (SysTenant sysTenant : sysTenants) {
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(new SysTenantDatasourceParam(sysTenant.getTenantId()));
datasourceMap.put(sysTenant.getTenantId(), transformList(datasourceList));
}
return datasourceMap;
}

View File

@ -108,11 +108,6 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
return sysTenantDatasourceMapper.selectList(paramToWrapper(param));
}
@Override
public List<String> selectTenantIds() {
return sysTenantDatasourceMapper.selectTenantIds();
}
@Override
public void setBackupDatasourceExcludeId(String tenantId, String excludeId) {
sysTenantDatasourceMapper.setBackupDatasourceExcludeId(tenantId, excludeId, BaseEnum.NO.getCode());

View File

@ -39,7 +39,7 @@ import java.util.Objects;
@Configuration
@RequiredArgsConstructor
@Slf4j
public class SysTenantServiceImpl implements SysTenantService, SysTenantApiService {
public class SysTenantServiceImpl implements SysTenantService {
private final SysTenantMapper sysTenantMapper;
@ -150,6 +150,7 @@ public class SysTenantServiceImpl implements SysTenantService, SysTenantApiServi
QueryWrapper<SysTenant> wrapper = new QueryWrapper<>();
wrapper.lambda()
.eq(StrUtil.isNotBlank(param.getStatus()), SysTenant::getStatus, param.getStatus())
.eq(StrUtil.isNotBlank(param.getInitialized()), SysTenant::getInitialized, param.getInitialized())
.like(StrUtil.isNotBlank(param.getCompanyName()), SysTenant::getCompanyName, param.getCompanyName())
.like(StrUtil.isNotBlank(param.getContactName()), SysTenant::getContactName, param.getContactName());

View File

@ -3,9 +3,6 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qiaoba.module.tenant.mapper.SysTenantDatasourceMapper">
<select id="selectTenantIds" resultType="string">
SELECT tenant_id FROM sys_tenant_datasource GROUP BY tenant_id
</select>
<update id="setBackupDatasourceExcludeId">
update sys_tenant_datasource set is_primary = #{code} where tenant_id = #{tenantId} and datasource_id != #{excludeId}
@ -14,4 +11,5 @@
<select id="selectByIp" resultType="com.qiaoba.api.tenant.entity.SysTenantDatasource">
select * from sys_tenant_datasource where ip = #{ip} and tenant_id = #{tenantId}
</select>
</mapper>