Commit 2ca85f0f authored by 技术部-任文超's avatar 技术部-任文超

Merge branch 'master' into feature/20171030

# Conflicts:
#	.gitignore
#	src/main/java/cn/quantgroup/xyqb/Constants.java
#	src/main/java/cn/quantgroup/xyqb/controller/internal/sms/SmsController.java
#	src/main/java/cn/quantgroup/xyqb/controller/internal/user/UserController.java

合并已上线的master分支(用户联系人校验+联系人脏数据过滤 功能)
parents 83216259 1c9352ef
......@@ -109,8 +109,4 @@ Temporary Items
dump.rdb
transaction-logs/
.settings/org.eclipse.m2e.core.prefs
.settings/org.eclipse.jdt.core.prefs
.settings/org.eclipse.core.resources.prefs
.project
.classpath
.settings/
......@@ -90,7 +90,7 @@ public class CaptchaNewValidateAdvisor {
Long countIP = countIP(clientIp);
Long countPhone = countPhone(phoneNo);
Long countDeviceId = countDeviceId(deviceId);
LOGGER.info("使用图形验证码, registerFrom={}, clientIp={},手机号次数:{},设备次数:{},ip次数:{},phone:{}", registerFrom, clientIp,countPhone,countDeviceId,countIP,phoneNo);
if (countIP > Constants.Image_Need_Count || countPhone > Constants.Image_Need_Count || countDeviceId > Constants.Image_Need_Count) {
if (shouldSkipCaptchaValidate(registerFrom, captchaId, captchaValue)) {
......@@ -115,6 +115,7 @@ public class CaptchaNewValidateAdvisor {
}
return result;
}
LOGGER.info("使用错误图形验证码, registerFrom={}, clientIp={},手机号次数:{},设备次数:{},ip次数:{},phone:{}", registerFrom, clientIp,countPhone,countDeviceId,countIP,phoneNo);
result.setMsg("请输入图形验证码");
return result;
}
......
......@@ -51,7 +51,7 @@ public class LogCallHttpAspect {
}
return result;
}
@Async("logExecutor")
public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP){
Object[] args = pjp.getArgs();
String methodName = pjp.getSignature().getName();
......
......@@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.Collection;
import java.util.Collections;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
......@@ -70,12 +71,12 @@ public class RedisCaptchaStore implements CaptchaStore {
@Override
public int getSize() {
return getKeys().size();
return 0;
}
@Override
public Collection getKeys() {
return stringRedisTemplate.keys(Constants.REDIS_CAPTCHA_KEY_PATTERN);
return Collections.emptyList();
}
@Override
......
package cn.quantgroup.xyqb.config.thread;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
* Created by xuran on 2017/11/8.
*/
@Configuration
@EnableAsync
public class AsyncConfig {
/**
* 生成线程池
* @param corePoolSize
* @param maxPoolSize
* @param queueCapacity
* @param waitForCompleteOnShutdown
* @param prefix
* @return
*/
private ThreadPoolTaskExecutor generateThreadPoolTaskExecutor(int corePoolSize, int maxPoolSize, int queueCapacity,
boolean waitForCompleteOnShutdown, int keepAliveSeconds,
boolean allowCoreThreadTimeOut, String prefix) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveSeconds);
executor.setAllowCoreThreadTimeOut(allowCoreThreadTimeOut);
executor.setWaitForTasksToCompleteOnShutdown(waitForCompleteOnShutdown);
executor.setThreadNamePrefix(prefix);
executor.initialize();
return executor ;
}
/**
* 日志线程池
* @return
*/
@Bean(name = "logExecutor")
public Executor loanMqExecutor(){
return generateThreadPoolTaskExecutor(100, 2000, 2000, true, 30, true, "loanMqExecutor-");
}
}
......@@ -41,6 +41,7 @@ import java.sql.Timestamp;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.stream.Collectors;
......@@ -196,6 +197,18 @@ public class MotanUserServiceImpl implements UserMotanService {
return returnErrorValue("要保存的用户详情对象不能为null");
}
UserDetail userDetail = new UserDetail();
if (!ValidationUtil.validateChinese(userDetailUpdateBean.getName())) {
return returnErrorValue("用户姓名错误");
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(userDetailUpdateBean.getIdNo());
} catch (ParseException ex) {
log.error("用户身份证号错误, idNo: {}", userDetailUpdateBean.getIdNo(), ex);
}
if (Objects.isNull(info) || !info.isValid()) {
return returnErrorValue("身份证号码错误");
}
if (null != userDetailUpdateBean.getId() && userDetailUpdateBean.getId() > 0L) {
userDetail.setId(userDetailUpdateBean.getId());
}
......@@ -207,12 +220,7 @@ public class MotanUserServiceImpl implements UserMotanService {
userDetail.setCreatedAt(time);
userDetail.setUpdatedAt(time);
userDetail.setIdType(IdType.ID_CARD);
try {
userDetail.setGender(idCardService.getIdCardInfo(userDetailUpdateBean.getIdNo()).getGender());
} catch (ParseException e) {
log.error("根据身份证获取性别出错,userDetailUpdateBean:{}", JSON.toJSONString(userDetailUpdateBean), e);
return returnErrorValue("根据身份证获取性别出错.");
}
userDetail.setGender(info.getGender());
userDetail.setEmail(userDetailUpdateBean.getEmail());
userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) {
......@@ -241,6 +249,18 @@ public class MotanUserServiceImpl implements UserMotanService {
if (StringUtils.isBlank(userDetailSaveBean.getIdNo())) {
return returnErrorValue("用户身份证为空");
}
if (!ValidationUtil.validateChinese(userDetailSaveBean.getName())) {
return returnErrorValue("用户姓名错误");
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(userDetailSaveBean.getIdNo());
} catch (ParseException ex) {
log.error("用户身份证号错误, idNo: {}", userDetailSaveBean.getIdNo(), ex);
}
if (Objects.isNull(info) || !info.isValid()) {
return returnErrorValue("身份证号码错误");
}
Timestamp time = new Timestamp(System.currentTimeMillis());
UserDetail userDetail = userDetailService.findByUserId(userId);
if (userDetail == null) {
......@@ -251,19 +271,12 @@ public class MotanUserServiceImpl implements UserMotanService {
} else {
userDetail.setUpdatedAt(time);
}
userDetail.setName(userDetail.getName());
userDetail.setPhoneNo(userDetail.getPhoneNo());
userDetail.setName(userDetailSaveBean.getName());
userDetail.setPhoneNo(userDetailSaveBean.getPhoneNo());
userDetail.setIdType(IdType.ID_CARD);
if (StringUtils.isNotBlank(userDetail.getIdNo())) {
try {
userDetail.setGender(idCardService.getIdCardInfo(userDetail.getIdNo()).getGender());
} catch (ParseException e) {
log.error("根据身份证获取性别出错,身份证号码:{}", userDetail.getIdNo(), e);
return returnErrorValue("身份证信息出错");
}
userDetail.setIdNo(userDetail.getIdNo());
}
userDetail.setEmail(userDetail.getEmail());
userDetail.setGender(info.getGender());
userDetail.setIdNo(userDetailSaveBean.getIdNo());
userDetail.setEmail(userDetailSaveBean.getEmail());
userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) {
return returnSuccessValue(fromUserDetail(userDetail));
......@@ -335,7 +348,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override
public UserSysResult<List<XContact>> findContactsByUserId(Long userId) {
List<Contact> contacts = contactService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId, true);
List<XContact> xContacts = convertObject(JSON.toJSONString(contacts), new TypeReference<List<XContact>>() {
});
return returnSuccessValue(xContacts);
......@@ -353,23 +366,19 @@ public class MotanUserServiceImpl implements UserMotanService {
String jsonContacts = JSON.toJSONString(contacts);
List<Contact> contactList = null;
try {
contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>() {
});
contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>(){});
} catch (Exception e) {
log.error("联系人列表转换错误", e);
return returnErrorValue("联系人转换错误");
}
Timestamp now = new Timestamp(System.currentTimeMillis());
for (Contact c : contactList) {
c.setId(null);
c.setUserId(userId);
c.setRelation(c.getRelation() == null ? Relation.OTHER : c.getRelation());
c.setCreatedAt(now);
c.setUpdateAt(now);
}
List<Contact> result = contactService.save(contactList);
List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>() {
});
if (!c.valid()) {
log.info("用户手机号或姓名错误, phoneNo:{},name:{}", c.getPhoneNo(), c.getName());
return returnErrorValue("用户手机号或姓名错误");
}
}
List<Contact> result = contactService.save(userId, contactList);
List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>(){});
return returnSuccessValue(xResult);
}
......@@ -388,7 +397,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override
public UserSysResult<XAddress> saveAddress(Long userId, Long provinceCode, String province, Long cityCode, String city,
Long districtCode, String district, String address) {
if (null == userId || null == provinceCode || null == cityCode) {
if (null == userId || null == provinceCode || null == cityCode || StringUtils.isBlank(address)) {
return returnErrorValue("参数不能为空");
}
Address addressObj = addressService.findByUserId(userId);
......@@ -515,7 +524,7 @@ public class MotanUserServiceImpl implements UserMotanService {
return returnErrorValue("用户不能为空");
}
UserSpouse userSpouse = userSpouseService.findByUserId(userId);
if (userSpouse == null) {
if (userSpouse == null || !userSpouse.valid()) {
userSpouse = new UserSpouse(userId);
userSpouse.setStatus(MaritalStatus.UNKNOWN);
}
......@@ -594,8 +603,8 @@ public class MotanUserServiceImpl implements UserMotanService {
if (!ValidationUtil.validatePhoneNo(spousePhone)) {
return returnErrorValue("手机号格式错误");
}
if (StringUtils.isBlank(spouseName)) {
return returnErrorValue("配偶姓名不能为空");
if (!ValidationUtil.validateChinese(spouseName)) {
return returnErrorValue("配偶姓名错误");
}
}
UserSpouse userSpouse = userSpouseService.findByUserId(xUserSpouse.getUserId());
......@@ -805,7 +814,7 @@ public class MotanUserServiceImpl implements UserMotanService {
log.info("第三方(聚美)登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知", registerFrom, phoneNo, idNo, name);
}
if (StringUtils.isNotEmpty(idNo) && StringUtils.isNotEmpty(name)) {
if (StringUtils.isNotBlank(idNo) && StringUtils.isNotBlank(name) && ValidationUtil.validateChinese(name)) {
IdCardInfo cardInfo;
try {
cardInfo = idCardService.getIdCardInfoWithExceptions(idNo);
......
......@@ -35,6 +35,8 @@ 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;
......@@ -71,7 +73,6 @@ public class AppController implements IBaseController {
* 第三方用户登录
*/
@RequestMapping("/login")
@LogHttpCaller
public JsonResult login(
String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
......@@ -83,7 +84,7 @@ public class AppController implements IBaseController {
}
String requestIp = IPUtil.getRemoteIP(request);
LOGGER.info("第三方用户登录, loginFrom:{}, requestIp:{}", registerFrom, requestIp);
LOGGER.info("app/login第三方用户登录, loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom,channelId,btRegisterChannelId, requestIp,idNo,name);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
......@@ -116,7 +117,6 @@ public class AppController implements IBaseController {
/**
* 给app用
*/
@LogHttpCaller
@RequestMapping("/login2")
public JsonResult login2(
String phoneNo,
......@@ -130,7 +130,7 @@ public class AppController implements IBaseController {
}
String requestIp = IPUtil.getRemoteIP(request);
LOGGER.info("第三方用户登录, loginFrom:{}, requestIp:{}", registerFrom, requestIp);
LOGGER.info("第三方用户登录, loginFrom:{},channelId:{}, requestIp:{}", registerFrom,channelId, requestIp);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
......@@ -169,7 +169,7 @@ public class AppController implements IBaseController {
}
String requestIp = IPUtil.getRemoteIP(request);
LOGGER.info("第三方用户登录, loginFrom:{}, requestIp:{}", registerFrom, requestIp);
LOGGER.info("app/login_super第三方用户登录, loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom,channelId,btRegisterChannelId, requestIp,idNo,name);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
......@@ -200,7 +200,7 @@ public class AppController implements IBaseController {
context.setAppChannel(appChannel);
loginInfo.setLoginContext(context);
LOGGER.info("第三方用户获取信息登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
LOGGER.info("第三方用户获取信息登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel,channelId);
return JsonResult.buildSuccessResult("", loginInfo);
......@@ -233,14 +233,10 @@ public class AppController implements IBaseController {
* @return
*/
private User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId) {
String randomCode = String.valueOf(random.nextInt(899999) + 100000);
String uuid = lkbUserService.registerApp(phoneNo, randomCode);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
LOGGER.info("第三方登录用户,保存 User");
User user = new User();
if (channelId == 222L) {
user.setRegisteredFrom(channelId);
......@@ -264,7 +260,7 @@ public class AppController implements IBaseController {
LOGGER.info("第三方(聚美)登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知", registerFrom, phoneNo, idNo, name);
}
if (StringUtils.isNotEmpty(idNo) && StringUtils.isNotEmpty(name)) {
if (StringUtils.isNotBlank(idNo) && StringUtils.isNotBlank(name) && ValidationUtil.validateChinese(name)) {
LOGGER.info("第三方登录用户,保存 UserDetail");
IdCardInfo cardInfo;
try {
......@@ -286,12 +282,7 @@ public class AppController implements IBaseController {
LOGGER.error("保存 UserDetail 出现异常", e);
}
}
//增加登陆统计发送
UserStatistics statistics=new UserStatistics(user,null,2,channelId);
MqUtils.sendLoanVest(statistics);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
MqUtils.sendRegisterMessage(channelId,user);
return user;
}
......
package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Address;
......@@ -14,20 +15,7 @@ import cn.quantgroup.xyqb.entity.enumerate.IncomeEnum;
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.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.AddressRet;
import cn.quantgroup.xyqb.model.ContactRet;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserAssociation;
import cn.quantgroup.xyqb.model.UserDetailRet;
import cn.quantgroup.xyqb.model.UserExtInfoRet;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.model.UserRegisterMqMessage;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.UserSpouseRet;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.model.XContactInfo;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.session.ISessionService;
......@@ -39,6 +27,7 @@ import cn.quantgroup.xyqb.service.user.IUserExtInfoService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.user.IUserSpouseService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
......@@ -51,11 +40,7 @@ import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.*;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
......@@ -68,12 +53,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
//import cn.quantgroup.xyqb.entity.enumerate.EducationEnum;
//import cn.quantgroup.xyqb.entity.enumerate.IncomeEnum;
//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.Relation;
import javax.servlet.http.HttpServletRequest;
/**
* Created by Miraculous on 2016/12/19.
......@@ -210,6 +190,7 @@ public class InnerController implements IBaseController {
public JsonResult saveUser(
String phoneNo, Long registeredFrom, Long createdAt, Long updatedAt,
String password, String uuid) {
LOGGER.info("保存用户,phoneNo:{},registeredFrom;{},uuid:{}",phoneNo,registeredFrom,uuid);
//参数验证
if (StringUtils.isBlank(phoneNo)) {
return JsonResult.buildErrorStateResult("用户手机号不能为空.", null);
......@@ -231,6 +212,7 @@ public class InnerController implements IBaseController {
if (user == null) {
user = new User();
} else if (!user.getEnable()) {
LOGGER.info("用户已经注销,phoneNo:{},",phoneNo);
return JsonResult.buildErrorStateResult("用户已经注销", null);
}
if (org.apache.commons.lang.StringUtils.isEmpty(user.getUuid())) {
......@@ -246,22 +228,19 @@ public class InnerController implements IBaseController {
user = userService.saveUser(user);
UserRet userRet = null;
if (user != null) {
UserStatistics statistics=new UserStatistics(user,null,2,registeredFrom);
MqUtils.sendLoanVest(statistics);
userRet = new UserRet(user);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
userRet = MqUtils.sendRegisterMessage(registeredFrom, user);
}
return JsonResult.buildSuccessResult(null, userRet);
}
/**
* 保存用户详细信息
*/
@RequestMapping("/user_detail/save")
public JsonResult saveUserDetail(Long userId, String phoneNo, String name, String idNo,
String email, Long id) {
LOGGER.info("保存用户详细信息,phoneNo:{},userId;{},name:{},idNo:{},email;{}",phoneNo,userId,name,idNo,email);
//参数验证
if (userId == null || userId == 0L) {
return JsonResult.buildErrorStateResult("用户id为空.", null);
......@@ -270,35 +249,40 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("用户手机号为空.", null);
}
if (StringUtils.isBlank(name)) {
return JsonResult.buildErrorStateResult("用户名为空.", null);
return JsonResult.buildErrorStateResult("用户名为空.", null);
}
if (StringUtils.isBlank(idNo)) {
return JsonResult.buildErrorStateResult("用户身份证为空.", null);
}
if (!ValidationUtil.validateChinese(name)) {
return JsonResult.buildErrorStateResult("用户姓名错误", null);
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(idNo);
} catch (ParseException ex) {
LOGGER.error("用户身份证号错误, idNo: {}", idNo);
return JsonResult.buildErrorStateResult("身份证号码错误", null);
}
if (Objects.isNull(info) || !info.isValid()) {
return JsonResult.buildErrorStateResult("身份证号码错误", null);
}
UserDetail userDetail=userDetailService.findByUserId(userId);
Timestamp time = new Timestamp(System.currentTimeMillis());
if(null==userDetail){
userDetail = new UserDetail();
userDetail.setCreatedAt(time);
}
if (id != null && id > 0) {
userDetail.setId(id);
}
userDetail.setUserId(userId);
userDetail.setName(name);
userDetail.setPhoneNo(phoneNo);
userDetail.setIdNo(idNo);
if (id != null && id > 0) {
userDetail.setId(id);
}
userDetail.setUpdatedAt(time);
userDetail.setIdType(IdType.ID_CARD);
try {
userDetail.setGender(idCardService.getIdCardInfo(idNo).getGender());
} catch (ParseException e) {
LOGGER.error("根据身份证获取性别出错,错误信息:" + e);
return JsonResult.buildErrorStateResult(null, null);
}
userDetail.setGender(info.getGender());
userDetail.setEmail(email);
userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) {
......@@ -355,7 +339,7 @@ public class InnerController implements IBaseController {
if (null == userId) {
return JsonResult.buildErrorStateResult(null, null);
}
List<Contact> contacts = contactService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId, true);
if (null == contacts || contacts.size() == 0) {
return JsonResult.buildErrorStateResult(null, Collections.emptyList());
}
......@@ -364,7 +348,7 @@ public class InnerController implements IBaseController {
@RequestMapping("/contact/save/contacts")
public JsonResult save2Contact(Long userId, @RequestParam(value = "contacts") String contactsStr) {
LOGGER.info("保存用户联系人:userId:{}, contacts:" + contactsStr);
LOGGER.info("保存用户联系人:userId:{}, contacts:{}",userId, contactsStr);
if (StringUtils.isEmpty(contactsStr)) {
return JsonResult.buildErrorStateResult(null, null);
}
......@@ -372,40 +356,53 @@ public class InnerController implements IBaseController {
LOGGER.info("用户ID不能为空");
return JsonResult.buildErrorStateResult(null, null);
}
List<Contact> userContact = contactService.findByUserId(userId);
if (userContact != null && userContact.size() >= 2) {
return JsonResult.buildSuccessResult(null, ContactRet.contacts2ContactRets(userContact));
}
List<Contact> contacts = JSONObject.parseObject(contactsStr, new TypeReference<List<Contact>>() {
});
List<Contact> contacts = JSONObject.parseObject(contactsStr, new TypeReference<List<Contact>>(){});
if (CollectionUtils.isEmpty(contacts)) {
LOGGER.info("联系人不能空");
return JsonResult.buildErrorStateResult(null, null);
}
for(Contact contact:contacts){
if (!ValidationUtil.validatePhoneNo(contact.getPhoneNo())) {
LOGGER.info("用户手机号错误, phoneNo:{}", contact.getPhoneNo());
return JsonResult.buildErrorStateResult(null, null);
}
if (!ValidationUtil.validateChinese(contact.getName())) {
LOGGER.info("用户姓名错误, name:{}", contact.getName());
return JsonResult.buildErrorStateResult("null", null);
}
}
Timestamp now = new Timestamp(System.currentTimeMillis());
convertContactList(userId, contacts, now);
List<Contact> result = contactService.save(contacts);
for(Contact contact : contacts){
if (!contact.valid()) {
LOGGER.info("用户手机号或姓名错误, phoneNo:{},name:{}", contact.getPhoneNo(), contact.getName());
return JsonResult.buildErrorStateResult(null, null);
}
}
List<Contact> result = contactService.save(userId, contacts);
return JsonResult.buildSuccessResult(null, ContactRet.contacts2ContactRets(result));
}
private void convertContactList(Long userId, List<Contact> contacts, Timestamp now) {
for (Contact c : contacts) {
c.setId(null);
c.setUserId(userId);
c.setRelation(c.getRelation() == null ? cn.quantgroup.user.enums.Relation.OTHER : c.getRelation());
c.setCreatedAt(now);
c.setUpdateAt(now);
@RequestMapping("/contact/update/contact")
public JsonResult updateContact(@RequestParam Long contactId, @RequestParam(required = false) String name,
@RequestParam(required = false) String phoneNo,
@RequestParam(required = false) Relation relation, String key,
@RequestParam String reason,HttpServletRequest request) {
if (!"@qwsdedad131323213w!".equals(key) || contactId == null) {
return JsonResult.buildErrorStateResult("参数不合法", null);
}
if (StringUtils.isEmpty(name) && StringUtils.isEmpty(phoneNo) ){
return JsonResult.buildErrorStateResult("修改联系人修改条件不能都为空", null);
}
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户手机号错误, phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("用户手机号错误", null);
}
if (!ValidationUtil.validateChinese(name)) {
LOGGER.info("用户姓名错误, name:{}", name);
return JsonResult.buildErrorStateResult("用户姓名错误", null);
}
if(StringUtils.isEmpty(reason)){
return JsonResult.buildErrorStateResult("修改原因不能为空", null);
}
Contact contact = contactService.findById(contactId);
if (null == contact) {
return JsonResult.buildErrorStateResult("修改联系人不存在", null);
}
contact = contactService.saveContact(name, phoneNo, relation, contact);
String ip= IPUtil.getRemoteIP(request);
LOGGER.info("修改后联系人信息:{},修改原因:{},操作ip:{}",contact,reason,ip);
return JsonResult.buildSuccessResult("修改联系人成功", contact);
}
@RequestMapping("/address/search/user_id")
......@@ -424,9 +421,10 @@ public class InnerController implements IBaseController {
public JsonResult saveAddress(
Long userId, Long provinceCode, Long cityCode, String city,
Long districtCode, String district, String address, String province) {
LOGGER.info("保存地址详情:city:{},province:{}" + city, province);
if (userId == null || provinceCode == null || cityCode == null) {
return JsonResult.buildErrorStateResult(null, null);
LOGGER.info("保存地址详情:city:{},province:{},district:{}, address:{},userId:{}" , city, province, district, address, userId);
if (userId == null || provinceCode == null || cityCode == null || StringUtils.isBlank(address)) {
LOGGER.info("错误保存地址详情,其中参数不能为空:city:{},province:{},district:{}, address:{},userId:{}" , city, province, district, address, userId);
return JsonResult.buildErrorStateResult("参数不能为空", null);
}
Address addressObj = addressService.findByUserId(userId);
if (addressObj == null) {
......@@ -444,10 +442,12 @@ public class InnerController implements IBaseController {
addressObj.setAddress(address);
addressObj.setProvince(province);
addressObj = addressService.save(addressObj);
LOGGER.info("保存后地址详情:{}",addressObj);
return JsonResult.buildSuccessResult(null, AddressRet.address2AddressRet(addressObj));
}
@RequestMapping("/user_ext_info/update")
@LogHttpCaller
public JsonResult updateMarryStatus(
Long userId, IncomeEnum incomeEnum, IncomeRangeEnum incomeRangeEnum,
OccupationEnum occupationEnum, EducationEnum educationEnum, Boolean hasCar,
......@@ -525,6 +525,7 @@ public class InnerController implements IBaseController {
}
@RequestMapping("/user_ext_info/search/user_id")
@LogHttpCaller
public JsonResult searchUserExtInfoByUserId(Long userId) {
if (userId == null) {
return JsonResult.buildErrorStateResult("userId不能为空", null);
......@@ -557,7 +558,7 @@ public class InnerController implements IBaseController {
if (null != userDetail) {
Address address = addressService.findByUserId(userDetail.getUserId());
List<Contact> contacts = contactService.findByUserId(userDetail.getUserId());
List<Contact> contacts = contactService.findByUserId(userDetail.getUserId(), true);
UserExtInfo extInfo = userExtInfoService.findByUserId(userDetail.getUserId());
bean.setUserId(userDetail.getUserId());
bean.setPhoneNo(userDetail.getPhoneNo());
......@@ -609,7 +610,7 @@ public class InnerController implements IBaseController {
if (null != userDetail) {
Address address = addressService.findByUserId(userDetail.getUserId());
List<Contact> contacts = contactService.findByUserId(userDetail.getUserId());
List<Contact> contacts = contactService.findByUserId(userDetail.getUserId(), true);
UserExtInfo extInfo = userExtInfoService.findByUserId(userDetail.getUserId());
bean.setUserId(userDetail.getUserId());
bean.setPhoneNo(userDetail.getPhoneNo());
......@@ -710,6 +711,24 @@ public class InnerController implements IBaseController {
return JsonResult.buildSuccessResult("用户已禁用.", user.getEnable() == false);
}
/**
* 清除用户缓存信息
* @param phoneNo
* @return
*/
@RequestMapping("/flush/cache")
public JsonResult flushCache(String phoneNo) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号格式错误", null);
}
User user = userService.findByPhoneInDb(phoneNo);
if (null == user) {
return JsonResult.buildErrorStateResult("未查询到该用户,用户phoneNo:" + phoneNo, null);
}
sessionService.deleteByUserId(user.getId());
LOGGER.info("删除用户缓存信息,phoneNo:{},userId:{},", user.getPhoneNo(), user.getId());
return JsonResult.buildSuccessResult("用户缓存信息已经删除", null);
}
@RequestMapping("/user/spouse/save")
public JsonResult saveSpouse(Long userId, MaritalStatus status, String spousePhone, String spouseName) {
if (userId == null || userId == 0) {
......@@ -719,8 +738,8 @@ public class InnerController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(spousePhone)) {
return JsonResult.buildErrorStateResult("手机号格式错误", null);
}
if (StringUtils.isBlank(spouseName)) {
return JsonResult.buildErrorStateResult("配偶姓名不能为空", null);
if (!ValidationUtil.validateChinese(spouseName)) {
return JsonResult.buildErrorStateResult("配偶姓名错误", null);
}
}
UserSpouse userSpouse = userSpouseService.findByUserId(userId);
......@@ -744,7 +763,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("用户不能为空", null);
}
UserSpouse userSpouse = userSpouseService.findByUserId(userId);
if (userSpouse == null) {
if (userSpouse == null || !userSpouse.valid()) {
userSpouse = new UserSpouse(userId);
userSpouse.setStatus(cn.quantgroup.user.enums.MaritalStatus.UNKNOWN);
}
......@@ -772,6 +791,16 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
}
/**
* 手机号批量查询uuid
* @param userPhones
* @return
*/
@RequestMapping("/uuid/findByPhones")
public JsonResult getUuidsByPhones(@RequestParam("userPhones") String userPhones) {
return JsonResult.buildErrorStateResult("主库不提供查询", null);
}
/**
* 重置密码接口,供内部人员使用(例如绝影)
*/
......@@ -798,6 +827,7 @@ public class InnerController implements IBaseController {
* 保存用户信息,地址信息,联系人信息
*/
@RequestMapping("/user/save_multi")
@LogHttpCaller
public JsonResult saveMulti(
String registeredFrom,
String channelId,
......@@ -819,7 +849,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("注册渠道异常.", null);
}
if (!NumberUtils.isDigits(phoneNo)) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号异常.", null);
}
if (StringUtils.isBlank(name)) {
......
......@@ -2,17 +2,25 @@ package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserModel;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.ValidationUtil;
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.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.Objects;
/**
* 同步用户数据,第三方模块访问时
* Created by Miraculous on 15/12/29.
......@@ -20,13 +28,14 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/sync")
public class SyncUserController {
private static final Logger LOGGER = LoggerFactory.getLogger(SyncUserController.class);
@Autowired
private IUserService userService;
@Autowired
private IUserDetailService userDetailService;
/*@Autowired
private IUserDetailRepository userDetailRepository;*/
@Autowired
private IIdCardService idCardService;
@Autowired
......@@ -56,9 +65,22 @@ public class SyncUserController {
@RequestMapping("/save_detail")
public JsonResult saveUserDetail(String key, UserDetail userDetail) {
if (StringUtils.isEmpty(key) || !"abc1234".equals(key)) {
if (StringUtils.isEmpty(key) || !"abc1234".equals(key) || Objects.isNull(userDetail) || StringUtils.isBlank(userDetail.getPhoneNo())) {
return JsonResult.buildErrorStateResult(null, null);
}
if (!ValidationUtil.validateChinese(userDetail.getName())) {
return JsonResult.buildErrorStateResult("姓名错误", null);
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(userDetail.getIdNo());
} catch (ParseException ex) {
LOGGER.error("身份证号错误, idNo: {}", userDetail.getIdNo());
return JsonResult.buildErrorStateResult("身份证号码错误", null);
}
if (Objects.isNull(info) || !info.isValid()) {
return JsonResult.buildErrorStateResult("身份证号码错误", null);
}
String phoneNo = userDetail.getPhoneNo();
User user = userService.findByPhoneWithCache(phoneNo);
if (null == user) {
......
......@@ -11,6 +11,7 @@ import cn.quantgroup.xyqb.model.ContactRet;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import org.apache.commons.collections.CollectionUtils;
......@@ -200,7 +201,7 @@ public class UserCenterController {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId, true);
Map<String, Object> result = new HashMap<>();
if(null != userExtInfo) {
result.put("contacts", null != contacts && contacts.size() > 0 ? true : false);
......@@ -244,32 +245,18 @@ public class UserCenterController {
LOGGER.error("保存联系人,联系人参数为空.contactJson:{}", contactJson);
return JsonResult.buildErrorStateResult(null, null);
}
List<Contact> userContact = contactService.findByUserId(userId);
/*if(userContact != null && userContact.size() >= 2) {
return JsonResult.buildSuccessResult(null, ContactRet.contacts2ContactRets(userContact));
}*/
//推翻之前逻辑,联系人可以更改.如果数据库已有记录.则更改
List<Contact> contacts = JSONObject.parseObject(contactJson, new TypeReference<List<Contact>>() {});
Timestamp now = new Timestamp(System.currentTimeMillis());
List<Contact> contacts = JSONObject.parseObject(contactJson, new TypeReference<List<Contact>>(){});
if (CollectionUtils.isEmpty(contacts)) {
return JsonResult.buildErrorStateResult("参数转换错误", null);
}
if(null != userContact && userContact.size() > 0) {
for(int i = 0; i < contacts.size(); i ++) {
contacts.get(i).setId(userContact.get(i).getId());
contacts.get(i).setUserId(userContact.get(i).getUserId());
contacts.get(i).setCreatedAt(now);
contacts.get(i).setUpdateAt(now);
}
} else {
for (Contact c : contacts) {
c.setId(null);
c.setUserId(userId);
c.setCreatedAt(now);
c.setUpdateAt(now);
LOGGER.info("联系人不能空");
return JsonResult.buildErrorStateResult(null, null);
}
for(Contact contact : contacts){
if (!contact.valid()) {
LOGGER.info("用户手机号或姓名错误, phoneNo:{},name:{}", contact.getPhoneNo(), contact.getName());
return JsonResult.buildErrorStateResult(null, null);
}
}
List<Contact> result = contactService.save(contacts);
List<Contact> result = contactService.save(userId, contacts);
return JsonResult.buildSuccessResult(null, result);
}
......@@ -285,8 +272,8 @@ public class UserCenterController {
@RequestMapping("/address/save")
public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address,
Long districtCode, String district) {
LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{}", phoneNo, province, provinceCode, city, cityCode);
if (StringUtils.isEmpty(phoneNo) || provinceCode == null || cityCode == null) {
LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address);
if (StringUtils.isEmpty(phoneNo) || provinceCode == null || cityCode == null || StringUtils.isBlank(address)) {
return JsonResult.buildErrorStateResult("参数错误", null);
}
Long userId = queryUserId(phoneNo);
......@@ -350,7 +337,7 @@ public class UserCenterController {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
List<Contact> contacts = contactService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId, true);
return JsonResult.buildSuccessResult(null, contacts);
}
......
......@@ -228,6 +228,7 @@ public class SmsController implements IBaseController {
redisTemplate.expire(verificationPhoneCountKey, Constants.ONE_DAY,TimeUnit.SECONDS);
if (getPhoneVerificationCount > PHONE_MAX_PER_DAY) {
LOGGER.info("您手机号已经达到获取今天短信验证码上限:phoneNo:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildErrorStateResult("今天已获取20次短信验证码,请使用语音验证码或明天再试", null);
}
String verificationIPCountKey = getIp();
......@@ -238,12 +239,13 @@ public class SmsController implements IBaseController {
// // return JsonResult.buildErrorStateResult("您当前ip已经达到获取今天验证码上限", null);
// //}
//}
LOGGER.info("请求短信新版本接口:phoneNo:{},deviceId:{},IP:{}",phoneNo,deviceId,getIp());
if (!StringUtils.isEmpty(deviceId)) {
String verificationDeviceCountKey = Constants.REDIS_SMS_DEVICE_COUNT + deviceId;
Long getDeviceVerificationCount = redisTemplate.opsForHash().increment(verificationDeviceCountKey, Constants.REDIS_SMS_DEVICE_COUNT, 1);
redisTemplate.expire(verificationDeviceCountKey, Constants.ONE_DAY,TimeUnit.SECONDS);
if (getDeviceVerificationCount > DEVICE_MAX_PER_DAY) {
LOGGER.info("您设备已经达到获取今天短信验证码上限:phoneNo:{},deviceId:{},ip:{}",phoneNo,verificationDeviceCountKey,getIp());
return JsonResult.buildErrorStateResult("您设备已经达到获取今天短信验证码上限", null);
}
}
......@@ -251,6 +253,7 @@ public class SmsController implements IBaseController {
String key = Constants.REDIS_PREFIX_VERIFICATION_CODE + phoneNo;
long expire = redisTemplate.getExpire(key, TimeUnit.MINUTES);
if (expire >= EXPIRE_MINUTES - 1) {
LOGGER.info("sendVerificationCode2New1分钟内不能重复获取验证码:phoneNo:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildSuccessResult("1分钟内不能重复获取验证码", null);
}
String randomCode = smsIsDebug ? "0000" : String.valueOf(random.nextInt(8999) + 1000);
......@@ -269,9 +272,10 @@ public class SmsController implements IBaseController {
if(needImageVlidate(verificationIPCountKey,deviceId,phoneNo)){
return JsonResult.buildSuccessResult("发送成功", uniqueId,0003L);
}
LOGGER.info("sendVerificationCode2New获取短信成功:phone:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildSuccessResult("发送成功", uniqueId);
} catch (Exception e) {
LOGGER.error("发送短信验证码失败");
LOGGER.error("发送短信验证码失败:phone:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildErrorStateResult("发送失败", null);
}
}
......
......@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaFineteValidator;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaValidator;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.aspect.token.OneTimeTokenValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
......@@ -15,7 +14,6 @@ import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserModel;
import cn.quantgroup.xyqb.model.UserRegisterMqMessage;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.session.ISessionService;
......@@ -145,7 +143,7 @@ public class UserController implements IBaseController {
@RequestParam(required = false,defaultValue = "xyqb") String key,
HttpServletRequest request, String openId,
@RequestParam(required = false) String dimension) {
LOGGER.info("user/login,请求参数channelId:{},appChannel:{},createdFrom:{},userId:{},key:{},openId:{},dimension:{},",channelId,appChannel,createdFrom,userId,key,openId,dimension);
Merchant merchant = merchantService.findMerchantByName(key);
if (merchant == null) {
return JsonResult.buildErrorStateResult("未知的连接", null);
......@@ -178,7 +176,6 @@ public class UserController implements IBaseController {
}
@RequestMapping("/login/fast")
@LogHttpCaller
public JsonResult loginFast(
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
......@@ -186,6 +183,7 @@ public class UserController implements IBaseController {
@RequestParam(required = false)Long btRegisterChannelId,
@RequestParam(required = false) String dimension ,HttpServletRequest request) {
Map<String, JsonResult> validMap = getHeaderParam(request);
LOGGER.info("user/login/fast,请求参数channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{},",channelId,appChannel,createdFrom,btRegisterChannelId,key,dimension);
if (null != validMap.get("fail")) {
return validMap.get("fail");
}
......@@ -200,6 +198,7 @@ public class UserController implements IBaseController {
smsValidForFastLogin(phoneNo, verificationCode);
User user = userService.findByPhoneWithCache(phoneNo);
if (user != null && !user.getEnable()) {
LOGGER.error("用户不存在,或者已经注销,phoneNo:{}",phoneNo);
return JsonResult.buildErrorStateResult("登录失败", null);
}
if (user == null) {
......@@ -230,11 +229,7 @@ public class UserController implements IBaseController {
}
User user=userService.registerAndReturn(phoneNo, password, registerFrom,btRegisterChannelId);
LOGGER.info("用户快速注册成功, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
UserStatistics statistics=new UserStatistics(user,dimension,2,channelId);
MqUtils.sendLoanVest(statistics);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
MqUtils.sendRegisterMessage(channelId, user);
return user;
}
......@@ -299,7 +294,7 @@ public class UserController implements IBaseController {
@RequestParam(required = false) Long registerFrom, @RequestParam(required = false, defaultValue = "") String appChannel,
@RequestParam(required = false)Long btRegisterChannelId,@RequestParam(required = false)String dimension) {
String password = genRandomPwd();
LOGGER.info("用户快速注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},appChannel:{}", phoneNo, verificationCode, channelId, registerFrom, appChannel);
LOGGER.info("用户快速注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},appChannel:{},btRegisterChannelId:{},dimension:{}", phoneNo, verificationCode, channelId, registerFrom, appChannel,btRegisterChannelId,dimension);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户快速注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("手机号错误", null);
......@@ -340,13 +335,12 @@ public class UserController implements IBaseController {
* @param channelId
* @return
*/
@LogHttpCaller
@RequestMapping("/register")
public JsonResult register(@RequestParam String phoneNo, @RequestParam String password,
@RequestParam String verificationCode, @RequestParam(required = false) Long channelId,
@RequestParam(required = false) Long registerFrom,
@RequestParam(required = false)Long btRegisterChannelId,@RequestParam(required = false)String dimension) {
LOGGER.info("用户注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},btRegisterChannelId:{}", phoneNo, verificationCode, channelId, registerFrom,btRegisterChannelId);
LOGGER.info("用户注册, phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},btRegisterChannelId:{},dimension:{}", phoneNo, verificationCode, channelId, registerFrom,btRegisterChannelId,dimension);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("手机号错误", null);
......@@ -450,8 +444,16 @@ public class UserController implements IBaseController {
*/
@RequestMapping("/exists_token")
public JsonResult checkToken(@RequestParam String token) {
if(StringUtils.isEmpty(token)){
return JsonResult.buildSuccessResult(null,false);
}
if(token.contains("*")){
return JsonResult.buildSuccessResult(null,false);
}
String tokenKey = Constants.SESSION_PREFIX + token;
return JsonResult.buildSuccessResult(null, stringRedisTemplate.hasKey(tokenKey));
String tokenKey2 = Constants.Session.USER_SESSION_CACHE + token;
return JsonResult.buildSuccessResult(null, stringRedisTemplate.hasKey(tokenKey)||stringRedisTemplate.hasKey(tokenKey2));
}
......@@ -569,6 +571,7 @@ public class UserController implements IBaseController {
MqUtils.sendLoanVest(statistics);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
} else {
LOGGER.error("用户不存在,或者已经注销,userId:{}",userId);
return JsonResult.buildErrorStateResult("登录失败", null);
}
}
......
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.Data;
import javax.persistence.*;
......@@ -32,4 +33,13 @@ public class Contact implements Serializable {
private Timestamp createdAt;
@Column(name = "updated_at")
private Timestamp updateAt;
/**
* 数据合法性校验
* @return
*/
public boolean valid(){
return (ValidationUtil.validatePhoneNo(this.phoneNo) && ValidationUtil.validateChinese(this.name));
}
}
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.entity;
import cn.quantgroup.user.enums.MaritalStatus;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.*;
import javax.persistence.*;
......@@ -44,4 +45,12 @@ public class UserSpouse implements Serializable {
public UserSpouse(Long userId) {
this.userId = userId;
}
/**
* 数据合法性校验
* @return
*/
public boolean valid(){
return (ValidationUtil.validatePhoneNo(this.spousePhone) && ValidationUtil.validateChinese(this.spouseName));
}
}
......@@ -55,7 +55,7 @@ public class PageServiceImpl implements IPageService {
private PageType pageContacts = new PageType("contacts", false) {
@Override
public boolean canPass(User user) {
List<Contact> contacts = contactService.findByUserId(user.getId());
List<Contact> contacts = contactService.findByUserId(user.getId(), true);
return contacts != null && contacts.size() != 0;
}
};
......
......@@ -65,13 +65,13 @@ public class SessionServiceImpl implements ISessionService {
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", createdFrom, user.getPhoneNo(), appChannel,channelId);
return authBean;
}
SessionStruct sessionStruct = createSessionAndPersist(user, properties);
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", createdFrom, user.getPhoneNo(), appChannel);
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", createdFrom, user.getPhoneNo(), appChannel,channelId);
return authBean;
}
......
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import java.util.List;
......@@ -8,7 +9,25 @@ import java.util.List;
* Created by Miraculous on 2017/1/3.
*/
public interface IContactService {
List<Contact> findByUserId(Long userId);
/**
*
* @param userId - 用户主键
* @param trim - 是否清除非法错误记录,true-清除,false-不清除
* @return
*/
List<Contact> findByUserId(Long userId, boolean trim);
List<Contact> save(List<Contact> contacts);
Contact findById(Long id);
/**
* 批量保存用户联系人
* 如果已存在联系人,则覆盖更新
* @param userId - 用户主键
* @param contacts - 联系人列表
* @return
*/
List<Contact> save(Long userId, List<Contact> contacts);
Contact save(Contact contact);
Contact saveContact(String name, String phoneNo, Relation relation, Contact contact);
}
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.controller.external.user.InnerController;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.repository.IContactRepository;
import cn.quantgroup.xyqb.service.user.IContactService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.bcel.classfile.Constant;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
......@@ -15,21 +27,103 @@ import java.util.List;
*/
@Service
public class ContactServiceImpl implements IContactService {
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ContactServiceImpl.class);
@Autowired
private IContactRepository contactRepository;
@Override
@Cacheable(value = "contact", key = "'contact' + #userId", unless = "#result == null or #result.size() == 0", cacheManager = "cacheManager")
public List<Contact> findByUserId(Long userId) {
return contactRepository.findByUserId(userId);
@Cacheable(value = "contact", key = "'contact:' + #trim + #userId", unless = "#result == null or #result.size() == 0", cacheManager = "cacheManager")
public List<Contact> findByUserId(Long userId, boolean trim) {
List<Contact> contacts = contactRepository.findByUserId(userId);
if(trim){
trim(contacts);
}
return contacts;
}
/**
* 过滤掉非法联系人记录
* @param contacts - 包含待清除记录的联系人列表
*/
private void trim(List<Contact> contacts){
if(CollectionUtils.isEmpty(contacts)){
return ;
}
Iterator<Contact> iterator = contacts.iterator();
while(iterator.hasNext()){
Contact contact = iterator.next();
if (!contact.valid()) {
iterator.remove();
}
}
}
@Override
public Contact findById(Long id) {
return contactRepository.findOne(id);
}
@Override
@CacheEvict(value = "contact", key = "'contact' + #contacts.get(0).userId", cacheManager = "cacheManager")
public List<Contact> save(List<Contact> contacts) {
@Caching(evict = {
@CacheEvict(value = "contact", key = "'contact:true' + #userId", cacheManager = "cacheManager"),
@CacheEvict(value = "contact", key = "'contact:false' + #userId", cacheManager = "cacheManager")})
public List<Contact> save(Long userId, List<Contact> contacts) {
if(userId == null){
return null;
}
// 合并当前用户列表到更新列表
mergeContacts(userId, contacts);
return contactRepository.save(contacts);
}
@Override
@Caching(evict = {
@CacheEvict(value = "contact", key = "'contact:true' + #contact.userId", cacheManager = "cacheManager"),
@CacheEvict(value = "contact", key = "'contact:false' + #contact.userId", cacheManager = "cacheManager")})
public Contact save(Contact contact) {
return contactRepository.save(contact);
}
@Override
public Contact saveContact(String name, String phoneNo, Relation relation, Contact contact) {
if (StringUtils.isNotBlank(name)) {
contact.setName(name);
}
if (StringUtils.isNotBlank(phoneNo)) {
contact.setPhoneNo(phoneNo);
}
if (null != relation) {
contact.setRelation(relation);
}
LOGGER.info("修改前联系人信息:{}",contact);
Timestamp now = new Timestamp(System.currentTimeMillis());
contact.setUpdateAt(now);
contact = save(contact);
return contact;
}
/**
* 合并当前用户列表到更新列表
* @param userId - 用户主键
* @param contacts - 新联系人列表
*/
private void mergeContacts(Long userId, List<Contact> contacts) {
// 当前联系人列表
List<Contact> userContact = contactRepository.findByUserId(userId);
int userContactCount = (userContact == null) ? 0 : userContact.size();
Timestamp now = new Timestamp(System.currentTimeMillis());
for(int i = 0; i < contacts.size(); i ++) {
Contact c = contacts.get(i);
c.setId(null);
c.setUserId(userId);
c.setRelation(c.getRelation() == null ? Relation.OTHER : c.getRelation());
c.setCreatedAt(now);
c.setUpdateAt(now);
if(userContactCount > i){
c.setId(userContact.get(i).getId());
c.setCreatedAt(contacts.get(i).getCreatedAt() == null ? now : contacts.get(i).getCreatedAt());
c.setRelation(contacts.get(i).getRelation() == null ? Relation.OTHER : contacts.get(i).getRelation());
}
}
}
}
......@@ -192,12 +192,7 @@ public class UserServiceImpl implements IUserService {
smsService.sendAfterRegister(phoneNo);
}
if(registerSuccess){
//增加登陆统计发送
UserStatistics statistics=new UserStatistics(user,dimension,2,channelId);
MqUtils.sendLoanVest(statistics);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
MqUtils.sendRegisterMessage(channelId, user);
}
return user != null;
}
......
package cn.quantgroup.xyqb.util;
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;
......@@ -37,4 +39,15 @@ public class MqUtils {
message, e);
}
}
public static UserRet sendRegisterMessage(Long registeredFrom, User user) {
UserRet userRet;
UserStatistics statistics=new UserStatistics(user,null,2,registeredFrom);
MqUtils.sendLoanVest(statistics);
userRet = new UserRet(user);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
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