update 优化 使用动态租户重构业务对租户的逻辑

2.X
疯狂的狮子Li 1 year ago
parent 5f660b27d3
commit ef4cb01d9b

@ -57,9 +57,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
new LambdaQueryWrapper<SysOssConfig>().orderByAsc(TenantEntity::getTenantId)) new LambdaQueryWrapper<SysOssConfig>().orderByAsc(TenantEntity::getTenantId))
); );
Map<String, List<SysOssConfig>> map = StreamUtils.groupByKey(list, SysOssConfig::getTenantId); Map<String, List<SysOssConfig>> map = StreamUtils.groupByKey(list, SysOssConfig::getTenantId);
try {
for (String tenantId : map.keySet()) { for (String tenantId : map.keySet()) {
TenantHelper.setDynamic(tenantId); TenantHelper.dynamic(tenantId, () -> {
// 加载OSS初始化配置 // 加载OSS初始化配置
for (SysOssConfig config : map.get(tenantId)) { for (SysOssConfig config : map.get(tenantId)) {
String configKey = config.getConfigKey(); String configKey = config.getConfigKey();
@ -68,9 +67,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
} }
CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
} }
} });
} finally {
TenantHelper.clearDynamic();
} }
} }

@ -45,9 +45,9 @@ public class RemoteUserServiceImpl implements RemoteUserService {
@Override @Override
public LoginUser getUserInfo(String username, String tenantId) throws UserException { public LoginUser getUserInfo(String username, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> {
SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName, SysUser::getStatus) .select(SysUser::getUserName, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getUserName, username)); .eq(SysUser::getUserName, username));
if (ObjectUtil.isNull(sysUser)) { if (ObjectUtil.isNull(sysUser)) {
throw new UserException("user.not.exists", username); throw new UserException("user.not.exists", username);
@ -57,17 +57,15 @@ public class RemoteUserServiceImpl implements RemoteUserService {
} }
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
if (TenantHelper.isEnable()) {
return buildLoginUser(userMapper.selectTenantUserByUserName(username, tenantId));
}
return buildLoginUser(userMapper.selectUserByUserName(username)); return buildLoginUser(userMapper.selectUserByUserName(username));
});
} }
@Override @Override
public LoginUser getUserInfo(Long userId, String tenantId) throws UserException { public LoginUser getUserInfo(Long userId, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> {
SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName, SysUser::getStatus) .select(SysUser::getUserName, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getUserId, userId)); .eq(SysUser::getUserId, userId));
if (ObjectUtil.isNull(sysUser)) { if (ObjectUtil.isNull(sysUser)) {
throw new UserException("user.not.exists", ""); throw new UserException("user.not.exists", "");
@ -77,17 +75,15 @@ public class RemoteUserServiceImpl implements RemoteUserService {
} }
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
if (TenantHelper.isEnable()) {
return buildLoginUser(userMapper.selectTenantUserByUserName(sysUser.getUserName(), tenantId));
}
return buildLoginUser(userMapper.selectUserByUserName(sysUser.getUserName())); return buildLoginUser(userMapper.selectUserByUserName(sysUser.getUserName()));
});
} }
@Override @Override
public LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException { public LoginUser getUserInfoByPhonenumber(String phonenumber, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> {
SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getPhonenumber, SysUser::getStatus) .select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getPhonenumber, phonenumber)); .eq(SysUser::getPhonenumber, phonenumber));
if (ObjectUtil.isNull(sysUser)) { if (ObjectUtil.isNull(sysUser)) {
throw new UserException("user.not.exists", phonenumber); throw new UserException("user.not.exists", phonenumber);
@ -97,17 +93,15 @@ public class RemoteUserServiceImpl implements RemoteUserService {
} }
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
if (TenantHelper.isEnable()) {
return buildLoginUser(userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId));
}
return buildLoginUser(userMapper.selectUserByPhonenumber(phonenumber)); return buildLoginUser(userMapper.selectUserByPhonenumber(phonenumber));
});
} }
@Override @Override
public LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException { public LoginUser getUserInfoByEmail(String email, String tenantId) throws UserException {
return TenantHelper.dynamic(tenantId, () -> {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getEmail, SysUser::getStatus) .select(SysUser::getEmail, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getEmail, email)); .eq(SysUser::getEmail, email));
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
throw new UserException("user.not.exists", email); throw new UserException("user.not.exists", email);
@ -117,10 +111,8 @@ public class RemoteUserServiceImpl implements RemoteUserService {
} }
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
if (TenantHelper.isEnable()) {
return buildLoginUser(userMapper.selectTenantUserByEmail(email, tenantId));
}
return buildLoginUser(userMapper.selectUserByEmail(email)); return buildLoginUser(userMapper.selectUserByEmail(email));
});
} }
@Override @Override
@ -151,10 +143,11 @@ public class RemoteUserServiceImpl implements RemoteUserService {
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
throw new ServiceException("当前系统没有开启注册功能"); throw new ServiceException("当前系统没有开启注册功能");
} }
boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = TenantHelper.dynamic(remoteUserBo.getTenantId(), () -> {
.eq(TenantHelper.isEnable(), SysUser::getTenantId, remoteUserBo.getTenantId()) return userMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUserName, sysUserBo.getUserName()) .eq(SysUser::getUserName, sysUserBo.getUserName())
.ne(ObjectUtil.isNotNull(sysUserBo.getUserId()), SysUser::getUserId, sysUserBo.getUserId())); .ne(ObjectUtil.isNotNull(sysUserBo.getUserId()), SysUser::getUserId, sysUserBo.getUserId()));
});
if (exist) { if (exist) {
throw new UserException("user.register.save.error", username); throw new UserException("user.register.save.error", username);
} }

@ -1,15 +1,14 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -86,36 +85,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
*/ */
SysUserVo selectUserByEmail(String email); 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 * ID
* *

@ -83,9 +83,10 @@ public class SysConfigServiceImpl implements ISysConfigService {
*/ */
@Override @Override
public boolean selectRegisterEnabled(String tenantId) { public boolean selectRegisterEnabled(String tenantId) {
SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>() SysConfig retConfig = TenantHelper.dynamic(tenantId, () -> {
.eq(SysConfig::getConfigKey, "sys.account.registerUser") return baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
.eq(TenantHelper.isEnable(),SysConfig::getTenantId, tenantId)); .eq(SysConfig::getConfigKey, "sys.account.registerUser"));
});
if (ObjectUtil.isNull(retConfig)) { if (ObjectUtil.isNull(retConfig)) {
return false; return false;
} }

@ -116,21 +116,6 @@
where u.del_flag = '0' and u.email = #{email} where u.del_flag = '0' and u.email = #{email}
</select> </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"> <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/> <include refid="selectUserVo"/>
where u.del_flag = '0' and u.user_id = #{userId} where u.del_flag = '0' and u.user_id = #{userId}

Loading…
Cancel
Save