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 ...@@ -109,8 +109,4 @@ Temporary Items
dump.rdb dump.rdb
transaction-logs/ transaction-logs/
.settings/org.eclipse.m2e.core.prefs .settings/
.settings/org.eclipse.jdt.core.prefs
.settings/org.eclipse.core.resources.prefs
.project
.classpath
...@@ -90,7 +90,7 @@ public class CaptchaNewValidateAdvisor { ...@@ -90,7 +90,7 @@ public class CaptchaNewValidateAdvisor {
Long countIP = countIP(clientIp); Long countIP = countIP(clientIp);
Long countPhone = countPhone(phoneNo); Long countPhone = countPhone(phoneNo);
Long countDeviceId = countDeviceId(deviceId); 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 (countIP > Constants.Image_Need_Count || countPhone > Constants.Image_Need_Count || countDeviceId > Constants.Image_Need_Count) {
if (shouldSkipCaptchaValidate(registerFrom, captchaId, captchaValue)) { if (shouldSkipCaptchaValidate(registerFrom, captchaId, captchaValue)) {
...@@ -115,6 +115,7 @@ public class CaptchaNewValidateAdvisor { ...@@ -115,6 +115,7 @@ public class CaptchaNewValidateAdvisor {
} }
return result; return result;
} }
LOGGER.info("使用错误图形验证码, registerFrom={}, clientIp={},手机号次数:{},设备次数:{},ip次数:{},phone:{}", registerFrom, clientIp,countPhone,countDeviceId,countIP,phoneNo);
result.setMsg("请输入图形验证码"); result.setMsg("请输入图形验证码");
return result; return result;
} }
......
...@@ -51,7 +51,7 @@ public class LogCallHttpAspect { ...@@ -51,7 +51,7 @@ public class LogCallHttpAspect {
} }
return result; return result;
} }
@Async("logExecutor")
public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP){ public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP){
Object[] args = pjp.getArgs(); Object[] args = pjp.getArgs();
String methodName = pjp.getSignature().getName(); String methodName = pjp.getSignature().getName();
......
...@@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; ...@@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -70,12 +71,12 @@ public class RedisCaptchaStore implements CaptchaStore { ...@@ -70,12 +71,12 @@ public class RedisCaptchaStore implements CaptchaStore {
@Override @Override
public int getSize() { public int getSize() {
return getKeys().size(); return 0;
} }
@Override @Override
public Collection getKeys() { public Collection getKeys() {
return stringRedisTemplate.keys(Constants.REDIS_CAPTCHA_KEY_PATTERN); return Collections.emptyList();
} }
@Override @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; ...@@ -41,6 +41,7 @@ import java.sql.Timestamp;
import java.text.ParseException; import java.text.ParseException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Random; import java.util.Random;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -196,6 +197,18 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -196,6 +197,18 @@ public class MotanUserServiceImpl implements UserMotanService {
return returnErrorValue("要保存的用户详情对象不能为null"); return returnErrorValue("要保存的用户详情对象不能为null");
} }
UserDetail userDetail = new UserDetail(); 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) { if (null != userDetailUpdateBean.getId() && userDetailUpdateBean.getId() > 0L) {
userDetail.setId(userDetailUpdateBean.getId()); userDetail.setId(userDetailUpdateBean.getId());
} }
...@@ -207,12 +220,7 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -207,12 +220,7 @@ public class MotanUserServiceImpl implements UserMotanService {
userDetail.setCreatedAt(time); userDetail.setCreatedAt(time);
userDetail.setUpdatedAt(time); userDetail.setUpdatedAt(time);
userDetail.setIdType(IdType.ID_CARD); userDetail.setIdType(IdType.ID_CARD);
try { userDetail.setGender(info.getGender());
userDetail.setGender(idCardService.getIdCardInfo(userDetailUpdateBean.getIdNo()).getGender());
} catch (ParseException e) {
log.error("根据身份证获取性别出错,userDetailUpdateBean:{}", JSON.toJSONString(userDetailUpdateBean), e);
return returnErrorValue("根据身份证获取性别出错.");
}
userDetail.setEmail(userDetailUpdateBean.getEmail()); userDetail.setEmail(userDetailUpdateBean.getEmail());
userDetail = userDetailService.saveUserDetail(userDetail); userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) { if (userDetail != null) {
...@@ -241,6 +249,18 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -241,6 +249,18 @@ public class MotanUserServiceImpl implements UserMotanService {
if (StringUtils.isBlank(userDetailSaveBean.getIdNo())) { if (StringUtils.isBlank(userDetailSaveBean.getIdNo())) {
return returnErrorValue("用户身份证为空"); 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()); Timestamp time = new Timestamp(System.currentTimeMillis());
UserDetail userDetail = userDetailService.findByUserId(userId); UserDetail userDetail = userDetailService.findByUserId(userId);
if (userDetail == null) { if (userDetail == null) {
...@@ -251,19 +271,12 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -251,19 +271,12 @@ public class MotanUserServiceImpl implements UserMotanService {
} else { } else {
userDetail.setUpdatedAt(time); userDetail.setUpdatedAt(time);
} }
userDetail.setName(userDetail.getName()); userDetail.setName(userDetailSaveBean.getName());
userDetail.setPhoneNo(userDetail.getPhoneNo()); userDetail.setPhoneNo(userDetailSaveBean.getPhoneNo());
userDetail.setIdType(IdType.ID_CARD); userDetail.setIdType(IdType.ID_CARD);
if (StringUtils.isNotBlank(userDetail.getIdNo())) { userDetail.setGender(info.getGender());
try { userDetail.setIdNo(userDetailSaveBean.getIdNo());
userDetail.setGender(idCardService.getIdCardInfo(userDetail.getIdNo()).getGender()); userDetail.setEmail(userDetailSaveBean.getEmail());
} catch (ParseException e) {
log.error("根据身份证获取性别出错,身份证号码:{}", userDetail.getIdNo(), e);
return returnErrorValue("身份证信息出错");
}
userDetail.setIdNo(userDetail.getIdNo());
}
userDetail.setEmail(userDetail.getEmail());
userDetail = userDetailService.saveUserDetail(userDetail); userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) { if (userDetail != null) {
return returnSuccessValue(fromUserDetail(userDetail)); return returnSuccessValue(fromUserDetail(userDetail));
...@@ -335,7 +348,7 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -335,7 +348,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override @Override
public UserSysResult<List<XContact>> findContactsByUserId(Long userId) { 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>>() { List<XContact> xContacts = convertObject(JSON.toJSONString(contacts), new TypeReference<List<XContact>>() {
}); });
return returnSuccessValue(xContacts); return returnSuccessValue(xContacts);
...@@ -353,23 +366,19 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -353,23 +366,19 @@ public class MotanUserServiceImpl implements UserMotanService {
String jsonContacts = JSON.toJSONString(contacts); String jsonContacts = JSON.toJSONString(contacts);
List<Contact> contactList = null; List<Contact> contactList = null;
try { try {
contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>() { contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>(){});
});
} catch (Exception e) { } catch (Exception e) {
log.error("联系人列表转换错误", e); log.error("联系人列表转换错误", e);
return returnErrorValue("联系人转换错误"); return returnErrorValue("联系人转换错误");
} }
Timestamp now = new Timestamp(System.currentTimeMillis());
for (Contact c : contactList) { for (Contact c : contactList) {
c.setId(null); if (!c.valid()) {
c.setUserId(userId); log.info("用户手机号或姓名错误, phoneNo:{},name:{}", c.getPhoneNo(), c.getName());
c.setRelation(c.getRelation() == null ? Relation.OTHER : c.getRelation()); return returnErrorValue("用户手机号或姓名错误");
c.setCreatedAt(now); }
c.setUpdateAt(now); }
} List<Contact> result = contactService.save(userId, contactList);
List<Contact> result = contactService.save(contactList); List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>(){});
List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>() {
});
return returnSuccessValue(xResult); return returnSuccessValue(xResult);
} }
...@@ -388,7 +397,7 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -388,7 +397,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override @Override
public UserSysResult<XAddress> saveAddress(Long userId, Long provinceCode, String province, Long cityCode, String city, public UserSysResult<XAddress> saveAddress(Long userId, Long provinceCode, String province, Long cityCode, String city,
Long districtCode, String district, String address) { 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("参数不能为空"); return returnErrorValue("参数不能为空");
} }
Address addressObj = addressService.findByUserId(userId); Address addressObj = addressService.findByUserId(userId);
...@@ -515,7 +524,7 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -515,7 +524,7 @@ public class MotanUserServiceImpl implements UserMotanService {
return returnErrorValue("用户不能为空"); return returnErrorValue("用户不能为空");
} }
UserSpouse userSpouse = userSpouseService.findByUserId(userId); UserSpouse userSpouse = userSpouseService.findByUserId(userId);
if (userSpouse == null) { if (userSpouse == null || !userSpouse.valid()) {
userSpouse = new UserSpouse(userId); userSpouse = new UserSpouse(userId);
userSpouse.setStatus(MaritalStatus.UNKNOWN); userSpouse.setStatus(MaritalStatus.UNKNOWN);
} }
...@@ -594,8 +603,8 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -594,8 +603,8 @@ public class MotanUserServiceImpl implements UserMotanService {
if (!ValidationUtil.validatePhoneNo(spousePhone)) { if (!ValidationUtil.validatePhoneNo(spousePhone)) {
return returnErrorValue("手机号格式错误"); return returnErrorValue("手机号格式错误");
} }
if (StringUtils.isBlank(spouseName)) { if (!ValidationUtil.validateChinese(spouseName)) {
return returnErrorValue("配偶姓名不能为空"); return returnErrorValue("配偶姓名错误");
} }
} }
UserSpouse userSpouse = userSpouseService.findByUserId(xUserSpouse.getUserId()); UserSpouse userSpouse = userSpouseService.findByUserId(xUserSpouse.getUserId());
...@@ -805,7 +814,7 @@ public class MotanUserServiceImpl implements UserMotanService { ...@@ -805,7 +814,7 @@ public class MotanUserServiceImpl implements UserMotanService {
log.info("第三方(聚美)登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知", registerFrom, phoneNo, idNo, name); 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; IdCardInfo cardInfo;
try { try {
cardInfo = idCardService.getIdCardInfoWithExceptions(idNo); cardInfo = idCardService.getIdCardInfoWithExceptions(idNo);
......
...@@ -35,6 +35,8 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -35,6 +35,8 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.ParseException;
import java.util.Objects;
import java.util.Random; import java.util.Random;
import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ERROR; import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ERROR;
...@@ -71,7 +73,6 @@ public class AppController implements IBaseController { ...@@ -71,7 +73,6 @@ public class AppController implements IBaseController {
* 第三方用户登录 * 第三方用户登录
*/ */
@RequestMapping("/login") @RequestMapping("/login")
@LogHttpCaller
public JsonResult login( public JsonResult login(
String phoneNo, String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom, @RequestParam(required = false, defaultValue = "1") Long registerFrom,
...@@ -83,7 +84,7 @@ public class AppController implements IBaseController { ...@@ -83,7 +84,7 @@ public class AppController implements IBaseController {
} }
String requestIp = IPUtil.getRemoteIP(request); 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); User user = userService.findByPhoneInDb(phoneNo);
if (user == null) { if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId); user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
...@@ -116,7 +117,6 @@ public class AppController implements IBaseController { ...@@ -116,7 +117,6 @@ public class AppController implements IBaseController {
/** /**
* 给app用 * 给app用
*/ */
@LogHttpCaller
@RequestMapping("/login2") @RequestMapping("/login2")
public JsonResult login2( public JsonResult login2(
String phoneNo, String phoneNo,
...@@ -130,7 +130,7 @@ public class AppController implements IBaseController { ...@@ -130,7 +130,7 @@ public class AppController implements IBaseController {
} }
String requestIp = IPUtil.getRemoteIP(request); String requestIp = IPUtil.getRemoteIP(request);
LOGGER.info("第三方用户登录, loginFrom:{}, requestIp:{}", registerFrom, requestIp); LOGGER.info("第三方用户登录, loginFrom:{},channelId:{}, requestIp:{}", registerFrom,channelId, requestIp);
User user = userService.findByPhoneInDb(phoneNo); User user = userService.findByPhoneInDb(phoneNo);
if (user == null) { if (user == null) {
...@@ -169,7 +169,7 @@ public class AppController implements IBaseController { ...@@ -169,7 +169,7 @@ public class AppController implements IBaseController {
} }
String requestIp = IPUtil.getRemoteIP(request); 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); User user = userService.findByPhoneInDb(phoneNo);
if (user == null) { if (user == null) {
user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId); user = register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
...@@ -200,7 +200,7 @@ public class AppController implements IBaseController { ...@@ -200,7 +200,7 @@ public class AppController implements IBaseController {
context.setAppChannel(appChannel); context.setAppChannel(appChannel);
loginInfo.setLoginContext(context); 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); return JsonResult.buildSuccessResult("", loginInfo);
...@@ -233,14 +233,10 @@ public class AppController implements IBaseController { ...@@ -233,14 +233,10 @@ public class AppController implements IBaseController {
* @return * @return
*/ */
private User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId) { private User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId) {
String randomCode = String.valueOf(random.nextInt(899999) + 100000); String randomCode = String.valueOf(random.nextInt(899999) + 100000);
String uuid = lkbUserService.registerApp(phoneNo, randomCode); String uuid = lkbUserService.registerApp(phoneNo, randomCode);
Timestamp currentTime = new Timestamp(System.currentTimeMillis()); Timestamp currentTime = new Timestamp(System.currentTimeMillis());
LOGGER.info("第三方登录用户,保存 User"); LOGGER.info("第三方登录用户,保存 User");
User user = new User(); User user = new User();
if (channelId == 222L) { if (channelId == 222L) {
user.setRegisteredFrom(channelId); user.setRegisteredFrom(channelId);
...@@ -264,7 +260,7 @@ public class AppController implements IBaseController { ...@@ -264,7 +260,7 @@ public class AppController implements IBaseController {
LOGGER.info("第三方(聚美)登录用户注册成功, registerFrom:{}, phoneNo:{},idNo:{},name:{} 并且已发送短信通知", registerFrom, phoneNo, idNo, name); 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"); LOGGER.info("第三方登录用户,保存 UserDetail");
IdCardInfo cardInfo; IdCardInfo cardInfo;
try { try {
...@@ -286,12 +282,7 @@ public class AppController implements IBaseController { ...@@ -286,12 +282,7 @@ public class AppController implements IBaseController {
LOGGER.error("保存 UserDetail 出现异常", e); LOGGER.error("保存 UserDetail 出现异常", e);
} }
} }
//增加登陆统计发送 MqUtils.sendRegisterMessage(channelId,user);
UserStatistics statistics=new UserStatistics(user,null,2,channelId);
MqUtils.sendLoanVest(statistics);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
return user; return user;
} }
......
...@@ -2,17 +2,25 @@ package cn.quantgroup.xyqb.controller.external.user; ...@@ -2,17 +2,25 @@ package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail; import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserModel; 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.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService; import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import org.apache.commons.lang.StringUtils; 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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.Objects;
/** /**
* 同步用户数据,第三方模块访问时 * 同步用户数据,第三方模块访问时
* Created by Miraculous on 15/12/29. * Created by Miraculous on 15/12/29.
...@@ -20,13 +28,14 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -20,13 +28,14 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("/api/sync") @RequestMapping("/api/sync")
public class SyncUserController { public class SyncUserController {
private static final Logger LOGGER = LoggerFactory.getLogger(SyncUserController.class);
@Autowired @Autowired
private IUserService userService; private IUserService userService;
@Autowired @Autowired
private IUserDetailService userDetailService; private IUserDetailService userDetailService;
/*@Autowired @Autowired
private IUserDetailRepository userDetailRepository;*/ private IIdCardService idCardService;
@Autowired @Autowired
...@@ -56,9 +65,22 @@ public class SyncUserController { ...@@ -56,9 +65,22 @@ public class SyncUserController {
@RequestMapping("/save_detail") @RequestMapping("/save_detail")
public JsonResult saveUserDetail(String key, UserDetail userDetail) { 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); 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(); String phoneNo = userDetail.getPhoneNo();
User user = userService.findByPhoneWithCache(phoneNo); User user = userService.findByPhoneWithCache(phoneNo);
if (null == user) { if (null == user) {
......
...@@ -11,6 +11,7 @@ import cn.quantgroup.xyqb.model.ContactRet; ...@@ -11,6 +11,7 @@ import cn.quantgroup.xyqb.model.ContactRet;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.*; import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.user.enums.*; import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
...@@ -200,7 +201,7 @@ public class UserCenterController { ...@@ -200,7 +201,7 @@ public class UserCenterController {
return JsonResult.buildErrorStateResult("该用户不存在", null); return JsonResult.buildErrorStateResult("该用户不存在", null);
} }
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId); UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId); List<Contact> contacts = contactService.findByUserId(userId, true);
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
if(null != userExtInfo) { if(null != userExtInfo) {
result.put("contacts", null != contacts && contacts.size() > 0 ? true : false); result.put("contacts", null != contacts && contacts.size() > 0 ? true : false);
...@@ -244,32 +245,18 @@ public class UserCenterController { ...@@ -244,32 +245,18 @@ public class UserCenterController {
LOGGER.error("保存联系人,联系人参数为空.contactJson:{}", contactJson); LOGGER.error("保存联系人,联系人参数为空.contactJson:{}", contactJson);
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
} }
List<Contact> userContact = contactService.findByUserId(userId); List<Contact> contacts = JSONObject.parseObject(contactJson, new TypeReference<List<Contact>>(){});
/*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());
if (CollectionUtils.isEmpty(contacts)) { if (CollectionUtils.isEmpty(contacts)) {
return JsonResult.buildErrorStateResult("参数转换错误", null); LOGGER.info("联系人不能空");
} return JsonResult.buildErrorStateResult(null, null);
if(null != userContact && userContact.size() > 0) { }
for(int i = 0; i < contacts.size(); i ++) { for(Contact contact : contacts){
contacts.get(i).setId(userContact.get(i).getId()); if (!contact.valid()) {
contacts.get(i).setUserId(userContact.get(i).getUserId()); LOGGER.info("用户手机号或姓名错误, phoneNo:{},name:{}", contact.getPhoneNo(), contact.getName());
contacts.get(i).setCreatedAt(now); return JsonResult.buildErrorStateResult(null, null);
contacts.get(i).setUpdateAt(now);
}
} else {
for (Contact c : contacts) {
c.setId(null);
c.setUserId(userId);
c.setCreatedAt(now);
c.setUpdateAt(now);
} }
} }
List<Contact> result = contactService.save(contacts); List<Contact> result = contactService.save(userId, contacts);
return JsonResult.buildSuccessResult(null, result); return JsonResult.buildSuccessResult(null, result);
} }
...@@ -285,8 +272,8 @@ public class UserCenterController { ...@@ -285,8 +272,8 @@ public class UserCenterController {
@RequestMapping("/address/save") @RequestMapping("/address/save")
public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address, public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address,
Long districtCode, String district) { Long districtCode, String district) {
LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{}", phoneNo, province, provinceCode, city, cityCode); LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address);
if (StringUtils.isEmpty(phoneNo) || provinceCode == null || cityCode == null) { if (StringUtils.isEmpty(phoneNo) || provinceCode == null || cityCode == null || StringUtils.isBlank(address)) {
return JsonResult.buildErrorStateResult("参数错误", null); return JsonResult.buildErrorStateResult("参数错误", null);
} }
Long userId = queryUserId(phoneNo); Long userId = queryUserId(phoneNo);
...@@ -350,7 +337,7 @@ public class UserCenterController { ...@@ -350,7 +337,7 @@ public class UserCenterController {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId); LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null); return JsonResult.buildErrorStateResult("该用户不存在", null);
} }
List<Contact> contacts = contactService.findByUserId(userId); List<Contact> contacts = contactService.findByUserId(userId, true);
return JsonResult.buildSuccessResult(null, contacts); return JsonResult.buildSuccessResult(null, contacts);
} }
......
...@@ -228,6 +228,7 @@ public class SmsController implements IBaseController { ...@@ -228,6 +228,7 @@ public class SmsController implements IBaseController {
redisTemplate.expire(verificationPhoneCountKey, Constants.ONE_DAY,TimeUnit.SECONDS); redisTemplate.expire(verificationPhoneCountKey, Constants.ONE_DAY,TimeUnit.SECONDS);
if (getPhoneVerificationCount > PHONE_MAX_PER_DAY) { if (getPhoneVerificationCount > PHONE_MAX_PER_DAY) {
LOGGER.info("您手机号已经达到获取今天短信验证码上限:phoneNo:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildErrorStateResult("今天已获取20次短信验证码,请使用语音验证码或明天再试", null); return JsonResult.buildErrorStateResult("今天已获取20次短信验证码,请使用语音验证码或明天再试", null);
} }
String verificationIPCountKey = getIp(); String verificationIPCountKey = getIp();
...@@ -238,12 +239,13 @@ public class SmsController implements IBaseController { ...@@ -238,12 +239,13 @@ public class SmsController implements IBaseController {
// // return JsonResult.buildErrorStateResult("您当前ip已经达到获取今天验证码上限", null); // // return JsonResult.buildErrorStateResult("您当前ip已经达到获取今天验证码上限", null);
// //} // //}
//} //}
LOGGER.info("请求短信新版本接口:phoneNo:{},deviceId:{},IP:{}",phoneNo,deviceId,getIp());
if (!StringUtils.isEmpty(deviceId)) { if (!StringUtils.isEmpty(deviceId)) {
String verificationDeviceCountKey = Constants.REDIS_SMS_DEVICE_COUNT + deviceId; String verificationDeviceCountKey = Constants.REDIS_SMS_DEVICE_COUNT + deviceId;
Long getDeviceVerificationCount = redisTemplate.opsForHash().increment(verificationDeviceCountKey, Constants.REDIS_SMS_DEVICE_COUNT, 1); Long getDeviceVerificationCount = redisTemplate.opsForHash().increment(verificationDeviceCountKey, Constants.REDIS_SMS_DEVICE_COUNT, 1);
redisTemplate.expire(verificationDeviceCountKey, Constants.ONE_DAY,TimeUnit.SECONDS); redisTemplate.expire(verificationDeviceCountKey, Constants.ONE_DAY,TimeUnit.SECONDS);
if (getDeviceVerificationCount > DEVICE_MAX_PER_DAY) { if (getDeviceVerificationCount > DEVICE_MAX_PER_DAY) {
LOGGER.info("您设备已经达到获取今天短信验证码上限:phoneNo:{},deviceId:{},ip:{}",phoneNo,verificationDeviceCountKey,getIp());
return JsonResult.buildErrorStateResult("您设备已经达到获取今天短信验证码上限", null); return JsonResult.buildErrorStateResult("您设备已经达到获取今天短信验证码上限", null);
} }
} }
...@@ -251,6 +253,7 @@ public class SmsController implements IBaseController { ...@@ -251,6 +253,7 @@ public class SmsController implements IBaseController {
String key = Constants.REDIS_PREFIX_VERIFICATION_CODE + phoneNo; String key = Constants.REDIS_PREFIX_VERIFICATION_CODE + phoneNo;
long expire = redisTemplate.getExpire(key, TimeUnit.MINUTES); long expire = redisTemplate.getExpire(key, TimeUnit.MINUTES);
if (expire >= EXPIRE_MINUTES - 1) { if (expire >= EXPIRE_MINUTES - 1) {
LOGGER.info("sendVerificationCode2New1分钟内不能重复获取验证码:phoneNo:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildSuccessResult("1分钟内不能重复获取验证码", null); return JsonResult.buildSuccessResult("1分钟内不能重复获取验证码", null);
} }
String randomCode = smsIsDebug ? "0000" : String.valueOf(random.nextInt(8999) + 1000); String randomCode = smsIsDebug ? "0000" : String.valueOf(random.nextInt(8999) + 1000);
...@@ -269,9 +272,10 @@ public class SmsController implements IBaseController { ...@@ -269,9 +272,10 @@ public class SmsController implements IBaseController {
if(needImageVlidate(verificationIPCountKey,deviceId,phoneNo)){ if(needImageVlidate(verificationIPCountKey,deviceId,phoneNo)){
return JsonResult.buildSuccessResult("发送成功", uniqueId,0003L); return JsonResult.buildSuccessResult("发送成功", uniqueId,0003L);
} }
LOGGER.info("sendVerificationCode2New获取短信成功:phone:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildSuccessResult("发送成功", uniqueId); return JsonResult.buildSuccessResult("发送成功", uniqueId);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("发送短信验证码失败"); LOGGER.error("发送短信验证码失败:phone:{},deviceId:{},ip:{}",phoneNo,deviceId,getIp());
return JsonResult.buildErrorStateResult("发送失败", null); return JsonResult.buildErrorStateResult("发送失败", null);
} }
} }
......
...@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.controller.internal.user; ...@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaFineteValidator; 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.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.aspect.token.OneTimeTokenValidator; import cn.quantgroup.xyqb.aspect.token.OneTimeTokenValidator;
import cn.quantgroup.xyqb.controller.IBaseController; import cn.quantgroup.xyqb.controller.IBaseController;
...@@ -15,7 +14,6 @@ import cn.quantgroup.xyqb.exception.UserNotExistException; ...@@ -15,7 +14,6 @@ import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException; import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserModel; import cn.quantgroup.xyqb.model.UserModel;
import cn.quantgroup.xyqb.model.UserRegisterMqMessage;
import cn.quantgroup.xyqb.model.UserStatistics; import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.merchant.IMerchantService; import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
...@@ -145,7 +143,7 @@ public class UserController implements IBaseController { ...@@ -145,7 +143,7 @@ public class UserController implements IBaseController {
@RequestParam(required = false,defaultValue = "xyqb") String key, @RequestParam(required = false,defaultValue = "xyqb") String key,
HttpServletRequest request, String openId, HttpServletRequest request, String openId,
@RequestParam(required = false) String dimension) { @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); Merchant merchant = merchantService.findMerchantByName(key);
if (merchant == null) { if (merchant == null) {
return JsonResult.buildErrorStateResult("未知的连接", null); return JsonResult.buildErrorStateResult("未知的连接", null);
...@@ -178,7 +176,6 @@ public class UserController implements IBaseController { ...@@ -178,7 +176,6 @@ public class UserController implements IBaseController {
} }
@RequestMapping("/login/fast") @RequestMapping("/login/fast")
@LogHttpCaller
public JsonResult loginFast( public JsonResult loginFast(
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel, @RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom, @RequestParam(required = false, defaultValue = "1") Long createdFrom,
...@@ -186,6 +183,7 @@ public class UserController implements IBaseController { ...@@ -186,6 +183,7 @@ public class UserController implements IBaseController {
@RequestParam(required = false)Long btRegisterChannelId, @RequestParam(required = false)Long btRegisterChannelId,
@RequestParam(required = false) String dimension ,HttpServletRequest request) { @RequestParam(required = false) String dimension ,HttpServletRequest request) {
Map<String, JsonResult> validMap = getHeaderParam(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")) { if (null != validMap.get("fail")) {
return validMap.get("fail"); return validMap.get("fail");
} }
...@@ -200,6 +198,7 @@ public class UserController implements IBaseController { ...@@ -200,6 +198,7 @@ public class UserController implements IBaseController {
smsValidForFastLogin(phoneNo, verificationCode); smsValidForFastLogin(phoneNo, verificationCode);
User user = userService.findByPhoneWithCache(phoneNo); User user = userService.findByPhoneWithCache(phoneNo);
if (user != null && !user.getEnable()) { if (user != null && !user.getEnable()) {
LOGGER.error("用户不存在,或者已经注销,phoneNo:{}",phoneNo);
return JsonResult.buildErrorStateResult("登录失败", null); return JsonResult.buildErrorStateResult("登录失败", null);
} }
if (user == null) { if (user == null) {
...@@ -230,11 +229,7 @@ public class UserController implements IBaseController { ...@@ -230,11 +229,7 @@ public class UserController implements IBaseController {
} }
User user=userService.registerAndReturn(phoneNo, password, registerFrom,btRegisterChannelId); User user=userService.registerAndReturn(phoneNo, password, registerFrom,btRegisterChannelId);
LOGGER.info("用户快速注册成功, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo); LOGGER.info("用户快速注册成功, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
UserStatistics statistics=new UserStatistics(user,dimension,2,channelId); MqUtils.sendRegisterMessage(channelId, user);
MqUtils.sendLoanVest(statistics);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
return user; return user;
} }
...@@ -299,7 +294,7 @@ public class UserController implements IBaseController { ...@@ -299,7 +294,7 @@ public class UserController implements IBaseController {
@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,@RequestParam(required = false)String dimension) { @RequestParam(required = false)Long btRegisterChannelId,@RequestParam(required = false)String dimension) {
String password = genRandomPwd(); 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)) { if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户快速注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo); LOGGER.info("用户快速注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("手机号错误", null); return JsonResult.buildErrorStateResult("手机号错误", null);
...@@ -340,13 +335,12 @@ public class UserController implements IBaseController { ...@@ -340,13 +335,12 @@ public class UserController implements IBaseController {
* @param channelId * @param channelId
* @return * @return
*/ */
@LogHttpCaller
@RequestMapping("/register") @RequestMapping("/register")
public JsonResult register(@RequestParam String phoneNo, @RequestParam String password, public JsonResult register(@RequestParam String phoneNo, @RequestParam String password,
@RequestParam String verificationCode, @RequestParam(required = false) Long channelId, @RequestParam String verificationCode, @RequestParam(required = false) Long channelId,
@RequestParam(required = false) Long registerFrom, @RequestParam(required = false) Long registerFrom,
@RequestParam(required = false)Long btRegisterChannelId,@RequestParam(required = false)String dimension) { @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)) { if (!ValidationUtil.validatePhoneNo(phoneNo)) {
LOGGER.info("用户注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo); LOGGER.info("用户注册失败,手机号错误, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("手机号错误", null); return JsonResult.buildErrorStateResult("手机号错误", null);
...@@ -450,8 +444,16 @@ public class UserController implements IBaseController { ...@@ -450,8 +444,16 @@ public class UserController implements IBaseController {
*/ */
@RequestMapping("/exists_token") @RequestMapping("/exists_token")
public JsonResult checkToken(@RequestParam String 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; 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 { ...@@ -569,6 +571,7 @@ public class UserController implements IBaseController {
MqUtils.sendLoanVest(statistics); MqUtils.sendLoanVest(statistics);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant)); return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
} else { } else {
LOGGER.error("用户不存在,或者已经注销,userId:{}",userId);
return JsonResult.buildErrorStateResult("登录失败", null); return JsonResult.buildErrorStateResult("登录失败", null);
} }
} }
......
package cn.quantgroup.xyqb.entity; package cn.quantgroup.xyqb.entity;
import cn.quantgroup.user.enums.Relation; import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
...@@ -32,4 +33,13 @@ public class Contact implements Serializable { ...@@ -32,4 +33,13 @@ public class Contact implements Serializable {
private Timestamp createdAt; private Timestamp createdAt;
@Column(name = "updated_at") @Column(name = "updated_at")
private Timestamp updateAt; 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; ...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.entity;
import cn.quantgroup.user.enums.MaritalStatus; import cn.quantgroup.user.enums.MaritalStatus;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
...@@ -44,4 +45,12 @@ public class UserSpouse implements Serializable { ...@@ -44,4 +45,12 @@ public class UserSpouse implements Serializable {
public UserSpouse(Long userId) { public UserSpouse(Long userId) {
this.userId = 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 { ...@@ -55,7 +55,7 @@ public class PageServiceImpl implements IPageService {
private PageType pageContacts = new PageType("contacts", false) { private PageType pageContacts = new PageType("contacts", false) {
@Override @Override
public boolean canPass(User user) { 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; return contacts != null && contacts.size() != 0;
} }
}; };
......
...@@ -65,13 +65,13 @@ public class SessionServiceImpl implements ISessionService { ...@@ -65,13 +65,13 @@ public class SessionServiceImpl implements ISessionService {
authBean.setPhoneNo(user.getPhoneNo()); authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid()); authBean.setToken(sessionStruct.getSid());
persistSession(sessionStruct.getSid(), sessionStruct.getValues()); 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; return authBean;
} }
SessionStruct sessionStruct = createSessionAndPersist(user, properties); SessionStruct sessionStruct = createSessionAndPersist(user, properties);
authBean.setPhoneNo(user.getPhoneNo()); authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid()); 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; return authBean;
} }
......
package cn.quantgroup.xyqb.service.user; package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact; import cn.quantgroup.xyqb.entity.Contact;
import java.util.List; import java.util.List;
...@@ -8,7 +9,25 @@ import java.util.List; ...@@ -8,7 +9,25 @@ import java.util.List;
* Created by Miraculous on 2017/1/3. * Created by Miraculous on 2017/1/3.
*/ */
public interface IContactService { 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; 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.entity.Contact;
import cn.quantgroup.xyqb.repository.IContactRepository; import cn.quantgroup.xyqb.repository.IContactRepository;
import cn.quantgroup.xyqb.service.user.IContactService; 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.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service; 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; import java.util.List;
/** /**
...@@ -15,21 +27,103 @@ import java.util.List; ...@@ -15,21 +27,103 @@ import java.util.List;
*/ */
@Service @Service
public class ContactServiceImpl implements IContactService { public class ContactServiceImpl implements IContactService {
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ContactServiceImpl.class);
@Autowired @Autowired
private IContactRepository contactRepository; private IContactRepository contactRepository;
@Override @Override
@Cacheable(value = "contact", key = "'contact' + #userId", unless = "#result == null or #result.size() == 0", cacheManager = "cacheManager") @Cacheable(value = "contact", key = "'contact:' + #trim + #userId", unless = "#result == null or #result.size() == 0", cacheManager = "cacheManager")
public List<Contact> findByUserId(Long userId) { public List<Contact> findByUserId(Long userId, boolean trim) {
return contactRepository.findByUserId(userId); 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 @Override
@CacheEvict(value = "contact", key = "'contact' + #contacts.get(0).userId", cacheManager = "cacheManager") @Caching(evict = {
public List<Contact> save(List<Contact> contacts) { @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); 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 { ...@@ -192,12 +192,7 @@ public class UserServiceImpl implements IUserService {
smsService.sendAfterRegister(phoneNo); smsService.sendAfterRegister(phoneNo);
} }
if(registerSuccess){ if(registerSuccess){
//增加登陆统计发送 MqUtils.sendRegisterMessage(channelId, user);
UserStatistics statistics=new UserStatistics(user,dimension,2,channelId);
MqUtils.sendLoanVest(statistics);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
} }
return user != null; return user != null;
} }
......
package cn.quantgroup.xyqb.util; package cn.quantgroup.xyqb.util;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterMqMessage; import cn.quantgroup.xyqb.model.UserRegisterMqMessage;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.UserStatistics; import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.mq.IRegisterMqService; import cn.quantgroup.xyqb.service.mq.IRegisterMqService;
import cn.quantgroup.xyqb.service.mq.IVestService; import cn.quantgroup.xyqb.service.mq.IVestService;
...@@ -37,4 +39,15 @@ public class MqUtils { ...@@ -37,4 +39,15 @@ public class MqUtils {
message, e); 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