微信公众号与小程序授权添加事务控制

This commit is contained in:
xuwenbo
2020-05-14 14:30:51 +08:00
parent 22e522c287
commit 4dfefab907
3 changed files with 316 additions and 258 deletions

View File

@ -101,7 +101,7 @@ public class AuthController {
private final YxUserService userService;
private final PasswordEncoder passwordEncoder;
private final YxWechatUserService wechatUserService;
private final WxMaService wxMaService;
private final NotifyService notifyService;
private final YxSystemAttachmentService systemAttachmentService;
@ -161,132 +161,7 @@ public class AuthController {
* 2、目前登陆授权打通方式适用于新项目也就是你yx_user、yx_wechat_user都是空的
* 3、如果你以前已经有数据请自行处理
*/
try {
WxMpService wxService = WxMpConfiguration.getWxMpService();
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxService.oauth2getAccessToken(code);
WxMpUser wxMpUser = wxService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
String openid = wxMpUser.getOpenId();
//如果开启了UnionId
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
openid = wxMpUser.getUnionId();
}
YxUser yxUser = userService.findByName(openid);
String username = "";
if(ObjectUtil.isNull(yxUser)){
//过滤掉表情
String nickname = EmojiParser.removeAllEmojis(wxMpUser.getNickname());
log.info("昵称:{}", nickname);
//用户保存
YxUser user = new YxUser();
user.setAccount(nickname);
//如果开启了UnionId
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
username = wxMpUser.getUnionId();
user.setUsername(wxMpUser.getUnionId());
}else{
username = wxMpUser.getOpenId();
user.setUsername(wxMpUser.getOpenId());
}
user.setPassword(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPwd(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPhone("");
user.setUserType(AppFromEnum.WECHAT.getValue());
user.setLoginType(AppFromEnum.WECHAT.getValue());
user.setAddTime(OrderUtil.getSecondTimestampTwo());
user.setLastTime(OrderUtil.getSecondTimestampTwo());
user.setNickname(nickname);
user.setAvatar(wxMpUser.getHeadImgUrl());
user.setNowMoney(BigDecimal.ZERO);
user.setBrokeragePrice(BigDecimal.ZERO);
user.setIntegral(BigDecimal.ZERO);
userService.save(user);
//保存微信用户
YxWechatUser yxWechatUser = new YxWechatUser();
yxWechatUser.setAddTime(OrderUtil.getSecondTimestampTwo());
yxWechatUser.setNickname(nickname);
yxWechatUser.setOpenid(wxMpUser.getOpenId());
int sub = 0;
if (ObjectUtil.isNotNull(wxMpUser.getSubscribe()) && wxMpUser.getSubscribe()) sub = 1;
yxWechatUser.setSubscribe(sub);
yxWechatUser.setSex(wxMpUser.getSex());
yxWechatUser.setLanguage(wxMpUser.getLanguage());
yxWechatUser.setCity(wxMpUser.getCity());
yxWechatUser.setProvince(wxMpUser.getProvince());
yxWechatUser.setCountry(wxMpUser.getCountry());
yxWechatUser.setHeadimgurl(wxMpUser.getHeadImgUrl());
if (ObjectUtil.isNotNull(wxMpUser.getSubscribeTime())) {
yxWechatUser.setSubscribeTime(wxMpUser.getSubscribeTime().intValue());
}
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
yxWechatUser.setUnionid(wxMpUser.getUnionId());
}
if (StrUtil.isNotEmpty(wxMpUser.getRemark())) {
yxWechatUser.setUnionid(wxMpUser.getRemark());
}
if (ObjectUtil.isNotEmpty(wxMpUser.getGroupId())) {
yxWechatUser.setGroupid(wxMpUser.getGroupId());
}
yxWechatUser.setUid(user.getUid());
wechatUserService.save(yxWechatUser);
}else{
username = yxUser.getUsername();
if(StrUtil.isNotBlank(wxMpUser.getOpenId()) || StrUtil.isNotBlank(wxMpUser.getUnionId())){
YxWechatUser wechatUser = new YxWechatUser();
wechatUser.setUid(yxUser.getUid());
wechatUser.setUnionid(wxMpUser.getUnionId());
wechatUser.setOpenid(wxMpUser.getOpenId());
wechatUserService.updateById(wechatUser);
}
}
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(username,
ShopConstants.YSHOP_DEFAULT_PWD);
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌
String token = tokenProvider.createToken(authentication);
final JwtUser jwtUserT = (JwtUser) authentication.getPrincipal();
// 保存在线信息
onlineUserService.save(jwtUserT, token, request);
Date expiresTime = tokenProvider.getExpirationDateFromToken(token);
String expiresTimeStr = DateUtil.formatDateTime(expiresTime);
Map<String, String> map = new LinkedHashMap<>();
map.put("token", token);
map.put("expires_time", expiresTimeStr);
if (singleLogin) {
//踢掉之前已经登录的token
onlineUserService.checkLoginOnUser(jwtUserT.getUsername(), token);
}
//设置推广关系
if (StrUtil.isNotEmpty(spread) && !spread.equals("NaN")) {
userService.setSpread(Integer.valueOf(spread),
jwtUserT.getId().intValue());
}
// 返回 token
return ApiResult.ok(map);
} catch (WxErrorException e) {
e.printStackTrace();
log.error(e.getMessage());
return ApiResult.fail("授权失败");
}
return ApiResult.ok(userService.authLogin(code,spread,request));
}
@ -304,135 +179,8 @@ public class AuthController {
* 2、目前登陆授权打通方式适用于新项目也就是你yx_user、yx_wechat_user都是空的
* 3、如果你以前已经有数据请自行处理
*/
String code = loginParam.getCode();
String encryptedData = loginParam.getEncryptedData();
String iv = loginParam.getIv();
String spread = loginParam.getSpread();
try {
//读取redis配置
String appId = RedisUtil.get(RedisKeyEnum.WXAPP_APPID.getValue());
String secret = RedisUtil.get(RedisKeyEnum.WXAPP_SECRET.getValue());
if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) {
throw new ErrorRequestException("请先配置小程序");
}
WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
wxMaConfig.setAppid(appId);
wxMaConfig.setSecret(secret);
return ApiResult.ok(userService.wxappAuth(loginParam,request)) ;
wxMaService.setWxMaConfig(wxMaConfig);
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
String openid = session.getOpenid();
//如果开启了UnionId
if (StrUtil.isNotBlank(session.getUnionid())) {
openid = session.getUnionid();
}
YxUser yxUser = userService.findByName(openid);
String username = "";
if(ObjectUtil.isNull(yxUser)){
WxMaUserInfo wxMpUser = wxMaService.getUserService()
.getUserInfo(session.getSessionKey(), encryptedData, iv);
//过滤掉表情
String nickname = EmojiParser.removeAllEmojis(wxMpUser.getNickName());
//用户保存
YxUser user = new YxUser();
user.setAccount(nickname);
//如果开启了UnionId
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
username = wxMpUser.getUnionId();
user.setUsername(wxMpUser.getUnionId());
}else{
username = wxMpUser.getOpenId();
user.setUsername(wxMpUser.getOpenId());
}
user.setPassword(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPwd(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPhone("");
user.setUserType(AppFromEnum.ROUNTINE.getValue());
user.setAddTime(OrderUtil.getSecondTimestampTwo());
user.setLastTime(OrderUtil.getSecondTimestampTwo());
user.setNickname(nickname);
user.setAvatar(wxMpUser.getAvatarUrl());
user.setNowMoney(BigDecimal.ZERO);
user.setBrokeragePrice(BigDecimal.ZERO);
user.setIntegral(BigDecimal.ZERO);
userService.save(user);
//保存微信用户
YxWechatUser yxWechatUser = new YxWechatUser();
// System.out.println("wxMpUser:"+wxMpUser);
yxWechatUser.setAddTime(OrderUtil.getSecondTimestampTwo());
yxWechatUser.setNickname(nickname);
yxWechatUser.setRoutineOpenid(wxMpUser.getOpenId());
int sub = 0;
yxWechatUser.setSubscribe(sub);
yxWechatUser.setSex(Integer.valueOf(wxMpUser.getGender()));
yxWechatUser.setLanguage(wxMpUser.getLanguage());
yxWechatUser.setCity(wxMpUser.getCity());
yxWechatUser.setProvince(wxMpUser.getProvince());
yxWechatUser.setCountry(wxMpUser.getCountry());
yxWechatUser.setHeadimgurl(wxMpUser.getAvatarUrl());
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
yxWechatUser.setUnionid(wxMpUser.getUnionId());
}
yxWechatUser.setUid(user.getUid());
wechatUserService.save(yxWechatUser);
}else{
username = yxUser.getUsername();
if(StrUtil.isNotBlank(session.getOpenid()) || StrUtil.isNotBlank(session.getUnionid())){
YxWechatUser wechatUser = new YxWechatUser();
wechatUser.setUid(yxUser.getUid());
wechatUser.setUnionid(session.getUnionid());
wechatUser.setRoutineOpenid(session.getOpenid());
wechatUserService.updateById(wechatUser);
}
}
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(username,
ShopConstants.YSHOP_DEFAULT_PWD);
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌
String token = tokenProvider.createToken(authentication);
final JwtUser jwtUserT = (JwtUser) authentication.getPrincipal();
// 保存在线信息
onlineUserService.save(jwtUserT, token, request);
Date expiresTime = tokenProvider.getExpirationDateFromToken(token);
String expiresTimeStr = DateUtil.formatDateTime(expiresTime);
Map<String, String> map = new LinkedHashMap<>();
map.put("token", token);
map.put("expires_time", expiresTimeStr);
if (singleLogin) {
//踢掉之前已经登录的token
onlineUserService.checkLoginOnUser(jwtUserT.getUsername(), token);
}
//设置推广关系
if (StrUtil.isNotEmpty(spread)) {
userService.setSpread(Integer.valueOf(spread),
jwtUserT.getId().intValue());
}
// 返回 token
return ApiResult.ok(map);
} catch (WxErrorException e) {
log.error(e.getMessage(), e);
return ApiResult.fail(e.toString());
}
}

View File

@ -11,12 +11,14 @@ package co.yixiang.modules.user.service;
import co.yixiang.common.service.BaseService;
import co.yixiang.common.web.vo.Paging;
import co.yixiang.modules.order.web.vo.YxStoreOrderQueryVo;
import co.yixiang.modules.security.rest.param.LoginParam;
import co.yixiang.modules.user.entity.YxUser;
import co.yixiang.modules.user.web.dto.PromUserDTO;
import co.yixiang.modules.user.web.param.PromParam;
import co.yixiang.modules.user.web.param.YxUserQueryParam;
import co.yixiang.modules.user.web.vo.YxUserQueryVo;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.List;
@ -71,4 +73,7 @@ public interface YxUserService extends BaseService<YxUser> {
*/
Paging<YxUserQueryVo> getYxUserPageList(YxUserQueryParam yxUserQueryParam) throws Exception;
Object authLogin(String code, String spread, HttpServletRequest request);
Object wxappAuth(LoginParam loginParam, HttpServletRequest request);
}

View File

@ -8,42 +8,71 @@
*/
package co.yixiang.modules.user.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.common.api.ApiResult;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.common.web.vo.Paging;
import co.yixiang.constant.ShopConstants;
import co.yixiang.enums.AppFromEnum;
import co.yixiang.enums.RedisKeyEnum;
import co.yixiang.exception.BadRequestException;
import co.yixiang.exception.ErrorRequestException;
import co.yixiang.modules.order.service.YxStoreOrderService;
import co.yixiang.modules.order.web.vo.YxStoreOrderQueryVo;
import co.yixiang.modules.security.rest.param.LoginParam;
import co.yixiang.modules.security.security.TokenProvider;
import co.yixiang.modules.security.security.vo.JwtUser;
import co.yixiang.modules.security.service.OnlineUserService;
import co.yixiang.modules.shop.service.YxStoreCouponUserService;
import co.yixiang.modules.shop.service.YxSystemConfigService;
import co.yixiang.modules.shop.service.YxSystemStoreStaffService;
import co.yixiang.modules.user.entity.YxUser;
import co.yixiang.modules.user.entity.YxUserBill;
import co.yixiang.modules.user.entity.YxUserLevel;
import co.yixiang.modules.user.entity.YxWechatUser;
import co.yixiang.modules.user.mapper.YxUserMapper;
import co.yixiang.modules.user.service.YxUserBillService;
import co.yixiang.modules.user.service.YxUserLevelService;
import co.yixiang.modules.user.service.YxUserService;
import co.yixiang.modules.user.service.YxWechatUserService;
import co.yixiang.modules.user.web.dto.PromUserDTO;
import co.yixiang.modules.user.web.param.PromParam;
import co.yixiang.modules.user.web.param.YxUserQueryParam;
import co.yixiang.modules.user.web.vo.YxUserQueryVo;
import co.yixiang.mp.config.WxMpConfiguration;
import co.yixiang.utils.OrderUtil;
import co.yixiang.utils.RedisUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vdurmont.emoji.EmojiParser;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@ -75,7 +104,22 @@ public class YxUserServiceImpl extends BaseServiceImpl<YxUserMapper, YxUser> imp
private YxStoreCouponUserService storeCouponUserService;
@Autowired
private YxSystemStoreStaffService systemStoreStaffService;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private OnlineUserService onlineUserService;
@Autowired
private TokenProvider tokenProvider;
@Autowired
private AuthenticationManagerBuilder authenticationManagerBuilder;
@Autowired
private WxMaService wxMaService;
@Autowired
private YxWechatUserService wechatUserService;
@Value("${single.login:true}")
private Boolean singleLogin;
@Value("${yshop.notify.sms.enable}")
private Boolean enableSms;
/**
@ -465,4 +509,265 @@ public class YxUserServiceImpl extends BaseServiceImpl<YxUserMapper, YxUser> imp
wrapper.eq("username",name);
return getOne(wrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Object authLogin(String code, String spread, HttpServletRequest request){
try {
WxMpService wxService = WxMpConfiguration.getWxMpService();
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxService.oauth2getAccessToken(code);
WxMpUser wxMpUser = wxService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
String openid = wxMpUser.getOpenId();
//如果开启了UnionId
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
openid = wxMpUser.getUnionId();
}
YxUser yxUser = this.findByName(openid);
String username = "";
if(ObjectUtil.isNull(yxUser)){
//过滤掉表情
String nickname = EmojiParser.removeAllEmojis(wxMpUser.getNickname());
log.info("昵称:{}", nickname);
//用户保存
YxUser user = new YxUser();
user.setAccount(nickname);
//如果开启了UnionId
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
username = wxMpUser.getUnionId();
user.setUsername(wxMpUser.getUnionId());
}else{
username = wxMpUser.getOpenId();
user.setUsername(wxMpUser.getOpenId());
}
user.setPassword(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPwd(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPhone("");
user.setUserType(AppFromEnum.WECHAT.getValue());
user.setLoginType(AppFromEnum.WECHAT.getValue());
user.setAddTime(OrderUtil.getSecondTimestampTwo());
user.setLastTime(OrderUtil.getSecondTimestampTwo());
user.setNickname(nickname);
user.setAvatar(wxMpUser.getHeadImgUrl());
user.setNowMoney(BigDecimal.ZERO);
user.setBrokeragePrice(BigDecimal.ZERO);
user.setIntegral(BigDecimal.ZERO);
this.save(user);
//保存微信用户
YxWechatUser yxWechatUser = new YxWechatUser();
yxWechatUser.setAddTime(OrderUtil.getSecondTimestampTwo());
yxWechatUser.setNickname(nickname);
yxWechatUser.setOpenid(wxMpUser.getOpenId());
int sub = 0;
if (ObjectUtil.isNotNull(wxMpUser.getSubscribe()) && wxMpUser.getSubscribe()) sub = 1;
yxWechatUser.setSubscribe(sub);
yxWechatUser.setSex(wxMpUser.getSex());
yxWechatUser.setLanguage(wxMpUser.getLanguage());
yxWechatUser.setCity(wxMpUser.getCity());
yxWechatUser.setProvince(wxMpUser.getProvince());
yxWechatUser.setCountry(wxMpUser.getCountry());
yxWechatUser.setHeadimgurl(wxMpUser.getHeadImgUrl());
if (ObjectUtil.isNotNull(wxMpUser.getSubscribeTime())) {
yxWechatUser.setSubscribeTime(wxMpUser.getSubscribeTime().intValue());
}
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
yxWechatUser.setUnionid(wxMpUser.getUnionId());
}
if (StrUtil.isNotEmpty(wxMpUser.getRemark())) {
yxWechatUser.setUnionid(wxMpUser.getRemark());
}
if (ObjectUtil.isNotEmpty(wxMpUser.getGroupId())) {
yxWechatUser.setGroupid(wxMpUser.getGroupId());
}
yxWechatUser.setUid(user.getUid());
wechatUserService.save(yxWechatUser);
}else{
username = yxUser.getUsername();
if(StrUtil.isNotBlank(wxMpUser.getOpenId()) || StrUtil.isNotBlank(wxMpUser.getUnionId())){
YxWechatUser wechatUser = new YxWechatUser();
wechatUser.setUid(yxUser.getUid());
wechatUser.setUnionid(wxMpUser.getUnionId());
wechatUser.setOpenid(wxMpUser.getOpenId());
wechatUserService.updateById(wechatUser);
}
}
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(username,
ShopConstants.YSHOP_DEFAULT_PWD);
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌
String token = tokenProvider.createToken(authentication);
final JwtUser jwtUserT = (JwtUser) authentication.getPrincipal();
// 保存在线信息
onlineUserService.save(jwtUserT, token, request);
Date expiresTime = tokenProvider.getExpirationDateFromToken(token);
String expiresTimeStr = DateUtil.formatDateTime(expiresTime);
Map<String, String> map = new LinkedHashMap<>();
map.put("token", token);
map.put("expires_time", expiresTimeStr);
if (singleLogin) {
//踢掉之前已经登录的token
onlineUserService.checkLoginOnUser(jwtUserT.getUsername(), token);
}
//设置推广关系
if (StrUtil.isNotEmpty(spread) && !spread.equals("NaN")) {
this.setSpread(Integer.valueOf(spread),
jwtUserT.getId().intValue());
}
// 返回 token
return map;
} catch (WxErrorException e) {
e.printStackTrace();
log.error(e.getMessage());
throw new BadRequestException(e.toString());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public Object wxappAuth(LoginParam loginParam, HttpServletRequest request){
String code = loginParam.getCode();
String encryptedData = loginParam.getEncryptedData();
String iv = loginParam.getIv();
String spread = loginParam.getSpread();
try {
//读取redis配置
String appId = RedisUtil.get(RedisKeyEnum.WXAPP_APPID.getValue());
String secret = RedisUtil.get(RedisKeyEnum.WXAPP_SECRET.getValue());
if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) {
throw new ErrorRequestException("请先配置小程序");
}
WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
wxMaConfig.setAppid(appId);
wxMaConfig.setSecret(secret);
wxMaService.setWxMaConfig(wxMaConfig);
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
String openid = session.getOpenid();
//如果开启了UnionId
if (StrUtil.isNotBlank(session.getUnionid())) {
openid = session.getUnionid();
}
YxUser yxUser = this.findByName(openid);
String username = "";
if(ObjectUtil.isNull(yxUser)){
WxMaUserInfo wxMpUser = wxMaService.getUserService()
.getUserInfo(session.getSessionKey(), encryptedData, iv);
//过滤掉表情
String nickname = EmojiParser.removeAllEmojis(wxMpUser.getNickName());
//用户保存
YxUser user = new YxUser();
user.setAccount(nickname);
//如果开启了UnionId
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
username = wxMpUser.getUnionId();
user.setUsername(wxMpUser.getUnionId());
}else{
username = wxMpUser.getOpenId();
user.setUsername(wxMpUser.getOpenId());
}
user.setPassword(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPwd(passwordEncoder.encode(ShopConstants.YSHOP_DEFAULT_PWD));
user.setPhone("");
user.setUserType(AppFromEnum.ROUNTINE.getValue());
user.setAddTime(OrderUtil.getSecondTimestampTwo());
user.setLastTime(OrderUtil.getSecondTimestampTwo());
user.setNickname(nickname);
user.setAvatar(wxMpUser.getAvatarUrl());
user.setNowMoney(BigDecimal.ZERO);
user.setBrokeragePrice(BigDecimal.ZERO);
user.setIntegral(BigDecimal.ZERO);
this.save(user);
//保存微信用户
YxWechatUser yxWechatUser = new YxWechatUser();
// System.out.println("wxMpUser:"+wxMpUser);
yxWechatUser.setAddTime(OrderUtil.getSecondTimestampTwo());
yxWechatUser.setNickname(nickname);
yxWechatUser.setRoutineOpenid(wxMpUser.getOpenId());
int sub = 0;
yxWechatUser.setSubscribe(sub);
yxWechatUser.setSex(Integer.valueOf(wxMpUser.getGender()));
yxWechatUser.setLanguage(wxMpUser.getLanguage());
yxWechatUser.setCity(wxMpUser.getCity());
yxWechatUser.setProvince(wxMpUser.getProvince());
yxWechatUser.setCountry(wxMpUser.getCountry());
yxWechatUser.setHeadimgurl(wxMpUser.getAvatarUrl());
if (StrUtil.isNotBlank(wxMpUser.getUnionId())) {
yxWechatUser.setUnionid(wxMpUser.getUnionId());
}
yxWechatUser.setUid(user.getUid());
wechatUserService.save(yxWechatUser);
}else{
username = yxUser.getUsername();
if(StrUtil.isNotBlank(session.getOpenid()) || StrUtil.isNotBlank(session.getUnionid())){
YxWechatUser wechatUser = new YxWechatUser();
wechatUser.setUid(yxUser.getUid());
wechatUser.setUnionid(session.getUnionid());
wechatUser.setRoutineOpenid(session.getOpenid());
wechatUserService.updateById(wechatUser);
}
}
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(username,
ShopConstants.YSHOP_DEFAULT_PWD);
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成令牌
String token = tokenProvider.createToken(authentication);
final JwtUser jwtUserT = (JwtUser) authentication.getPrincipal();
// 保存在线信息
onlineUserService.save(jwtUserT, token, request);
Date expiresTime = tokenProvider.getExpirationDateFromToken(token);
String expiresTimeStr = DateUtil.formatDateTime(expiresTime);
Map<String, String> map = new LinkedHashMap<>();
map.put("token", token);
map.put("expires_time", expiresTimeStr);
if (singleLogin) {
//踢掉之前已经登录的token
onlineUserService.checkLoginOnUser(jwtUserT.getUsername(), token);
}
//设置推广关系
if (StrUtil.isNotEmpty(spread)) {
this.setSpread(Integer.valueOf(spread),
jwtUserT.getId().intValue());
}
// 返回 token
return map;
} catch (WxErrorException e) {
log.error(e.getMessage(), e);
throw new BadRequestException(e.toString());
}
}
}