|
|
@ -50,38 +50,107 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us |
|
|
private final IMClient imClient; |
|
|
private final IMClient imClient; |
|
|
private final SensitiveFilterUtil sensitiveFilterUtil; |
|
|
private final SensitiveFilterUtil sensitiveFilterUtil; |
|
|
|
|
|
|
|
|
|
|
|
// @Override
|
|
|
|
|
|
// public LoginVO login(LoginDTO dto) {
|
|
|
|
|
|
// User user = this.findUserByUserName(dto.getUserName());
|
|
|
|
|
|
// if (Objects.isNull(user)) {
|
|
|
|
|
|
// throw new GlobalException("用户不存在");
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if(user.getIsCustomer() == 2){
|
|
|
|
|
|
// throw new GlobalException("用户不存在");
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (user.getIsBanned()) {
|
|
|
|
|
|
// String tip = String.format("您的账号因'%s'已被管理员封禁,请联系客服!",user.getReason());
|
|
|
|
|
|
// throw new GlobalException(tip);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (!passwordEncoder.matches(dto.getPassword(), user.getPassword())) {
|
|
|
|
|
|
// throw new GlobalException(ResultCode.PASSWOR_ERROR);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// // 生成token
|
|
|
|
|
|
// UserSession session = BeanUtils.copyProperties(user, UserSession.class);
|
|
|
|
|
|
// session.setUserId(user.getId());
|
|
|
|
|
|
// session.setTerminal(dto.getTerminal());
|
|
|
|
|
|
// String strJson = JSON.toJSONString(session);
|
|
|
|
|
|
// String accessToken = JwtUtil.sign(user.getId(), strJson, jwtProperties.getAccessTokenExpireIn(),
|
|
|
|
|
|
// jwtProperties.getAccessTokenSecret());
|
|
|
|
|
|
// String refreshToken = JwtUtil.sign(user.getId(), strJson, jwtProperties.getRefreshTokenExpireIn(),
|
|
|
|
|
|
// jwtProperties.getRefreshTokenSecret());
|
|
|
|
|
|
// LoginVO vo = new LoginVO();
|
|
|
|
|
|
// vo.setAccessToken(accessToken);
|
|
|
|
|
|
// vo.setAccessTokenExpiresIn(jwtProperties.getAccessTokenExpireIn());
|
|
|
|
|
|
// vo.setRefreshToken(refreshToken);
|
|
|
|
|
|
// vo.setRefreshTokenExpiresIn(jwtProperties.getRefreshTokenExpireIn());
|
|
|
|
|
|
// return vo;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public LoginVO login(LoginDTO dto) { |
|
|
public LoginVO login(LoginDTO dto) { |
|
|
User user = this.findUserByUserName(dto.getUserName()); |
|
|
// 生成游客唯一标识UUID
|
|
|
if (Objects.isNull(user)) { |
|
|
String guestUuid = UUID.randomUUID().toString(); |
|
|
throw new GlobalException("用户不存在"); |
|
|
|
|
|
} |
|
|
// 生成游客用户名,例如 guest_随机6位数字
|
|
|
if(user.getIsCustomer() == 2){ |
|
|
String guestUserName = "guest_" + UUID.randomUUID().toString().substring(0, 6); |
|
|
throw new GlobalException("用户不存在"); |
|
|
|
|
|
} |
|
|
// 创建游客用户记录
|
|
|
if (user.getIsBanned()) { |
|
|
User guestUser = new User(); |
|
|
String tip = String.format("您的账号因'%s'已被管理员封禁,请联系客服!",user.getReason()); |
|
|
guestUser.setUserName(guestUserName); |
|
|
throw new GlobalException(tip); |
|
|
guestUser.setNickName(guestUserName); // 默认昵称为“游客”
|
|
|
} |
|
|
guestUser.setPassword(""); // 游客无需密码,可为空
|
|
|
if (!passwordEncoder.matches(dto.getPassword(), user.getPassword())) { |
|
|
guestUser.setUuid(guestUuid); // 保存唯一标识
|
|
|
throw new GlobalException(ResultCode.PASSWOR_ERROR); |
|
|
// guestUser.setCreateTime(LocalDateTime.now());
|
|
|
} |
|
|
// 保存到数据库
|
|
|
// 生成token
|
|
|
this.save(guestUser); |
|
|
UserSession session = BeanUtils.copyProperties(user, UserSession.class); |
|
|
Long customerServiceId = this.getRandomCustomerServiceId(); |
|
|
session.setUserId(user.getId()); |
|
|
|
|
|
session.setTerminal(dto.getTerminal()); |
|
|
|
|
|
String strJson = JSON.toJSONString(session); |
|
|
// 创建会话信息
|
|
|
String accessToken = JwtUtil.sign(user.getId(), strJson, jwtProperties.getAccessTokenExpireIn(), |
|
|
UserSession guestSession = new UserSession(); |
|
|
jwtProperties.getAccessTokenSecret()); |
|
|
guestSession.setUserId(guestUser.getId()); |
|
|
String refreshToken = JwtUtil.sign(user.getId(), strJson, jwtProperties.getRefreshTokenExpireIn(), |
|
|
guestSession.setUserName(guestUser.getUserName()); |
|
|
jwtProperties.getRefreshTokenSecret()); |
|
|
guestSession.setTerminal(dto.getTerminal()); |
|
|
|
|
|
// guestSession.setUuid(guestUuid);
|
|
|
|
|
|
|
|
|
|
|
|
// 生成Token
|
|
|
|
|
|
String guestJson = JSON.toJSONString(guestSession); |
|
|
|
|
|
String accessToken = JwtUtil.sign( |
|
|
|
|
|
guestSession.getUserId(), |
|
|
|
|
|
guestJson, |
|
|
|
|
|
jwtProperties.getAccessTokenExpireIn(), |
|
|
|
|
|
jwtProperties.getAccessTokenSecret() |
|
|
|
|
|
); |
|
|
|
|
|
String refreshToken = JwtUtil.sign( |
|
|
|
|
|
guestSession.getUserId(), |
|
|
|
|
|
guestJson, |
|
|
|
|
|
jwtProperties.getRefreshTokenExpireIn(), |
|
|
|
|
|
jwtProperties.getRefreshTokenSecret() |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
// 返回LoginVO
|
|
|
LoginVO vo = new LoginVO(); |
|
|
LoginVO vo = new LoginVO(); |
|
|
vo.setAccessToken(accessToken); |
|
|
vo.setAccessToken(accessToken); |
|
|
vo.setAccessTokenExpiresIn(jwtProperties.getAccessTokenExpireIn()); |
|
|
vo.setAccessTokenExpiresIn(jwtProperties.getAccessTokenExpireIn()); |
|
|
vo.setRefreshToken(refreshToken); |
|
|
vo.setRefreshToken(refreshToken); |
|
|
vo.setRefreshTokenExpiresIn(jwtProperties.getRefreshTokenExpireIn()); |
|
|
vo.setRefreshTokenExpiresIn(jwtProperties.getRefreshTokenExpireIn()); |
|
|
|
|
|
vo.setCustomerServiceId(customerServiceId == null ? -1 : customerServiceId); |
|
|
|
|
|
// 设置当前登录的游客用户信息
|
|
|
|
|
|
vo.setUser(guestUser); |
|
|
|
|
|
|
|
|
|
|
|
log.info("游客登录成功,userId:{}, uuid:{}", guestUser.getId(), guestUuid); |
|
|
return vo; |
|
|
return vo; |
|
|
} |
|
|
} |
|
|
|
|
|
public Long getRandomCustomerServiceId() { |
|
|
|
|
|
LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery(); |
|
|
|
|
|
// 条件:is_customer = 2 表示客服
|
|
|
|
|
|
queryWrapper.eq(User::getIsCustomer, 2); |
|
|
|
|
|
// 只查id字段,提升效率
|
|
|
|
|
|
queryWrapper.select(User::getId); |
|
|
|
|
|
// 随机排序(mysql用rand())
|
|
|
|
|
|
queryWrapper.last("ORDER BY RAND() LIMIT 1"); |
|
|
|
|
|
|
|
|
|
|
|
User customerService = this.getOne(queryWrapper, false); // false=无结果不抛异常
|
|
|
|
|
|
|
|
|
|
|
|
return customerService == null ? null : customerService.getId(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public LoginVO loginCustom(LoginDTO dto) { |
|
|
public LoginVO loginCustom(LoginDTO dto) { |
|
|
|