diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java index 732a0732e9..5725ae785c 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java @@ -5,6 +5,8 @@ import cn.hutool.core.exceptions.ExceptionUtil; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService; import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; +import cn.iocoder.yudao.module.system.service.tenant.TenantService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -29,6 +31,7 @@ import java.util.concurrent.ConcurrentHashMap; public class TenantJobAspect { private final TenantFrameworkService tenantFrameworkService; + private final TenantService tenantService; @Around("@annotation(tenantJob)") public String around(ProceedingJoinPoint joinPoint, TenantJob tenantJob) { @@ -44,6 +47,10 @@ public class TenantJobAspect { // TODO 芋艿:先通过 parallel 实现并行;1)多个租户,是一条执行日志;2)异常的情况 TenantUtils.execute(tenantId, () -> { try { + TenantDO tenant = tenantService.getTenant(tenantId); + if (tenant.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) { + return; // Skip disabled tenants + } joinPoint.proceed(); } catch (Throwable e) { results.put(tenantId, ExceptionUtil.getRootCauseMessage(e)); @@ -53,4 +60,4 @@ public class TenantJobAspect { return JsonUtils.toJsonString(results); } -} +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java index 87d66ea6c4..f917ff783e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java @@ -403,13 +403,37 @@ public class TenantServiceImplTest extends BaseDbUnitTest { })); } + @Test + public void testTenantJobAspect_skipDisabledTenants() { + // mock 租户 + TenantDO enabledTenant = randomPojo(TenantDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())); + TenantDO disabledTenant = randomPojo(TenantDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())); + tenantMapper.insert(enabledTenant); + tenantMapper.insert(disabledTenant); + // mock tenantService + when(tenantService.getTenant(enabledTenant.getId())).thenReturn(enabledTenant); + when(tenantService.getTenant(disabledTenant.getId())).thenReturn(disabledTenant); + + // mock tenantFrameworkService + when(tenantFrameworkService.getTenantIds()).thenReturn(Arrays.asList(enabledTenant.getId(), disabledTenant.getId())); + + // mock joinPoint + ProceedingJoinPoint joinPoint = mock(ProceedingJoinPoint.class); + + // 调用 + TenantJobAspect aspect = new TenantJobAspect(tenantFrameworkService, tenantService); + aspect.around(joinPoint, mock(TenantJob.class)); + + // 断言 + verify(joinPoint, times(1)).proceed(); + } + @Test public void testHandleTenantMenu_disable() { // 准备参数 TenantMenuHandler handler = mock(TenantMenuHandler.class); // mock 禁用 when(tenantProperties.getEnable()).thenReturn(false); - // 调用 tenantService.handleTenantMenu(handler); // 断言