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;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.model.LoginBean;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.annotation.Configuration;
/**
* @author :hongzhi
......@@ -19,6 +15,10 @@ public class UserLoginEvent extends ApplicationEvent {
private UserTag userTag;
private String geetestId;
/**
* 是否首次注册新用户
*/
private boolean register = false;
public UserLoginEvent(Object source) {
super(source);
......@@ -33,4 +33,11 @@ public class UserLoginEvent extends ApplicationEvent {
this.userTag = userTag;
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;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.repository.IUserTagRepository;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.RedisLock;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -63,22 +62,11 @@ public class UserTagLoginEventListener implements ApplicationListener<UserLoginE
User user = userService.findById(preTag.getUserId(), preTag.getTenantId());
//补签合同,如果需要补签
String lockKey = "user:signcontrac:".concat(user.getId().toString());
RedisLock lock = new RedisLock(redisTemplate, lockKey);
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();
//只有非首次登录才需要补签
if(!userLoginEvent.isRegister()){
userService.channelUserSignContract(user, userTag.getRegisteredFrom(), userTag.getTenantId());
}
}
}
}
......@@ -5,11 +5,16 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class LoginBean extends AuthBean{
public class LoginBean extends AuthBean {
private Long userId;
private String openId;
private String unionId;
private UserInfo info;
private Integer tenantId;
/**
* 是否首次注册新用户
*/
private boolean register = false;
}
......@@ -4,7 +4,6 @@ import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserInfoEntity;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.event.UserLoginEvent;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
......@@ -14,9 +13,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.repository.IUserInfoRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
......@@ -35,7 +32,7 @@ public class LoginContext {
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.userRepository = userRepository;
this.userInfoRepository = userInfoRepository;
......@@ -80,7 +77,7 @@ public class LoginContext {
geetestId = sessionStruct.getGeetestId();
}
UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId);
UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId, loginBean.getRegister());
applicationEventPublisher.publishEvent(userLoginEvent);
......
......@@ -78,6 +78,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
smsLoginParam.setPhone(jiGuangResponseParam.getPhone());
}
LoginBean loginBean = new LoginBean();
User user = userService.findByPhoneWithCache(smsLoginParam.getPhone(), sessionStruct.getTenantId());
//需要返回用户是否首次注册
......@@ -89,6 +90,7 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
//用户用户为空,则注册一个新用户
if (user == null) {
user = userRegisterService.register(sessionStruct.getRegisteredFrom(), smsLoginParam.getPhone(), sessionStruct.getTenantId());
loginBean.setRegister(true);
}
}
......@@ -124,7 +126,6 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy {
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.AUTHLOGIN.ordinal(), sessionStruct.getTenantId(), false);
LoginBean loginBean = new LoginBean();
if (authBean != null) {
loginBean.setToken(authBean.getToken());
loginBean.setPhoneNo(authBean.getPhoneNo());
......
......@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User;
......@@ -21,9 +20,7 @@ import cn.quantgroup.xyqb.repository.IWeChatUserRepository;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;
......@@ -107,12 +104,13 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
boolean register = false;
User user;
phoneParam.put("code", loginParam.getPhoneCode());
AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS+ sessionStruct.getTenantId()+":"+loginParam.getAppId()),AccessTokenResponse.class);
if(Objects.isNull(accessTokenResponse)){
throw new BizException(BizExceptionEnum.EXPIRE_WECHAT_TOKEN);
AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS + sessionStruct.getTenantId() + ":" + loginParam.getAppId()), AccessTokenResponse.class);
if (Objects.isNull(accessTokenResponse)) {
throw new BizException(BizExceptionEnum.EXPIRE_WECHAT_TOKEN);
}
WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessTokenResponse.getAccessToken(), phoneParam);
LoginBean loginBean = new LoginBean();
if (wechatPhoneBean.getErrcode() == 0) {
//1、查询库中是否存在用户
......@@ -120,6 +118,7 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
//2、如果没有用户,新建一条
if (user == null) {
user = userRegisterService.register(sessionStruct.getRegisteredFrom(), wechatPhoneBean.getPhone_info().getPurePhoneNumber(), sessionStruct.getTenantId());
loginBean.setRegister(true);
}
if (user == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_USER);
......@@ -146,8 +145,7 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
}
LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(), sessionStruct.getTenantId(),false);
LoginBean loginBean = new LoginBean();
AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.WECHATLOGIN.ordinal(), sessionStruct.getTenantId(), false);
loginBean.setOpenId(openid);
loginBean.setUnionId(unionId);
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