Commit d18fa48c authored by 技术部—现金贷—曾丽宾's avatar 技术部—现金贷—曾丽宾

Merge remote-tracking branch 'origin/master' into wechat-forward

parents 44f8aeee b3d357c3
......@@ -257,7 +257,7 @@
<dependency>
<groupId>cn.quantgroup</groupId>
<artifactId>xyqb-user-rpc-commons</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.1.2-SNAPSHOT</version>
</dependency>
<dependency>
......
......@@ -4,16 +4,20 @@ 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.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;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.sms.ISmsService;
import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.IPUtil;
......@@ -59,7 +63,8 @@ public class AppController implements IBaseController {
private IIdCardService idCardService;
@Autowired
private IMerchantService merchantService;
@Autowired
private IUserBtRegisterService userBtRegisterService;
/**
* 第三方用户登录
*/
......@@ -68,7 +73,7 @@ public class AppController implements IBaseController {
String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
@RequestParam(required = false, defaultValue = "1") Long channelId,
String idNo, String name, String key, @RequestParam(required = false, defaultValue = "") String appChannel, HttpServletRequest request
String idNo, String name, String key, @RequestParam(required = false, defaultValue = "") String appChannel,@RequestParam(required = false)Long btRegisterChannelId, HttpServletRequest request
) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -78,7 +83,7 @@ public class AppController implements IBaseController {
LOGGER.info("第三方用户登录, loginFrom:{}, requestIp:{}", registerFrom, requestIp);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId);
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
}
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -103,6 +108,8 @@ public class AppController implements IBaseController {
return new JsonResult(bean);
}
/**
* 第三方用户登录并返回用户信息
*/
......@@ -111,7 +118,7 @@ public class AppController implements IBaseController {
String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
@RequestParam(required = false, defaultValue = "1") Long channelId,
String idNo, String name, String key, @RequestParam(required = false, defaultValue = "") String appChannel, HttpServletRequest request
String idNo, String name, String key, @RequestParam(required = false, defaultValue = "") String appChannel, @RequestParam(required = false) Long btRegisterChannelId,HttpServletRequest request
) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -121,7 +128,7 @@ public class AppController implements IBaseController {
LOGGER.info("第三方用户登录, loginFrom:{}, requestIp:{}", registerFrom, requestIp);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId);
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
}
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -153,6 +160,26 @@ public class AppController implements IBaseController {
return JsonResult.buildSuccessResult("", loginInfo);
}
/**
* 注册新用户,带白条渠道号
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @param btRegisterChannelId
* @return
*/
private User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId, Long btRegisterChannelId) {
User user = register(registerFrom, phoneNo, idNo, name, channelId);
if(null != user && null != btRegisterChannelId && channelId == 222L) {
UserBtRegister userBtRegister = new UserBtRegister();
userBtRegister.setUserId(user.getId());
userBtRegister.setRegisterBtMerchantId(btRegisterChannelId);
userBtRegisterService.save(userBtRegister);
}
return user;
}
/**
* 注册新用户
......
......@@ -2,13 +2,15 @@ package cn.quantgroup.xyqb.controller.external.user.center;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.entity.enumerate.EducationEnum;
import cn.quantgroup.xyqb.entity.enumerate.IncomeRangeEnum;
import cn.quantgroup.xyqb.entity.enumerate.MaritalStatus;
import cn.quantgroup.xyqb.entity.enumerate.OccupationEnum;
//import cn.quantgroup.xyqb.entity.enumerate.EducationEnum;
//import cn.quantgroup.xyqb.entity.enumerate.IncomeRangeEnum;
//import cn.quantgroup.xyqb.entity.enumerate.MaritalStatus;
//import cn.quantgroup.xyqb.entity.enumerate.OccupationEnum;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.model.ContactRet;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.user.enums.*;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import org.apache.commons.collections.CollectionUtils;
......
......@@ -2,11 +2,13 @@ package cn.quantgroup.xyqb.controller.internal.login;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.model.JsonResult;
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.http.IHttpService;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
......@@ -42,12 +44,15 @@ public class AuthInfoController implements IBaseController {
@Autowired
private IUserService userService;
@Autowired
private IUserBtRegisterService userBtRegisterService;
@RequestMapping("/info/login")
public JsonResult loginInfo() {
SessionStruct sessionStruct = getCurrentSessionFromRedis();
if(null != sessionStruct) {
log.info("从用户中心获取到了用户登录信息:phone:[{}]",sessionStruct.getValues().getUser().getPhoneNo());
log.info("从用户中心获取到了用户登录信息:phone:[{}]", sessionStruct.getValues().getUser().getPhoneNo());
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(UserRet.getUserRet(sessionStruct.getValues().getUser()));
loginInfo.setToken(sessionStruct.getSid());
......@@ -55,6 +60,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());
loginInfo.setLoginContext(context);
return JsonResult.buildSuccessResult("", loginInfo); //有ThreadLocal不释放的问题,不可再使用原来方式了
}else {
......@@ -82,6 +88,15 @@ public class AuthInfoController implements IBaseController {
context.setChannelId(null);
context.setCreatedFrom(user.getRegisteredFrom());
context.setAppChannel("");
if(user.getRegisteredFrom() == 222L) {
//context.setBtMerchantId(1L);
UserBtRegister userBtRegister = userBtRegisterService.findByUserId(user.getId());
if(null != userBtRegister){
context.setBtMerchantId(userBtRegister.getRegisterBtMerchantId());
}else {
context.setBtMerchantId(1L);
}
}
loginInfo.setLoginContext(context);
return JsonResult.buildSuccessResult("", loginInfo);
}
......
......@@ -94,7 +94,7 @@ public class UserController implements IBaseController {
@RequestMapping("/login/fast")
public JsonResult loginFast(
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom, String key, HttpServletRequest request) {
@RequestParam(required = false, defaultValue = "1") Long createdFrom, String key,@RequestParam(required = false)Long btRegisterChannelId ,HttpServletRequest request) {
Map<String, JsonResult> validMap = getHeaderParam(request);
if (null != validMap.get("fail")) {
return validMap.get("fail");
......@@ -110,7 +110,7 @@ public class UserController implements IBaseController {
return JsonResult.buildErrorStateResult("登录失败", null);
}
if (user == null) {
user = registerFastWhenLogin(phoneNo, channelId, createdFrom, appChannel);
user = registerFastWhenLogin(phoneNo, channelId, createdFrom, appChannel,btRegisterChannelId);
if (user == null) {
throw new UserNotExistException("用户未找到");
}
......@@ -119,6 +119,21 @@ public class UserController implements IBaseController {
// return createSession(channelId, createdFrom, appChannel, user);
}
private User registerFastWhenLogin(String phoneNo, Long channelId, Long registerFrom, String appChannel, Long btRegisterChannelId) {
String password = genRandomPwd();
LOGGER.info("用户快速注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},appChannel:{},btRegisterChannelId", phoneNo, channelId, registerFrom, appChannel,btRegisterChannelId);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户快速注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
throw new UserNotExistException("手机号错误");
}
if (null == registerFrom) {
registerFrom = 1L;
}
LOGGER.info("用户快速注册成功, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return userService.registerAndReturn(phoneNo, password, registerFrom,btRegisterChannelId);
}
/**
* 快速登录验证
*
......@@ -171,7 +186,8 @@ public class UserController implements IBaseController {
*/
@RequestMapping("/register/fast")
public JsonResult registerFast(@RequestParam String phoneNo, @RequestParam String verificationCode, @RequestParam(required = false) Long channelId,
@RequestParam(required = false) Long registerFrom, @RequestParam(required = false, defaultValue = "") String appChannel) {
@RequestParam(required = false) Long registerFrom, @RequestParam(required = false, defaultValue = "") String appChannel,
@RequestParam(required = false)Long btRegisterChannelId) {
String password = genRandomPwd();
LOGGER.info("用户快速注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},appChannel:{}", phoneNo, verificationCode, channelId, registerFrom, appChannel);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
......@@ -197,7 +213,7 @@ public class UserController implements IBaseController {
LOGGER.info("用户快速注册失败,短信验证码错误, registerFrom:{}, phoneNo:{}, verificationCode:{}", registerFrom, phoneNo, verificationCode);
return JsonResult.buildErrorStateResult("短信验证码错误", null);
}
if (!userService.register(phoneNo, password, registerFrom, getIp(), channelId)) {
if (!userService.register(phoneNo, password, registerFrom, getIp(), channelId,btRegisterChannelId)) {
LOGGER.info("用户快速注册失败,请稍后重试, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("注册失败,请稍后重试", null);
}
......@@ -220,8 +236,9 @@ public class UserController implements IBaseController {
@RequestMapping("/register")
public JsonResult register(@RequestParam String phoneNo, @RequestParam String password,
@RequestParam String verificationCode, @RequestParam(required = false) Long channelId,
@RequestParam(required = false) Long registerFrom) {
LOGGER.info("用户注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{}", phoneNo, verificationCode, channelId, registerFrom);
@RequestParam(required = false) Long registerFrom,
@RequestParam(required = false)Long btRegisterChannelId) {
LOGGER.info("用户注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},btRegisterChannelId:{}", phoneNo, verificationCode, channelId, registerFrom,btRegisterChannelId);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("手机号错误", null);
......@@ -245,7 +262,7 @@ public class UserController implements IBaseController {
LOGGER.info("用户注册失败,短信验证码错误, registerFrom:{}, phoneNo:{}, verificationCode:{}", registerFrom, phoneNo, verificationCode);
return JsonResult.buildErrorStateResult("短信验证码错误", null);
}
if (!userService.register(phoneNo, password, registerFrom, getIp(), channelId)) {
if (!userService.register(phoneNo, password, registerFrom, getIp(), channelId,btRegisterChannelId)) {
LOGGER.info("用户快速注册失败,请稍后重试, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("注册失败,请稍后重试", null);
}
......
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.xyqb.entity.enumerate.Relation;
import cn.quantgroup.user.enums.Relation;
import lombok.Data;
import javax.persistence.*;
......
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.xyqb.config.http.Timestamp2LongConverter;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* Created by Administrator on 2017/5/16.
*/
@Getter
@Setter
@ToString
@Entity
@Table(name = "user_bt_register")
public class UserBtRegister implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
private Long userId;
@Column(name = "register_bt_merchant_id")
private Long registerBtMerchantId;
@Column(name = "is_active")
private Boolean isActive = Boolean.TRUE;
//创建时间
@Column(name = "created_at")
private Timestamp createdAt;
//上一次修改时间
@Column(name = "updated_at")
@JSONField(serializeUsing = Timestamp2LongConverter.class)
private Timestamp updatedAt;
@PrePersist
public void prePersist(){
Timestamp now = new Timestamp(System.currentTimeMillis());
this.createdAt =now;
this.updatedAt =now;
}
@PreUpdate
public void preUpdate(){
Timestamp now = new Timestamp(System.currentTimeMillis());
this.createdAt =now;
this.updatedAt =now;
}
}
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.motan.retbean.XUserExtInfo;
//import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.user.enums.*;
import lombok.Data;
import javax.persistence.*;
......@@ -45,4 +47,20 @@ public class UserExtInfo implements Serializable {
@Column(name = "updated_at")
private Timestamp updateAt;
public XUserExtInfo toXUserExtInfo(){
XUserExtInfo xUserExtInfo = new XUserExtInfo();
xUserExtInfo.setId(this.id);
xUserExtInfo.setUserId(this.userId);
xUserExtInfo.setEducationEnum(cn.quantgroup.user.enums.EducationEnum.valueOf(this.educationEnum.name()));
xUserExtInfo.setIncomeEnum(cn.quantgroup.user.enums.IncomeEnum.valueOf(this.incomeEnum.name()));
xUserExtInfo.setIncomeRangeEnum(cn.quantgroup.user.enums.IncomeRangeEnum.valueOf(this.incomeRangeEnum.name()));
xUserExtInfo.setOccupationEnum(cn.quantgroup.user.enums.OccupationEnum.valueOf(this.occupationEnum.name()));
xUserExtInfo.setHasCar(this.hasCar);
xUserExtInfo.setHasSocialSecurity(this.hasSocialSecurity);
xUserExtInfo.setHasCreditCard(this.hasCreditCard);
xUserExtInfo.setMarryStatus(cn.quantgroup.user.enums.MaritalStatus.valueOf(this.marryStatus.name()));
xUserExtInfo.setCreatedAt(this.createdAt);
xUserExtInfo.setUpdateAt(this.updateAt);
return xUserExtInfo;
}
}
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.xyqb.entity.enumerate.MaritalStatus;
import cn.quantgroup.user.enums.MaritalStatus;
import lombok.*;
import javax.persistence.*;
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.enumerate.Relation;
import cn.quantgroup.user.enums.Relation;
import lombok.Data;
import org.apache.commons.collections.CollectionUtils;
......
......@@ -11,4 +11,5 @@ public class LoginProperties {
private Long createdFrom = 1L;
private String appChannel = "";
private String merchantName;
private Long btMerchantId =1L;
}
......@@ -3,7 +3,7 @@ package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import cn.quantgroup.xyqb.model.IdType;
import java.io.Serializable;
/**
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.user.enums.*;
import lombok.Data;
/**
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserSpouse;
import cn.quantgroup.xyqb.entity.enumerate.MaritalStatus;
import cn.quantgroup.user.enums.MaritalStatus;
import lombok.Data;
/**
......
......@@ -23,13 +23,21 @@ public class LoginInfo {
return JSON.parseObject(userJson, XLoginInfo.class);
}
public XLoginInfo toXLoginInfo() {
XLoginInfo xLoginInfo= new XLoginInfo();
// xLoginInfo.setUser();
return xLoginInfo;
}
@Data
public static class LoginContext {
private Long channelId;
private Long createdFrom;
private String appChannel;
private Long btMerchantId;
}
}
package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* Created by Administrator on 2017/5/16.
*/
public interface IUserBtRegisterRepository extends JpaRepository<UserBtRegister, Long>,JpaSpecificationExecutor<UserBtRegister> {
}
package cn.quantgroup.xyqb.service.session.aspect;
import java.lang.annotation.*;
/**
* 用户的白条注册信息填充标记
* Created by ocean on 2017/5/16.
*/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserBtRegisterFill {
}
package cn.quantgroup.xyqb.service.session.aspect;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* Created by Administrator on 2017/5/16.
*/
@Aspect
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE + 200)
public class UserBtRegisterFillAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(UserBtRegisterFillAspect.class);
@Autowired
private IUserBtRegisterService userBtRegisterService;
@Pointcut("@annotation(cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill)") //生成还款计划的时候,去生成趸交服务费
public void userBtRegisterFillCut() {
}
@Around("userBtRegisterFillCut()")
public Object handleSingleServiceFeeRule(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
try {
args =fillUserBtRegister(args);
}catch (Exception e){
LOGGER.error("补充用户白条登录渠道信息失败",e);
}
return pjp.proceed(args);
}
private Object[] fillUserBtRegister(Object[] args) {
for (int i = 0;i<args.length;i++){
Object obj = args[i];
if (obj instanceof SessionValue){
SessionValue value =(SessionValue)obj;
UserBtRegister userBtRegister = userBtRegisterService.findByUserId(value.getUser().getId());
if(null != userBtRegister && null != value.getLoginProperties()){
value.getLoginProperties().setBtMerchantId(userBtRegister.getRegisterBtMerchantId());
}
}
}
return args;
}
}
......@@ -8,6 +8,7 @@ import cn.quantgroup.xyqb.model.LoginProperties;
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 com.alibaba.fastjson.JSON;
import com.google.common.base.Joiner;
import lombok.extern.slf4j.Slf4j;
......@@ -121,6 +122,7 @@ public class SessionServiceImpl implements ISessionService {
}
@Override
@UserBtRegisterFill
public void persistSession(String token, SessionValue sessionValue) {
Timestamp current = new Timestamp(System.currentTimeMillis());
sessionValue.setLastAccessTime(current);
......
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.UserBtRegister;
/**
* Created by Administrator on 2017/5/16.
*/
public interface IUserBtRegisterService {
UserBtRegister findByUserId(Long userId);
UserBtRegister save(UserBtRegister userBtRegister);
}
......@@ -32,5 +32,39 @@ public interface IUserService {
User findById(Long userId);
boolean register(String phoneNo, String password, Long registerFrom, String ip, Long channelId, Long btRegisterChannelId);
List<User> findByPhones(List<String> phones);
User registerAndReturn(String phoneNo, String password, Long registerFrom, Long btRegisterChannelId);
/**
* 用户、联系人、地址信息注册
* @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 registerAndReturn( 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);
}
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.repository.IUserBtRegisterRepository;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import javax.persistence.criteria.Predicate;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/5/16.
*/
@Service
public class UserBtRegisterServiceImpl implements IUserBtRegisterService {
@Autowired
private IUserBtRegisterRepository userBtRegisterRepository;
@Override
@Cacheable(value = "btRegisterCache", key = "'userId' + #userId", unless = "#result == null", cacheManager = "cacheManager")
public UserBtRegister findByUserId(Long userId) {
if(null != userId) {
return userBtRegisterRepository.findOne((root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
list.add(cb.equal(root.get("isActive").as(Boolean.class), Boolean.TRUE));
list.add(cb.equal(root.get("userId").as(Long.class), userId));
Predicate[] p = new Predicate[list.size()];
query.where(cb.and(list.toArray(p)));
return query.getRestriction();
});
}
return null;
}
@Override
public UserBtRegister save(UserBtRegister userBtRegister) {
return userBtRegisterRepository.saveAndFlush(userBtRegister);
}
}
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.repository.IAddressRepository;
import cn.quantgroup.xyqb.repository.IContactRepository;
import cn.quantgroup.xyqb.repository.IUserBtRegisterRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.sms.ISmsService;
import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -23,6 +36,7 @@ import javax.transaction.Transactional;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
......@@ -44,6 +58,28 @@ public class UserServiceImpl implements IUserService {
@Autowired
private ISmsService smsService;
@Autowired
private IAddressRepository addressRepository;
@Autowired
private IUserBtRegisterService userBtRegisterService;
@Autowired
private IContactRepository contactRepository;
@Autowired
private IUserBtRegisterRepository userBtRegisterRepository;
@Autowired
private IIdCardService idCardService;
@Autowired
private IUserDetailService userDetailRepository;
private Long BAITIAO_CHANNEL = 222L;
private final static Random random = new Random();
@Override
public User findByPhoneInDb(String phone) {
return userRepository.findByPhoneNo(phone);
......@@ -98,6 +134,52 @@ public class UserServiceImpl implements IUserService {
});
}
@Override
public User registerAndReturn(String phoneNo, String password, Long registerFrom, Long btRegisterChannelId) {
User user = registerAndReturn(phoneNo, password, registerFrom);
if(null != user && null != btRegisterChannelId){
UserBtRegister userBtRegister = new UserBtRegister();
userBtRegister.setUserId(user.getId());
userBtRegister.setRegisterBtMerchantId(btRegisterChannelId);
userBtRegisterService.save(userBtRegister);
log.info("白条注册渠道信息保存完成,user:[{}],userBtRegister:[{}]",user,userBtRegister);
}
return user;
}
@Override
public boolean register(String phoneNo, String password, Long registerFrom, String ip, Long channelId, Long btRegisterChannelId) {
String uuid = lkbUserService.registerApp(phoneNo, password);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
User user = new User();
user.setEnable(true);
user.setPhoneNo(phoneNo);
user.setUpdatedAt(currentTime);
user.setCreatedAt(currentTime);
user.setUuid(uuid);
user.setPassword(PasswordUtil.MD5(password.toLowerCase() + Constants.PASSWORD_SALT));
//解决线上白条registerFrom为1的问题
if (channelId == 222L) {
user.setRegisteredFrom(channelId);
} else {
user.setRegisteredFrom(registerFrom);
}
//user.setRegisteredFrom(registerFrom);
user = userRepository.save(user);
if(null != user){
UserBtRegister userBtRegister = new UserBtRegister();
userBtRegister.setUserId(user.getId());
userBtRegister.setRegisterBtMerchantId(btRegisterChannelId);
userBtRegisterService.save(userBtRegister);
log.info("白条注册渠道信息保存完成");
}
smsService.sendAfterRegister(phoneNo);
return user != null;
}
@Override
public User registerAndReturn(String phoneNo, String password, Long registerFrom) {
......@@ -130,7 +212,7 @@ public class UserServiceImpl implements IUserService {
}
@Override
@Transactional(value = Transactional.TxType.REQUIRED)
@Transactional(value = Transactional.TxType.REQUIRED,rollbackOn = Exception.class)
public boolean register(String phoneNo, String password, Long registerFrom, String userIp, Long channelId) {
String uuid = lkbUserService.registerApp(phoneNo, password);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
......@@ -183,4 +265,110 @@ public class UserServiceImpl implements IUserService {
return StringUtils.equals(PasswordUtil.MD5(password.toLowerCase() + Constants.PASSWORD_SALT), user.getPassword());
}
@Override
@Transactional(value = Transactional.TxType.REQUIRED,rollbackOn = Exception.class)
public User registerAndReturn(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) {
// 用户信息
User user = new User();
user.setPhoneNo(phoneNo);
Timestamp now = new Timestamp(System.currentTimeMillis());
user.setCreatedAt(now);
user.setUpdatedAt(now);
user.setEnable(true);
UserBtRegister userBtRegister = null;
// 白条渠道,需要设置`xyqb_user`.`user_bt_register`
if (BAITIAO_CHANNEL.equals(channelId)) {
user.setRegisteredFrom(channelId);
userBtRegister = new UserBtRegister();
} else {
user.setRegisteredFrom(registeredFrom);
}
String randomCode = String.valueOf(random.nextInt(899999) + 100000);
String uuid = lkbUserService.registerApp(phoneNo, randomCode);
user.setUuid(uuid);
user.setPassword(PasswordUtil.MD5(randomCode + Constants.PASSWORD_SALT));
user = userRepository.save(user);
Long userId = user.getId();
if (null != userBtRegister){
userBtRegister.setUserId(userId);
userBtRegister.setIsActive(true);
userBtRegister.setRegisterBtMerchantId(registeredFrom);
userBtRegister.setCreatedAt(now);
userBtRegister.setUpdatedAt(now);
userBtRegisterRepository.save(userBtRegister);
}
// 地址信息
Address addressObj = new Address();
addressObj.setUserId(userId);
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);
addressObj.setCreatedAt(now);
addressObj.setUpdateAt(now);
addressRepository.save(addressObj);
try{
IdCardInfo idCardInfo = idCardService.getIdCardInfo(idNo);
UserDetail userDetail = new UserDetail();
userDetail.setPhoneNo(phoneNo);
userDetail.setIdNo(idNo);
userDetail.setUserId(userId);
userDetail.setName(name);
userDetail.setGender(idCardInfo.getGender());
userDetail.setIdType(IdType.ID_CARD);
userDetail.setCreatedAt(now);
userDetail.setUpdatedAt(now);
userDetailRepository.saveUserDetail(userDetail);
}catch (Exception e){
throw new RuntimeException("idCardService Exception");
}
// 联系人信息
if (org.apache.commons.lang3.StringUtils.isNotBlank(contacts)) {
List<Contact> contactList = JSONObject.parseObject(contacts, new TypeReference<List<Contact>>() { });
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(contactList)) {
convertContactList(userId, contactList, 2, now);
contactRepository.save(contactList);
}
}
return user;
}
/**
*
* @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++;
}
}
}
......@@ -82,6 +82,8 @@ public class UserDetailVO {
if (this.getUpdatedAt() != null) {
xUserDetail.setUpdatedAt(new Timestamp(this.getUpdatedAt()));
}
xUserDetail.setIsAuthenticated(this.getIsAuthenticated());
xUserDetail.setEnable(this.getEnable());
return xUserDetail;
......
......@@ -78,6 +78,30 @@ public class XyqbSessionContextHolder {
}
}
public static SessionStruct getXSessionFromRedis(String token){
if (token == null || token.length() != 36) {
return null;
}
String result = redisTemplate.opsForValue().get(Constants.Session.USER_SESSION_CACHE + token);
if (StringUtils.isEmpty(result)) {
return null;
}
try {
SessionValue values = JSON.parseObject(result, SessionValue.class);
if (values == null) {
return null;
}
SessionStruct sessionStruct = new SessionStruct();
sessionStruct.setSid(token);
sessionStruct.setValues(values);
return sessionStruct;
}catch (Exception ex){
LOGGER.error("序列化session出错", ex);
return null;
}
}
public static void releaseSession() {
threadSession.remove();
}
......
......@@ -8,7 +8,7 @@
<maxHistory>30</maxHistory>
</rollingPolicy>-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{ISO8601} [%thread] [%-5level] %logger{36} - %msg%n</pattern>
......
......@@ -2,6 +2,7 @@ config.accessable=false
configserver.disable=1
configserver.system=xyqb-user
#xyqb.data.mysql.jdbc-url=jdbc:mysql://192.168.4.22:3306/xyqb_user?useUnicode=true&characterEncoding=UTF8
xyqb.data.mysql.jdbc-url=jdbc:mysql://192.168.4.163:3306/xyqb_user?useUnicode=true&characterEncoding=UTF8
xyqb.data.mysql.password=qatest
......@@ -16,7 +17,7 @@ xyqb.filter.allowedHeaders=Origin, No-Cache, x-auth-token, X-Requested-With, If-
xyqb.data.redis.defaultExpiration=3600
# redis
xyqb.redis.master.host=192.168.4.163
xyqb.redis.master.host=192.168.4.22
xyqb.redis.master.port=6379
xyqb.redis.master.name=
xyqb.redis.sentinel1.host=
......@@ -30,11 +31,12 @@ xyqb.redis.sentinel3.port=0
sms.is.debug=1
# LKB client
lkb.client.url=http://192.168.192.163:8082/LKBClient/openapi
lkb.client.url=http://192.168.4.193:8083/LKBClient/openapi
lkb.client.user.register.app=/new/register/registerApp.json
lkb.client.user.register.58jr=/new/register/jr58/saveUserInfo.json
lkb.client.user.update=/new/register/updateUser.json
# LKB import
lkb.import.url=http://spider.quantgroup.cn
......
......@@ -8,7 +8,7 @@
<maxHistory>30</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{ISO8601} [%-5level] %logger{36} - %msg%n</pattern>
<pattern>%d{ISO8601} [%thread] [%-5level] %logger{36} - %msg%n</pattern>
</layout>
</appender>
......
......@@ -36,8 +36,8 @@ public class DemoApplicationTests {
@Test
public void registerFast() {
JsonResult jsonResult = userController.registerFast("18611428880", "000000", null, null, "");
Assert.assertEquals(jsonResult.getCode(), "0000");
// JsonResult jsonResult = userController.registerFast("18611428880", "000000", null, null, "");
// Assert.assertEquals(jsonResult.getCode(), "0000");
}
@Test
......
package user;
import cn.quantgroup.xyqb.Bootstrap;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.external.user.InnerController;
import cn.quantgroup.xyqb.controller.internal.user.UserController;
import cn.quantgroup.xyqb.model.JsonResult;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -23,8 +27,28 @@ public class TestUserLogin {
@Autowired
private UserController userController;
@Autowired
private InnerController innerController;
@Test
public void testBull() {
String contacts = null;
boolean notBlank = StringUtils.isNotBlank(contacts);
System.out.println("-----------------------------result:"+notBlank);
}
@Test
public void testJson() {
JsonResult addressByUserId = innerController.findAddressByUserId(22L);
// JsonResult userByUserId = innerController.findUserByPhoneNo("17811111122");
System.out.println("-------------result:"+addressByUserId);
}
@Test
public void testUserLogin() {
Long code = 1L;
String format = String.format(Constants.ZERO_FILL_TEMPLATE, code);
System.out.println("-----------format:"+format);
//访问xyqb-user拿到登录token
/*Long channelId = 1L;
String appChannel = "3";
......
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