fix(user): 修复默认角色创建时租户不存在校验问题

- 增加根据邮箱查询账号的方法,忽略租户隔离
- 引入 TenantService 以校验租户是否存在
- 在创建默认“用户”角色时添加租户存在性校验
- 防止因租户缺失导致外键约束失败异常
This commit is contained in:
2026-07-18 11:18:00 +08:00
parent aa287ba655
commit 89571c81a4
2 changed files with 15 additions and 0 deletions

View File

@@ -81,6 +81,15 @@ public interface UserMapper extends BaseMapper<User> {
@InterceptorIgnore(tenantLine = "true")
List<User> selectAccountsByPhone(@Param("phone") String phone);
/**
* 根据邮箱查询所有账号(忽略租户隔离)
*
* @param email 邮箱
* @return List<User>
*/
@InterceptorIgnore(tenantLine = "true")
List<User> selectAccountsByEmail(@Param("email") String email);
/**
* 根据手机号统计账号数量(忽略租户隔离)
*

View File

@@ -54,6 +54,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private OrganizationService organizationService;
@Resource
private UserRefereeService userRefereeService;
@Resource
private TenantService tenantService;
@Autowired(required = false)
private SyncMessageProducer syncMessageProducer;
@@ -346,6 +348,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
role = roleService.getOne(roleQw, false);
// If the default "user" role is missing (fresh DB / incomplete init), create it to avoid empty roles.
if (role == null && addUser.getTenantId() != null && "user".equals(roleCode)) {
// 校验租户是否存在,否则插入 sys_role 会因外键约束失败tenant_id 引用 sys_tenant
if (tenantService.getById(addUser.getTenantId()) == null) {
throw new BusinessException("租户不存在(tenantId=" + addUser.getTenantId() + "),无法创建默认角色");
}
Role defaultRole = new Role();
defaultRole.setRoleName("注册用户");
defaultRole.setRoleCode("user");