【8.3.4】【tenant】重新整理租户切换的方式

master
stylefeng 2025-05-05 22:49:01 +08:00
parent 10b4255bbf
commit c32ca70ffa
1 changed files with 25 additions and 36 deletions

View File

@ -17,7 +17,7 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.db.mp.tenant.holder.TenantIdHolder;
import cn.stylefeng.roses.kernel.db.mp.tenant.context.TenantSwitchContext;
import cn.stylefeng.roses.kernel.db.mp.tenant.holder.TenantSwitchHolder;
import cn.stylefeng.roses.kernel.dsctn.api.context.DataSourceContext;
import cn.stylefeng.roses.kernel.event.sdk.publish.BusinessEventPublisher;
@ -505,22 +505,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getFreezeDeadlineTime, SysUser::getUserId);
// 单独填充租户id
SysUser sysUserServiceOne;
try {
TenantIdHolder.set(tenantId);
sysUserServiceOne = this.getOne(sysUserLambdaQueryWrapper, false);
SysUser sysUserServiceOne = TenantSwitchContext.me().changeTenant(tenantId, () -> {
// 获取用户信息
SysUser user = this.getOne(sysUserLambdaQueryWrapper, false);
// 用户查询不到,提示账号密码错误
if (sysUserServiceOne == null) {
if (user == null) {
throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST);
}
// 更新用户的冻结状态
this.updateSysUserFreezeStatus(account, sysUserServiceOne);
this.updateSysUserFreezeStatus(account, user);
} finally {
TenantIdHolder.remove();
}
return user;
});
return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(), sysUserServiceOne.getStatusFlag(), tenantId, account);
}
@ -556,16 +555,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 获取原来的登录次数
long loginCount = 0;
LambdaQueryWrapper<SysUser> sysUserOriginLoginCountWrapper = new LambdaQueryWrapper<>();
sysUserOriginLoginCountWrapper.eq(SysUser::getUserId, userId);
sysUserOriginLoginCountWrapper.select(SysUser::getLoginCount);
SysUser originUser;
try {
TenantIdHolder.set(tenantId);
originUser = this.getOne(sysUserOriginLoginCountWrapper, false);
} finally {
TenantIdHolder.remove();
}
SysUser originUser = TenantSwitchContext.me().changeTenant(tenantId, () -> {
LambdaQueryWrapper<SysUser> sysUserOriginLoginCountWrapper = new LambdaQueryWrapper<>();
sysUserOriginLoginCountWrapper.eq(SysUser::getUserId, userId);
sysUserOriginLoginCountWrapper.select(SysUser::getLoginCount);
return this.getOne(sysUserOriginLoginCountWrapper, false);
});
// 获取原有的登录次数准备加1
if (originUser == null || originUser.getLoginCount() == null) {
@ -580,12 +575,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date());
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip);
sysUserLambdaUpdateWrapper.set(SysUser::getLoginCount, loginCount);
try {
TenantIdHolder.set(tenantId);
TenantSwitchContext.me().changeTenant(tenantId, () -> {
this.update(sysUserLambdaUpdateWrapper);
} finally {
TenantIdHolder.remove();
}
return 0;
});
}
@Override
@ -711,19 +704,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public void lockUserStatus(String tenantCode, String account) {
// 获取租户id
Long tenantId = tenantCodeGetApi.getTenantIdByCode(tenantCode);
LambdaUpdateWrapper<SysUser> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(SysUser::getAccount, account);
lambdaUpdateWrapper.set(SysUser::getStatusFlag, UserStatusEnum.TEMP_FREEZE.getKey());
lambdaUpdateWrapper.set(SysUser::getFreezeDeadlineTime, DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, 1));
try {
TenantIdHolder.set(tenantId);
LambdaUpdateWrapper<SysUser> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(SysUser::getAccount, account);
lambdaUpdateWrapper.set(SysUser::getStatusFlag, UserStatusEnum.TEMP_FREEZE.getKey());
lambdaUpdateWrapper.set(SysUser::getFreezeDeadlineTime, DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, 1));
TenantSwitchContext.me().changeTenant(tenantCode, () -> {
this.update(lambdaUpdateWrapper);
} finally {
TenantIdHolder.remove();
}
return 0;
});
}
@Override