|
|
@ -119,9 +119,11 @@ public class SysUserService implements UserDetailsService { |
|
|
Long total = jdbcTemplate.queryForObject(countSql, Long.class, params.toArray()); |
|
|
Long total = jdbcTemplate.queryForObject(countSql, Long.class, params.toArray()); |
|
|
|
|
|
|
|
|
// 分页数据(联查角色名称) |
|
|
// 分页数据(联查角色名称) |
|
|
|
|
|
// 注意:id 必须 CAST 为 TEXT,否则 Jackson 将 BIGINT 序列化为 JSON number, |
|
|
|
|
|
// 前端 JS 解析大雪花 ID 时会丢失精度(超过 Number.MAX_SAFE_INTEGER) |
|
|
int offset = (page - 1) * size; |
|
|
int offset = (page - 1) * size; |
|
|
String dataSql = """ |
|
|
String dataSql = """ |
|
|
SELECT u.id, u.username, u.nickname, u.email, u.phone, u.enabled, |
|
|
|
|
|
|
|
|
SELECT u.id::TEXT AS id, u.username, u.nickname, u.email, u.phone, u.enabled, |
|
|
u.last_login_time, u.create_time, |
|
|
u.last_login_time, u.create_time, |
|
|
STRING_AGG(r.name, ',') AS role_names, |
|
|
STRING_AGG(r.name, ',') AS role_names, |
|
|
STRING_AGG(r.role_key, ',') AS role_keys |
|
|
STRING_AGG(r.role_key, ',') AS role_keys |
|
|
@ -153,9 +155,11 @@ public class SysUserService implements UserDetailsService { |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public SysUser createUser(String username, String password, String nickname, |
|
|
public SysUser createUser(String username, String password, String nickname, |
|
|
String email, String phone, List<Long> roleIds) { |
|
|
String email, String phone, List<Long> roleIds) { |
|
|
// 检查用户名是否已存在 |
|
|
|
|
|
|
|
|
// 检查用户名是否已存在(显式过滤已删除用户,不依赖 @TableLogic 隐式行为) |
|
|
Long exists = userMapper.selectCount( |
|
|
Long exists = userMapper.selectCount( |
|
|
new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username) |
|
|
|
|
|
|
|
|
new LambdaQueryWrapper<SysUser>() |
|
|
|
|
|
.eq(SysUser::getUsername, username) |
|
|
|
|
|
.eq(SysUser::getIsDelete, false) |
|
|
); |
|
|
); |
|
|
if (exists > 0) { |
|
|
if (exists > 0) { |
|
|
throw new IllegalArgumentException("用户名已存在: " + username); |
|
|
throw new IllegalArgumentException("用户名已存在: " + username); |
|
|
@ -242,12 +246,14 @@ public class SysUserService implements UserDetailsService { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 根据ID获取用户详情(含角色) |
|
|
|
|
|
|
|
|
* 根据ID获取用户详情(含角色,密码脱敏) |
|
|
*/ |
|
|
*/ |
|
|
public SysUser getUserById(Long id) { |
|
|
public SysUser getUserById(Long id) { |
|
|
SysUser user = userMapper.selectById(id); |
|
|
SysUser user = userMapper.selectById(id); |
|
|
if (user != null) { |
|
|
if (user != null) { |
|
|
user.setRoles(getUserRoles(user.getId())); |
|
|
user.setRoles(getUserRoles(user.getId())); |
|
|
|
|
|
// 安全脱敏:不返回密码哈希 |
|
|
|
|
|
user.setPassword(null); |
|
|
} |
|
|
} |
|
|
return user; |
|
|
return user; |
|
|
} |
|
|
} |
|
|
|