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

temp commit(have a nice weekend)

parent db5b902f
...@@ -47,4 +47,6 @@ public interface ISessionService { ...@@ -47,4 +47,6 @@ public interface ISessionService {
* @return * @return
*/ */
AuthBean createSession(User user, LoginProperties loginProperties, int ordinal,Integer tenantId); AuthBean createSession(User user, LoginProperties loginProperties, int ordinal,Integer tenantId);
} }
...@@ -126,7 +126,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy { ...@@ -126,7 +126,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId()); 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(); LoginBean loginBean = new LoginBean();
if (authBean != null) { if (authBean != null) {
loginBean.setToken(authBean.getToken()); loginBean.setToken(authBean.getToken());
......
...@@ -116,7 +116,7 @@ public class SMSLoginStrategy implements LoginStrategy { ...@@ -116,7 +116,7 @@ public class SMSLoginStrategy implements LoginStrategy {
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId()); 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(); LoginBean loginBean = new LoginBean();
if (authBean != null) { if (authBean != null) {
loginBean.setToken(authBean.getToken()); loginBean.setToken(authBean.getToken());
......
...@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.v2; ...@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.config.data.WechatConfiguration; import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.enums.LoginType; import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq; import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo; import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException; import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum; import cn.quantgroup.xyqb.exception.BizExceptionEnum;
...@@ -14,6 +15,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct; ...@@ -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.BaseLoginParam;
import cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam; import cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam;
import cn.quantgroup.xyqb.remote.WechatRemoteService; import cn.quantgroup.xyqb.remote.WechatRemoteService;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.repository.IWeChatUserRepository; import cn.quantgroup.xyqb.repository.IWeChatUserRepository;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder; import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
...@@ -30,19 +32,21 @@ import java.util.Map; ...@@ -30,19 +32,21 @@ import java.util.Map;
*/ */
@Service @Service
@Slf4j @Slf4j
public class WechatMiniLoginStrategy implements LoginStrategy{ public class WechatMiniLoginStrategy implements LoginStrategy {
private final WechatRemoteService wechatRemoteService; private final WechatRemoteService wechatRemoteService;
private final WechatConfiguration wechatConfiguration; private final WechatConfiguration wechatConfiguration;
private final IWeChatUserRepository weChatUserRepository; private final IWeChatUserRepository weChatUserRepository;
private final IUserRepository userRepository;
private final ISessionService sessionService; private final ISessionService sessionService;
private final Gson gson; 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.wechatRemoteService = wechatRemoteService;
this.wechatConfiguration = wechatConfiguration; this.wechatConfiguration = wechatConfiguration;
this.weChatUserRepository = weChatUserRepository; this.weChatUserRepository = weChatUserRepository;
this.userRepository = userRepository;
this.sessionService = sessionService; this.sessionService = sessionService;
this.gson = gson; this.gson = gson;
} }
...@@ -54,26 +58,26 @@ public class WechatMiniLoginStrategy implements LoginStrategy{ ...@@ -54,26 +58,26 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
@Override @Override
public LoginBean login(BaseLoginParam param) { public LoginBean login(BaseLoginParam param) {
WechatMiniLoginParam loginParam = (WechatMiniLoginParam)param; WechatMiniLoginParam loginParam = (WechatMiniLoginParam) param;
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession(); SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
//1、微信登录逻辑 //1、微信登录逻辑
WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(),sessionStruct.getTenantId()); WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(), sessionStruct.getTenantId());
String response =wechatRemoteService.login(wechatConfigBean.getAppId(),wechatConfigBean.getAppSecret(),((WechatMiniLoginParam) param).getCode()); String response = wechatRemoteService.login(wechatConfigBean.getAppId(), wechatConfigBean.getAppSecret(), ((WechatMiniLoginParam) param).getCode());
Type resultType = new TypeToken<Map<String, String>>() { Type resultType = new TypeToken<Map<String, String>>() {
}.getType(); }.getType();
Map<String, String> responseMap = gson.fromJson(response, resultType); Map<String, String> responseMap = gson.fromJson(response, resultType);
String openid,sessionKey,unionId; String openid, sessionKey = null, unionId = null;
User user = null;
assert responseMap != null; assert responseMap != null;
if (responseMap.containsKey("errcode") && Integer.parseInt(responseMap.get("errcode")) != 0) { if (responseMap.containsKey("errcode") && Integer.parseInt(responseMap.get("errcode")) != 0) {
log.error("code:{},errcode:{},errmsg:{}", ((WechatMiniLoginParam) param).getCode(), responseMap.get("errcode"), log.error("code:{},errcode:{},errmsg:{}", ((WechatMiniLoginParam) param).getCode(), responseMap.get("errcode"),
responseMap.get("errmsg")); responseMap.get("errmsg"));
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN,responseMap.get("errmsg")); throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN, responseMap.get("errmsg"));
} else { } else {
openid = responseMap.get("openid"); openid = responseMap.get("openid");
if (responseMap.containsKey("session_key")) { if (responseMap.containsKey("session_key")) {
...@@ -85,32 +89,46 @@ public class WechatMiniLoginStrategy implements LoginStrategy{ ...@@ -85,32 +89,46 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
} }
//2、登录判断逻辑 //2、登录判断逻辑
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppIdAndTenantId(openid,loginParam.getAppId(),sessionStruct.getTenantId()); WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppIdAndTenantId(openid, loginParam.getAppId(), sessionStruct.getTenantId());
boolean register =false; boolean register = false;
if(wechatUserInfo ==null){ if (wechatUserInfo == null) {
//首次登录 //首次登录
register = true; 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()); loginBean.setRegister(register);
// AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(), sessionStruct.getTenantId());
// LoginBean loginBean = new LoginBean();
// if (authBean != null) { return loginBean;
// 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;
} }
@Override @Override
......
...@@ -5,9 +5,9 @@ import cn.quantgroup.xyqb.config.data.WechatConfiguration; ...@@ -5,9 +5,9 @@ import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.enums.LoginType; import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq; import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.BizException; import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum; import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.*; import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.session.SessionStruct; import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam; import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
...@@ -68,26 +68,26 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy { ...@@ -68,26 +68,26 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
@Override @Override
public LoginBean login(BaseLoginParam param) { public LoginBean login(BaseLoginParam param) {
WechatMiniPhoneLoginParam loginParam = (WechatMiniPhoneLoginParam)param; WechatMiniPhoneLoginParam loginParam = (WechatMiniPhoneLoginParam) param;
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession(); SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
//1、微信登录逻辑 //1、微信登录逻辑
WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(),sessionStruct.getTenantId()); WechatConfigBean wechatConfigBean = wechatConfiguration.getByAppIdAndTenantId(loginParam.getAppId(), sessionStruct.getTenantId());
String response =wechatRemoteService.login(wechatConfigBean.getAppId(),wechatConfigBean.getAppSecret(),((WechatMiniLoginParam) param).getCode()); String response = wechatRemoteService.login(wechatConfigBean.getAppId(), wechatConfigBean.getAppSecret(), ((WechatMiniLoginParam) param).getCode());
Type resultType = new TypeToken<Map<String, String>>() { Type resultType = new TypeToken<Map<String, String>>() {
}.getType(); }.getType();
Map<String, String> responseMap = gson.fromJson(response, resultType); Map<String, String> responseMap = gson.fromJson(response, resultType);
String openid,sessionKey,unionId; String openid, sessionKey = null, unionId = null;
assert responseMap != null; assert responseMap != null;
if (responseMap.containsKey("errcode") && Integer.parseInt(responseMap.get("errcode")) != 0) { if (responseMap.containsKey("errcode") && Integer.parseInt(responseMap.get("errcode")) != 0) {
log.error("code:{},errcode:{},errmsg:{}", ((WechatMiniLoginParam) param).getCode(), responseMap.get("errcode"), log.error("code:{},errcode:{},errmsg:{}", ((WechatMiniLoginParam) param).getCode(), responseMap.get("errcode"),
responseMap.get("errmsg")); responseMap.get("errmsg"));
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN,responseMap.get("errmsg")); throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN, responseMap.get("errmsg"));
} else { } else {
openid = responseMap.get("openid"); openid = responseMap.get("openid");
if (responseMap.containsKey("session_key")) { if (responseMap.containsKey("session_key")) {
...@@ -98,30 +98,45 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy { ...@@ -98,30 +98,45 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
} }
} }
Map<String, String> phoneParam = new HashMap<>(); Map<String, String> phoneParam = new HashMap<>();
boolean register =false; boolean register = false;
User user; User user;
phoneParam.put("code", loginParam.getPhoneCode()); 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、查询库中是否存在用户 //1、查询库中是否存在用户
user = userRepository.findByPhoneNoAndTenantId(wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId()); user = userRepository.findByPhoneNoAndTenantId(wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId());
//2、如果没有用户,新建一条 //2、如果没有用户,新建一条
if(user==null){ if (user == null) {
user = userRegisterService.register(sessionStruct.getRegisteredFrom(), wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId()); user = userRegisterService.register(sessionStruct.getRegisteredFrom(), wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId());
} }
if (user == null) { if (user == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER); throw new BizException(BizExceptionEnum.UN_EXIT_USER);
} }
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppIdAndTenantId(openid, loginParam.getAppId(), sessionStruct.getTenantId());
//如果微信用户为空,则补偿一条
if (wechatUserInfo == null) {
register = true; register = true;
}else{ wechatUserInfo = new WechatUserInfo();
throw new BizException(BizExceptionEnum.ERROR_WECHAT_LOGIN,wechatPhoneBean.getErrmsg()); 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()); 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(); LoginBean loginBean = new LoginBean();
if (authBean != null) { if (authBean != null) {
loginBean.setToken(authBean.getToken()); 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