Commit a10af207 authored by 唐峰's avatar 唐峰

Merge branch 'feature-migration-20230628' of...

Merge branch 'feature-migration-20230628' of git.quantgroup.cn:head_group/xyqb-user2 into feature-migration-20230628
parents 2b575fe3 a35ac5db
package cn.quantgroup.xyqb.event; package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.UserTag; import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.model.LoginBean;
import lombok.Builder;
import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
import org.springframework.context.annotation.Configuration;
/** /**
* @author :hongzhi * @author :hongzhi
...@@ -19,6 +15,10 @@ public class UserLoginEvent extends ApplicationEvent { ...@@ -19,6 +15,10 @@ public class UserLoginEvent extends ApplicationEvent {
private UserTag userTag; private UserTag userTag;
private String geetestId; private String geetestId;
/**
* 是否首次注册新用户
*/
private boolean register = false;
public UserLoginEvent(Object source) { public UserLoginEvent(Object source) {
super(source); super(source);
...@@ -33,4 +33,11 @@ public class UserLoginEvent extends ApplicationEvent { ...@@ -33,4 +33,11 @@ public class UserLoginEvent extends ApplicationEvent {
this.userTag = userTag; this.userTag = userTag;
this.geetestId = geetestId; this.geetestId = geetestId;
} }
public UserLoginEvent(Object source, UserTag userTag, String geetestId, boolean register) {
super(source);
this.userTag = userTag;
this.geetestId = geetestId;
this.register = register;
}
} }
...@@ -4,7 +4,6 @@ import cn.quantgroup.xyqb.entity.User; ...@@ -4,7 +4,6 @@ import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserTag; import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.repository.IUserTagRepository; import cn.quantgroup.xyqb.repository.IUserTagRepository;
import cn.quantgroup.xyqb.service.user.IUserService; import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.RedisLock;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -63,22 +62,11 @@ public class UserTagLoginEventListener implements ApplicationListener<UserLoginE ...@@ -63,22 +62,11 @@ public class UserTagLoginEventListener implements ApplicationListener<UserLoginE
User user = userService.findById(preTag.getUserId(), preTag.getTenantId()); User user = userService.findById(preTag.getUserId(), preTag.getTenantId());
//补签合同,如果需要补签 //只有非首次登录才需要补签
String lockKey = "user:signcontrac:".concat(user.getId().toString()); if(!userLoginEvent.isRegister()){
RedisLock lock = new RedisLock(redisTemplate, lockKey); userService.channelUserSignContract(user, userTag.getRegisteredFrom(), userTag.getTenantId());
try {
if (lock.lock()) {
//补签合同,如果需要补签 BlackHoleRegisteredEventListener 签署注册和隐私协议
//此处补签,对于合同中心,可能会重新签署,后续待合同中心处理并发问题或者重复签署逻辑
//Thread.sleep(2000);
userService.channelUserSignContract(user, userTag.getRegisteredFrom(), userTag.getTenantId());
}
} catch (Exception e) {
log.error("补签合同异常:事件:{},异常:{}", JSONObject.toJSONString(userLoginEvent), e.getMessage(), e);
} finally {
lock.unlock();
} }
} }
} }
} }
...@@ -5,11 +5,16 @@ import lombok.EqualsAndHashCode; ...@@ -5,11 +5,16 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class LoginBean extends AuthBean{ public class LoginBean extends AuthBean {
private Long userId; private Long userId;
private String openId; private String openId;
private String unionId; private String unionId;
private UserInfo info; private UserInfo info;
private Integer tenantId; private Integer tenantId;
/**
* 是否首次注册新用户
*/
private boolean register = false;
} }
...@@ -4,7 +4,6 @@ import cn.quantgroup.xyqb.controller.req.v2.LoginReq; ...@@ -4,7 +4,6 @@ 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.UserInfoEntity; import cn.quantgroup.xyqb.entity.UserInfoEntity;
import cn.quantgroup.xyqb.entity.UserTag; import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.event.UserLoginEvent; import cn.quantgroup.xyqb.event.UserLoginEvent;
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,9 +13,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct; ...@@ -14,9 +13,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.repository.IUserInfoRepository; import cn.quantgroup.xyqb.repository.IUserInfoRepository;
import cn.quantgroup.xyqb.repository.IUserRepository; import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder; import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -35,7 +32,7 @@ public class LoginContext { ...@@ -35,7 +32,7 @@ public class LoginContext {
private final Map<Integer, LoginStrategy> interloginStrategyMap = new HashMap<>(); private final Map<Integer, LoginStrategy> interloginStrategyMap = new HashMap<>();
public LoginContext(List<LoginStrategy> loginStrategies, ApplicationEventPublisher applicationEventPublisher, IWechatService wechatService, IUserRepository userRepository, IUserInfoRepository userInfoRepository) { public LoginContext(List<LoginStrategy> loginStrategies, ApplicationEventPublisher applicationEventPublisher, IUserRepository userRepository, IUserInfoRepository userInfoRepository) {
this.applicationEventPublisher = applicationEventPublisher; this.applicationEventPublisher = applicationEventPublisher;
this.userRepository = userRepository; this.userRepository = userRepository;
this.userInfoRepository = userInfoRepository; this.userInfoRepository = userInfoRepository;
...@@ -80,7 +77,7 @@ public class LoginContext { ...@@ -80,7 +77,7 @@ public class LoginContext {
geetestId = sessionStruct.getGeetestId(); geetestId = sessionStruct.getGeetestId();
} }
UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId); UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId, loginBean.getRegister());
applicationEventPublisher.publishEvent(userLoginEvent); applicationEventPublisher.publishEvent(userLoginEvent);
......
...@@ -78,6 +78,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy { ...@@ -78,6 +78,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
smsLoginParam.setPhone(jiGuangResponseParam.getPhone()); smsLoginParam.setPhone(jiGuangResponseParam.getPhone());
} }
LoginBean loginBean = new LoginBean();
User user = userService.findByPhoneWithCache(smsLoginParam.getPhone(), sessionStruct.getTenantId()); User user = userService.findByPhoneWithCache(smsLoginParam.getPhone(), sessionStruct.getTenantId());
//需要返回用户是否首次注册 //需要返回用户是否首次注册
...@@ -89,6 +90,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy { ...@@ -89,6 +90,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
//用户用户为空,则注册一个新用户 //用户用户为空,则注册一个新用户
if (user == null) { if (user == null) {
user = userRegisterService.register(sessionStruct.getRegisteredFrom(), smsLoginParam.getPhone(), sessionStruct.getTenantId()); user = userRegisterService.register(sessionStruct.getRegisteredFrom(), smsLoginParam.getPhone(), sessionStruct.getTenantId());
loginBean.setRegister(true);
} }
} }
...@@ -124,7 +126,6 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy { ...@@ -124,7 +126,6 @@ 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.AUTHLOGIN.ordinal(), sessionStruct.getTenantId(), false); AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.AUTHLOGIN.ordinal(), sessionStruct.getTenantId(), false);
LoginBean loginBean = new LoginBean();
if (authBean != null) { if (authBean != null) {
loginBean.setToken(authBean.getToken()); loginBean.setToken(authBean.getToken());
loginBean.setPhoneNo(authBean.getPhoneNo()); loginBean.setPhoneNo(authBean.getPhoneNo());
......
...@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.service.v2; ...@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.config.data.WechatConfiguration; import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.UserConstant;
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;
...@@ -21,9 +20,7 @@ import cn.quantgroup.xyqb.repository.IWeChatUserRepository; ...@@ -21,9 +20,7 @@ import cn.quantgroup.xyqb.repository.IWeChatUserRepository;
import cn.quantgroup.xyqb.service.register.IUserRegisterService; import cn.quantgroup.xyqb.service.register.IUserRegisterService;
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;
import cn.quantgroup.xyqb.util.StringUtils;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -107,12 +104,13 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy { ...@@ -107,12 +104,13 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
boolean register = false; boolean register = false;
User user; User user;
phoneParam.put("code", loginParam.getPhoneCode()); phoneParam.put("code", loginParam.getPhoneCode());
AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS+ sessionStruct.getTenantId()+":"+loginParam.getAppId()),AccessTokenResponse.class); AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS + sessionStruct.getTenantId() + ":" + loginParam.getAppId()), AccessTokenResponse.class);
if(Objects.isNull(accessTokenResponse)){ if (Objects.isNull(accessTokenResponse)) {
throw new BizException(BizExceptionEnum.EXPIRE_WECHAT_TOKEN); throw new BizException(BizExceptionEnum.EXPIRE_WECHAT_TOKEN);
} }
WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessTokenResponse.getAccessToken(), phoneParam); WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessTokenResponse.getAccessToken(), phoneParam);
LoginBean loginBean = new LoginBean();
if (wechatPhoneBean.getErrcode() == 0) { if (wechatPhoneBean.getErrcode() == 0) {
//1、查询库中是否存在用户 //1、查询库中是否存在用户
...@@ -120,6 +118,7 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy { ...@@ -120,6 +118,7 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
//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());
loginBean.setRegister(true);
} }
if (user == null) { if (user == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER); throw new BizException(BizExceptionEnum.UN_EXIT_USER);
...@@ -146,8 +145,7 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy { ...@@ -146,8 +145,7 @@ public class WechatMiniPhoneLoginStrategy 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.WECHATLOGIN.ordinal(), sessionStruct.getTenantId(),false); AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(), sessionStruct.getTenantId(), false);
LoginBean loginBean = new LoginBean();
loginBean.setOpenId(openid); loginBean.setOpenId(openid);
loginBean.setUnionId(unionId); loginBean.setUnionId(unionId);
if (authBean != null) { if (authBean != null) {
......
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