package jnpf.limsService.impl; import jnpf.database.util.TenantDataSourceUtil; import jnpf.lims.api.model.TestWorkItemRequestIdentityActorRequest; import jnpf.lims.api.model.TestWorkItemRequestIdentityBatch; import jnpf.limsService.LimsTestWorkItemRequestIdentityActorService; import jnpf.limsService.LimsTestWorkItemRequestIdentityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @Service public class LimsTestWorkItemRequestIdentityActorServiceImpl implements LimsTestWorkItemRequestIdentityActorService { private final LimsTestWorkItemRequestIdentityService identityService; private final TenantRoute tenantRoute; @Autowired public LimsTestWorkItemRequestIdentityActorServiceImpl( LimsTestWorkItemRequestIdentityService identityService) { this(identityService, new TenantRoute() { @Override public void switchTo(String tenantId) { TenantDataSourceUtil.switchTenant(tenantId); } @Override public void clear() { TenantDataSourceUtil.clearLocalTenantInfo(); } }); } LimsTestWorkItemRequestIdentityActorServiceImpl( LimsTestWorkItemRequestIdentityService identityService, TenantRoute tenantRoute) { this.identityService = identityService; this.tenantRoute = tenantRoute; } @Override public TestWorkItemRequestIdentityBatch resolve( TestWorkItemRequestIdentityActorRequest actor) { if (actor == null || !StringUtils.hasText(actor.getTenantId())) { throw new IllegalArgumentException("内部检验项请验单身份租户不能为空"); } String tenantId = actor.getTenantId().trim(); try { tenantRoute.switchTo(tenantId); return identityService.resolve(tenantId, actor.getRequest()); } finally { tenantRoute.clear(); } } interface TenantRoute { void switchTo(String tenantId); void clear(); } }