mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 优化 使用动态租户重构业务对租户的逻辑
This commit is contained in:
		@@ -3,6 +3,7 @@ package org.dromara.web.service;
 | 
			
		||||
import cn.dev33.satoken.secure.BCrypt;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import org.dromara.common.core.constant.Constants;
 | 
			
		||||
import org.dromara.common.core.constant.GlobalConstants;
 | 
			
		||||
import org.dromara.common.core.domain.model.RegisterBody;
 | 
			
		||||
@@ -22,7 +23,6 @@ import org.dromara.system.domain.SysUser;
 | 
			
		||||
import org.dromara.system.domain.bo.SysUserBo;
 | 
			
		||||
import org.dromara.system.mapper.SysUserMapper;
 | 
			
		||||
import org.dromara.system.service.ISysUserService;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -59,10 +59,11 @@ public class SysRegisterService {
 | 
			
		||||
        sysUser.setPassword(BCrypt.hashpw(password));
 | 
			
		||||
        sysUser.setUserType(userType);
 | 
			
		||||
 | 
			
		||||
        boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
            .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
 | 
			
		||||
            .eq(SysUser::getUserName, sysUser.getUserName())
 | 
			
		||||
            .ne(ObjectUtil.isNotNull(sysUser.getUserId()), SysUser::getUserId, sysUser.getUserId()));
 | 
			
		||||
        boolean exist = TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
            return userMapper.exists(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
                .eq(SysUser::getUserName, sysUser.getUserName())
 | 
			
		||||
                .ne(ObjectUtil.isNotNull(sysUser.getUserId()), SysUser::getUserId, sysUser.getUserId()));
 | 
			
		||||
        });
 | 
			
		||||
        if (exist) {
 | 
			
		||||
            throw new UserException("user.register.save.error", username);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -89,21 +89,19 @@ public class EmailAuthStrategy implements IAuthStrategy {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private SysUserVo loadUserByEmail(String tenantId, String email) {
 | 
			
		||||
        SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
            .select(SysUser::getEmail, SysUser::getStatus)
 | 
			
		||||
            .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
 | 
			
		||||
            .eq(SysUser::getEmail, email));
 | 
			
		||||
        if (ObjectUtil.isNull(user)) {
 | 
			
		||||
            log.info("登录用户:{} 不存在.", email);
 | 
			
		||||
            throw new UserException("user.not.exists", email);
 | 
			
		||||
        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
            log.info("登录用户:{} 已被停用.", email);
 | 
			
		||||
            throw new UserException("user.blocked", email);
 | 
			
		||||
        }
 | 
			
		||||
        if (TenantHelper.isEnable()) {
 | 
			
		||||
            return userMapper.selectTenantUserByEmail(email, tenantId);
 | 
			
		||||
        }
 | 
			
		||||
        return userMapper.selectUserByEmail(email);
 | 
			
		||||
        return TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
            SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
                .select(SysUser::getEmail, SysUser::getStatus)
 | 
			
		||||
                .eq(SysUser::getEmail, email));
 | 
			
		||||
            if (ObjectUtil.isNull(user)) {
 | 
			
		||||
                log.info("登录用户:{} 不存在.", email);
 | 
			
		||||
                throw new UserException("user.not.exists", email);
 | 
			
		||||
            } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
                log.info("登录用户:{} 已被停用.", email);
 | 
			
		||||
                throw new UserException("user.blocked", email);
 | 
			
		||||
            }
 | 
			
		||||
            return userMapper.selectUserByEmail(email);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -108,21 +108,19 @@ public class PasswordAuthStrategy implements IAuthStrategy {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private SysUserVo loadUserByUsername(String tenantId, String username) {
 | 
			
		||||
        SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
            .select(SysUser::getUserName, SysUser::getStatus)
 | 
			
		||||
            .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
 | 
			
		||||
            .eq(SysUser::getUserName, username));
 | 
			
		||||
        if (ObjectUtil.isNull(user)) {
 | 
			
		||||
            log.info("登录用户:{} 不存在.", username);
 | 
			
		||||
            throw new UserException("user.not.exists", username);
 | 
			
		||||
        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
            log.info("登录用户:{} 已被停用.", username);
 | 
			
		||||
            throw new UserException("user.blocked", username);
 | 
			
		||||
        }
 | 
			
		||||
        if (TenantHelper.isEnable()) {
 | 
			
		||||
            return userMapper.selectTenantUserByUserName(username, tenantId);
 | 
			
		||||
        }
 | 
			
		||||
        return userMapper.selectUserByUserName(username);
 | 
			
		||||
        return TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
            SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
                .select(SysUser::getUserName, SysUser::getStatus)
 | 
			
		||||
                .eq(SysUser::getUserName, username));
 | 
			
		||||
            if (ObjectUtil.isNull(user)) {
 | 
			
		||||
                log.info("登录用户:{} 不存在.", username);
 | 
			
		||||
                throw new UserException("user.not.exists", username);
 | 
			
		||||
            } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
                log.info("登录用户:{} 已被停用.", username);
 | 
			
		||||
                throw new UserException("user.blocked", username);
 | 
			
		||||
            }
 | 
			
		||||
            return userMapper.selectUserByUserName(username);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -89,21 +89,19 @@ public class SmsAuthStrategy implements IAuthStrategy {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) {
 | 
			
		||||
        SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
            .select(SysUser::getPhonenumber, SysUser::getStatus)
 | 
			
		||||
            .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
 | 
			
		||||
            .eq(SysUser::getPhonenumber, phonenumber));
 | 
			
		||||
        if (ObjectUtil.isNull(user)) {
 | 
			
		||||
            log.info("登录用户:{} 不存在.", phonenumber);
 | 
			
		||||
            throw new UserException("user.not.exists", phonenumber);
 | 
			
		||||
        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
            log.info("登录用户:{} 已被停用.", phonenumber);
 | 
			
		||||
            throw new UserException("user.blocked", phonenumber);
 | 
			
		||||
        }
 | 
			
		||||
        if (TenantHelper.isEnable()) {
 | 
			
		||||
            return userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId);
 | 
			
		||||
        }
 | 
			
		||||
        return userMapper.selectUserByPhonenumber(phonenumber);
 | 
			
		||||
        return TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
            SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
                .select(SysUser::getPhonenumber, SysUser::getStatus)
 | 
			
		||||
                .eq(SysUser::getPhonenumber, phonenumber));
 | 
			
		||||
            if (ObjectUtil.isNull(user)) {
 | 
			
		||||
                log.info("登录用户:{} 不存在.", phonenumber);
 | 
			
		||||
                throw new UserException("user.not.exists", phonenumber);
 | 
			
		||||
            } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
                log.info("登录用户:{} 已被停用.", phonenumber);
 | 
			
		||||
                throw new UserException("user.blocked", phonenumber);
 | 
			
		||||
            }
 | 
			
		||||
            return userMapper.selectUserByPhonenumber(phonenumber);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -113,21 +113,19 @@ public class SocialAuthStrategy implements IAuthStrategy {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private SysUserVo loadUser(String tenantId, Long userId) {
 | 
			
		||||
        SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
        return TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
            SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
 | 
			
		||||
                .select(SysUser::getUserName, SysUser::getStatus)
 | 
			
		||||
                .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
 | 
			
		||||
                .eq(SysUser::getUserId, userId));
 | 
			
		||||
        if (ObjectUtil.isNull(user)) {
 | 
			
		||||
            log.info("登录用户:{} 不存在.", "");
 | 
			
		||||
            throw new UserException("user.not.exists", "");
 | 
			
		||||
        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
            log.info("登录用户:{} 已被停用.", "");
 | 
			
		||||
            throw new UserException("user.blocked", "");
 | 
			
		||||
        }
 | 
			
		||||
        if (TenantHelper.isEnable()) {
 | 
			
		||||
            return userMapper.selectTenantUserByUserName(user.getUserName(), tenantId);
 | 
			
		||||
        }
 | 
			
		||||
        return userMapper.selectUserByUserName(user.getUserName());
 | 
			
		||||
            if (ObjectUtil.isNull(user)) {
 | 
			
		||||
                log.info("登录用户:{} 不存在.", "");
 | 
			
		||||
                throw new UserException("user.not.exists", "");
 | 
			
		||||
            } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
 | 
			
		||||
                log.info("登录用户:{} 已被停用.", "");
 | 
			
		||||
                throw new UserException("user.blocked", "");
 | 
			
		||||
            }
 | 
			
		||||
            return userMapper.selectUserByUserName(user.getUserName());
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,14 @@
 | 
			
		||||
package org.dromara.system.mapper;
 | 
			
		||||
 | 
			
		||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 | 
			
		||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
 | 
			
		||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
import org.dromara.common.mybatis.annotation.DataColumn;
 | 
			
		||||
import org.dromara.common.mybatis.annotation.DataPermission;
 | 
			
		||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 | 
			
		||||
import org.dromara.system.domain.SysUser;
 | 
			
		||||
import org.dromara.system.domain.vo.SysUserVo;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@@ -86,37 +85,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
 | 
			
		||||
     */
 | 
			
		||||
    SysUserVo selectUserByEmail(String email);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通过用户名查询用户(不走租户插件)
 | 
			
		||||
     *
 | 
			
		||||
     * @param userName 用户名
 | 
			
		||||
     * @param tenantId 租户id
 | 
			
		||||
     * @return 用户对象信息
 | 
			
		||||
     */
 | 
			
		||||
    @InterceptorIgnore(tenantLine = "true")
 | 
			
		||||
    SysUserVo selectTenantUserByUserName(@Param("userName") String userName, @Param("tenantId") String tenantId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通过手机号查询用户(不走租户插件)
 | 
			
		||||
     *
 | 
			
		||||
     * @param phonenumber 手机号
 | 
			
		||||
     * @param tenantId    租户id
 | 
			
		||||
     * @return 用户对象信息
 | 
			
		||||
     */
 | 
			
		||||
    @InterceptorIgnore(tenantLine = "true")
 | 
			
		||||
    SysUserVo selectTenantUserByPhonenumber(@Param("phonenumber") String phonenumber, @Param("tenantId") String tenantId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通过邮箱查询用户(不走租户插件)
 | 
			
		||||
     *
 | 
			
		||||
     * @param email    邮箱
 | 
			
		||||
     * @param tenantId 租户id
 | 
			
		||||
     * @return 用户对象信息
 | 
			
		||||
     */
 | 
			
		||||
    @InterceptorIgnore(tenantLine = "true")
 | 
			
		||||
    SysUserVo selectTenantUserByEmail(@Param("email") String email, @Param("tenantId") String tenantId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通过用户ID查询用户
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -85,9 +85,10 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean selectRegisterEnabled(String tenantId) {
 | 
			
		||||
        SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
 | 
			
		||||
            .eq(SysConfig::getConfigKey, "sys.account.registerUser")
 | 
			
		||||
            .eq(TenantHelper.isEnable(),SysConfig::getTenantId, tenantId));
 | 
			
		||||
        SysConfig retConfig = TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
            return baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
 | 
			
		||||
                .eq(SysConfig::getConfigKey, "sys.account.registerUser"));
 | 
			
		||||
        });
 | 
			
		||||
        if (ObjectUtil.isNull(retConfig)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -57,9 +57,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
 | 
			
		||||
                new LambdaQueryWrapper<SysOssConfig>().orderByAsc(TenantEntity::getTenantId))
 | 
			
		||||
        );
 | 
			
		||||
        Map<String, List<SysOssConfig>> map = StreamUtils.groupByKey(list, SysOssConfig::getTenantId);
 | 
			
		||||
        try {
 | 
			
		||||
            for (String tenantId : map.keySet()) {
 | 
			
		||||
                TenantHelper.setDynamic(tenantId);
 | 
			
		||||
        for (String tenantId : map.keySet()) {
 | 
			
		||||
            TenantHelper.dynamic(tenantId, () -> {
 | 
			
		||||
                // 加载OSS初始化配置
 | 
			
		||||
                for (SysOssConfig config : map.get(tenantId)) {
 | 
			
		||||
                    String configKey = config.getConfigKey();
 | 
			
		||||
@@ -68,9 +67,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
 | 
			
		||||
                    }
 | 
			
		||||
                    CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } finally {
 | 
			
		||||
            TenantHelper.clearDynamic();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -118,21 +118,6 @@
 | 
			
		||||
        where u.del_flag = '0' and u.email = #{email}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectTenantUserByUserName" parameterType="String" resultMap="SysUserResult">
 | 
			
		||||
        <include refid="selectUserVo"/>
 | 
			
		||||
        where u.del_flag = '0' and u.user_name = #{userName} and u.tenant_id = #{tenantId}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectTenantUserByPhonenumber" parameterType="String" resultMap="SysUserResult">
 | 
			
		||||
        <include refid="selectUserVo"/>
 | 
			
		||||
        where u.del_flag = '0' and u.phonenumber = #{phonenumber} and u.tenant_id = #{tenantId}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectTenantUserByEmail" parameterType="String" resultMap="SysUserResult">
 | 
			
		||||
        <include refid="selectUserVo"/>
 | 
			
		||||
        where u.del_flag = '0' and u.email = #{email} and u.tenant_id = #{tenantId}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 | 
			
		||||
        <include refid="selectUserVo"/>
 | 
			
		||||
        where u.del_flag = '0' and u.user_id = #{userId}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user