Commit 81634cff authored by 王亮's avatar 王亮

temp commit(have a nice weekend)

parent db5b902f
......@@ -47,4 +47,6 @@ public interface ISessionService {
* @return
*/
AuthBean createSession(User user, LoginProperties loginProperties, int ordinal,Integer tenantId);
}
......@@ -126,7 +126,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.AUTHLOGIN.ordinal(), sessionStruct.getTenantId());
LoginBean loginBean = new LoginBean();
if (authBean != null) {
loginBean.setToken(authBean.getToken());
......
......@@ -116,7 +116,7 @@ public class SMSLoginStrategy implements LoginStrategy {
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.VERIFICATIONCODE.ordinal(), sessionStruct.getTenantId());
LoginBean loginBean = new LoginBean();
if (authBean != null) {
loginBean.setToken(authBean.getToken());
......
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
......@@ -14,6 +15,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam;
import cn.quantgroup.xyqb.remote.WechatRemoteService;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.repository.IWeChatUserRepository;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
......@@ -30,19 +32,21 @@ import java.util.Map;
*/
@Service
@Slf4j
public class WechatMiniLoginStrategy implements LoginStrategy{
public class WechatMiniLoginStrategy implements LoginStrategy {
private final WechatRemoteService wechatRemoteService;
private final WechatConfiguration wechatConfiguration;
private final IWeChatUserRepository weChatUserRepository;
private final IUserRepository userRepository;
private final ISessionService sessionService;
private final Gson gson;
public WechatMiniLoginStrategy(WechatRemoteService wechatRemoteService, WechatConfiguration wechatConfiguration, IWeChatUserRepository weChatUserRepository, ISessionService sessionService, Gson gson) {
public WechatMiniLoginStrategy(WechatRemoteService wechatRemoteService, WechatConfiguration wechatConfiguration, IWeChatUserRepository weChatUserRepository, IUserRepository userRepository, ISessionService sessionService, Gson gson) {
this.wechatRemoteService = wechatRemoteService;
this.wechatConfiguration = wechatConfiguration;
this.weChatUserRepository = weChatUserRepository;
this.userRepository = userRepository;
this.sessionService = sessionService;
this.gson = gson;
}
......@@ -54,26 +58,26 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
@Override
public LoginBean login(BaseLoginParam param) {
WechatMiniLoginParam loginParam = (WechatMiniLoginParam)param;
WechatMiniLoginParam loginParam = (WechatMiniLoginParam) param;
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
//1、微信登录逻辑
WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(),sessionStruct.getTenantId());
String response =wechatRemoteService.login(wechatConfigBean.getAppId(),wechatConfigBean.getAppSecret(),((WechatMiniLoginParam) param).getCode());
WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(), sessionStruct.getTenantId());
String response = wechatRemoteService.login(wechatConfigBean.getAppId(), wechatConfigBean.getAppSecret(), ((WechatMiniLoginParam) param).getCode());
Type resultType = new TypeToken<Map<String, String>>() {
}.getType();
Map<String, String> responseMap = gson.fromJson(response, resultType);
String openid,sessionKey,unionId;
String openid, sessionKey = null, unionId = null;
User user = null;
assert responseMap != null;
if (responseMap.containsKey("errcode") && Integer.parseInt(responseMap.get("errcode")) != 0) {
log.error("code:{},errcode:{},errmsg:{}", ((WechatMiniLoginParam) param).getCode(), responseMap.get("errcode"),
responseMap.get("errmsg"));
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN,responseMap.get("errmsg"));
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN, responseMap.get("errmsg"));
} else {
openid = responseMap.get("openid");
if (responseMap.containsKey("session_key")) {
......@@ -85,32 +89,46 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
}
//2、登录判断逻辑
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppIdAndTenantId(openid,loginParam.getAppId(),sessionStruct.getTenantId());
boolean register =false;
if(wechatUserInfo ==null){
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppIdAndTenantId(openid, loginParam.getAppId(), sessionStruct.getTenantId());
boolean register = false;
if (wechatUserInfo == null) {
//首次登录
register = true;
wechatUserInfo = new WechatUserInfo();
wechatUserInfo.setOpenId(openid);
wechatUserInfo.setUnionId(unionId);
wechatUserInfo.setAppId(loginParam.getAppId());
wechatUserInfo.setTenantId(sessionStruct.getTenantId());
wechatUserInfo.setSessionKey(sessionKey);
} else {
wechatUserInfo.setSessionKey(sessionKey);
}else{
// wechatUserInfo = weChatUserRepository.save(null);
}
weChatUserRepository.save(wechatUserInfo);
if (wechatUserInfo.getUserId() != null) {
user = userRepository.findByIdAndTenantId(wechatUserInfo.getUserId(), sessionStruct.getTenantId());
}
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
AuthBean authBean = new AuthBean();
if(user!=null){
authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(), sessionStruct.getTenantId());
}
//TODO:需要针对微信登录用户签发token
LoginBean loginBean = new LoginBean();
if (authBean != null) {
loginBean.setToken(authBean.getToken());
loginBean.setPhoneNo(authBean.getPhoneNo());
loginBean.setUuid(authBean.getUuid());
loginBean.setHasPassword(authBean.isHasPassword());
loginBean.setUserId(wechatUserInfo.getUserId());
loginBean.setTenantId(wechatUserInfo.getTenantId());
}
// LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
// AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(), sessionStruct.getTenantId());
// LoginBean loginBean = new LoginBean();
// if (authBean != null) {
// loginBean.setToken(authBean.getToken());
// loginBean.setPhoneNo(authBean.getPhoneNo());
// loginBean.setUuid(authBean.getUuid());
// loginBean.setHasPassword(authBean.isHasPassword());
// loginBean.setUserId(wechatUserInfo.getUserId());
// loginBean.setTenantId(wechatUserInfo.getTenantId());
// }
// loginBean.setRegister(register);
//
return null;
loginBean.setRegister(register);
return loginBean;
}
@Override
......
......@@ -5,9 +5,9 @@ import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
......@@ -68,26 +68,26 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
@Override
public LoginBean login(BaseLoginParam param) {
WechatMiniPhoneLoginParam loginParam = (WechatMiniPhoneLoginParam)param;
WechatMiniPhoneLoginParam loginParam = (WechatMiniPhoneLoginParam) param;
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
//1、微信登录逻辑
WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(),sessionStruct.getTenantId());
String response =wechatRemoteService.login(wechatConfigBean.getAppId(),wechatConfigBean.getAppSecret(),((WechatMiniLoginParam) param).getCode());
WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(), sessionStruct.getTenantId());
String response = wechatRemoteService.login(wechatConfigBean.getAppId(), wechatConfigBean.getAppSecret(), ((WechatMiniLoginParam) param).getCode());
Type resultType = new TypeToken<Map<String, String>>() {
}.getType();
Map<String, String> responseMap = gson.fromJson(response, resultType);
String openid,sessionKey,unionId;
String openid, sessionKey = null, unionId = null;
assert responseMap != null;
if (responseMap.containsKey("errcode") && Integer.parseInt(responseMap.get("errcode")) != 0) {
log.error("code:{},errcode:{},errmsg:{}", ((WechatMiniLoginParam) param).getCode(), responseMap.get("errcode"),
responseMap.get("errmsg"));
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN,responseMap.get("errmsg"));
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN, responseMap.get("errmsg"));
} else {
openid = responseMap.get("openid");
if (responseMap.containsKey("session_key")) {
......@@ -98,30 +98,45 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
}
}
Map<String, String> phoneParam = new HashMap<>();
boolean register =false;
boolean register = false;
User user;
phoneParam.put("code", loginParam.getPhoneCode());
String accessToken = redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS+loginParam.getAppId());
String accessToken = redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS + loginParam.getAppId());
WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessToken,phoneParam);
WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessToken, phoneParam);
if(wechatPhoneBean.getErrcode() == 0){
if (wechatPhoneBean.getErrcode() == 0) {
//1、查询库中是否存在用户
user = userRepository.findByPhoneNoAndTenantId(wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId());
//2、如果没有用户,新建一条
if(user==null){
if (user == null) {
user = userRegisterService.register(sessionStruct.getRegisteredFrom(), wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId());
}
if (user == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
}
register = true;
}else{
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN,wechatPhoneBean.getErrmsg());
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppIdAndTenantId(openid, loginParam.getAppId(), sessionStruct.getTenantId());
//如果微信用户为空,则补偿一条
if (wechatUserInfo == null) {
register = true;
wechatUserInfo = new WechatUserInfo();
wechatUserInfo.setOpenId(openid);
wechatUserInfo.setUnionId(unionId);
wechatUserInfo.setAppId(loginParam.getAppId());
wechatUserInfo.setTenantId(sessionStruct.getTenantId());
wechatUserInfo.setPhoneNo(user.getPhoneNo());
wechatUserInfo.setUserId(user.getId());
wechatUserInfo.setSessionKey(sessionKey);
} else {
wechatUserInfo.setSessionKey(sessionKey);
}
weChatUserRepository.save(wechatUserInfo);
} else {
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN, wechatPhoneBean.getErrmsg());
}
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(), sessionStruct.getTenantId());
LoginBean loginBean = new LoginBean();
if (authBean != null) {
loginBean.setToken(authBean.getToken());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment