Commit 68ce0605 authored by zhouqian's avatar zhouqian

some changes

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