diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java index 151ca3ce5..76a5e7b69 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java @@ -194,4 +194,19 @@ public class SysTenantController extends BaseController { return R.ok("同步租户字典成功"); } + /** + * 同步租户参数配置 + */ + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + @Log(title = "租户管理", businessType = BusinessType.INSERT) + @Lock4j + @GetMapping("/syncTenantConfig") + public R syncTenantConfig() { + if (!TenantHelper.isEnable()) { + return R.fail("当前未开启租户模式"); + } + tenantService.syncTenantConfig(); + return R.ok("同步租户参数配置成功"); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java index f69782902..b06658db5 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java @@ -84,4 +84,9 @@ public interface ISysTenantService { * 同步租户字典 */ void syncTenantDict(); + + /** + * 同步租户参数配置 + */ + void syncTenantConfig(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 1bc4ef4c7..0f367e7eb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -506,4 +506,60 @@ public class SysTenantServiceImpl implements ISysTenantService { } } + /** + * 同步租户参数配置 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void syncTenantConfig() { + // 查询超管 所有参数配置 + List configList = TenantHelper.ignore(() -> configMapper.selectList()); + + // 所有租户参数配置 + Map> configMap = StreamUtils.groupByKey(configList, TenantEntity::getTenantId); + + // 默认租户字典类型列表 + List defaultConfigList = configMap.get(TenantConstants.DEFAULT_TENANT_ID); + + // 获取所有租户编号 + List tenantIds = baseMapper.selectObjs( + new LambdaQueryWrapper().select(SysTenant::getTenantId) + .eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> { + return Convert.toStr(x); + }); + // 待入库的字典类型和字典数据 + List saveConfigList = new ArrayList<>(); + // 待同步的租户编号(用于清除对于租户的字典缓存) + Set syncTenantIds = new HashSet<>(); + // 循环所有租户,处理需要同步的数据 + for (String tenantId : tenantIds) { + // 排除默认租户 + if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { + continue; + } + // 根据默认租户的字典类型进行数据同步 + for (SysConfig config : defaultConfigList) { + // 获取当前租户的字典类型列表 + List typeList = StreamUtils.toList(configMap.get(tenantId), SysConfig::getConfigKey); + if (!typeList.contains(config.getConfigKey())) { + SysConfig type = BeanUtil.toBean(config, SysConfig.class); + type.setConfigId(null); + type.setTenantId(tenantId); + type.setCreateTime(null); + type.setUpdateTime(null); + syncTenantIds.add(tenantId); + saveConfigList.add(type); + } + } + } + TenantHelper.ignore(() -> { + if (CollUtil.isNotEmpty(saveConfigList)) { + configMapper.insertBatch(saveConfigList); + } + }); + for (String tenantId : syncTenantIds) { + TenantHelper.dynamic(tenantId, () -> CacheUtils.clear(CacheNames.SYS_CONFIG)); + } + } + }