add
This commit is contained in:
@ -20,4 +20,9 @@ public interface SysDictApiService {
|
||||
* @return 字典数据集合信息
|
||||
*/
|
||||
List<SysDictData> selectFromCache(String dictType);
|
||||
|
||||
/**
|
||||
* 重置字典缓存数据
|
||||
*/
|
||||
void resetDictCache();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -84,9 +84,5 @@ public interface SysDictDataService extends SysDictApiService {
|
||||
*/
|
||||
List<SysDictData> selectByDictType(String dictType);
|
||||
|
||||
/**
|
||||
* 重置字典缓存数据
|
||||
*/
|
||||
void resetDictCache();
|
||||
|
||||
}
|
||||
|
@ -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')")
|
||||
|
@ -15,13 +15,6 @@ import java.util.List;
|
||||
*/
|
||||
public interface SysTenantDatasourceMapper extends BaseMapper<SysTenantDatasource> {
|
||||
|
||||
/**
|
||||
* 查询所有数据源模式的租户ID
|
||||
*
|
||||
* @return tenantIds
|
||||
*/
|
||||
List<String> selectTenantIds();
|
||||
|
||||
/**
|
||||
* 通过IP查询租户数据源信息 todo select *
|
||||
*
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -81,13 +81,6 @@ public interface SysTenantDatasourceService {
|
||||
*/
|
||||
List<SysTenantDatasource> selectList(SysTenantDatasourceParam param);
|
||||
|
||||
/**
|
||||
* 查询所有数据源模式的租户ID
|
||||
*
|
||||
* @return tenantIds
|
||||
*/
|
||||
List<String> selectTenantIds();
|
||||
|
||||
/**
|
||||
* 将租户下的除datasourceId之外的其他数据源设置为备用
|
||||
*
|
||||
|
@ -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 {
|
||||
|
||||
/**
|
||||
* 新增租户
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user