parent
eefd9a71fc
commit
45a5b7d1d4
|
@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
|||
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
||||
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnoreAspect;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.TenantDatabaseInterceptor;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDsProcessor;
|
||||
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
||||
import cn.iocoder.yudao.framework.tenant.core.job.TenantJobHandlerDecorator;
|
||||
import cn.iocoder.yudao.framework.tenant.core.mq.TenantRedisMessageInterceptor;
|
||||
|
@ -17,6 +18,10 @@ import cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter;
|
|||
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
||||
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
|
||||
import cn.iocoder.yudao.module.system.api.tenant.TenantApi;
|
||||
import com.baomidou.dynamic.datasource.processor.DsHeaderProcessor;
|
||||
import com.baomidou.dynamic.datasource.processor.DsProcessor;
|
||||
import com.baomidou.dynamic.datasource.processor.DsSessionProcessor;
|
||||
import com.baomidou.dynamic.datasource.processor.DsSpelExpressionProcessor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
|
||||
import org.springframework.beans.BeansException;
|
||||
|
@ -64,6 +69,13 @@ public class YudaoTenantAutoConfiguration {
|
|||
return inner;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DsProcessor dsProcessor() {
|
||||
TenantDsProcessor tenantDsProcessor = new TenantDsProcessor();
|
||||
tenantDsProcessor.setNextProcessor(new DsSpelExpressionProcessor());
|
||||
return tenantDsProcessor;
|
||||
}
|
||||
|
||||
// ========== WEB ==========
|
||||
|
||||
@Bean
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package cn.iocoder.yudao.framework.tenant.core.db.dynamic;
|
||||
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 使用租户所在的数据源
|
||||
*
|
||||
* 使用方式:当我们希望一个表使用租户所在的数据源,可以在该表的 Mapper 上添加该注解
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@DS(TenantDS.KEY)
|
||||
public @interface TenantDS {
|
||||
|
||||
/**
|
||||
* 租户对应的数据源的占位符
|
||||
*/
|
||||
String KEY = "#context.tenantId";
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package cn.iocoder.yudao.framework.tenant.core.db.dynamic;
|
||||
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import com.baomidou.dynamic.datasource.processor.DsProcessor;
|
||||
import org.aopalliance.intercept.MethodInvocation;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 基于 {@link TenantDS} 的数据源处理器
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
public class TenantDsProcessor extends DsProcessor {
|
||||
|
||||
@Override
|
||||
public boolean matches(String key) {
|
||||
return Objects.equals(key, TenantDS.KEY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String doDetermineDatasource(MethodInvocation invocation, String key) {
|
||||
Long tenantId = TenantContextHolder.getRequiredTenantId();
|
||||
return "tenant_" + tenantId + "_ds";
|
||||
}
|
||||
|
||||
}
|
|
@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
// TODO 芋艿:@TenantDS
|
||||
public interface DeptMapper extends BaseMapperX<DeptDO> {
|
||||
|
||||
default List<DeptDO> selectList(DeptListReqVO reqVO) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.dept;
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
|
||||
|
@ -12,6 +13,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface PostMapper extends BaseMapperX<PostDO> {
|
||||
|
||||
default List<PostDO> selectList(Collection<Long> ids, Collection<Integer> statuses) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.dept;
|
|||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
@ -10,6 +11,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface UserPostMapper extends BaseMapperX<UserPostDO> {
|
||||
|
||||
default List<UserPostDO> selectListByUserId(Long userId) {
|
||||
|
@ -27,6 +29,6 @@ public interface UserPostMapper extends BaseMapperX<UserPostDO> {
|
|||
}
|
||||
|
||||
default void deleteByUserId(Long userId) {
|
||||
delete(Wrappers.lambdaUpdate(UserPostDO.class).eq(UserPostDO::getUserId, userId));
|
||||
delete(new LambdaQueryWrapperX<UserPostDO>().eq(UserPostDO::getUserId, userId));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.logger;
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogExportReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.LoginLogDO;
|
||||
|
@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface LoginLogMapper extends BaseMapperX<LoginLogDO> {
|
||||
|
||||
default PageResult<LoginLogDO> selectPage(LoginLogPageReqVO reqVO) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstant
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogExportReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO;
|
||||
|
@ -13,6 +14,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface OperateLogMapper extends BaseMapperX<OperateLogDO> {
|
||||
|
||||
default PageResult<OperateLogDO> selectPage(OperateLogPageReqVO reqVO, Collection<Long> userIds) {
|
||||
|
|
|
@ -3,11 +3,13 @@ package cn.iocoder.yudao.module.system.dal.mysql.notice;
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface NoticeMapper extends BaseMapperX<NoticeDO> {
|
||||
|
||||
default PageResult<NoticeDO> selectPage(NoticePageReqVO reqVO) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO;
|
||||
|
@ -14,6 +15,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface NotifyMessageMapper extends BaseMapperX<NotifyMessageDO> {
|
||||
|
||||
default PageResult<NotifyMessageDO> selectPage(NotifyMessagePageReqVO reqVO) {
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
// TODO 芋艿:@TenantDS
|
||||
public interface RoleMapper extends BaseMapperX<RoleDO> {
|
||||
|
||||
default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) {
|
||||
|
|
|
@ -11,6 +11,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
// TODO 芋艿:@TenantDS
|
||||
public interface RoleMenuMapper extends BaseMapperX<RoleMenuDO> {
|
||||
|
||||
@Repository
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
// TODO 芋艿:@TenantDS
|
||||
public interface UserRoleMapper extends BaseMapperX<UserRoleDO> {
|
||||
|
||||
default List<UserRoleDO> selectListByUserId(Long userId) {
|
||||
|
|
|
@ -2,12 +2,14 @@ package cn.iocoder.yudao.module.system.dal.mysql.social;
|
|||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserBindDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface SocialUserBindMapper extends BaseMapperX<SocialUserBindDO> {
|
||||
|
||||
default void deleteByUserTypeAndUserIdAndSocialType(Integer userType, Long userId, Integer socialType) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package cn.iocoder.yudao.module.system.dal.mysql.social;
|
||||
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
@ -10,6 +11,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface SocialUserMapper extends BaseMapperX<SocialUserDO> {
|
||||
|
||||
default SocialUserDO selectByTypeAndCodeAnState(Integer type, String code, String state) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.user;
|
|||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
|
@ -12,6 +13,7 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
@TenantDS
|
||||
public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
|
||||
|
||||
default AdminUserDO selectByUsername(String username) {
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.dept;
|
|||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.tenant.core.db.dynamic.TenantDS;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostCreateReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostExportReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqVO;
|
||||
|
|
Loading…
Reference in New Issue