mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-14 22:29:00 +08:00
feat(tenant): 新增手机号唯一性校验逻辑,重构密码重置和短信验证码接口支持多租户
- 优化部门校验使用isEmpty()方法 - 在SysMessageServiceImpl中为短信发送添加租户隔离支持
This commit is contained in:
1 parent
2b64a4cfe1
commit
7be922ef0f
2 files changed
+25
-21
No files matched your search
+7
-15
@@ -43,6 +43,7 @@ import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
|
|||||||
import com.pig4cloud.pigx.common.core.util.MsgUtils;
|
import com.pig4cloud.pigx.common.core.util.MsgUtils;
|
||||||
import com.pig4cloud.pigx.common.core.util.R;
|
import com.pig4cloud.pigx.common.core.util.R;
|
||||||
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
|
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
|
||||||
|
import com.pig4cloud.pigx.common.data.tenant.TenantBroker;
|
||||||
import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder;
|
import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder;
|
||||||
import com.pig4cloud.pigx.common.file.core.FileTemplate;
|
import com.pig4cloud.pigx.common.file.core.FileTemplate;
|
||||||
import com.pig4cloud.pigx.common.log.util.JacksonSensitiveFieldUtil;
|
import com.pig4cloud.pigx.common.log.util.JacksonSensitiveFieldUtil;
|
||||||
@@ -119,7 +120,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送信息
|
* 发送信息
|
||||||
*
|
|
||||||
* @param id id
|
* @param id id
|
||||||
* @return true/false
|
* @return true/false
|
||||||
*/
|
*/
|
||||||
@@ -135,7 +135,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存消息及其关联关系
|
* 保存消息及其关联关系
|
||||||
*
|
|
||||||
* @param sysMessage 消息对象
|
* @param sysMessage 消息对象
|
||||||
* @return 是否保存成功
|
* @return 是否保存成功
|
||||||
*/
|
*/
|
||||||
@@ -146,7 +145,8 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
if (Objects.isNull(sysMessage.getId())) {
|
if (Objects.isNull(sysMessage.getId())) {
|
||||||
baseMapper.insert(messageEntity);
|
baseMapper.insert(messageEntity);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
baseMapper.updateById(sysMessage);
|
baseMapper.updateById(sysMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +162,8 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
relationEntity.setUserId(user.getId());
|
relationEntity.setUserId(user.getId());
|
||||||
relationMapper.insert(relationEntity);
|
relationMapper.insert(relationEntity);
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
userMapper.selectList(Wrappers.emptyWrapper()).stream().map(SysUser::getUserId).forEach(userId -> {
|
userMapper.selectList(Wrappers.emptyWrapper()).stream().map(SysUser::getUserId).forEach(userId -> {
|
||||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||||
relationEntity.setMsgId(messageEntity.getId());
|
relationEntity.setMsgId(messageEntity.getId());
|
||||||
@@ -175,7 +176,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户的信息列表
|
* 获取用户的信息列表
|
||||||
*
|
|
||||||
* @return list
|
* @return list
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@@ -196,7 +196,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取信息
|
* 读取信息
|
||||||
*
|
|
||||||
* @param id id
|
* @param id id
|
||||||
* @return true/false
|
* @return true/false
|
||||||
*/
|
*/
|
||||||
@@ -213,7 +212,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取信息
|
* 获取信息
|
||||||
*
|
|
||||||
* @param id id
|
* @param id id
|
||||||
* @return messageVO
|
* @return messageVO
|
||||||
*/
|
*/
|
||||||
@@ -250,7 +248,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询用户阅读情况
|
* 查询用户阅读情况
|
||||||
*
|
|
||||||
* @param page 分页
|
* @param page 分页
|
||||||
* @param messageId 消息ID
|
* @param messageId 消息ID
|
||||||
* @param name 姓名
|
* @param name 姓名
|
||||||
@@ -271,14 +268,13 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送手机验证码 TODO: 调用短信网关发送验证码,测试返回前端
|
* 发送手机验证码 TODO: 调用短信网关发送验证码,测试返回前端
|
||||||
*
|
|
||||||
* @param mobile mobile
|
* @param mobile mobile
|
||||||
* @return code
|
* @return code
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public R<Boolean> sendSmsCode(String mobile) {
|
public R<Boolean> sendSmsCode(String mobile) {
|
||||||
List<SysUser> userList = userMapper
|
List<SysUser> userList = TenantBroker
|
||||||
.selectList(Wrappers.<SysUser>query().lambda().eq(SysUser::getPhone, mobile));
|
.noneAs(() -> userMapper.selectList(Wrappers.<SysUser>query().lambda().eq(SysUser::getPhone, mobile)));
|
||||||
|
|
||||||
if (CollUtil.isEmpty(userList)) {
|
if (CollUtil.isEmpty(userList)) {
|
||||||
log.info("手机号未注册:{}", mobile);
|
log.info("手机号未注册:{}", mobile);
|
||||||
@@ -308,7 +304,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送短信
|
* 发送短信
|
||||||
*
|
|
||||||
* @param messageSmsDTO 消息 短信 DTO
|
* @param messageSmsDTO 消息 短信 DTO
|
||||||
* @return {@link R }
|
* @return {@link R }
|
||||||
*/
|
*/
|
||||||
@@ -372,7 +367,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送钩子消息
|
* 发送钩子消息
|
||||||
*
|
|
||||||
* @param messageHookDTO 消息挂钩 DTO
|
* @param messageHookDTO 消息挂钩 DTO
|
||||||
* @return {@link R }
|
* @return {@link R }
|
||||||
*/
|
*/
|
||||||
@@ -449,7 +443,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送邮件
|
* 发送邮件
|
||||||
*
|
|
||||||
* @param messageEmailDTO 留言内容 电子邮件 DTO
|
* @param messageEmailDTO 留言内容 电子邮件 DTO
|
||||||
* @return {@link R }
|
* @return {@link R }
|
||||||
*/
|
*/
|
||||||
@@ -516,7 +509,6 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 列出 Hook 业务代码
|
* 列出 Hook 业务代码
|
||||||
*
|
|
||||||
* @param messageHookDTO 消息钩子 DTO
|
* @param messageHookDTO 消息钩子 DTO
|
||||||
* @return {@link R }
|
* @return {@link R }
|
||||||
*/
|
*/
|
||||||
|
|||||||
+18
-6
@@ -47,6 +47,7 @@ import com.pig4cloud.pigx.common.core.util.R;
|
|||||||
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
|
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
|
||||||
import com.pig4cloud.pigx.common.data.datascope.DataScope;
|
import com.pig4cloud.pigx.common.data.datascope.DataScope;
|
||||||
import com.pig4cloud.pigx.common.data.resolver.ParamResolver;
|
import com.pig4cloud.pigx.common.data.resolver.ParamResolver;
|
||||||
|
import com.pig4cloud.pigx.common.data.tenant.TenantBroker;
|
||||||
import com.pig4cloud.pigx.common.excel.vo.ErrorMessage;
|
import com.pig4cloud.pigx.common.excel.vo.ErrorMessage;
|
||||||
import com.pig4cloud.pigx.common.security.service.PigxUser;
|
import com.pig4cloud.pigx.common.security.service.PigxUser;
|
||||||
import com.pig4cloud.pigx.common.security.util.SecurityUtils;
|
import com.pig4cloud.pigx.common.security.util.SecurityUtils;
|
||||||
@@ -391,7 +392,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
// 执行数据插入操作 组装 UserDto
|
// 执行数据插入操作 组装 UserDto
|
||||||
for (UserExcelVO excel : excelVOList) {
|
for (UserExcelVO excel : excelVOList) {
|
||||||
// 个性化校验逻辑
|
// 个性化校验逻辑
|
||||||
List<SysUser> userList = this.list();
|
List<SysUser> userList = TenantBroker.noneAs(this::list);
|
||||||
|
|
||||||
Set<String> errorMsg = new HashSet<>();
|
Set<String> errorMsg = new HashSet<>();
|
||||||
// 校验用户名是否存在
|
// 校验用户名是否存在
|
||||||
@@ -402,11 +403,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
|
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验手机号是否存在
|
||||||
|
boolean exsitPhone = userList.stream().anyMatch(sysUser -> excel.getPhone().equals(sysUser.getPhone()));
|
||||||
|
if (exsitPhone) {
|
||||||
|
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, excel.getPhone()));
|
||||||
|
}
|
||||||
|
|
||||||
// 判断输入的部门名称列表是否合法
|
// 判断输入的部门名称列表是否合法
|
||||||
Optional<SysDept> deptOptional = deptList.stream()
|
Optional<SysDept> deptOptional = deptList.stream()
|
||||||
.filter(dept -> excel.getDeptNameList().equals(dept.getName()))
|
.filter(dept -> excel.getDeptNameList().equals(dept.getName()))
|
||||||
.findFirst();
|
.findFirst();
|
||||||
if (!deptOptional.isPresent()) {
|
if (deptOptional.isEmpty()) {
|
||||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptNameList()));
|
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptNameList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,15 +495,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public R<Boolean> registerUser(RegisterUserDTO userDto) {
|
public R<Boolean> registerUser(RegisterUserDTO userDto) {
|
||||||
// 判断用户名是否存在
|
// 判断用户名是否存在
|
||||||
boolean usernameExists = this
|
boolean usernameExists = TenantBroker
|
||||||
.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername()));
|
.noneAs(() -> this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername())));
|
||||||
if (usernameExists) {
|
if (usernameExists) {
|
||||||
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername());
|
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername());
|
||||||
return R.failed(message);
|
return R.failed(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断手机号是否存在
|
// 判断手机号是否存在
|
||||||
boolean phoneExists = this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhone, userDto.getPhone()));
|
boolean phoneExists = TenantBroker
|
||||||
|
.noneAs(() -> this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhone, userDto.getPhone())));
|
||||||
if (phoneExists) {
|
if (phoneExists) {
|
||||||
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, userDto.getPhone());
|
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, userDto.getPhone());
|
||||||
return R.failed(message);
|
return R.failed(message);
|
||||||
@@ -626,7 +634,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
|
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
|
||||||
public R<Boolean> resetUserPassword(RegisterUserDTO userDto) {
|
public R resetUserPassword(RegisterUserDTO userDto) {
|
||||||
// 校验密码
|
// 校验密码
|
||||||
R checkedPassword = checkPassword(userDto.getUsername(), userDto.getPassword());
|
R checkedPassword = checkPassword(userDto.getUsername(), userDto.getPassword());
|
||||||
if (!checkedPassword.isOk()) {
|
if (!checkedPassword.isOk()) {
|
||||||
@@ -666,6 +674,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
return R.failed("验证码错误");
|
return R.failed("验证码错误");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TenantBroker.noneAs(() -> {
|
||||||
String username = lambdaQuery().select(SysUser::getUsername)
|
String username = lambdaQuery().select(SysUser::getUsername)
|
||||||
.eq(SysUser::getPhone, userDto.getPhone())
|
.eq(SysUser::getPhone, userDto.getPhone())
|
||||||
.one()
|
.one()
|
||||||
@@ -679,6 +688,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
.set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL)
|
.set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL)
|
||||||
.eq(SysUser::getPhone, userDto.getPhone()));
|
.eq(SysUser::getPhone, userDto.getPhone()));
|
||||||
cacheManager.getCache(CacheConstants.USER_DETAILS).evict(username);
|
cacheManager.getCache(CacheConstants.USER_DETAILS).evict(username);
|
||||||
|
return username;
|
||||||
|
});
|
||||||
|
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user