|
@@ -38,23 +38,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
@Override
|
|
@Override
|
|
public LoginUserVO wechatInfo(UserWechatRegisterDTO userWechatRegisterDTO, HttpServletRequest request) {
|
|
public LoginUserVO wechatInfo(UserWechatRegisterDTO userWechatRegisterDTO, HttpServletRequest request) {
|
|
try {
|
|
try {
|
|
- if (userWechatRegisterDTO == null) {
|
|
|
|
- throw new JeecgBootException("参数不能为空",SC_JEECG_NO_AUTHZ);
|
|
|
|
|
|
+ if (userWechatRegisterDTO == null ||
|
|
|
|
+ StringUtils.isAnyBlank(userWechatRegisterDTO.getCode(), userWechatRegisterDTO.getUserName(), userWechatRegisterDTO.getUserAvatar(), userWechatRegisterDTO.getGender())) {
|
|
|
|
+ throw new JeecgBootException("参数不能为空", SC_JEECG_NO_AUTHZ);
|
|
}
|
|
}
|
|
String code = userWechatRegisterDTO.getCode();
|
|
String code = userWechatRegisterDTO.getCode();
|
|
String userName = userWechatRegisterDTO.getUserName();
|
|
String userName = userWechatRegisterDTO.getUserName();
|
|
String userAvatar = userWechatRegisterDTO.getUserAvatar();
|
|
String userAvatar = userWechatRegisterDTO.getUserAvatar();
|
|
String gender = userWechatRegisterDTO.getGender();
|
|
String gender = userWechatRegisterDTO.getGender();
|
|
- if (StringUtils.isAnyBlank(code, userName, userAvatar,gender)) {
|
|
|
|
- throw new JeecgBootException("参数不能为空",SC_JEECG_NO_AUTHZ);
|
|
|
|
- }
|
|
|
|
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
|
|
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
|
|
String openid = session.getOpenid();
|
|
String openid = session.getOpenid();
|
|
String sessionKey = session.getSessionKey();
|
|
String sessionKey = session.getSessionKey();
|
|
// 单机锁
|
|
// 单机锁
|
|
synchronized (openid.intern()) {
|
|
synchronized (openid.intern()) {
|
|
// 查询用户是否已存在
|
|
// 查询用户是否已存在
|
|
- User user = this.getOne(Wrappers.<User>lambdaQuery().eq(User::getOpenid, openid).eq(User::getDelFlag,0));
|
|
|
|
|
|
+ User user = this.getOne(Wrappers.<User>lambdaQuery().eq(User::getOpenid, openid).eq(User::getDelFlag, 0));
|
|
// 用户不存在则创建
|
|
// 用户不存在则创建
|
|
if (user == null) {
|
|
if (user == null) {
|
|
user = new User();
|
|
user = new User();
|
|
@@ -67,30 +65,63 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
user.setGender(gender);
|
|
user.setGender(gender);
|
|
boolean result = this.save(user);
|
|
boolean result = this.save(user);
|
|
if (!result) {
|
|
if (!result) {
|
|
- throw new JeecgBootException("登录失败",SC_INTERNAL_SERVER_ERROR_500);
|
|
|
|
|
|
+ throw new JeecgBootException("登录失败", SC_INTERNAL_SERVER_ERROR_500);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 记录用户的登录态
|
|
// 记录用户的登录态
|
|
request.getSession().setAttribute(USER_LOGIN_STATE, user);
|
|
request.getSession().setAttribute(USER_LOGIN_STATE, user);
|
|
- LoginUserVO loginUserVO = this.getLoginUserVO(user);
|
|
|
|
- String userAccount = user.getUserAccount();
|
|
|
|
- String userPassword = user.getUserPassword();
|
|
|
|
- //1.生成token
|
|
|
|
- String token = JwtUtil.sign(userAccount, userPassword);
|
|
|
|
- // 设置token缓存有效时间
|
|
|
|
- redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
|
|
|
|
- redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
|
|
|
|
- loginUserVO.setToken(token);
|
|
|
|
- return loginUserVO;
|
|
|
|
|
|
+ return generateLoginUserVO(user);
|
|
}
|
|
}
|
|
} catch (WxErrorException e) {
|
|
} catch (WxErrorException e) {
|
|
- log.error(e.getMessage(), e);
|
|
|
|
- throw new JeecgBootException("小程序登录失败:" + e,SC_INTERNAL_SERVER_ERROR_500);
|
|
|
|
|
|
+ log.error("微信登录失败: {}"+ e.getMessage());
|
|
|
|
+ throw new JeecgBootException("小程序登录失败:" + e, SC_INTERNAL_SERVER_ERROR_500);
|
|
} finally {
|
|
} finally {
|
|
- WxMaConfigHolder.remove();//清理ThreadLocal
|
|
|
|
|
|
+ WxMaConfigHolder.remove(); // 清理ThreadLocal
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public LoginUserVO wechatLogin(String code) {
|
|
|
|
+ try {
|
|
|
|
+ WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
|
|
|
|
+ String openid = session.getOpenid();
|
|
|
|
+ // 通过openId获取在系统中是否是已经绑定过的用户
|
|
|
|
+ User user = this.getOne(Wrappers.<User>lambdaQuery().eq(User::getOpenid, openid).eq(User::getDelFlag, 0));
|
|
|
|
+ if (null == user) {
|
|
|
|
+ // 用户不存在则创建
|
|
|
|
+ user = new User();
|
|
|
|
+ user.setOpenid(openid);
|
|
|
|
+ user.setUserAccount(IdUtil.getSnowflakeNextIdStr());
|
|
|
|
+ String encryptPassword = DigestUtils.md5DigestAsHex((SALTA_APP).getBytes());
|
|
|
|
+ user.setUserPassword(encryptPassword);
|
|
|
|
+ user.setUserName("微信用户");
|
|
|
|
+ boolean result = this.save(user);
|
|
|
|
+ if (!result) {
|
|
|
|
+ throw new JeecgBootException("登录失败", SC_INTERNAL_SERVER_ERROR_500);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return generateLoginUserVO(user);
|
|
|
|
+ } catch (WxErrorException e) {
|
|
|
|
+ log.error("微信登录失败: " + e.getMessage());
|
|
|
|
+ throw new JeecgBootException("小程序登录失败:" + e, SC_INTERNAL_SERVER_ERROR_500);
|
|
|
|
+ } finally {
|
|
|
|
+ WxMaConfigHolder.remove(); // 清理ThreadLocal
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private LoginUserVO generateLoginUserVO(User user) {
|
|
|
|
+ String userAccount = user.getUserAccount();
|
|
|
|
+ String userPassword = user.getUserPassword();
|
|
|
|
+ // 1.生成token
|
|
|
|
+ String token = JwtUtil.sign(userAccount, userPassword);
|
|
|
|
+ // 设置token缓存有效时间
|
|
|
|
+ redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
|
|
|
|
+ redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
|
|
|
|
+ LoginUserVO loginUserVO = getLoginUserVO(user);
|
|
|
|
+ loginUserVO.setToken(token);
|
|
|
|
+ return loginUserVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public LoginUserVO getLoginUserVO(User user) {
|
|
public LoginUserVO getLoginUserVO(User user) {
|
|
if (user == null) {
|
|
if (user == null) {
|
|
@@ -100,4 +131,4 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|
BeanUtils.copyProperties(user, loginUserVO);
|
|
BeanUtils.copyProperties(user, loginUserVO);
|
|
return loginUserVO;
|
|
return loginUserVO;
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+}
|