Commit c548ffe7 authored by Java—KA—李 青's avatar Java—KA—李 青

用户注册功能重构

parent a01e06a5
......@@ -63,6 +63,11 @@ public interface Constants {
String SESSION_PREFIX = "spring:session:sessions:";
Long ONE_DAY = 24 * 60 * 60L;
/**
* 默认随机密码长度
*/
int RANDOM_PWD_LEN = 15;
interface Channel {
long LKB = 1; // 量化派
long JR58 = 175; // 58金融
......
......@@ -98,6 +98,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Autowired
private IUserApiService userApiService;
@Override
public UserSysResult<XUser> saveUserRelatedInfo(UserRelatedBean userRelatedBean) {
return null;
......
package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.exception.NullUserException;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.session.LoginInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.repository.IUserBtRegisterRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
......@@ -35,8 +32,6 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.Objects;
import java.util.Random;
import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ERROR;
......@@ -88,7 +83,6 @@ public class AppController implements IBaseController {
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
}
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......
package cn.quantgroup.xyqb.exception;
/**
* Created by liqing on 2017/12/5 0005.
* 同步用户信息至Lkb异常
*/
public class PushUserToLkbException extends RuntimeException {
public PushUserToLkbException() {
}
public PushUserToLkbException(String message) {
super(message);
}
public PushUserToLkbException(String message, Throwable cause) {
super(message, cause);
}
public PushUserToLkbException(Throwable cause) {
super(cause);
}
public PushUserToLkbException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Created by liqing on 2017/12/4 0004.
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserRegisterParam {
private Long registerFrom;
private String phoneNo;
private String password;
private String idNo;
private String name;
private Long channelId;
private Long btRegisterChannelId;
private String dimension;
private Address address;
private String contacts;
private boolean generateRandomPwd = false; // 是否生成随机密码
private boolean sendSms = true; // 是否发送短信
private boolean sendMq = true; // 是否发送mq
private User user;
}
package cn.quantgroup.xyqb.service.register;
import cn.quantgroup.xyqb.service.register.handler.AbstractUserRegisterHandler;
import cn.quantgroup.xyqb.util.ApplicationContextHolder;
import javax.annotation.PostConstruct;
/**
* Created by liqing on 2017/12/5 0005.
*/
public abstract class AbstractUserRegisterService implements IUserRegisterService {
protected AbstractUserRegisterHandler getDefaultUserRegisterHandler(){
AbstractUserRegisterHandler baseUserRegisterHandler = ApplicationContextHolder.getBean("baseUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler detailUserRegisterHandler = ApplicationContextHolder.getBean("detailUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler btUserRegisterHandler = ApplicationContextHolder.getBean("btUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler smsUserRegisterHandler = ApplicationContextHolder.getBean("smsUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler mqUserRegisterHandler = ApplicationContextHolder.getBean("mqUserRegisterHandler", AbstractUserRegisterHandler.class);
baseUserRegisterHandler.setSuccessor(detailUserRegisterHandler);
detailUserRegisterHandler.setSuccessor(btUserRegisterHandler);
btUserRegisterHandler.setSuccessor(smsUserRegisterHandler);
smsUserRegisterHandler.setSuccessor(mqUserRegisterHandler);
return baseUserRegisterHandler;
}
protected AbstractUserRegisterHandler getExtUserRegisterHandler(){
AbstractUserRegisterHandler baseUserRegisterHandler = ApplicationContextHolder.getBean("baseUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler detailUserRegisterHandler = ApplicationContextHolder.getBean("detailUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler btUserRegisterHandler = ApplicationContextHolder.getBean("btUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler smsUserRegisterHandler = ApplicationContextHolder.getBean("smsUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler mqUserRegisterHandler = ApplicationContextHolder.getBean("mqUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler addressUserRegisterHandler = ApplicationContextHolder.getBean("addressUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler contactUserRegisterHandler = ApplicationContextHolder.getBean("contactUserRegisterHandler", AbstractUserRegisterHandler.class);
baseUserRegisterHandler.setSuccessor(btUserRegisterHandler);
/*detailUserRegisterHandler.setSuccessor(btUserRegisterHandler);
btUserRegisterHandler.setSuccessor(addressUserRegisterHandler);*/
btUserRegisterHandler.setSuccessor(detailUserRegisterHandler);
detailUserRegisterHandler.setSuccessor(addressUserRegisterHandler);
addressUserRegisterHandler.setSuccessor(contactUserRegisterHandler);
contactUserRegisterHandler.setSuccessor(smsUserRegisterHandler);
smsUserRegisterHandler.setSuccessor(mqUserRegisterHandler);
return baseUserRegisterHandler;
}
}
package cn.quantgroup.xyqb.service.register;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
/**
* Created by liqing on 2017/12/4 0004.
*/
public interface IUserRegisterService {
/**
* 以默认流程注册
* @param userRegisterParam
* @return
* @throws Exception
*/
User registerDefault(UserRegisterParam userRegisterParam) throws Exception;
/**
* 以扩展流程注册
* @param userRegisterParam
* @return
* @throws Exception
*/
User registerExt(UserRegisterParam userRegisterParam) throws Exception;
/**
* 替换AppController.register
* /app/login,/app/login_super
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @param btRegisterChannelId
* @return
*/
User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId, Long btRegisterChannelId) throws Exception;
/**
* 替换InnerController里的userService.registerAndReturn
* /innerapi/user/register
* @param phoneNo
* @param password
* @param registerFrom
* @return
*/
User register(String phoneNo, String password, Long registerFrom) throws Exception;
/**
* 替换UserController.register里的userService.register
* /user/register
* @param phoneNo
* @param password
* @param registerFrom
* @param ip
* @param channelId
* @param btRegisterChannelId
* @param dimension
* @return
*/
boolean register(String phoneNo, String password, Long registerFrom, String ip, Long channelId, Long btRegisterChannelId,String dimension) throws Exception;
/**
* 替换UserController.loginFast里的registerFastWhenLogin
* /user/login/fast
* @param phoneNo
* @param channelId
* @param registerFrom
* @param appChannel
* @param btRegisterChannelId
* @param dimension
* @return
*/
User register(String phoneNo, Long channelId, Long registerFrom, String appChannel, Long btRegisterChannelId,String dimension) throws Exception;
/**
* 替换InnerController.saveMulti里的userService.registerAndReturn
* /innserapi/user/save_multi
* @param registeredFrom
* @param channelId
* @param phoneNo
* @param name
* @param idNo
* @param provinceCode
* @param province
* @param cityCode
* @param city
* @param districtCode
* @param district
* @param address
* @param contacts
* @return
*/
User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, String provinceCode, String province, String cityCode, String city, String districtCode, String district, String address, String contacts) throws Exception;
/**
* 替换MotanUserServiceImpl.appLoginAndFetchLoginInfo和MotanUserServiceImpl.appLogin里的register
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @return
*/
User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId) throws Exception;
}
package cn.quantgroup.xyqb.service.register.handler;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import java.text.ParseException;
/**
* 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) throws Exception;
}
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) throws Exception {
Address address = userRegisterParam.getAddress();
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.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.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) throws Exception {
String uuid = UUID.randomUUID().toString();
// 同步用户信息到Lkb
pushUserToLkb(uuid, userRegisterParam);
// 保存user信息
User user = saveUser(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 (null == registerFrom) {
registerFrom = 1L;
}
Long channelId = userRegisterParam.getChannelId();
if (channelId == 222L) {
user.setRegisteredFrom(channelId);
} else {
user.setRegisteredFrom(registerFrom);
}
String password = userRegisterParam.getPassword();
if (userRegisterParam.isGenerateRandomPwd()){ // 如果需要生成随机密码
password = PasswordUtil.generateRandomPwd(Constants.RANDOM_PWD_LEN);
}
user.setPassword(PasswordUtil.MD5(password + 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) {
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;
/**
* 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) throws Exception {
Long channelId = userRegisterParam.getChannelId();
User user = userRegisterParam.getUser();
Long btRegisterChannelId = userRegisterParam.getBtRegisterChannelId();
if(null != user && channelId.equals(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 (successor != null){
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) throws Exception {
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)) {
Timestamp now = new Timestamp(System.currentTimeMillis());
convertContactList(user.getId(), contactList, 2, now);
contactRepository.save(contactList);
}
}
if (successor != null){
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
/**
* 转换联系人信息
* @param userId
* @param contacts
* @param number
* @param now
*/
private void convertContactList(Long userId, List<Contact> contacts,int number, Timestamp now) {
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 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.text.ParseException;
/**
* 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) throws Exception {
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 {
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.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.
*/
@Component("mqUserRegisterHandler")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Slf4j
public class MqUserRegisterHandler extends AbstractUserRegisterHandler {
@Override
public User handleRegister(UserRegisterParam userRegisterParam) throws Exception {
Long channelId = userRegisterParam.getChannelId();
String dimension = userRegisterParam.getDimension();
User user = userRegisterParam.getUser();
MqUtils.sendRegisterMessage(channelId, dimension, user);
if (successor != null){
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
}
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 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) throws Exception {
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);
}
if (successor != null){
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
}
}
package cn.quantgroup.xyqb.service.register.impl;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.AbstractUserRegisterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* Created by liqing on 2017/12/4 0004.
*/
@Service("userRegisterService")
@Slf4j
public class UserRegisterServiceImpl extends AbstractUserRegisterService {
@Override
public User registerDefault(UserRegisterParam userRegisterParam) throws Exception {
return getDefaultUserRegisterHandler().handleRegister(userRegisterParam);
}
@Override
public User registerExt(UserRegisterParam userRegisterParam) throws Exception {
return getExtUserRegisterHandler().handleRegister(userRegisterParam);
}
@Override
public User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId, Long btRegisterChannelId) throws Exception {
// 1、生成6位随机密码
// 2、同步lkb
// 3、保存user
// 4、发送短信
// 5、保存userDetail
// 6、发送mq
// 7、保存bt
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo).idNo(idNo).name(name)
.channelId(channelId).btRegisterChannelId(btRegisterChannelId)
.generateRandomPwd(true).sendSms(true).sendMq(true)
.build();
return registerDefault(userRegisterParam);
}
@Override
public User register(String phoneNo, String password, Long registerFrom) throws Exception {
// 1、同步lkb
// 2、保存user
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo).password(password)
.generateRandomPwd(false).sendSms(false).sendMq(false)
.build();
return registerDefault(userRegisterParam);
}
@Override
public boolean register(String phoneNo, String password, Long registerFrom, String ip, Long channelId, Long btRegisterChannelId, String dimension) throws Exception {
// 1、同步lkb
// 2、保存user
// 3、保存bt
// 4、发送短信
// 5、发送mq
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo).password(password)
.channelId(channelId).btRegisterChannelId(btRegisterChannelId)
.dimension(dimension)
.generateRandomPwd(false).sendSms(true).sendMq(true)
.build();
User user = registerDefault(userRegisterParam);
return user != null;
}
@Override
public User register(String phoneNo, Long channelId, Long registerFrom, String appChannel, Long btRegisterChannelId, String dimension) throws Exception {
// 1、生成15位随机密码
// 2、同步lkb
// 3、保存user
// 4、保存bt
// 5、发送mq
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo)
.channelId(channelId).btRegisterChannelId(btRegisterChannelId)
.dimension(dimension)
.generateRandomPwd(true).sendSms(false).sendMq(true)
.build();
return registerDefault(userRegisterParam);
}
@Override
public User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, String provinceCode, String province, String cityCode, String city, String districtCode, String district, String address, String contacts) throws Exception {
// 1、生成6位随机密码
// 2、同步lkb
// 3、保存user
// 4、保存bt:btRegisterChannelId = registeredFrom
// 5、保存address
// 6、保存userDetail
// 7、保存联系人
Address addressObj = new Address();
addressObj.setProvinceCode(Long.valueOf(provinceCode));
addressObj.setProvince(province);
addressObj.setCityCode(Long.valueOf(cityCode));
addressObj.setCity(city);
addressObj.setDistrictCode(Long.valueOf(districtCode));
addressObj.setDistrict(district);
addressObj.setAddress(address);
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registeredFrom).phoneNo(phoneNo).idNo(idNo).name(name)
.channelId(channelId).btRegisterChannelId(registeredFrom)
.address(addressObj).contacts(contacts)
.generateRandomPwd(true).sendSms(false).sendMq(false)
.build();
return registerExt(userRegisterParam);
}
@Override
public User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId) throws Exception {
// 1、生成6位随机密码
// 2、同步lkb
// 3、保存user
// 4、发送短信
// 5、保存userDetail
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo).idNo(idNo).name(name)
.channelId(channelId)
.generateRandomPwd(true).sendSms(true).sendMq(false)
.build();
return registerDefault(userRegisterParam);
}
}
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.model.JsonResult;
/**
* @author mengfan.feng
* @time 2015-08-19 17:44
......@@ -23,4 +25,20 @@ public interface ILkbUserService {
* @param idNo
*/
void userUpdate(String uuid, String name, String idNo);
/**
* 同步用户信息
* @param uuid
* @param phoneNo
*/
boolean pushUser(String uuid, String phoneNo);
/**
* 同步用戶信息
* @param uuid
* @param phoneNo
* @param name
* @param idNo
*/
boolean pushUser(String uuid, String phoneNo, String name, String idNo);
}
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.util.JsonUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -14,6 +17,7 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Optional;
/**
......@@ -21,60 +25,91 @@ import java.util.Map;
* @time 2015-08-19 18:20
*/
@Service
@Slf4j
public class LkbUserviceImpl implements ILkbUserService {
private static final Logger LOGGER = LoggerFactory.getLogger(LkbUserviceImpl.class);
private static final Logger LOGGER = LoggerFactory.getLogger(LkbUserviceImpl.class);
private static final String TOKEN_PATTERN = "timeunit=%sappkey=lkb010203#$%%";
private static final String TOKEN_PATTERN = "timeunit=%sappkey=lkb010203#$%%";
@Autowired
private IHttpService httpService;
@Autowired
private IHttpService httpService;
@Value("${lkb.client.url}")
private String clientUrl;
@Value("${lkb.client.url}")
private String clientUrl;
@Value("${lkb.client.user.register.app}")
private String registerApp;
@Value("${lkb.client.user.register.app}")
private String registerApp;
@Value("${lkb.client.user.update}")
private String userUpdate;
@Value("${lkb.client.user.update}")
private String userUpdate;
@Override
public String registerApp(String phoneNo, String password) {
String timeunit = System.currentTimeMillis() + "";
String token = PasswordUtil.MD5(String.format(TOKEN_PATTERN, timeunit));
@Value("${lkb.client.user.push}")
private String userPushPath;
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("appId", Constants.Channel.LKB_CODE)
.put("timeunit", timeunit)
.put("token", token)
.put("userName", phoneNo)
.put("password", password)
.build();
@Override
public String registerApp(String phoneNo, String password) {
String timeunit = System.currentTimeMillis() + "";
String token = PasswordUtil.MD5(String.format(TOKEN_PATTERN, timeunit));
String response = httpService.get(clientUrl + registerApp, parameters);
Map<String, String> result = JSONObject.parseObject(response, Map.class);
if (result == null || "0".equals(result.get("flag"))) {
LOGGER.warn("向LKB注册用户失败, phoneNo:{}, password:{}", phoneNo, password);
return "";
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("appId", Constants.Channel.LKB_CODE)
.put("timeunit", timeunit)
.put("token", token)
.put("userName", phoneNo)
.put("password", password)
.build();
String response = httpService.get(clientUrl + registerApp, parameters);
Map<String, String> result = JSONObject.parseObject(response, Map.class);
if (result == null || "0".equals(result.get("flag"))) {
LOGGER.warn("向LKB注册用户失败, phoneNo:{}, password:{}", phoneNo, password);
return "";
}
return result.get("uid");
}
@Override
@Async
public void userUpdate(String uuid, String name, String idNo) {
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("userId", uuid)
.put("realName", name)
.put("idcard", idNo)
.build();
String response = httpService.get(clientUrl + userUpdate, parameters);
//Map<String, String> result = GSON.fromJson(response, Map.class);
Map<String, String> result = JSONObject.parseObject(response, Map.class);
if (result == null || "false".equals(result.get("flag"))) {
LOGGER.warn("向LKB-Client同步用户信息失败, result: {}", result);
}
}
return result.get("uid");
}
@Override
@Async
public void userUpdate(String uuid, String name, String idNo) {
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("userId", uuid)
.put("realName", name)
.put("idcard", idNo)
.build();
String response = httpService.get(clientUrl + userUpdate, parameters);
//Map<String, String> result = GSON.fromJson(response, Map.class);
Map<String, String> result = JSONObject.parseObject(response, Map.class);
if (result == null || "false".equals(result.get("flag"))) {
LOGGER.warn("向LKB-Client同步用户信息失败, result: {}", result);
@Override
public boolean pushUser(String uuid, String phoneNo) {
return pushUser(uuid, phoneNo, null, null);
}
@Override
public boolean pushUser(String uuid, String phoneNo, String name, String idNo) {
String timeunit = System.currentTimeMillis() + "";
String token = PasswordUtil.MD5(String.format(TOKEN_PATTERN, timeunit));
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("appId", Constants.Channel.LKB_CODE)
.put("timeunit", timeunit)
.put("token", token)
.put("userId", uuid)
.put("loginName", phoneNo)
.put("realName", name)
.put("idCardNo", idNo)
.build();
String response = httpService.get(clientUrl + userPushPath, parameters);
Optional<Map> resultOptional = JsonUtil.fromJson(response, Map.class);
if (!resultOptional.isPresent() || "0".equals(resultOptional.get().get("code"))) {
LOGGER.error("[lkb_user][lkb_user_push]向LKB同步用户失败, phoneNo:{},response={}", phoneNo, response);
return false;
}
return true;
}
}
}
package cn.quantgroup.xyqb.util;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import java.util.Optional;
/**
* Created by liqing on 2017/12/4 0004.
*/
@Slf4j
public class JsonUtil {
/**
* 转换json为对象
* @param jsonStr
* @param clazz
* @param <T>
* @return
*/
public static <T> Optional<T> fromJson(String jsonStr, Class<T> clazz) {
try {
return Optional.ofNullable(JSONObject.parseObject(jsonStr, clazz));
} catch (Exception e) {
log.error("[exception][fromJson_exception]error={}", e);
}
return Optional.empty();
}
/**
* 将对象转成json字符串
* @param object
* @return
*/
public static String toJson(Object object) {
return JSONObject.toJSONString(object);
}
}
......@@ -31,9 +31,10 @@ xyqb.redis.sentinel3.port=0
sms.is.debug=1
# LKB client
lkb.client.url=http://192.168.4.193:8083/LKBClient/openapi
lkb.client.url=http://192.168.4.193:8082/LKBClient/openapi
lkb.client.user.register.app=/new/register/registerApp.json
lkb.client.user.update=/new/register/updateUser.json
lkb.client.user.push=/user/push.json
# LKB import
......
......@@ -21,6 +21,7 @@ sms.is.debug=0
lkb.client.url=http://openapi.quantgroup.cn/LKBClient/openapi
lkb.client.user.register.app=/new/register/registerApp.json
lkb.client.user.update=/new/register/updateUser.json
lkb.client.user.push=/user/push.json
# LKB import
lkb.import.url=http://spider.quantgroup.cn
# LKB
......
......@@ -24,6 +24,7 @@ sms.is.debug=1
lkb.client.url=http://192.168.192.251:8082/LKBClient/openapi
lkb.client.user.register.app=/new/register/registerApp.json
lkb.client.user.update=/new/register/updateUser.json
lkb.client.user.push=/user/push.json
# LKB import
lkb.import.url=http://spider.quantgroup.cn
# LKB
......
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