Commit 68ce0605 authored by zhouqian's avatar zhouqian

some changes

parent 8bdc4b7b
......@@ -42,7 +42,9 @@ public interface Constants {
interface Channel {
long LKB = 1; // 量化派
long JR58 = 175; // 58金融
long BAITIAO = 222L;
String LKB_CODE = "0002"; // 量化派channnel_code
long WECHAT = 198L;
}
interface Session{
......
package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.page.IPageService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import lombok.extern.slf4j.Slf4j;
......@@ -39,12 +43,20 @@ public class WeChatController {
@Autowired
private IMerchantService merchantService;
@Autowired
private ISessionService sessionService;
@Autowired
private IUserService userService;
@Autowired
private IPageService pageService;
// https://passport.xyqb.com/landing?key=xxx&target=cashTarget5&registerFrom=198&channelId=%d
@Value("${xyqb-user.ui}")
private String userUIAddr;
/**
* 开发者资质认证,有必要吗?
*
......@@ -162,39 +174,81 @@ public class WeChatController {
AccessTokenResponse token = wechatService.getToken(code);
if (token == null) {
// todo: 让用户登录,不关联微信, 构造不关联微信的url
response.setHeader("Location", redirectUrl);
response.setStatus(301);
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant);
return;
}
WechatUserInfo userInfo = wechatService.getWechatUserInfoFromWechatServer(token.getAccessToken(), token.getOpenId());
if (userInfo == null) {
// todo: 让用户登录,不关联微信, 构造不关联微信的url
response.setHeader("Location", redirectUrl);
response.setStatus(301);
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant);
return;
}
WechatUserInfo userInfoInDb = wechatService.findWechatUserInfoFromDb(userInfo.getOpenId());
// welcome 首次登录
if (userInfoInDb == null) {
// todo: 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
// 微信用户首次登录界面, 首先保存userInfo, 跳入到微信注册登录界面
userInfo = wechatService.saveWechatUserInfo(userInfo);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfo);
return;
}
if (userInfoInDb.getUserId() == null) {
// todo: 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
response.setHeader("Location", redirectUrl);
response.setStatus(301);
// 用户已经微信登录了,但是没有关联信用钱包,跳转到注册页面
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb);
return;
}
User user = userService.findById(userInfoInDb.getUserId());
if (user == null) {
redirectWechatLoginUrlWithoutLogin(response, merchant, userInfoInDb);
return;
}
// 已经关联了用户
// todo: create session, 登进去,该怎么玩怎么玩。
createUserSession(userInfo, merchant);
// create session, 登进去,该怎么玩怎么玩。
String redirectUrl = createUserSession(user, merchant);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private String createUserSession(User user, Merchant merchant) {
if ("baitiao".equals(merchant.getName())) {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget5", Constants.Channel.BAITIAO);
} else {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget4", 1L);
}
}
private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId) {
AuthBean authBean = sessionService.createSession(channelId, Constants.Channel.WECHAT, "", user, merchant);
return userUIAddr + "/landing?token=" + authBean.getToken() + "&registerFrom=198&channelId=" + channelId +"&key=" + merchant.getName() +"&target=" + target;
}
private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo) {
String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private void redirectNormalUrl(HttpServletResponse response, Merchant merchant) {
String redirectUrl = assembleNormalRedirectUrl(merchant);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private String assembleNormalRedirectUrl(Merchant merchant) {
if ("baitiao".equals(merchant.getName())) {
return userUIAddr + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222";
} else {
return userUIAddr + "/landing?key=xyqb&target=cashTarget4&registerFrom=198&channelId=1";
}
}
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo) {
if ("baitiao".equals(merchant.getName())) {
return userUIAddr + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
} else {
return userUIAddr + "/landing?key=xyqb&target=cashTarget4&registerFrom=198&channelId=1&isWechat=true&openId=" + userInfo.getOpenId();
}
}
}
......@@ -111,7 +111,7 @@ public class UserController implements IBaseController {
throw new UserNotExistException("用户未找到");
}
}
return createSession(channelId, createdFrom, appChannel, user, merchant);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
// return createSession(channelId, createdFrom, appChannel, user);
}
......@@ -378,38 +378,10 @@ public class UserController implements IBaseController {
if (user == null) {
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
} else {
return createSession(channelId, createdFrom, appChannel, user, merchant);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
}
}
private JsonResult createSession(Long channelId, Long createdFrom, String appChannel, User user, Merchant merchant) {
AuthBean authBean = new AuthBean();
LoginProperties properties = new LoginProperties();
properties.setAppChannel(appChannel);
properties.setMerchantName(merchant.getName());
properties.setChannelId(channelId);
properties.setCreatedFrom(createdFrom);
//找到用户
String sessionId = sessionService.findSessionIdByUserIdLoginProperties(user.getId(), properties);
// String sessionId = sessionService.findSessionIdByUserIdAndMerchant(user.getId(), merchant);
if(StringUtils.isNotEmpty(sessionId)) {
SessionStruct sessionStruct = sessionService.findSessionBySessionId(sessionId);
sessionStruct.setAttribute("channelId", String.valueOf(channelId));
sessionStruct.setAttribute("createdFrom", String.valueOf(createdFrom));
sessionStruct.setAttribute("appChannel", String.valueOf(appChannel));
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
LOGGER.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
return new JsonResult(authBean);
}
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, properties);
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
LOGGER.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
return new JsonResult(authBean);
}
private User verificateUserNameAndPassword(HttpServletRequest request) {
String credential = request.getHeader("authorization");
if(!credential.startsWith("Basic ")){
......@@ -449,7 +421,7 @@ public class UserController implements IBaseController {
User user = userService.findByUuidInDb(userId);
//用户信息存在,更新session中的最后访问时间,重新写入缓存.
if(null != user) {
return createSession(channelId, createdFrom, appChannel, user, merchant);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
} else {
return JsonResult.buildErrorStateResult("登录失败", null);
}
......
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.service.session;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.function.OneArgFunction;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.session.SessionValue;
......@@ -11,9 +12,10 @@ import cn.quantgroup.xyqb.model.session.SessionValue;
* Created by 11 on 2016/12/28.
*/
public interface ISessionService {
SessionStruct createSessionAndPersistInCache(User user, LoginProperties loginProperties);
AuthBean createSession(Long channelId, Long createdFrom, String appChannel, User user, Merchant merchant);
SessionStruct createSessionAndPersist(User user, LoginProperties loginProperties);
String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties);
......
......@@ -4,11 +4,14 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.function.OneArgFunction;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.session.ISessionService;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -25,6 +28,7 @@ import java.util.concurrent.TimeUnit;
*
* Created by 11 on 2016/12/28.
*/
@Slf4j
@Service
public class SessionServiceImpl implements ISessionService{
......@@ -33,8 +37,32 @@ public class SessionServiceImpl implements ISessionService{
private RedisTemplate<String, String> stringRedisTemplate;
@Override
public SessionStruct createSessionAndPersistInCache(User user, LoginProperties properties) {
return createSessionAndPersist(user, properties);
public AuthBean createSession(Long channelId, Long createdFrom, String appChannel, User user, Merchant merchant) {
AuthBean authBean = new AuthBean();
LoginProperties properties = new LoginProperties();
properties.setAppChannel(appChannel);
properties.setMerchantName(merchant.getName());
properties.setChannelId(channelId);
properties.setCreatedFrom(createdFrom);
//找到用户
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
// String sessionId = sessionService.findSessionIdByUserIdAndMerchant(user.getId(), merchant);
if(org.apache.commons.lang.StringUtils.isNotEmpty(sessionId)) {
SessionStruct sessionStruct = findSessionBySessionId(sessionId);
sessionStruct.setAttribute("channelId", String.valueOf(channelId));
sessionStruct.setAttribute("createdFrom", String.valueOf(createdFrom));
sessionStruct.setAttribute("appChannel", String.valueOf(appChannel));
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
return authBean;
}
SessionStruct sessionStruct = createSessionAndPersist(user, properties);
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
return authBean;
}
@Override
......
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