Commit 57e9afca authored by 技术部-任文超's avatar 技术部-任文超

完成研发,提交自测

parent d491a5c4
......@@ -325,6 +325,11 @@
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
<dependency>
<groupId>rulai-acolyte</groupId>
<artifactId>acolyte-buddhistscriptures</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
<build>
......
package cn.quantgroup.xyqb.config.swagger;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.google.common.base.Predicates;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import com.google.common.base.Predicates;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
......@@ -54,16 +49,5 @@ public class SwaggerConfig {
.build();
}
@Component
@Primary
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
setSerializationInclusion(JsonInclude.Include.NON_NULL);
configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
enable(SerializationFeature.INDENT_OUTPUT);
}
}
}
package cn.quantgroup.xyqb.controller.external.user;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.session.LoginInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
......@@ -12,17 +26,7 @@ import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ERROR;
......@@ -90,11 +94,7 @@ public class AppController implements IBaseController {
if (merchant == null) {
return JsonResult.buildErrorStateResult("无效的商户", null);
}
LoginProperties loginProperties = new LoginProperties();
loginProperties.setMerchantName(merchant.getName());
loginProperties.setChannelId(channelId);
loginProperties.setCreatedFrom(registerFrom);
loginProperties.setAppChannel(appChannel);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, merchant.getId(), merchant.getName());
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, loginProperties);
AuthBean bean = new AuthBean();
bean.setToken(sessionStruct.getSid());
......@@ -148,11 +148,7 @@ public class AppController implements IBaseController {
if (merchant == null) {
return JsonResult.buildErrorStateResult("无效的商户", null);
}
LoginProperties loginProperties = new LoginProperties();
loginProperties.setMerchantName(merchant.getName());
loginProperties.setChannelId(channelId);
loginProperties.setCreatedFrom(registerFrom);
loginProperties.setAppChannel(appChannel);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, merchant.getId(), merchant.getName());
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, loginProperties);
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(new UserRet(user));
......@@ -163,14 +159,6 @@ public class AppController implements IBaseController {
context.setAppChannel(appChannel);
loginInfo.setLoginContext(context);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel, channelId);
/*
* 部分免密渠道登录统计,用户中心不需识别,由统计平台来过滤
* 贷款导航(84660);壹账通H5(159384)
*/
user.setRegisteredFrom(registerFrom);
UserStatistics statistics = new UserStatistics(user, null, 4, channelId);
//增加登陆统计发送
MqUtils.sendLoanVest(statistics);
return JsonResult.buildSuccessResult("", loginInfo);
}
......@@ -207,10 +195,7 @@ public class AppController implements IBaseController {
if (!user.getEnable()) {
return JsonResult.buildErrorStateResult("登录失败", null);
}
LoginProperties loginProperties = new LoginProperties();
loginProperties.setChannelId(channelId);
loginProperties.setCreatedFrom(registerFrom);
loginProperties.setAppChannel(appChannel);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, null, "");
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, loginProperties);
AuthBean bean = new AuthBean();
bean.setToken(sessionStruct.getSid());
......
package cn.quantgroup.xyqb.controller.external.user;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.Min;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Maps;
import com.quantgroup.acolyte.buddhistscriptures.pojo.Login;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.tech.db.DSType;
import cn.quantgroup.tech.db.TargetDataSource;
import cn.quantgroup.user.enums.Relation;
......@@ -7,6 +41,7 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.xyqb.event.StatisticsEvent;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.service.api.IUserApiService;
......@@ -21,31 +56,6 @@ import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*;
import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.validator.ChineseName;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Maps;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.Min;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -85,6 +95,8 @@ public class InnerController implements IBaseController {
private ISmsService smsService;
@Autowired
private IUserRegisterService userRegisterService;
@Resource
private ApplicationEventPublisher applicationEventPublisher;
private static final char[] PWD_BASE = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
......@@ -213,11 +225,7 @@ public class InnerController implements IBaseController {
user.setUuid(uuid);
user.setPassword(password);
user = userService.saveUser(user);
UserRet userRet = null;
if (user != null) {
userRet = MqUtils.sendRegisterMessage(registeredFrom, null, user);
}
return JsonResult.buildSuccessResult(null, userRet);
return JsonResult.buildSuccessResult(null, new UserRet(user));
}
/**
......@@ -1093,7 +1101,7 @@ public class InnerController implements IBaseController {
}
/**
* 验证手机号和验证码是否匹配
* 技术网关 - 验证手机号和验证码是否匹配
* 仅供可信任的内部服务调用,不执行限次记数、销毁等安全策略
* 注意:只使用于快速登录类似场景调用
*
......@@ -1145,9 +1153,13 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("用户不存在", "");
}
}
//增加登陆统计发送
// 推送老的登陆统计信息
UserStatistics statistics = new UserStatistics(user, dimension, 3, channelId);
MqUtils.sendLoanVest(statistics);
// 发布新的登录统计信息事件
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Login login = new Login(user.getId(), createdFrom, channelId, IPUtil.getRemoteIP(request), 3, System.currentTimeMillis());
applicationEventPublisher.publishEvent(new StatisticsEvent(this, login));
return JsonResult.buildSuccessResult("校验成功", new UserRet(user));
}
......
package cn.quantgroup.xyqb.controller.external.user;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.IBaseController;
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.LoginProperties;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
......@@ -13,28 +40,6 @@ import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.EmojiUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
* Created by 11 on 2017/1/17.
......@@ -291,19 +296,20 @@ public class WeChatController implements IBaseController {
private String createUserSession(User user, Merchant merchant, String redirect, String domain, Long registerFrom) {
LOGGER.info("[WeChatController][createUserSession]微信授权及跳转:user:{},merchant:{},redirect:{},domain:{},registerFrom:{}", user, merchant, redirect, domain, registerFrom);
LoginProperties loginProperties = new LoginProperties("", 4, Constants.Channel.WECHAT, registerFrom, String.valueOf(Constants.Channel.WECHAT), merchant.getId(), merchant.getName());
if (StringUtils.isEmpty(redirect) || "redirect".equals(redirect)) {
LOGGER.info("微信登录:redirect为null,走正常流程.");
if ("baitiao".equals(merchant.getName())) {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget5", Constants.Channel.BAITIAO, domain, Constants.Channel.WECHAT);
} else if ("wechat-pay".equals(merchant.getName())) {
AuthBean authBean = sessionService.createSession(Constants.Channel.WECHAT, registerFrom, "", user, merchant);
AuthBean authBean = sessionService.createSession(user, loginProperties);
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + Constants.Channel.WECHAT + "&key=" + merchant.getName() + "&target=cashTarget5";
} else {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget4", 1L, domain, registerFrom);
}
} else if ("local".equals(redirect)) {
LOGGER.info("微信登录:redirect不为null,创建session跳到指定前端页面.");
AuthBean authBean = sessionService.createSession(Constants.Channel.WECHAT, Constants.Channel.WECHAT, "", user, merchant);
AuthBean authBean = sessionService.createSession(user, loginProperties);
LOGGER.info("微信登录:跳转地址{}", domain + "/weixin/callback?phoneNo=" + user.getPhoneNo() + "&token=" + authBean.getToken());
Long channelId = "baitiao".equals(merchant.getName()) ? 222L : 1L;
String target = "baitiao".equals(merchant.getName()) ? "cashTarget5" : "cashTarget4";
......@@ -314,7 +320,8 @@ public class WeChatController implements IBaseController {
}
private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId, String domain, Long registerFrom) {
AuthBean authBean = sessionService.createSession(channelId, registerFrom, "", user, merchant);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, String.valueOf(Constants.Channel.WECHAT), merchant.getId(), merchant.getName());
AuthBean authBean = sessionService.createSession(user, loginProperties);
LOGGER.info("[WeChatController][loginInWechatWithSessionCreated]微信授权及跳转:user:{},merchant:{},target:{},channelId:{},domain:{},registerFrom:{}", user, merchant, target, channelId, domain, registerFrom);
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target;
}
......
......@@ -36,7 +36,7 @@ public class AuthInfoController implements IBaseController {
context.setChannelId(sessionStruct.getValues().getLoginProperties().getChannelId());
context.setCreatedFrom(sessionStruct.getValues().getLoginProperties().getCreatedFrom());
context.setAppChannel(sessionStruct.getValues().getLoginProperties().getAppChannel());
context.setBtMerchantId(sessionStruct.getValues().getLoginProperties().getBtMerchantId());
context.setBtMerchantId(sessionStruct.getValues().getLoginProperties().getMerchantId());
//有ThreadLocal不释放的问题,不可再使用原来方式了
loginInfo.setLoginContext(context);
log.info("[/auth/info/login] SessionStruct数据:{}, LoginInfo数据:{}", JSONObject.toJSONString(sessionStruct), JSONObject.toJSONString(loginInfo));
......
package cn.quantgroup.xyqb.controller.internal.user;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.tech.util.TechEnvironment;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaFiniteValidator;
......@@ -11,8 +33,8 @@ import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserModel;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
......@@ -25,24 +47,6 @@ import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* Http服务接口:用户注册、登录、重置密码
......@@ -198,10 +202,8 @@ public class UserController implements IBaseController {
if (!wechatRelateUserIfNecessary(user, request)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
//增加登陆统计发送
UserStatistics statistics = new UserStatistics(user, dimension, 3, channelId);
MqUtils.sendLoanVest(statistics);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
LoginProperties loginProperties = new LoginProperties("", 3, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName());
return new JsonResult(sessionService.createSession(user, loginProperties));
}
/**
......@@ -391,11 +393,8 @@ public class UserController implements IBaseController {
} else if (!wechatRelateUserIfNecessary(user, request)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
//增加登陆统计发送
UserStatistics statistics = new UserStatistics(user, dimension, 1, channelId);
MqUtils.sendLoanVest(statistics);
log.info("用户登陆成功phonNo:{},当前ip:{},用户登陆信息:{}", user.getPhoneNo(), IPUtil.getRemoteIP(request), statistics);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
LoginProperties loginProperties = new LoginProperties("", 1, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName());
return new JsonResult(sessionService.createSession(user, loginProperties));
}
private User verificateUserNameAndPassword(HttpServletRequest request) {
......@@ -455,11 +454,9 @@ public class UserController implements IBaseController {
} else if (!wechatRelateUserIfNecessary(user, request)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
//增加登陆统计发送
UserStatistics statistics = new UserStatistics(user, dimension, 4, channelId);
MqUtils.sendLoanVest(statistics);
LoginProperties loginProperties = new LoginProperties("", 4, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName());
//更新session
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
return new JsonResult(sessionService.createSession(user, loginProperties));
}
/**
......
package cn.quantgroup.xyqb.event;
import java.sql.Timestamp;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import com.quantgroup.acolyte.buddhistscriptures.pojo.UserRealInfo;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.IdCardInfo;
......@@ -8,23 +21,17 @@ import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
@Slf4j
@Component
public class DetailRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
@Resource
private IIdCardService idCardService;
@Autowired
@Resource
private IUserDetailService userDetailService;
@Resource
private ApplicationEventPublisher applicationEventPublisher;
@Override
public void onApplicationEvent(RegisterEvent event) {
......@@ -54,5 +61,8 @@ public class DetailRegisteredEventListener implements ApplicationListener<Regist
userDetail.setUserId(user.getId());
userDetail.setGender(cardInfo.getGender());
userDetailService.saveUserDetail(userDetail);
// 发送实名登记统计消息
UserRealInfo userRealInfo = new UserRealInfo(userDetail.getUserId(), userDetail.getName(), userDetail.getIdNo(), userDetail.getIdType().ordinal());
applicationEventPublisher.publishEvent(new StatisticsEvent(this, userRealInfo));
}
}
package cn.quantgroup.xyqb.event;
import javax.annotation.Resource;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import com.quantgroup.acolyte.buddhistscriptures.pojo.Register;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.util.MqUtils;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 发mq, 目前只有数据可视化分析系统需要这个
......@@ -13,6 +19,9 @@ import org.springframework.stereotype.Component;
*/
@Component
public class MQRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Resource
private ApplicationEventPublisher applicationEventPublisher;
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
......@@ -23,7 +32,10 @@ public class MQRegisteredEventListener implements ApplicationListener<RegisterEv
String dimension = userRegisterParam.getDimension();
User user = userRegisterParam.getUser();
if (user != null) {
// 发送注册成功统计消息
MqUtils.sendRegisterMessage(channelId, dimension, user);
Register register = new Register(user.getUuid(), user.getId(), user.getPhoneNo(), user.getRegisteredFrom(), channelId, dimension, user.getCreatedAt().getTime());
applicationEventPublisher.publishEvent(new StatisticsEvent(this, register));
}
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import org.springframework.context.ApplicationEvent;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
import cn.quantgroup.xyqb.model.UserRegisterParam;
/**
* 注册成功发送事件
......@@ -13,8 +15,6 @@ import org.springframework.context.ApplicationEvent;
@Getter
@Setter
public class RegisterEvent extends ApplicationEvent {
private UserRegisterParam userRegisterParam;
/**
......
package cn.quantgroup.xyqb.event;
import org.springframework.context.ApplicationEvent;
import com.quantgroup.acolyte.buddhistscriptures.pojo.Login;
import com.quantgroup.acolyte.buddhistscriptures.pojo.Register;
import com.quantgroup.acolyte.buddhistscriptures.pojo.UserRealInfo;
import lombok.Getter;
import lombok.Setter;
/**
* 统计事件
*
* @author renwc
* @date 2018-06-26
*/
@Getter
@Setter
public class StatisticsEvent extends ApplicationEvent {
/**
* 登录统计
*/
private Login login;
/**
* 注册统计
*/
private Register register;
/**
* 实名统计
*/
private UserRealInfo userRealInfo;
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public StatisticsEvent(Object source) {
super(source);
}
public StatisticsEvent(Object source, Login login) {
super(source);
this.login = login;
}
public StatisticsEvent(Object source, Register register) {
super(source);
this.register = register;
}
public StatisticsEvent(Object source, UserRealInfo userRealInfo) {
super(source);
this.userRealInfo = userRealInfo;
}
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.Constants;
import java.io.Serializable;
import lombok.Data;
import cn.quantgroup.xyqb.Constants;
/**
* Created by Miraculous on 15/7/5.
*/
public class JsonResult implements Serializable {
@Data
public class JsonResult<T> implements Serializable {
private static final long serialVersionUID = -1L;
private static final Long SUCCESS_CODE = 0L;
......@@ -25,33 +30,33 @@ public class JsonResult implements Serializable {
// 业务错误码
private String businessCode = "0000";
private Object data = null;
private T data = null;
public JsonResult() {
}
public JsonResult(T data) {
this.data = data;
}
/**
* @param msg
* @param code
* @param data
*/
public JsonResult(String msg, Long code, Object data) {
public JsonResult(String msg, Long code, T data) {
this.msg = msg;
this.code = String.format(Constants.ZERO_FILL_TEMPLATE, code);
this.data = data;
}
public JsonResult(String msg, Long code, Object data, Long businessCode) {
public JsonResult(String msg, Long code, T data, Long businessCode) {
this.msg = msg;
this.code = String.format(Constants.ZERO_FILL_TEMPLATE, code);
this.data = data;
this.businessCode = String.format(Constants.ZERO_FILL_TEMPLATE, businessCode);
}
public JsonResult(Object data) {
this.data = data;
}
/**
* 构造成功的JsonResult
*
......@@ -59,14 +64,18 @@ public class JsonResult implements Serializable {
* @param data Object
* @return JsonResult
*/
public static JsonResult buildSuccessResult(String msg, Object data) {
public static<T> JsonResult<T> buildSuccessResult(String msg, T data) {
return new JsonResult(msg, SUCCESS_CODE, data, SUCCESS_BUSSINESS_CODE);
}
public static JsonResult buildSuccessResult(String msg, Object data, Long businessCode) {
public static<T> JsonResult<T> buildSuccessResult(String msg, T data, Long businessCode) {
return new JsonResult(msg, SUCCESS_CODE, data, businessCode);
}
public static<T> JsonResult<T> buildSuccessResult(String msg) {
return new JsonResult(msg, SUCCESS_CODE, null, SUCCESS_BUSSINESS_CODE);
}
/**
* 构造状态不正确的JsonResult
*
......@@ -74,48 +83,27 @@ public class JsonResult implements Serializable {
* @param data Object
* @return JsonResult
*/
public static JsonResult buildErrorStateResult(String msg, Object data) {
public static<T> JsonResult<T> buildErrorStateResult(String msg, T data) {
return new JsonResult(msg, SUCCESS_CODE, data, ERROR_BUSSINESS_CODE);
}
public static JsonResult buildErrorStateResult(String msg, Object data, Long businessCode) {
public static<T> JsonResult<T> buildErrorStateResult(String msg, T data, Long businessCode) {
return new JsonResult(msg, SUCCESS_CODE, data, businessCode);
}
public static JsonResult buildFatalErrorStateResult(String msg, Object data, Long businessCode) {
public static<T> JsonResult<T> buildFatalErrorStateResult(String msg, T data, Long businessCode) {
return new JsonResult(msg, ERROR_STATE_CODE, data, businessCode);
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getBusinessCode() {
return businessCode;
}
public void setBusinessCode(String businessCode) {
this.businessCode = businessCode;
/**
* 判断当前JsonResult是否是成功
*
* @return true=是成功,false=失败
*/
public boolean isSuccess() {
boolean codeSuccess = String.format(Constants.ZERO_FILL_TEMPLATE, SUCCESS_CODE).equals(this.getCode());
boolean bussSuccess = String.format(Constants.ZERO_FILL_TEMPLATE, SUCCESS_BUSSINESS_CODE).equals(this.getBusinessCode());
return bussSuccess && codeSuccess;
}
@Override
......@@ -127,4 +115,5 @@ public class JsonResult implements Serializable {
", data=" + data +
'}';
}
}
package cn.quantgroup.xyqb.model;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* Created by Miraculous on 2017/1/6.
*/
@Data
@AllArgsConstructor
public class LoginProperties {
/**
* 维度
* 形如:"app|app名称|平台|应用市场名字"
* 示例:"dimension":"app|shandiandai|IOS|sdd-Appstore"
*/
private String dimension;
/**
* 1-登录
* 2-注册
* 3-快捷登录
* 4-免密登录
*/
private int action;
/**
* 注册渠道号
*/
private Long channelId = 1L;
private Long createdFrom = 1L;
private String appChannel = "";
private String merchantName;
private Long btMerchantId = 1L;
private Long merchantId = 1L;
private String merchantName = "";
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
/**
* Created by liqing on 2017/12/4 0004.
......@@ -29,7 +30,7 @@ public class UserRegisterParam {
private String name; // 姓名
private Long channelId; // 业务渠道
private Long btRegisterChannelId; // 白条渠道
private String dimension;
private String dimension; // 维度
private Address address; // 地址
private String contacts; // 联系人
private User user; // 注册生成的用户,也是返回结果
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import java.io.Serializable;
import java.util.Objects;
import lombok.Data;
import java.io.Serializable;
import cn.quantgroup.xyqb.entity.User;
/**
* Created by 11 on 2016/12/20.
......@@ -35,6 +37,9 @@ public class UserRet implements Serializable {
private Long updatedAt;
public UserRet(User user) {
if(Objects.isNull(user)){
return;
}
Long createTimeStamp = user.getCreatedAt().getTime();
Long updateTimeStamp = user.getUpdatedAt().getTime();
this.setId(user.getId());
......
package cn.quantgroup.xyqb.service.register;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.util.ApplicationContextHolder;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import java.util.Map;
/**
* Created by liqing on 2017/12/5 0005.
*/
@Slf4j
public abstract class AbstractUserRegisterService implements IUserRegisterService, ApplicationContextAware {
private static Map<String, AbstractUserRegisterHandler> userRegisterHandlerMap = Maps.newConcurrentMap();
private static final String USER_REGISTER_HANDLER_DEFAULT_KEY = "register_default";
private static final String USER_REGISTER_HANDLER_EXT_KEY = "register_ext";
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// 创建默认注册流程
createDefaultUserRegisterHandler(applicationContext);
// 创建扩展注册流程
createExtUserRegisterHandler(applicationContext);
}
/**
* 创建默认注册流程
* 1、保存基本信息 - 2、保存用户详情 - 3、保存白条信息 - 4、发送短信 - 5、发送mq
*
* @param applicationContext
*/
protected AbstractUserRegisterHandler createDefaultUserRegisterHandler(ApplicationContext applicationContext) {
AbstractUserRegisterHandler baseUserRegisterHandler = applicationContext.getBean("baseUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler detailUserRegisterHandler = applicationContext.getBean("detailUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler btUserRegisterHandler = applicationContext.getBean("btUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler smsUserRegisterHandler = applicationContext.getBean("smsUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler mqUserRegisterHandler = applicationContext.getBean("mqUserRegisterHandler", AbstractUserRegisterHandler.class);
baseUserRegisterHandler.setSuccessor(detailUserRegisterHandler);
detailUserRegisterHandler.setSuccessor(btUserRegisterHandler);
btUserRegisterHandler.setSuccessor(smsUserRegisterHandler);
smsUserRegisterHandler.setSuccessor(mqUserRegisterHandler);
userRegisterHandlerMap.put(USER_REGISTER_HANDLER_DEFAULT_KEY, baseUserRegisterHandler);
return baseUserRegisterHandler;
}
/**
* 创建扩展注册流程
* 1、保存基本信息 - 2、保存用户详情 - 3、保存白条信息 - 4、保存用户地址 - 5、保存联系人
* 5、发送短信 - 6、发送mq
*
* @param applicationContext
*/
protected AbstractUserRegisterHandler createExtUserRegisterHandler(ApplicationContext applicationContext) {
AbstractUserRegisterHandler baseUserRegisterHandler = applicationContext.getBean("baseUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler detailUserRegisterHandler = applicationContext.getBean("detailUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler btUserRegisterHandler = applicationContext.getBean("btUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler smsUserRegisterHandler = applicationContext.getBean("smsUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler mqUserRegisterHandler = applicationContext.getBean("mqUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler addressUserRegisterHandler = applicationContext.getBean("addressUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler contactUserRegisterHandler = applicationContext.getBean("contactUserRegisterHandler", AbstractUserRegisterHandler.class);
baseUserRegisterHandler.setSuccessor(detailUserRegisterHandler);
detailUserRegisterHandler.setSuccessor(btUserRegisterHandler);
btUserRegisterHandler.setSuccessor(addressUserRegisterHandler);
addressUserRegisterHandler.setSuccessor(contactUserRegisterHandler);
contactUserRegisterHandler.setSuccessor(smsUserRegisterHandler);
smsUserRegisterHandler.setSuccessor(mqUserRegisterHandler);
userRegisterHandlerMap.put(USER_REGISTER_HANDLER_EXT_KEY, baseUserRegisterHandler);
return baseUserRegisterHandler;
}
/**
* 获取默认注册流程
*
* @return
*/
protected AbstractUserRegisterHandler getDefaultUserRegisterHandler() {
AbstractUserRegisterHandler curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_DEFAULT_KEY);
if (curUserRegisterHandler == null) {
synchronized (USER_REGISTER_HANDLER_DEFAULT_KEY) {
curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_DEFAULT_KEY);
if (curUserRegisterHandler == null) {
curUserRegisterHandler = createDefaultUserRegisterHandler(ApplicationContextHolder.getApplicationContext());
}
}
}
return curUserRegisterHandler;
}
/**
* 获取扩展注册流程
*
* @return
*/
protected AbstractUserRegisterHandler getExtUserRegisterHandler() {
AbstractUserRegisterHandler curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_EXT_KEY);
if (curUserRegisterHandler == null) {
synchronized (USER_REGISTER_HANDLER_EXT_KEY) {
curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_EXT_KEY);
if (curUserRegisterHandler == null) {
curUserRegisterHandler = createExtUserRegisterHandler(ApplicationContextHolder.getApplicationContext());
}
}
}
return curUserRegisterHandler;
}
}
package cn.quantgroup.xyqb.service.register;
import java.util.List;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import java.util.List;
/**
* @author liqing
......@@ -13,24 +12,6 @@ import java.util.List;
*/
public interface IUserRegisterService {
/**
* 以默认流程注册
*
* @param userRegisterParam
* @return
* @throws Exception
*/
User registerDefault(UserRegisterParam userRegisterParam);
/**
* 以扩展流程注册
*
* @param userRegisterParam
* @return
* @throws Exception
*/
User registerExt(UserRegisterParam userRegisterParam);
/**
* 替换AppController.register
* /app/login,/app/login_super
......
package cn.quantgroup.xyqb.service.register.handler;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
/**
* Created by liqing on 2017/12/4 0004.
*/
public abstract class AbstractUserRegisterHandler {
protected AbstractUserRegisterHandler successor;
public void setSuccessor(AbstractUserRegisterHandler successor) {
this.successor = successor;
}
public abstract User handleRegister(UserRegisterParam userRegisterParam);
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.repository.IAddressRepository;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
/**
* Created by liqing on 2017/12/5 0005.
* 注册 - 地址信息
* 失败影响注册流程
*/
@Component("addressUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class AddressUserRegisterHandler extends AbstractUserRegisterHandler {
@Autowired
private IAddressRepository addressRepository;
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
Address address = userRegisterParam.getAddress();
if (address != null) {
User user = userRegisterParam.getUser();
address.setUserId(user.getId());
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
address.setCreatedAt(currentTime);
address.setUpdateAt(currentTime);
addressRepository.save(address);
}
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.exception.PushUserToLkbException;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.JsonUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.util.Objects;
import java.util.UUID;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 基本信息
* 失败影响注册流程
*/
@Component("baseUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class BaseUserRegisterHandler extends AbstractUserRegisterHandler {
@Autowired
private ILkbUserService lkbUserService;
@Autowired
private IUserService userService;
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
String uuid = UUID.randomUUID().toString();
// 保存user信息
User user = saveUser(uuid, userRegisterParam);
// user保存成功后同步用户信息到Lkb
pushUserToLkb(uuid, userRegisterParam);
userRegisterParam.setUser(user);
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
/**
* 保存用户user信息
*
* @param uuid
* @param userRegisterParam
* @return
*/
private User saveUser(String uuid, UserRegisterParam userRegisterParam) {
User user = new User();
user.setUuid(uuid);
user.setEnable(true);
user.setPhoneNo(userRegisterParam.getPhoneNo());
Long registerFrom = userRegisterParam.getRegisterFrom();
if (Objects.isNull(registerFrom)) {
registerFrom = 1L;
}
Long channelId = userRegisterParam.getChannelId();
if (Objects.equals(channelId, 222L)) {
user.setRegisteredFrom(channelId);
} else {
user.setRegisteredFrom(registerFrom);
}
String password = StringUtils.defaultString(userRegisterParam.getPassword(), "");
// 如果需要生成随机密码
if (userRegisterParam.isGenerateRandomPwd()) {
password = PasswordUtil.generateRandomPwd(Constants.RANDOM_PWD_LEN);
}
user.setPassword(PasswordUtil.MD5(password.toLowerCase() + Constants.PASSWORD_SALT));
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
user.setUpdatedAt(currentTime);
user.setCreatedAt(currentTime);
userService.saveUser(user);
return user;
}
/**
* 同步用户信息到Lkb,失败影响注册流程
*
* @param uuid
* @param userRegisterParam
*/
private void pushUserToLkb(String uuid, UserRegisterParam userRegisterParam) {
log.info("[pushUserToLkb]同步用户信息到Lkb,phoneNo : {}", userRegisterParam.getPhoneNo());
boolean pushResult = lkbUserService.pushUser(uuid, userRegisterParam.getPhoneNo(),
userRegisterParam.getName(), userRegisterParam.getIdNo());
if (!pushResult) {
log.error("[userRegisterHandler][baseUserRegisterHandler]同步用户至Lkb出错,userRegisterParam:{}", JsonUtil.toJson(userRegisterParam));
throw new PushUserToLkbException("同步用户至Lkb出错");
}
}
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.util.Objects;
/**
* Created by liqing on 2017/12/4 0004.
* 用户注册 - 白条
* 失败影响注册流程
*/
@Component("btUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class BtUserRegisterHandler extends AbstractUserRegisterHandler {
@Autowired
private IUserBtRegisterService userBtRegisterService;
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
Long channelId = userRegisterParam.getChannelId();
User user = userRegisterParam.getUser();
Long btRegisterChannelId = userRegisterParam.getBtRegisterChannelId();
if (!Objects.isNull(user) && Objects.equals(channelId, 222L)) {
UserBtRegister userBtRegister = new UserBtRegister();
userBtRegister.setUserId(user.getId());
if (null == btRegisterChannelId) {
userBtRegister.setRegisterBtMerchantId(0L);
} else {
userBtRegister.setRegisterBtMerchantId(btRegisterChannelId);
}
userBtRegister.setIsActive(true);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
userBtRegister.setCreatedAt(currentTime);
userBtRegister.setUpdatedAt(currentTime);
userBtRegisterService.save(userBtRegister);
}
if (!Objects.isNull(successor)) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.repository.IContactRepository;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.util.List;
/**
* Created by liqing on 2017/12/5 0005.
* 注册 - 联系人信息
* 失败影响注册流程
*/
@Component("contactUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class ContactUserRegisterHandler extends AbstractUserRegisterHandler {
@Autowired
private IContactRepository contactRepository;
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
String contact_str = userRegisterParam.getContacts();
User user = userRegisterParam.getUser();
if (StringUtils.isNotBlank(contact_str)) {
List<Contact> contactList = JSONObject.parseObject(contact_str, new TypeReference<List<Contact>>() {
});
if (CollectionUtils.isNotEmpty(contactList)) {
convertContactList(user.getId(), contactList, 2);
contactRepository.save(contactList);
}
}
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
/**
* 转换联系人信息
*
* @param userId 用户id
* @param contacts 联系人列表
* @param number 允许的联系人数量
*/
private void convertContactList(Long userId, List<Contact> contacts, int number) {
Timestamp now = new Timestamp(System.currentTimeMillis());
int count = 1;
for (Contact c : contacts) {
if (count > number) {
break;
}
c.setId(null);
c.setUserId(userId);
c.setRelation(c.getRelation() == null ? Relation.OTHER : c.getRelation());
c.setCreatedAt(now);
c.setUpdateAt(now);
count++;
}
}
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.util.JsonUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 用户详情
* 失败不影响注册流程
*/
@Component("detailUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class DetailUserRegisterHandler extends AbstractUserRegisterHandler {
@Autowired
private IIdCardService idCardService;
@Autowired
private IUserDetailService userDetailService;
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
try {
doHandleUserDetailRegister(userRegisterParam);
} catch (Exception e) {
// 用户详情注册失败不影响注册流程
log.error("[exception][detailUserRegisterHandler_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
/**
* 执行用户详情注册
*
* @param userRegisterParam
*/
private void doHandleUserDetailRegister(UserRegisterParam userRegisterParam) throws Exception {
if (StringUtils.isAnyBlank(userRegisterParam.getIdNo(), userRegisterParam.getName()) ||
!ValidationUtil.validateChinese(userRegisterParam.getName())) {
return;
}
String phoneNo = userRegisterParam.getPhoneNo();
String name = userRegisterParam.getName();
String idNo = userRegisterParam.getIdNo();
IdCardInfo cardInfo = idCardService.getIdCardInfoWithExceptions(idNo);
UserDetail userDetail = new UserDetail();
userDetail.setIdNo(cardInfo.getIdNo());
userDetail.setPhoneNo(phoneNo);
userDetail.setName(name);
userDetail.setIdType(IdType.ID_CARD);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
userDetail.setCreatedAt(currentTime);
userDetail.setUpdatedAt(currentTime);
User user = userRegisterParam.getUser();
userDetail.setUserId(user.getId());
userDetail.setGender(cardInfo.getGender());
userDetailService.saveUserDetail(userDetail);
}
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.util.JsonUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 发送mq
* 失败不影响注册流程
*/
@Component("mqUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class MqUserRegisterHandler extends AbstractUserRegisterHandler {
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
try {
doHandleMqUserRegister(userRegisterParam);
} catch (Exception e) {
// 发送Mq失败不影响注册流程
log.error("[exception][mqUserRegisterHandler_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
/**
* 执行注册发送mq
*
* @param userRegisterParam
*/
private void doHandleMqUserRegister(UserRegisterParam userRegisterParam) {
if (!userRegisterParam.isSendSuccessMq()) {
return;
}
Long channelId = userRegisterParam.getChannelId();
String dimension = userRegisterParam.getDimension();
User user = userRegisterParam.getUser();
if (user != null) {
MqUtils.sendRegisterMessage(channelId, dimension, user);
}
}
}
package cn.quantgroup.xyqb.service.register.handler.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.service.sms.ISmsService;
import cn.quantgroup.xyqb.util.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* Created by liqing on 2017/12/4 0004.
* 注册 - 发送短信
* 失败不影响注册流程
*/
@Component("smsUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class SmsUserRegisterHandler extends AbstractUserRegisterHandler {
@Autowired
private ISmsService smsService;
@Override
public User handleRegister(UserRegisterParam userRegisterParam) {
try {
doHandleSmsUserRegister(userRegisterParam);
} catch (Exception e) {
// 发送短信失败不影响注册流程
log.error("[exception][smsUserRegisterHandler_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
/**
* 执行发送短信
*
* @param userRegisterParam
*/
private void doHandleSmsUserRegister(UserRegisterParam userRegisterParam) {
// 发送注册成功短信
try {
//doHandleSendSuccessSms(userRegisterParam);
} catch (Exception e) {
// 发送短信失败不影响注册流程
log.error("[exception][smsUserRegisterHandler_doHandleSendSuccessSms_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
// 发送推送app短信
try {
doHandleSendAppSms(userRegisterParam);
} catch (Exception e) {
// 发送短信失败不影响注册流程
log.error("[exception][smsUserRegisterHandler_doHandleSendAppSms_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
}
/**
* 执行发送推送app短信 TODO
*
* @param userRegisterParam
*/
private void doHandleSendAppSms(UserRegisterParam userRegisterParam) {
if (!userRegisterParam.isSendAppSms()) {
}
}
/**
* 执行发送注册成功短信
*
* @param userRegisterParam
*/
private void doHandleSendSuccessSms(UserRegisterParam userRegisterParam) {
if (!userRegisterParam.isSendSuccessSms()) {
return;
}
Long registerFrom = userRegisterParam.getRegisterFrom();
String phoneNo = userRegisterParam.getPhoneNo();
if (registerFrom != 645L && registerFrom != 900L && registerFrom != 158412L) {
smsService.sendAfterRegister(phoneNo);
log.info("第三方登录用户注册成功,registerFrom:{}, phoneNo:{},并且已发送短信通知", registerFrom, phoneNo);
} else if (registerFrom == 900L) {
smsService.sendAfterRegister(phoneNo, "123");
log.info("第三方(聚美)登录用户注册成功,registerFrom:{},phoneNo:{},并且已发送短信通知", registerFrom, phoneNo);
}
}
}
package cn.quantgroup.xyqb.service.register.impl;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.event.RegisterEvent;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.AbstractUserRegisterService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
/**
* @author liqing
......@@ -27,26 +31,14 @@ import java.util.UUID;
*/
@Service("userRegisterService")
@Slf4j
public class UserRegisterServiceImpl extends AbstractUserRegisterService {
public class UserRegisterServiceImpl implements IUserRegisterService {
@Autowired
@Resource
private ApplicationEventPublisher applicationEventPublisher;
@Autowired
@Resource
private IUserService userService;
@Transactional(rollbackFor = Exception.class)
@Override
public User registerDefault(UserRegisterParam userRegisterParam) {
return getDefaultUserRegisterHandler().handleRegister(userRegisterParam);
}
@Transactional(rollbackFor = Exception.class)
@Override
public User registerExt(UserRegisterParam userRegisterParam) {
return getExtUserRegisterHandler().handleRegister(userRegisterParam);
}
@Transactional(rollbackFor = Exception.class)
@Override
public User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId, Long btRegisterChannelId) {
......
package cn.quantgroup.xyqb.service.session;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.LoginProperties;
......@@ -17,27 +16,16 @@ public interface ISessionService {
* 用户信息存在,更新session中的最后访问时间,重新写入缓存.
* 存在则保存用户session信息,userId为uuid
*
* @param channelId
* @param createdFrom
* @param appChannel
* @param user
* @param merchant
* @param user - 登录用户
* @param loginProperties - 登录参数
* @return
*/
AuthBean createSession(Long channelId, Long createdFrom, String appChannel, User user, Merchant merchant);
AuthBean createSession(User user, LoginProperties loginProperties);
SessionStruct createSessionAndPersist(User user, LoginProperties loginProperties);
String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties);
String findSessionValueBySessionId(String sessionId);
SessionStruct newSession(User user, LoginProperties properties);
void persistSession(String token, SessionValue sessionValue);
SessionStruct findSessionBySessionId(String sessionId);
void deleteByUserId(long userId);
void deleteUserCatch(User user);
......
......@@ -48,7 +48,7 @@ public class UserBtRegisterFillAspect {
SessionValue value = (SessionValue) obj;
UserBtRegister userBtRegister = userBtRegisterService.findByUserId(value.getUser().getId());
if (null != userBtRegister && null != value.getLoginProperties()) {
value.getLoginProperties().setBtMerchantId(userBtRegister.getRegisterBtMerchantId());
value.getLoginProperties().setMerchantId(userBtRegister.getRegisterBtMerchantId());
}
}
}
......
package cn.quantgroup.xyqb.service.session.impl;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.alibaba.fastjson.JSON;
import com.quantgroup.acolyte.buddhistscriptures.pojo.Login;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.event.StatisticsEvent;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill;
import cn.quantgroup.xyqb.service.user.IUserService;
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;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.TimeUnit;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils;
/**
* Created by 11 on 2016/12/28.
......@@ -32,33 +43,23 @@ import java.util.concurrent.TimeUnit;
@Service
public class SessionServiceImpl implements ISessionService {
@Autowired
@Qualifier("stringRedisTemplate")
@Resource
private RedisTemplate<String, String> stringRedisTemplate;
@Autowired
@Resource
private IUserService userService;
@Resource
private ApplicationEventPublisher applicationEventPublisher;
/**
* 更新session
* 用户信息存在,更新session中的最后访问时间,重新写入缓存.
* 存在则保存用户session信息,userId为uuid
*
* @param channelId
* @param createdFrom
* @param appChannel
* @param user
* @param merchant
* @return
*/
@Override
public AuthBean createSession(Long channelId, Long createdFrom, String appChannel, User user, Merchant merchant) {
LoginProperties properties = new LoginProperties();
properties.setAppChannel(appChannel);
if (null != merchant) {
properties.setMerchantName(merchant.getName());
}
properties.setChannelId(channelId);
properties.setCreatedFrom(createdFrom);
public AuthBean createSession(User user, LoginProperties properties) {
//找到用户
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
SessionStruct sessionStruct = null;
......@@ -66,9 +67,9 @@ public class SessionServiceImpl implements ISessionService {
sessionStruct = findSessionBySessionId(sessionId);
}
if (Objects.nonNull(sessionStruct)) {
sessionStruct.setAttribute("channelId", String.valueOf(channelId));
sessionStruct.setAttribute("createdFrom", String.valueOf(createdFrom));
sessionStruct.setAttribute("appChannel", String.valueOf(appChannel));
sessionStruct.setAttribute("channelId", String.valueOf(properties.getChannelId()));
sessionStruct.setAttribute("createdFrom", String.valueOf(properties.getCreatedFrom()));
sessionStruct.setAttribute("appChannel", String.valueOf(properties.getAppChannel()));
sessionStruct.getValues().setLoginProperties(properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
} else {
......@@ -77,7 +78,7 @@ public class SessionServiceImpl implements ISessionService {
AuthBean authBean = new AuthBean();
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", createdFrom, user.getPhoneNo(), appChannel, channelId);
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", properties.getCreatedFrom(), user.getPhoneNo(), properties.getAppChannel(), properties.getChannelId());
return authBean;
}
......@@ -97,12 +98,24 @@ public class SessionServiceImpl implements ISessionService {
} else {
sessionStruct = newSession(user, properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
// 发送登陆成功统计消息
/*
* 部分免密渠道登录统计,用户中心不需识别,由统计平台来过滤
* 贷款导航(84660);壹账通H5(159384)
*/
user.setRegisteredFrom(properties.getCreatedFrom());
UserStatistics statistics = new UserStatistics(user, null, properties.getAction(), properties.getChannelId());
// 推送老的登陆统计信息
MqUtils.sendLoanVest(statistics);
// 发布新的登录统计信息事件
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Login login = new Login(user.getId(), properties.getCreatedFrom(), properties.getChannelId(), IPUtil.getRemoteIP(request), properties.getAction(), System.currentTimeMillis());
applicationEventPublisher.publishEvent(new StatisticsEvent(this, login));
}
return sessionStruct;
}
@Override
public String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties) {
private String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties) {
return stringRedisTemplate.opsForValue().get(generateLoginPropertiesKey(userId, properties));
}
......@@ -114,14 +127,12 @@ public class SessionServiceImpl implements ISessionService {
}
}
@Override
public String findSessionValueBySessionId(String sessionId) {
private String findSessionValueBySessionId(String sessionId) {
String result = stringRedisTemplate.opsForValue().get(Constants.Session.USER_SESSION_CACHE + sessionId);
return StringUtils.defaultString(result, "");
}
@Override
public SessionStruct newSession(User user, LoginProperties loginProperties) {
private SessionStruct newSession(User user, LoginProperties loginProperties) {
Timestamp now = new Timestamp(System.currentTimeMillis());
SessionStruct sessionStruct = new SessionStruct();
SessionValue sessionValue = new SessionValue();
......@@ -170,9 +181,7 @@ public class SessionServiceImpl implements ISessionService {
}
}
@Override
public SessionStruct findSessionBySessionId(String sessionId) {
private SessionStruct findSessionBySessionId(String sessionId) {
String sessionValue = findSessionValueBySessionId(sessionId);
if (StringUtils.isEmpty(sessionValue)) {
log.warn("[SessionServiceImpl][findSessionBySessionId] session data 未找到:sid:{}", sessionId);
......
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -19,11 +15,18 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
/**
* Created by Miraculous on 15/7/5.
......
package cn.quantgroup.xyqb.util;
import org.apache.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterMqMessage;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.mq.IRegisterMqService;
import cn.quantgroup.xyqb.service.mq.IVestService;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
/**
* Created by xuran on 2017/6/23.
......@@ -46,13 +48,12 @@ public class MqUtils {
}
public static UserRet sendRegisterMessage(Long registeredFrom, String demension, User user) {
UserRet userRet;
UserStatistics statistics = new UserStatistics(user, demension, 2, registeredFrom);
MqUtils.sendLoanVest(statistics);
userRet = new UserRet(user);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage = new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
UserRet userRet = new UserRet(user);
return userRet;
}
......
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