Commit 435fc48c authored by 朱劲松​'s avatar 朱劲松​

refactor: just code refactor.

parent 6e4b8416
......@@ -10,7 +10,7 @@ public enum IncomeEnum {
CASH_AND_PAY_CARD("混合");
private String desc;
private IncomeEnum(String desc){
private IncomeEnum(String desc) {
this.desc = desc;
}
}
\ No newline at end of file
......@@ -16,7 +16,7 @@ public enum IncomeRangeEnum {
private String desc;
private IncomeRangeEnum(String desc){
private IncomeRangeEnum(String desc) {
this.desc = desc;
}
......
......@@ -26,47 +26,87 @@ public interface Constants {
Long VERIFICATION_CODE_FINITE_COUNT = 3L;
String X_AUTH_TOKEN = "x-auth-token";
/** 登录账号/手机号参数名 */
/**
* 登录账号/手机号参数名
*/
String PHONE_NO = "phoneNo";
/** 微信标识参数名 */
/**
* 微信标识参数名
*/
String WECHAT_OPEN_ID = "wechat_open_id";
// -- Start -- IPV4安全策略常量组
/** 账密不匹配错误 - 按账号计数 */
/**
* 账密不匹配错误 - 按账号计数
*/
String REDIS_PASSWORD_ERROR_COUNT = "password_error_count:";
/** 账密不匹配错误 - 按IP计数 */
/**
* 账密不匹配错误 - 按IP计数
*/
String REDIS_PASSWORD_ERROR_COUNT_FOR_IPV4 = "password_error_count_4_ipv4:";
/** 账密匹配成功 - 按IP计数 */
/**
* 账密匹配成功 - 按IP计数
*/
String REDIS_PASSWORD_SUCCESS_COUNT_FOR_IPV4 = "password_success_count_4_ipv4:";
/** 账密安全策略 - 白名单 */
/**
* 账密安全策略 - 白名单
*/
String IPV4_LOCK_WHITE = "lock_ipv4:white:";
/** 账密安全策略 - 黑名单 */
/**
* 账密安全策略 - 黑名单
*/
String IPV4_LOCK_BLACK = "lock_ipv4:black:";
/** 账密安全策略 - 锁机制自定义参数 - 锁定分钟数 */
/**
* 账密安全策略 - 锁机制自定义参数 - 锁定分钟数
*/
String IPV4_LOCK_MINUTES_REDIS = "lock_ipv4:minutes:";
/** 账密安全策略 - 锁机制自定义参数 - 锁开关阈值 */
/**
* 账密安全策略 - 锁机制自定义参数 - 锁开关阈值
*/
String IPV4_LOCK_ON_COUNTS_REDIS = "lock_ipv4:on_counts:";
/** 账密安全策略 - 锁机制 - IPV4锁 */
/**
* 账密安全策略 - 锁机制 - IPV4锁
*/
String IPV4_LOCK = "lock_ipv4:";
/** 账密不匹配错误 - 锁机制默认参数 - 锁定分钟数 */
/**
* 账密不匹配错误 - 锁机制默认参数 - 锁定分钟数
*/
Long IPV4_FAILED_LOCK_MINUTES = 3 * 60L;
/** 账密不匹配错误 - 锁机制默认参数 - 计数周期 */
/**
* 账密不匹配错误 - 锁机制默认参数 - 计数周期
*/
Long IPV4_FAILED_COUNT_MINUTES = 1L;
/** 账密不匹配错误 - 锁机制默认参数 - 锁开关阈值 */
/**
* 账密不匹配错误 - 锁机制默认参数 - 锁开关阈值
*/
Long IPV4_LOCK_ON_FAILED_COUNTS = 60L;
/** 账密匹配成功 - 锁机制默认参数 - 锁定分钟数 */
/**
* 账密匹配成功 - 锁机制默认参数 - 锁定分钟数
*/
Long IPV4_SUCCESS_LOCK_MINUTES = 30L;
/** 账密匹配成功 - 锁机制默认参数 - 计数周期 */
/**
* 账密匹配成功 - 锁机制默认参数 - 计数周期
*/
Long IPV4_SUCCESS_COUNT_MINUTES = 1 * 60L;
/** 账密匹配成功 - 锁机制默认参数 - 锁开关阈值 */
/**
* 账密匹配成功 - 锁机制默认参数 - 锁开关阈值
*/
Long IPV4_LOCK_ON_SUCCESS_COUNTS = 40L;
/** 危险期 - 起始时间(Hour) */
/**
* 危险期 - 起始时间(Hour)
*/
int DANGEROUS_TIME_START = 22;
/** 危险期 - 结束时间(Hour) */
/**
* 危险期 - 结束时间(Hour)
*/
int DANGEROUS_TIME_END = 6;
/** 安全策略参数设置 - 秘钥 - 口令 */
/**
* 安全策略参数设置 - 秘钥 - 口令
*/
String CLEAR_LOCK_FOR_IPV4 = "x-clear-lock-11241842-y";
/** 安全策略参数设置 - 私钥 */
/**
* 安全策略参数设置 - 私钥
*/
String CLEAR_LOCK_FOR_IPV4_KEY = "lhp.family.dwy.sjs.yym.cxy.cpg";
// -- End -- IPV4安全策略常量组
/**
......@@ -99,20 +139,28 @@ public interface Constants {
String AES_KEY = "ScnmRBhuQpo9kBdn";
// -- Start -- 验证码常量组
int GT_CAPTCHA_VALIDATE_SUCCESS =1;
int GT_CAPTCHA_VALIDATE_SUCCESS = 1;
String GT_UNIQUE_KEY = "uniqueKey";
String FN_GEETEST_CHALLENGE = "geetest_challenge";
String FN_GEETEST_VALIDATE = "geetest_validate";
String FN_GEETEST_SECCODE = "geetest_seccode";
String QG_CAPTCHA_ID = "captchaId";
String QG_CAPTCHA_VALUE = "captchaValue";
/** 客户端类型参数名 */
/**
* 客户端类型参数名
*/
String CLIENT_TYPE = "clientType";
/** 验证类型请求参数名 */
/**
* 验证类型请求参数名
*/
String VERIFY_PARAM = "verifyType";
/** 验证类型 - 极验 */
/**
* 验证类型 - 极验
*/
String VERIFY_TYPE_GT = "gt";
/** 验证类型 - 量化派图形验证 */
/**
* 验证类型 - 量化派图形验证
*/
String VERIFY_TYPE_QG = "qg";
// -- End -- 验证码常量组
}
......@@ -31,11 +31,11 @@ public class IpValidateAdvisor {
@Around("whiteIpMatch()")
private Object doWhiteIpMatch(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 客户端IP
String clientIp = IPUtil.getRemoteIP(request);
// 白名单
if(IPUtil.whiteOf(clientIp)){
if (IPUtil.whiteOf(clientIp)) {
return pjp.proceed();
}
IPUtil.logIp(LOGGER, request);
......
......@@ -24,13 +24,15 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
/**
* 限次图形验证码校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-07
......@@ -83,13 +85,13 @@ public class CaptchaFiniteValidateAdvisor {
private Object doCapchaValidate(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Map<String, String> phonePasswordMap = getHeaderParam(request);
if(phonePasswordMap == null || phonePasswordMap.isEmpty()){
if (phonePasswordMap == null || phonePasswordMap.isEmpty()) {
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}
// 当前用户手机号
String phoneNo = phonePasswordMap.get(Constants.PHONE_NO);
Long countErrorByPhone = getCount(phoneNo);
if(countErrorByPhone == null){
if (countErrorByPhone == null) {
LOGGER.info("用户名或密码不正确, phoneNo={}, countErrorByPhone={}, clientIp={}", phoneNo, countErrorByPhone, IPUtil.getRemoteIP(request));
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}
......@@ -142,8 +144,8 @@ public class CaptchaFiniteValidateAdvisor {
return Long.valueOf(countString);
}
private final static String getKey(String phoneNo){
if(StringUtils.isBlank(phoneNo)){
private final static String getKey(String phoneNo) {
if (StringUtils.isBlank(phoneNo)) {
return null;
}
return Constants.REDIS_PASSWORD_ERROR_COUNT + phoneNo;
......@@ -166,7 +168,7 @@ public class CaptchaFiniteValidateAdvisor {
byte[] buf = Base64.decodeBase64(credential);
credential = new String(buf, Charset.forName("UTF-8"));
String[] credentialArr = credential.split(":");
boolean headerParamValid = credentialArr.length==2;
boolean headerParamValid = credentialArr.length == 2;
if (!headerParamValid) {
LOGGER.info("参数无效, credential:{}", credential);
return null;
......
......@@ -4,6 +4,7 @@ import java.lang.annotation.*;
/**
* 限次的图形验证码校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-07
......
......@@ -6,7 +6,6 @@ import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.captcha.IGeetestCaptchaService;
import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
......@@ -39,7 +38,8 @@ public class CaptchaNewValidateAdvisor {
* 图形验证码切面
*/
@Pointcut("@annotation(cn.quantgroup.xyqb.aspect.captcha.CaptchaNewValidator)")
private void needCaptchaValidate(){}
private void needCaptchaValidate() {
}
/**
* 在受图形验证码保护的接口方法执行前, 校验图形验证码
......@@ -53,12 +53,12 @@ public class CaptchaNewValidateAdvisor {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 验证码类别:gt - 极验,qg - 量化派图形验证
if (Objects.equals(Constants.VERIFY_TYPE_GT, request.getParameter(Constants.VERIFY_PARAM))) {
if(StringUtils.isBlank(request.getParameter(Constants.FN_GEETEST_CHALLENGE))){
if (StringUtils.isBlank(request.getParameter(Constants.FN_GEETEST_CHALLENGE))) {
return JsonResult.buildErrorStateResult("操作过快,请稍后重试", "");
}
if(gtValid(request)){
if (gtValid(request)) {
return pjp.proceed();
}else{
} else {
return JsonResult.buildErrorStateResult("验证码不正确", "");
}
} else {
......@@ -72,6 +72,7 @@ public class CaptchaNewValidateAdvisor {
/**
* 极验校验
*
* @param request
* @return
* @throws Throwable
......@@ -89,6 +90,7 @@ public class CaptchaNewValidateAdvisor {
/**
* 量化派图形码校验
*
* @param request
* @return
* @throws Throwable
......
......@@ -18,7 +18,8 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.Objects;
import java.util.Set;
/**
* 免密访问校验切面
......@@ -38,7 +39,8 @@ public class PasswordFreeAccessValidateAdvisor {
* 免密访问校验切面
*/
@Pointcut("@annotation(cn.quantgroup.xyqb.aspect.limit.PasswordFreeAccessValidator)")
private void passwordFreeAccess() {}
private void passwordFreeAccess() {
}
/**
* 执行免密访问校验
......@@ -58,20 +60,21 @@ public class PasswordFreeAccessValidateAdvisor {
/**
* 校验免密访问
* 规则:token 与 身份标记(phoneNo、userId匹配)
*
* @return True or False
*/
private boolean tokenValid(HttpServletRequest request) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IPUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
if(!paramKeys.contains(Constants.PHONE_NO) && !paramKeys.contains(USER_ID)){
if (!paramKeys.contains(Constants.PHONE_NO) && !paramKeys.contains(USER_ID)) {
LOGGER.info("非法请求 - 缺少参数, paramKeys={}, clientIp={}", paramKeys, clientIp);
return false;
}
// 当前请求的phoneNo/userId
String phoneNo = request.getParameter(Constants.PHONE_NO);
String userId = request.getParameter(USER_ID);
if(StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)){
if (StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)) {
LOGGER.info("非法请求 - 缺少参数, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, clientIp);
return false;
}
......@@ -83,20 +86,20 @@ public class PasswordFreeAccessValidateAdvisor {
}
// 当前session
SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token);
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())){
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())) {
LOGGER.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
return false;
}
// 当前用户
User user = session.getValues().getUser();
if(Objects.isNull(user.getId()) && StringUtils.isBlank(user.getPhoneNo())){
if (Objects.isNull(user.getId()) && StringUtils.isBlank(user.getPhoneNo())) {
LOGGER.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
return false;
}
// 校对用户信息是否匹配
boolean valid = (Objects.nonNull(user.getId()) && Objects.equals(userId, user.getId().toString()));
valid = valid || (StringUtils.isNotBlank(phoneNo) && Objects.equals(phoneNo, user.getPhoneNo()));
if(!valid) {
if (!valid) {
LOGGER.info("非法请求 - 身份不匹配, token={}, phoneNo=({},{}), userId=({},{}), clientIp={}", token, phoneNo, user.getPhoneNo(), userId, user.getId(), clientIp);
}
return valid;
......
......@@ -4,6 +4,7 @@ import java.lang.annotation.*;
/**
* 免密访问校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-21
......
......@@ -23,6 +23,7 @@ import java.util.Objects;
/**
* 密码错误限次的校验
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-23
......@@ -57,26 +58,26 @@ public class PasswordErrorFiniteValidateAdvisor {
// 客户端IP
String clientIp = IPUtil.getRemoteIP(request);
// 白名单
if(IPUtil.whiteOf(clientIp)){
if (IPUtil.whiteOf(clientIp)) {
return pjp.proceed();
}
// 补充白名单
if(redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_WHITE, clientIp)){
if (redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_WHITE, clientIp)) {
return pjp.proceed();
}
// 入口服务器IP
if(StringUtils.startsWith(clientIp, "139.198.")){
if (StringUtils.startsWith(clientIp, "139.198.")) {
return pjp.proceed();
}
// 黑名单
if(redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_BLACK, clientIp)){
if (redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_BLACK, clientIp)) {
IPUtil.logIp(LOGGER, request);
LOGGER.info("Lock_ipv4: black ip access:{}", clientIp);
return JsonResult.buildErrorStateResult("登录失败", null);
}
String lockIpv4Key = getLockIpv4Key(clientIp);
String lock = redisTemplate.opsForValue().get(lockIpv4Key);
if (Objects.equals(Boolean.TRUE.toString(), lock)){
if (Objects.equals(Boolean.TRUE.toString(), lock)) {
IPUtil.logIp(LOGGER, request);
LOGGER.info("Lock_ipv4: locked ip access:{}", clientIp);
return JsonResult.buildErrorStateResult("登录失败", null);
......@@ -84,7 +85,7 @@ public class PasswordErrorFiniteValidateAdvisor {
return pjp.proceed();
}
private final static String getLockIpv4Key(String ipv4){
private final static String getLockIpv4Key(String ipv4) {
return Constants.IPV4_LOCK + ipv4;
}
......
......@@ -4,6 +4,7 @@ import java.lang.annotation.*;
/**
* 密码错误限次的校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-23
......
......@@ -37,14 +37,14 @@ public class LogCallHttpAspect {
public Object record(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed();
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(Objects.nonNull(attrs)){
if (Objects.nonNull(attrs)) {
try {
HttpServletRequest request = attrs.getRequest();
String remoteIP = IPUtil.getRemoteIP(request);
LogCallHttpAspect logCallHttpAspect = ApplicationContextHolder.getBean(LogCallHttpAspect.class);
// 异步记录日志
logCallHttpAspect.asyncRecordIt(pjp,result,remoteIP);
}catch (Exception e){
logCallHttpAspect.asyncRecordIt(pjp, result, remoteIP);
} catch (Exception e) {
LOGGER.error("打印http请求日志出错", e);
}
}
......@@ -53,16 +53,17 @@ public class LogCallHttpAspect {
/**
* 异步记录日志
*
* @param pjp
* @param result
* @param remoteIP
*/
@Async("logExecutor")
public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP){
public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP) {
Object[] args = pjp.getArgs();
String methodName = pjp.getSignature().getName();
String targetName = pjp.getTarget().getClass().getName();
LOGGER.info("http api is called,from IP:[{}],method :[{}],args:[{}],response:[{}]",remoteIP,targetName.concat(".").concat(methodName),args,result);
LOGGER.info("http api is called,from IP:[{}],method :[{}],args:[{}],response:[{}]", remoteIP, targetName.concat(".").concat(methodName), args, result);
}
}
......@@ -4,7 +4,6 @@ package cn.quantgroup.xyqb.config.data;
* Created by Miraculous on 2016/11/16.
*/
import cn.quantgroup.xyqb.util.ApplicationContextHolder;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Value;
......
......@@ -86,6 +86,7 @@ public class HttpConfig {
addFormatters(conversionService);
return conversionService;
}
@Bean
public ConverterRegistry integrationConversionService() {
FormattingConversionService conversionService = new DefaultFormattingConversionService();
......@@ -96,7 +97,7 @@ public class HttpConfig {
private void addFormatters(FormattingConversionService conversionService) {
IntegerToEnumConverterFactory factory = new IntegerToEnumConverterFactory();
conversionService.removeConvertible(String.class,Enum.class);
conversionService.removeConvertible(String.class, Enum.class);
conversionService.addConverterFactory(factory);
}
......
......@@ -9,7 +9,7 @@ public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.removeConvertible(String.class,Enum.class);
registry.removeConvertible(String.class, Enum.class);
registry.addConverterFactory(new IntegerToEnumConverterFactory());
}
......
package cn.quantgroup.xyqb.config.mq;
import cn.quantgroup.xyqb.service.mq.IVestService;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
......@@ -58,28 +50,33 @@ public class LoanVestMQConfig {
connectionFactory.setPublisherConfirms(false);
return connectionFactory;
}
@Primary
@Bean(name= "loanVestAmqpAdmin")
@Bean(name = "loanVestAmqpAdmin")
public AmqpAdmin loanVestAdmin(@Qualifier("vestFactory") ConnectionFactory vestFactory) {
return new RabbitAdmin(vestFactory);
}
@Primary
@Bean(name = "loanVestExchange")
public FanoutExchange loanVestExchange() {
return new FanoutExchange(loanVestExchange);
}
@Primary
@Bean(name = "loanVestQueue")
public Queue loanVestQueue() {
return new Queue(queueName);
}
@Primary
@Bean(name = "loanVestBinding")
public Binding bindingLoanVest(@Qualifier("loanVestAmqpAdmin")AmqpAdmin loanVestAdmin, @Qualifier("loanVestQueue")Queue loanVestQueue, @Qualifier("loanVestExchange")FanoutExchange loanVestExchange) {
public Binding bindingLoanVest(@Qualifier("loanVestAmqpAdmin") AmqpAdmin loanVestAdmin, @Qualifier("loanVestQueue") Queue loanVestQueue, @Qualifier("loanVestExchange") FanoutExchange loanVestExchange) {
Binding binding = BindingBuilder.bind(loanVestQueue).to(loanVestExchange);
loanVestAdmin.declareBinding(binding);
return binding;
}
@Primary
@Bean(name = "rabbitTemplate")
public RabbitTemplate loanVestTemplate(@Qualifier("vestFactory") ConnectionFactory vestFactory) {
......
package cn.quantgroup.xyqb.config.mq;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
......@@ -13,7 +9,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
/**
* Created by xuran on 2017/9/7.
......@@ -43,7 +38,6 @@ public class RegisterMqConfig {
private String virtualHost;
@Bean(name = "registerMqFactory")
public ConnectionFactory registerMqFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
......@@ -59,7 +53,7 @@ public class RegisterMqConfig {
return connectionFactory;
}
@Bean(name= "registerMqAmqpAdmin")
@Bean(name = "registerMqAmqpAdmin")
public AmqpAdmin registerMqAmqpAdmin(@Qualifier("registerMqFactory") ConnectionFactory registerMqFactory) {
return new RabbitAdmin(registerMqFactory);
}
......@@ -75,7 +69,7 @@ public class RegisterMqConfig {
}
@Bean(name = "registerMqBinding")
public Binding registerMqBinding(@Qualifier("registerMqAmqpAdmin")AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue")Queue registerMqQueue, @Qualifier("registerMqExchange")FanoutExchange registerMqExchange) {
public Binding registerMqBinding(@Qualifier("registerMqAmqpAdmin") AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue") Queue registerMqQueue, @Qualifier("registerMqExchange") FanoutExchange registerMqExchange) {
Binding binding = BindingBuilder.bind(registerMqQueue).to(registerMqExchange);
registerMqAmqpAdmin.declareBinding(binding);
return binding;
......@@ -100,7 +94,7 @@ public class RegisterMqConfig {
}
@Bean(name = "registerMqBinding4Gdt")
public Binding registerMqBinding4Gdt(@Qualifier("registerMqAmqpAdmin")AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue4Gdt")Queue registerMqQueue4Gdt, @Qualifier("registerMqExchange4Gdt")FanoutExchange registerMqExchange4Gdt) {
public Binding registerMqBinding4Gdt(@Qualifier("registerMqAmqpAdmin") AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue4Gdt") Queue registerMqQueue4Gdt, @Qualifier("registerMqExchange4Gdt") FanoutExchange registerMqExchange4Gdt) {
Binding binding = BindingBuilder.bind(registerMqQueue4Gdt).to(registerMqExchange4Gdt);
registerMqAmqpAdmin.declareBinding(binding);
return binding;
......
......@@ -18,6 +18,7 @@ public class AsyncConfig {
/**
* 生成线程池
*
* @param corePoolSize
* @param maxPoolSize
* @param queueCapacity
......@@ -37,14 +38,16 @@ public class AsyncConfig {
executor.setWaitForTasksToCompleteOnShutdown(waitForCompleteOnShutdown);
executor.setThreadNamePrefix(prefix);
executor.initialize();
return executor ;
return executor;
}
/**
* 日志线程池
*
* @return
*/
@Bean(name = "logExecutor")
public Executor loanMqExecutor(){
public Executor loanMqExecutor() {
return generateThreadPoolTaskExecutor(100, 2000, 2000, true, 30, true, "loanMqExecutor-");
}
}
......@@ -54,6 +54,7 @@ public class ExceptionHandlingController implements IBaseController {
/**
* 用户不存在异常
*
* @param unee
* @return
*/
......@@ -66,6 +67,7 @@ public class ExceptionHandlingController implements IBaseController {
/**
* 微信关联异常
*
* @param wrue
* @return
*/
......@@ -78,6 +80,7 @@ public class ExceptionHandlingController implements IBaseController {
/**
* 其他全局异常
*
* @param e
* @return
*/
......
......@@ -8,7 +8,6 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
......@@ -16,6 +15,7 @@ import java.util.Objects;
import static cn.quantgroup.xyqb.session.XyqbSessionContextHolder.getXSession;
import static cn.quantgroup.xyqb.session.XyqbSessionContextHolder.getXSessionFromRedis;
/**
* Created by Miraculous on 15/7/5.
*/
......@@ -43,7 +43,7 @@ public interface IBaseController {
return session.getValues().getUser();
}
default SessionStruct getCurrentSessionFromRedis(){
default SessionStruct getCurrentSessionFromRedis() {
return getXSessionFromRedis();
}
......@@ -68,7 +68,7 @@ public interface IBaseController {
HashMap<String, String> map = new HashMap<>();
while (headerNames.hasMoreElements()) {
String key = headerNames.nextElement();
if(Objects.equals("authorization", key)){
if (Objects.equals("authorization", key)) {
continue;
}
map.put(key, request.getHeader(key));
......
......@@ -4,8 +4,6 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaValidator;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import java.util.*;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -17,6 +15,9 @@ import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 类名称:ImgCaptchaController
......@@ -59,6 +60,7 @@ public class ImageCaptchaController {
data.put("image", String.format(IMG_BASE64_PATTREN, imageBase64));
return JsonResult.buildSuccessResult("", data);
}
/**
* 图片验证码验证
* 注意:本方法有中间层在用,用于QG图形验证码检验
......
package cn.quantgroup.xyqb.controller.external.captcha;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaNewValidator;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.JsonResult;
......@@ -18,7 +17,10 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
/**
* @author xufei on 2018/1/30.
......@@ -52,17 +54,17 @@ public class NewCaptchaController {
Map<String, String> data = new HashMap<String, String>();
Map<String, String> imgMap = null;
// 优先获取极验
if(!Boolean.valueOf(geetestClose)){
if (!Boolean.valueOf(geetestClose)) {
imgMap = geetestCaptchaService.fetchGeetestCaptcha(keyMd5, remoteIp, ClientType.valueByName(clientType));
data.put(Constants.VERIFY_PARAM, Constants.VERIFY_TYPE_GT);
}
// 备选方案:量化派图形验证码
if(Objects.isNull(imgMap) || imgMap.isEmpty()){
if (Objects.isNull(imgMap) || imgMap.isEmpty()) {
imgMap = quantgroupCaptchaService.fetchQuantgroupCaptcha(request.getLocale());
data.put(Constants.VERIFY_PARAM, Constants.VERIFY_TYPE_QG);
}
// 返回结果
if(Objects.isNull(imgMap) || imgMap.isEmpty()){
if (Objects.isNull(imgMap) || imgMap.isEmpty()) {
return JsonResult.buildErrorStateResult("获取验证码失败", "");
}
// 填充数据并返回
......
......@@ -17,7 +17,7 @@ public class HelloController {
@RequestMapping("/hello")
public String hello(HttpServletRequest request) {
String ip = IPUtil.getRemoteIP(request);
if(ip.startsWith("192.168.12.")){
if (ip.startsWith("192.168.12.")) {
log.error("测试:", new Exception("Sentry捕获异常"));
}
return "ok";
......
......@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
......@@ -37,29 +37,31 @@ public class LockIpv4Controller implements IBaseController {
/**
* 获取操作密令
* @header lock_ipv4 - 获取密令
*
* @param act - 操作标记,true-锁定/添加,false-解锁/删除
* @param request
* @return
* @header lock_ipv4 - 获取密令
*/
@RequestMapping("/key")
public JsonResult key(@RequestParam(required = false)String act, HttpServletRequest request) {
public JsonResult key(@RequestParam(required = false) String act, HttpServletRequest request) {
//系统环境
String jvmTest = Boolean.valueOf(System.getProperty("test")).toString();
if(Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act)){
if (Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act)) {
// 操作标记
boolean lock = Objects.equals(Boolean.TRUE.toString(), act);
String header_key = request.getHeader(Constants.IPV4_LOCK.replace(":", ""));
if(Objects.equals(Constants.CLEAR_LOCK_FOR_IPV4, header_key)){
if (Objects.equals(Constants.CLEAR_LOCK_FOR_IPV4, header_key)) {
String md5Key = ValidationUtil.getMd5Key(lock);
return JsonResult.buildErrorStateResult(WORD.concat(jvmTest), md5Key);
}
}
return JsonResult.buildErrorStateResult(WORD.concat(jvmTest),null);
return JsonResult.buildErrorStateResult(WORD.concat(jvmTest), null);
}
/**
* 锁定/解锁特定IP
*
* @param ip - 目标IP
* @param key - 密令
* @param act - 操作标记,true-锁定,false-解锁
......@@ -67,51 +69,52 @@ public class LockIpv4Controller implements IBaseController {
* @return
*/
@RequestMapping("/lock_ipv4")
public JsonResult lockIpv4(@RequestParam(required = true)String ip,
@RequestParam(required = true)String key,
@RequestParam(required = false)String act,
public JsonResult lockIpv4(@RequestParam(required = true) String ip,
@RequestParam(required = true) String key,
@RequestParam(required = false) String act,
HttpServletRequest request) {
if(!ValidationUtil.validateIpv4(ip) || StringUtils.isBlank(act) || StringUtils.isBlank(key)){
if (!ValidationUtil.validateIpv4(ip) || StringUtils.isBlank(act) || StringUtils.isBlank(key)) {
LOGGER.info("Lock_ipv4: fail to clear_or_lock ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD,null);
return JsonResult.buildErrorStateResult(WORD, null);
}
if(Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act)){
if (Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act)) {
// 操作标记
boolean lock = Objects.equals(Boolean.TRUE.toString(), act);
boolean valid = ValidationUtil.isValid(key, lock);
if(valid){
if (valid) {
lockIpv4(ip, lock);
return JsonResult.buildSuccessResult("Success",null);
return JsonResult.buildSuccessResult("Success", null);
}
}
LOGGER.info("Lock_ipv4: fail to clear_or_lock ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD,null);
return JsonResult.buildErrorStateResult(WORD, null);
}
/**
* 锁定/解锁特定IP
* @header lock_ipv4 - 获取密令
*
* @param ip - 目标IP
* @param lock - 操作标记,true-锁定,false-解锁
* @header lock_ipv4 - 获取密令
*/
private void lockIpv4(String ip, boolean lock){
private void lockIpv4(String ip, boolean lock) {
String lockIpv4Key = getLockIpv4Key(ip);
if(lock){
if (lock) {
// 每分钟计数阈值
long counts = Constants.IPV4_LOCK_ON_FAILED_COUNTS;
String redisCounts = redisTemplate.opsForValue().get(Constants.IPV4_LOCK_ON_COUNTS_REDIS);
if(StringUtils.isNumeric(redisCounts) && Integer.valueOf(redisCounts) > 0){
if (StringUtils.isNumeric(redisCounts) && Integer.valueOf(redisCounts) > 0) {
counts = Integer.valueOf(redisCounts);
}
// 锁定时长
long minutes = Constants.IPV4_FAILED_LOCK_MINUTES;
String redisMinutes = redisTemplate.opsForValue().get(Constants.IPV4_LOCK_ON_COUNTS_REDIS);
if(StringUtils.isNumeric(redisMinutes) && Integer.valueOf(redisMinutes) > 0){
if (StringUtils.isNumeric(redisMinutes) && Integer.valueOf(redisMinutes) > 0) {
minutes = Integer.valueOf(redisMinutes);
}
redisTemplate.opsForValue().set(lockIpv4Key, Boolean.TRUE.toString(), minutes, TimeUnit.MINUTES);
LOGGER.info("Lock_ipv4: locked ip Success. ip:{}, error overstep {} times in {} minutes, do lock {} minutes", ip, counts, Constants.IPV4_FAILED_COUNT_MINUTES, minutes);
}else{
} else {
redisTemplate.delete(lockIpv4Key);
LOGGER.info("Lock_ipv4: unlocked ip Success. ip:{}", ip);
}
......@@ -119,6 +122,7 @@ public class LockIpv4Controller implements IBaseController {
/**
* 配置特定IP到黑/白名单 - Redis
*
* @param ip - 目标IP
* @param key - 密令
* @param act - 操作:true-添加,false-删除
......@@ -127,52 +131,53 @@ public class LockIpv4Controller implements IBaseController {
* @return
*/
@RequestMapping("/configHitList")
public JsonResult configHitList(@RequestParam(required = true)String ip,
@RequestParam(required = true)String key,
@RequestParam(required = false)String act,
@RequestParam(required = false)String type,
public JsonResult configHitList(@RequestParam(required = true) String ip,
@RequestParam(required = true) String key,
@RequestParam(required = false) String act,
@RequestParam(required = false) String type,
HttpServletRequest request) {
if(!ValidationUtil.validateIpv4(ip) || StringUtils.isBlank(key) || StringUtils.isBlank(act) || StringUtils.isBlank(type)){
if (!ValidationUtil.validateIpv4(ip) || StringUtils.isBlank(key) || StringUtils.isBlank(act) || StringUtils.isBlank(type)) {
LOGGER.info("Lock_ipv4: fail to config hit list for ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD,null);
return JsonResult.buildErrorStateResult(WORD, null);
}
boolean actOk = Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act);
boolean typeOk = Objects.equals(Boolean.TRUE.toString(), type) || Objects.equals(Boolean.FALSE.toString(), type);
// 操作标记
boolean valid = (actOk && typeOk) && ValidationUtil.isValid(key, Objects.equals(Boolean.TRUE.toString(), act));
if(valid){
if (valid) {
boolean operate = Objects.equals(Boolean.TRUE.toString(), act);
boolean lock = Objects.equals(Boolean.TRUE.toString(), type);
configHitList(ip, operate, lock);
return JsonResult.buildSuccessResult("Success",null);
return JsonResult.buildSuccessResult("Success", null);
}
LOGGER.info("Lock_ipv4: fail to config hit list for ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD,null);
return JsonResult.buildErrorStateResult(WORD, null);
}
/**
* 配置特定IP到黑/白名单 - Redis
*
* @param ip - 目标IP
* @param operate - 操作:true-添加,false-删除
* @param lock - 名单类型:true-黑名单,false-白名单
*/
private void configHitList(String ip, boolean operate, boolean lock) {
if(!ValidationUtil.validateIpv4(ip)){
if (!ValidationUtil.validateIpv4(ip)) {
return;
}
if(operate){
if(lock){
if (operate) {
if (lock) {
redisTemplate.opsForSet().add(Constants.IPV4_LOCK_BLACK, ip);
LOGGER.info("Lock_ipv4: add black-list item Success, ip:{}", ip);
}else{
} else {
redisTemplate.opsForSet().add(Constants.IPV4_LOCK_WHITE, ip);
LOGGER.info("Lock_ipv4: add white-list item Success, ip:{}", ip);
}
}else{
if(lock){
} else {
if (lock) {
redisTemplate.opsForSet().remove(Constants.IPV4_LOCK_BLACK, ip);
LOGGER.info("Lock_ipv4: remove black-list item Success, ip:{}", ip);
}else{
} else {
redisTemplate.opsForSet().remove(Constants.IPV4_LOCK_WHITE, ip);
LOGGER.info("Lock_ipv4: remove white-list item Success, ip:{}", ip);
}
......@@ -182,6 +187,7 @@ public class LockIpv4Controller implements IBaseController {
/**
* 设定可选阈值 - Redis
*
* @param key - 密令
* @param act - 操作:true-添加,false-删除
* @param counts - 每分钟计数阈值
......@@ -190,50 +196,51 @@ public class LockIpv4Controller implements IBaseController {
* @return
*/
@RequestMapping("/configNoun")
public JsonResult configNoun(@RequestParam(required = true)String key,
@RequestParam(required = false)String act,
@RequestParam(required = false)String counts,
@RequestParam(required = false)String minutes,
public JsonResult configNoun(@RequestParam(required = true) String key,
@RequestParam(required = false) String act,
@RequestParam(required = false) String counts,
@RequestParam(required = false) String minutes,
HttpServletRequest request) {
if(StringUtils.isBlank(key) || StringUtils.isBlank(act) || !StringUtils.isNumeric(counts) || !StringUtils.isNumeric(minutes)){
if (StringUtils.isBlank(key) || StringUtils.isBlank(act) || !StringUtils.isNumeric(counts) || !StringUtils.isNumeric(minutes)) {
LOGGER.info("Lock_ipv4: fail to config noun");
return JsonResult.buildErrorStateResult(WORD,null);
return JsonResult.buildErrorStateResult(WORD, null);
}
boolean actOk = Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act);
boolean valid = actOk && ValidationUtil.isValid(key, Objects.equals(Boolean.TRUE.toString(), act));
if(valid){
if (valid) {
// 操作标记
boolean operate = Objects.equals(Boolean.TRUE.toString(), act);
// 每分钟计数阈值
int redisCounts = Integer.valueOf(counts);
// 锁定时长
int redisMinutes = Integer.valueOf(minutes);
if(redisCounts > 0 && redisMinutes > 0){
if (redisCounts > 0 && redisMinutes > 0) {
configNoun(redisCounts, redisMinutes, operate);
return JsonResult.buildSuccessResult("Success",null);
return JsonResult.buildSuccessResult("Success", null);
}
}
LOGGER.info("Lock_ipv4: fail to config noun");
return JsonResult.buildErrorStateResult(WORD,null);
return JsonResult.buildErrorStateResult(WORD, null);
}
/**
* 设定可选阈值 - Redis
*
* @param counts - 每分钟计数阈值(? > 0)
* @param minutes - 锁定时长(? > 0)
* @param operate - 操作:true-添加,false-删除
*/
private final void configNoun(int counts, int minutes, boolean operate){
if(operate) {
if(counts > 0){
private final void configNoun(int counts, int minutes, boolean operate) {
if (operate) {
if (counts > 0) {
redisTemplate.opsForValue().set(Constants.IPV4_LOCK_ON_COUNTS_REDIS, String.valueOf(counts));
LOGGER.info("Lock_ipv4: config redis-param counts Success, counts:{}", counts);
}
if(minutes > 0){
if (minutes > 0) {
redisTemplate.opsForValue().set(Constants.IPV4_LOCK_MINUTES_REDIS, String.valueOf(minutes));
LOGGER.info("Lock_ipv4: config redis-param minutes Success, minutes:{}", minutes);
}
}else{
} else {
redisTemplate.delete(Constants.IPV4_LOCK_ON_COUNTS_REDIS);
redisTemplate.delete(Constants.IPV4_LOCK_MINUTES_REDIS);
LOGGER.info("Lock_ipv4: remove redis-param counts、minutes Success, counts:{},minutes:{}, current default:[counts:{},minutes:{}]", Constants.IPV4_LOCK_ON_FAILED_COUNTS, Constants.IPV4_FAILED_LOCK_MINUTES);
......@@ -242,10 +249,11 @@ public class LockIpv4Controller implements IBaseController {
/**
* 获取Redis-key
*
* @param ipv4
* @return Redis-key
*/
private final static String getLockIpv4Key(String ipv4){
private final static String getLockIpv4Key(String ipv4) {
return Constants.IPV4_LOCK + ipv4;
}
......
......@@ -7,8 +7,10 @@ import cn.quantgroup.motan.vo.UserSysResult;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.session.LoginInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.api.IUserApiService;
......@@ -128,7 +130,7 @@ public class MotanUserServiceImpl implements UserMotanService {
}
user.setUpdatedAt(now);
user.setUuid(userBean.getUuid());
user.setRegisteredFrom(null==userBean.getRegisteredFrom()?0L:userBean.getRegisteredFrom());
user.setRegisteredFrom(null == userBean.getRegisteredFrom() ? 0L : userBean.getRegisteredFrom());
User saveUser = userService.saveUser(user);
return returnSuccessValue(fromUser(saveUser));
}
......@@ -276,7 +278,7 @@ public class MotanUserServiceImpl implements UserMotanService {
log.info("第三方用户登录, loginFrom:{}, requestIp:{}", appLoginParam.getRegisterFrom(), requestIp);
User user = userService.findByPhoneInDb(appLoginParam.getPhoneNo());
if (user == null) {
user = userRegisterService.register(appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getIdNo(), appLoginParam.getName(),appLoginParam.getChannelId());
user = userRegisterService.register(appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getIdNo(), appLoginParam.getName(), appLoginParam.getChannelId());
}
if (user == null) {
return returnErrorValue("账户或者密码错误");
......@@ -349,7 +351,8 @@ 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("联系人转换错误");
......@@ -361,7 +364,8 @@ public class MotanUserServiceImpl implements UserMotanService {
}
}
List<Contact> result = contactService.save(userId, 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);
}
......@@ -471,7 +475,7 @@ public class MotanUserServiceImpl implements UserMotanService {
}
User user = userService.findById(userId);
if (null == user) {
throw new RuntimeException("未查询到该用户,用户id:"+userId);
throw new RuntimeException("未查询到该用户,用户id:" + userId);
}
user.setEnable(false);
user.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
......@@ -541,7 +545,7 @@ public class MotanUserServiceImpl implements UserMotanService {
}
private XUserExtInfo fromUserExtInfo(UserExtInfo userExtInfo) {
return null==userExtInfo?null:userExtInfo.toXUserExtInfo();
return null == userExtInfo ? null : userExtInfo.toXUserExtInfo();
}
@Override
......@@ -644,7 +648,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override
public UserSysResult<XLoginInfo> getLoginInfo(String token) {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token);
if(null != sessionStruct) {
if (null != sessionStruct) {
log.info("从用户中心获取到了用户登录信息:phone:[{}]", sessionStruct.getValues().getUser().getPhoneNo());
XLoginInfo loginInfo = new XLoginInfo();
loginInfo.setUser(sessionStruct.getValues().getUser().toXUser());
......@@ -700,10 +704,10 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override
public UserSysResult<Map<Long, String>> findPhoneByUserIds(List<Long> userIds) {
if(!CollectionUtils.isEmpty(userIds) && userIds.size()<=500) {
if (!CollectionUtils.isEmpty(userIds) && userIds.size() <= 500) {
Map<Long, String> userIdAndPhoneMap = userService.findPhoneByIdsInDb(userIds);
return returnSuccessValue(userIdAndPhoneMap);
}else {
} else {
return returnErrorValue("批量查询每次最多进行500条用户信息的查询");
}
}
......
package cn.quantgroup.xyqb.controller.external.queryLog;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.UserDetail;
......@@ -10,13 +11,12 @@ import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.IAddressService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserQueryLogService;
import cn.quantgroup.xyqb.util.IdcardValidator;
import cn.quantgroup.xyqb.util.ValidationUtil;
import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.util.encrypt.RSA;
import com.alibaba.fastjson.JSON;
import com.google.gson.*;
import org.apache.poi.hssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -27,20 +27,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by zenglibin on 17/06/13.
*/
......@@ -65,231 +57,231 @@ public class UserQueryLogController {
private String yunyingUrl;
@Autowired
private IHttpService httpService;
private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYiw1PKWnCbkKyzHK+blHpKTR/qtO3Oq7nvjSdcopCSmOJqji3B+qJMrf03242mYJIQeF3YSTQZTfri5EkNgoqn0Y/KYpLAKuq89jPdIkB3lvirvew9tpfbAT4B14WgoWdMH5ooqBt0ly3f+JjoBM5dKFTOrhckhFDoaB3UAaaiQIDAQAB";
private static final String PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJiLDU8pacJuQrLMcr5uUekpNH+q07c6rue+NJ1yikJKY4mqOLcH6okyt/TfbjaZgkhB4XdhJNBlN+uLkSQ2CiqfRj8piksAq6rz2M90iQHeW+Ku97D22l9sBPgHXhaChZ0wfmiioG3SXLd/4mOgEzl0oVM6uFySEUOhoHdQBpqJAgMBAAECgYA3DfCWwoaWEr9l0p4TFrPfZ+y3qwrQVZCsuRw6Ow2lUT3NgK8JeATw0WpNKZqYgBziQUzDjj8AK5fcHjobDJnsKGqC2VQ+j05hQZztoHTrYxOx6xrGxIzqmbt/dPsw779xXSRJu3DuUeCm6CrGZpVpPX/NtXBxIhXRY2KRNa1SZQJBAPMboc+M6/OeGPQqFvXg9jgEWcosBpy6HtukfjONQAVuM5e0pZa8SQCLhcoHgbbqcEhbDAJEqr9x9eZjjFPSt08CQQCgoe/hOVf0s5oo1IM1TVEUkGOIzVVlyTMwu0p4jwt3987D7BKZe7mCl41quWDwL4JIQ0GcivVMpJzYsDBZHRqnAkBMgCKAHHlXdSWnF+OXxg3U/NGAhDAke5EgTvgDouxFiTMlBwygjWlviXg1Zf1UoRtqOXRi9lbA3cyijirnacSTAkBmve0ug30MmOvbfcHGkANyQcBIOf2LMxu46bKCVgwh2bC4hACJhydqrgDX6GZmehy8l7gZpo+rTAa+WkMyXHk1AkEArt6ElkyNI7TDu0By59Zin05tuZJr6QoMXs9bVH+xP3OBG1KfPYTBc9yb5MOjXIxAjyGGeDpUfhuUDBe56GTOBA==";
@RequestMapping("/queryLog")
public JsonResult queryLog(HttpServletRequest request,@RequestParam(required=false) String beginDate,@RequestParam(required=false) String endDate, Integer pageId, Integer pageSize) {
LOGGER.info("查询日期:beginDate{},endDate{}",beginDate,endDate);
String token=request.getHeader(Constants.X_AUTH_TOKEN);
if(StringUtils.isEmpty(token)){
public JsonResult queryLog(HttpServletRequest request, @RequestParam(required = false) String beginDate, @RequestParam(required = false) String endDate, Integer pageId, Integer pageSize) {
LOGGER.info("查询日期:beginDate{},endDate{}", beginDate, endDate);
String token = request.getHeader(Constants.X_AUTH_TOKEN);
if (StringUtils.isEmpty(token)) {
LOGGER.info("token为空,非法查询");
return JsonResult.buildErrorStateResult("缺少授权信息",null);
return JsonResult.buildErrorStateResult("缺少授权信息", null);
}
if(StringUtils.isEmpty(checkUserToken(token))){
if (StringUtils.isEmpty(checkUserToken(token))) {
LOGGER.info("token授权异常");
return JsonResult.buildErrorStateResult("未授权查询",null);
}
try{
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sfs=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1=null,date2=null;
if(beginDate!=null&& StringUtils.hasLength(beginDate)){
date1=sfs.parse(beginDate+" 00:00:00");
}else{
String nowStr=sf.format(new Date());
date1=sfs.parse(nowStr+" 00:00:00");
}
if(endDate!=null&& StringUtils.hasLength(endDate)){
date2=sfs.parse(endDate+" 23:59:59");
}else{
String nowEndStr=sf.format(new Date());
date2=sfs.parse(nowEndStr+" 23:59:59");
}
int startP=(pageId-1)*pageSize;
List<UserQueryLog> userQueryLogs=userQueryLogService.findByTimestamp(date1,date2,startP,pageSize);
Long total=userQueryLogService.findByTimestampCount(date1,date2);
PageModel<UserQueryLog> uqp=new PageModel<UserQueryLog>();
return JsonResult.buildErrorStateResult("未授权查询", null);
}
try {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = null, date2 = null;
if (beginDate != null && StringUtils.hasLength(beginDate)) {
date1 = sfs.parse(beginDate + " 00:00:00");
} else {
String nowStr = sf.format(new Date());
date1 = sfs.parse(nowStr + " 00:00:00");
}
if (endDate != null && StringUtils.hasLength(endDate)) {
date2 = sfs.parse(endDate + " 23:59:59");
} else {
String nowEndStr = sf.format(new Date());
date2 = sfs.parse(nowEndStr + " 23:59:59");
}
int startP = (pageId - 1) * pageSize;
List<UserQueryLog> userQueryLogs = userQueryLogService.findByTimestamp(date1, date2, startP, pageSize);
Long total = userQueryLogService.findByTimestampCount(date1, date2);
PageModel<UserQueryLog> uqp = new PageModel<UserQueryLog>();
uqp.setTotal(total);
if(pageSize==0||pageSize<0){
pageSize=30;
}else if(pageSize>200){
pageSize=200;
}
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
for(UserQueryLog ll:userQueryLogs){
if (pageSize == 0 || pageSize < 0) {
pageSize = 30;
} else if (pageSize > 200) {
pageSize = 200;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
for (UserQueryLog ll : userQueryLogs) {
ll.setCreateDate(sdf.format(ll.getCreatedAt()));
}
}catch (Exception e){
} catch (Exception e) {
LOGGER.info("日期时间转换异常");
return JsonResult.buildErrorStateResult("日期时间转换异常",null);
return JsonResult.buildErrorStateResult("日期时间转换异常", null);
}
uqp.setPageSize(pageSize);
uqp.setPageId(pageId);
uqp.setPageList(userQueryLogs);
int yu=total.intValue()%pageSize;
Double d=Math.ceil(total/pageSize);
uqp.setPages(yu>0?d.intValue()+1:d.intValue());
return JsonResult.buildSuccessResult("查询成功",uqp);
}catch(Exception e){
return JsonResult.buildErrorStateResult("查询失败",null);
int yu = total.intValue() % pageSize;
Double d = Math.ceil(total / pageSize);
uqp.setPages(yu > 0 ? d.intValue() + 1 : d.intValue());
return JsonResult.buildSuccessResult("查询成功", uqp);
} catch (Exception e) {
return JsonResult.buildErrorStateResult("查询失败", null);
}
}
@RequestMapping("/queryUserInfo")
public JsonResult queryForResult(HttpServletRequest request,String key,String keyValues, String columns,Integer pageId,Integer pageSize) {
LOGGER.info("查询条件:key{},columns{}",key,columns);
String token=request.getHeader(Constants.X_AUTH_TOKEN);
if(StringUtils.isEmpty(token)){
public JsonResult queryForResult(HttpServletRequest request, String key, String keyValues, String columns, Integer pageId, Integer pageSize) {
LOGGER.info("查询条件:key{},columns{}", key, columns);
String token = request.getHeader(Constants.X_AUTH_TOKEN);
if (StringUtils.isEmpty(token)) {
LOGGER.info("token为空,非法查询");
return JsonResult.buildErrorStateResult("缺少授权信息",null);
return JsonResult.buildErrorStateResult("缺少授权信息", null);
}
//columns=> userId,phoneNo,idNo,bankCard,address
//key=>phoneNo、idNo、userId
//checkKeysType;
//后台参数校验
//校验用户权限
String userName=checkUserToken(token);
if(StringUtils.isEmpty(userName)){
String userName = checkUserToken(token);
if (StringUtils.isEmpty(userName)) {
LOGGER.info("token授权异常");
return JsonResult.buildErrorStateResult("未授权查询",null);
return JsonResult.buildErrorStateResult("未授权查询", null);
}
//输入enter换行\n
if(org.apache.commons.lang3.StringUtils.isEmpty(keyValues)){
return JsonResult.buildErrorStateResult("请输入查询条件",null);
}
String[] values=keyValues.split("\\n");
List<String> queryV= Arrays.asList(values);
if(queryV!=null&&queryV.size()>3000){
return JsonResult.buildErrorStateResult("查询记录数是"+queryV.size()+",超过3000条限制",null);
}
List<UserQueryInfo> userQueryInfos=new ArrayList<UserQueryInfo>();
List<UserDetail> userDetails=new ArrayList<UserDetail>();
Page<UserDetail> userDetailPage=null;
List<Address> addresslist=new ArrayList<Address>();
HashMap<String,String> phonesCards=new HashMap<String,String>();
if(pageSize==0||pageSize<0){
pageSize=30;
}else if(pageSize>200){
pageSize=200;
if (org.apache.commons.lang3.StringUtils.isEmpty(keyValues)) {
return JsonResult.buildErrorStateResult("请输入查询条件", null);
}
String[] values = keyValues.split("\\n");
List<String> queryV = Arrays.asList(values);
if (queryV != null && queryV.size() > 3000) {
return JsonResult.buildErrorStateResult("查询记录数是" + queryV.size() + ",超过3000条限制", null);
}
List<UserQueryInfo> userQueryInfos = new ArrayList<UserQueryInfo>();
List<UserDetail> userDetails = new ArrayList<UserDetail>();
Page<UserDetail> userDetailPage = null;
List<Address> addresslist = new ArrayList<Address>();
HashMap<String, String> phonesCards = new HashMap<String, String>();
if (pageSize == 0 || pageSize < 0) {
pageSize = 30;
} else if (pageSize > 200) {
pageSize = 200;
}
//如果维度里面没有保护查询条件则加入条件
if(!columns.contains(key)){
columns=columns+","+key;
if (!columns.contains(key)) {
columns = columns + "," + key;
}
if(Objects.equals(key, "userId")){
List<Long> userIds=new ArrayList<Long>();
try{
for(String s:queryV){
if(s.length()>8){
return JsonResult.buildErrorStateResult("查询的userId"+s+"长度超过8位",null);
if (Objects.equals(key, "userId")) {
List<Long> userIds = new ArrayList<Long>();
try {
for (String s : queryV) {
if (s.length() > 8) {
return JsonResult.buildErrorStateResult("查询的userId" + s + "长度超过8位", null);
}
long uid=Long.valueOf(s);
long uid = Long.valueOf(s);
userIds.add(uid);
}
}catch(Exception e){
return JsonResult.buildErrorStateResult("查询的userId有误",null);
} catch (Exception e) {
return JsonResult.buildErrorStateResult("查询的userId有误", null);
}
userDetailPage=userDetailService.getUserDetailsPage(userIds,null,null,pageId,pageSize,"auto");
}else if(Objects.equals(key, Constants.PHONE_NO)){
for(String pn:queryV){
if(!ValidationUtil.validatePhoneNo(pn)){
return JsonResult.buildErrorStateResult("查询的手机号码"+pn+"格式有误",null);
userDetailPage = userDetailService.getUserDetailsPage(userIds, null, null, pageId, pageSize, "auto");
} else if (Objects.equals(key, Constants.PHONE_NO)) {
for (String pn : queryV) {
if (!ValidationUtil.validatePhoneNo(pn)) {
return JsonResult.buildErrorStateResult("查询的手机号码" + pn + "格式有误", null);
}
}
userDetailPage=userDetailService.getUserDetailsPage(null,queryV,null,pageId,pageSize,"auto");
}else if(Objects.equals(key, "idNo")){
for(String idno:queryV){
if(!IdcardValidator.is18Idcard(idno)&&!IdcardValidator.is15Idcard(idno)){
return JsonResult.buildErrorStateResult("查询的身份证号"+idno+"格式有误",null);
userDetailPage = userDetailService.getUserDetailsPage(null, queryV, null, pageId, pageSize, "auto");
} else if (Objects.equals(key, "idNo")) {
for (String idno : queryV) {
if (!IdcardValidator.is18Idcard(idno) && !IdcardValidator.is15Idcard(idno)) {
return JsonResult.buildErrorStateResult("查询的身份证号" + idno + "格式有误", null);
}
}
userDetailPage=userDetailService.getUserDetailsPage(null,null,queryV,pageId,pageSize,"auto");
userDetailPage = userDetailService.getUserDetailsPage(null, null, queryV, pageId, pageSize, "auto");
}
if(userDetailPage!=null){
userDetails=userDetailPage.getContent();
if (userDetailPage != null) {
userDetails = userDetailPage.getContent();
}
if(columns.contains("bankCard")){
if (columns.contains("bankCard")) {
//需加银行卡信息
if(Objects.equals(key, Constants.PHONE_NO)){
phonesCards=getBankCardsByPhoneNos(queryV);
if(phonesCards!=null&&phonesCards.get("errorMsg")!=null&&!StringUtils.isEmpty(phonesCards.get("errorMsg"))){
return JsonResult.buildErrorStateResult(phonesCards.get("errorMsg"),null);
}
}else{
List<String> phones=new ArrayList<String>();
for(UserDetail uda:userDetails){
if (Objects.equals(key, Constants.PHONE_NO)) {
phonesCards = getBankCardsByPhoneNos(queryV);
if (phonesCards != null && phonesCards.get("errorMsg") != null && !StringUtils.isEmpty(phonesCards.get("errorMsg"))) {
return JsonResult.buildErrorStateResult(phonesCards.get("errorMsg"), null);
}
} else {
List<String> phones = new ArrayList<String>();
for (UserDetail uda : userDetails) {
phones.add(uda.getPhoneNo());
}
phonesCards=getBankCardsByPhoneNos(phones);
if(phonesCards!=null&&phonesCards.get("errorMsg")!=null&&!StringUtils.isEmpty(phonesCards.get("errorMsg"))){
return JsonResult.buildErrorStateResult(phonesCards.get("errorMsg"),null);
phonesCards = getBankCardsByPhoneNos(phones);
if (phonesCards != null && phonesCards.get("errorMsg") != null && !StringUtils.isEmpty(phonesCards.get("errorMsg"))) {
return JsonResult.buildErrorStateResult(phonesCards.get("errorMsg"), null);
}
}
}
if(columns.contains("address")){
List<Long> uidss=new ArrayList<Long>();
if (columns.contains("address")) {
List<Long> uidss = new ArrayList<Long>();
//加地址信息
for(UserDetail ud:userDetails){
for (UserDetail ud : userDetails) {
uidss.add(ud.getUserId());
}
if(uidss!=null&&uidss.size()>0){
addresslist=addressService.findByUserIds(uidss);
if (uidss != null && uidss.size() > 0) {
addresslist = addressService.findByUserIds(uidss);
}
}
for(UserDetail ud:userDetails){
UserQueryInfo uqi=new UserQueryInfo();
if(columns.contains("idNo")){
for (UserDetail ud : userDetails) {
UserQueryInfo uqi = new UserQueryInfo();
if (columns.contains("idNo")) {
uqi.setIdNo(ud.getIdNo());
}
if(columns.contains(Constants.PHONE_NO)){
if (columns.contains(Constants.PHONE_NO)) {
uqi.setPhoneNo(ud.getPhoneNo());
}
if(columns.contains("name")){
if (columns.contains("name")) {
uqi.setName(ud.getName());
}
if(columns.contains("userId")){
if (columns.contains("userId")) {
uqi.setUserId(ud.getUserId());
}
if(columns.contains("address")){
Optional<Address> oad=addresslist.stream().filter(addr->Objects.equals(addr.getUserId(), ud.getUserId())).findFirst();
if(oad.isPresent()){
if (columns.contains("address")) {
Optional<Address> oad = addresslist.stream().filter(addr -> Objects.equals(addr.getUserId(), ud.getUserId())).findFirst();
if (oad.isPresent()) {
uqi.setAddress(oad.get().toString());
}
}
if(columns.contains("bankCard")&&phonesCards!=null){
if (columns.contains("bankCard") && phonesCards != null) {
uqi.setBankCards(phonesCards.get(ud.getPhoneNo()));
}
userQueryInfos.add(uqi);
}
//保存记录
UserQueryLog log=new UserQueryLog();
log.setQueryItems(columns.replace("userId","用户ID").replace(Constants.PHONE_NO,"手机号").replace("name","姓名").replace("idNo","身份证号").replace("bankCard","银行卡号").replace("address","地址"));
UserQueryLog log = new UserQueryLog();
log.setQueryItems(columns.replace("userId", "用户ID").replace(Constants.PHONE_NO, "手机号").replace("name", "姓名").replace("idNo", "身份证号").replace("bankCard", "银行卡号").replace("address", "地址"));
log.setResultAmount(Long.valueOf(userDetailPage.getTotalElements()));
//转换存储
log.setQueryCondition(key.replace("userId","用户ID").replace(Constants.PHONE_NO,"手机号").replace("name","姓名").replace("idNo","身份证号"));
log.setQueryDetail(keyValues.replace("\n",";"));
log.setQueryCondition(key.replace("userId", "用户ID").replace(Constants.PHONE_NO, "手机号").replace("name", "姓名").replace("idNo", "身份证号"));
log.setQueryDetail(keyValues.replace("\n", ";"));
log.setLoginUserName(userName);
userQueryLogService.save(log);
PageModel<UserQueryInfo> uqi=new PageModel<UserQueryInfo>();
PageModel<UserQueryInfo> uqi = new PageModel<UserQueryInfo>();
uqi.setPageId(pageId);
uqi.setPageList(userQueryInfos);
uqi.setPageSize(pageSize);
uqi.setPages(userDetailPage.getTotalPages());
uqi.setTotal(userDetailPage.getTotalElements());
return JsonResult.buildSuccessResult("查询成功",uqi);
}
private HashMap<String,String> getBankCardsByPhoneNos(List<String> phoneNos){
HashMap<String,Object> ha=new HashMap<String,Object>();
ha.put("type","1");
ha.put("phones",phoneNos);
String phoneNoStr= new Gson().toJson(ha);
String data="";
String sign="";
HashMap<String,String> phonesMap=new HashMap<String,String>();
try{
data=RSA.encrypt(phoneNoStr,PUBLIC_KEY);
sign= MD5Util.build(data);
}catch(Exception e){
return JsonResult.buildSuccessResult("查询成功", uqi);
}
private HashMap<String, String> getBankCardsByPhoneNos(List<String> phoneNos) {
HashMap<String, Object> ha = new HashMap<String, Object>();
ha.put("type", "1");
ha.put("phones", phoneNos);
String phoneNoStr = new Gson().toJson(ha);
String data = "";
String sign = "";
HashMap<String, String> phonesMap = new HashMap<String, String>();
try {
data = RSA.encrypt(phoneNoStr, PUBLIC_KEY);
sign = MD5Util.build(data);
} catch (Exception e) {
LOGGER.info("参数加密异常");
phonesMap.put("errorMsg","参数加密异常");
phonesMap.put("errorMsg", "参数加密异常");
return null;
}
......@@ -299,32 +291,32 @@ public class UserQueryLogController {
parameters.put("sign", sign);
//访问用户中心查询用户银行卡接口
String resultStr = httpService.post(payCenterUrl + "/ex/search/card_list", parameters);
try{
try {
JsonObject obj = new JsonParser().parse(resultStr).getAsJsonObject();
if(obj.get("data")!=null) {
if (obj.get("data") != null) {
JsonObject data1 = obj.get("data").getAsJsonObject();
String dataStr=data1.get("data").getAsString();
String signStr=data1.get("sign").getAsString();
String dataStr = data1.get("data").getAsString();
String signStr = data1.get("sign").getAsString();
//校验签名
if(MD5Util.build(dataStr).equals(signStr)){
String jsonDataStr=RSA.decrypt(dataStr,PRIVATE_KEY);
if (MD5Util.build(dataStr).equals(signStr)) {
String jsonDataStr = RSA.decrypt(dataStr, PRIVATE_KEY);
JsonArray listObj = new JsonParser().parse(jsonDataStr).getAsJsonArray();
for(JsonElement jsonElement : listObj) {
for (JsonElement jsonElement : listObj) {
JsonObject jo = jsonElement.getAsJsonObject();
JsonArray cardList = jo.get("cardList").getAsJsonArray();
String phone = jo.get("phone").getAsString();
String cards="";
for(JsonElement element : cardList){
cards=cards+element.getAsString()+";";
String cards = "";
for (JsonElement element : cardList) {
cards = cards + element.getAsString() + ";";
}
if(cards.length()>0){
phonesMap.put(phone,cards.substring(0,cards.length()-1));
if (cards.length() > 0) {
phonesMap.put(phone, cards.substring(0, cards.length() - 1));
}
}
}else{
phonesMap.put("errorMsg","签名校验失败!");
} else {
phonesMap.put("errorMsg", "签名校验失败!");
LOGGER.info("签名校验失败!");
}
}
......@@ -333,132 +325,132 @@ public class UserQueryLogController {
// LOGGER.info("从支付中心接口返回data为null");
// }
}catch(Exception e){
phonesMap.put("errorMsg","查询银行卡信息接口返回解析异常");
} catch (Exception e) {
phonesMap.put("errorMsg", "查询银行卡信息接口返回解析异常");
LOGGER.info("查询银行卡信息接口返回解析异常");
}
return phonesMap;
}
@RequestMapping("/exportUserInfo")
public JsonResult exportExcel(final HttpServletResponse response, HttpServletRequest request,String key,String keyValues, String columns){
public JsonResult exportExcel(final HttpServletResponse response, HttpServletRequest request, String key, String keyValues, String columns) {
String token=request.getHeader(Constants.X_AUTH_TOKEN);
if(StringUtils.isEmpty(token)){
String token = request.getHeader(Constants.X_AUTH_TOKEN);
if (StringUtils.isEmpty(token)) {
LOGGER.info("token为空,非法查询");
return JsonResult.buildErrorStateResult("缺少授权信息",null);
return JsonResult.buildErrorStateResult("缺少授权信息", null);
}
String userName=checkUserToken(token);
if(StringUtils.isEmpty(userName)){
return JsonResult.buildErrorStateResult("未授权查询",null);
String userName = checkUserToken(token);
if (StringUtils.isEmpty(userName)) {
return JsonResult.buildErrorStateResult("未授权查询", null);
}
//输入enter换行\n
if(org.apache.commons.lang3.StringUtils.isEmpty(keyValues)){
return JsonResult.buildErrorStateResult("请输入查询条件",null);
if (org.apache.commons.lang3.StringUtils.isEmpty(keyValues)) {
return JsonResult.buildErrorStateResult("请输入查询条件", null);
}
List<UserQueryInfo> uqls=new ArrayList<UserQueryInfo>();
List<UserQueryInfo> uqls = new ArrayList<UserQueryInfo>();
String[] values=keyValues.split(";");
String[] values = keyValues.split(";");
List<String> queryV= Arrays.asList(values);
List<String> queryV = Arrays.asList(values);
if(queryV!=null&&queryV.size()>3000){
return JsonResult.buildErrorStateResult("查询记录数是"+queryV.size()+",超过3000条限制",null);
if (queryV != null && queryV.size() > 3000) {
return JsonResult.buildErrorStateResult("查询记录数是" + queryV.size() + ",超过3000条限制", null);
}
//如果维度里面没有保护查询条件则加入条件
if(!columns.contains(key)){
columns=columns+","+key;
}
List<UserQueryInfo> userQueryInfos=new ArrayList<UserQueryInfo>();
List<UserDetail> userDetails=new ArrayList<UserDetail>();
List<Address> addresslist=new ArrayList<Address>();
HashMap<String,String> phonesCards=new HashMap<String,String>();
if(Objects.equals(key, "userId")){
List<Long> userIds=new ArrayList<Long>();
try{
for(String s:queryV){
if(s.length()>8){
return JsonResult.buildErrorStateResult("查询的userId"+s+"长度超过8位",s);
}
long uid=Long.valueOf(s);
if (!columns.contains(key)) {
columns = columns + "," + key;
}
List<UserQueryInfo> userQueryInfos = new ArrayList<UserQueryInfo>();
List<UserDetail> userDetails = new ArrayList<UserDetail>();
List<Address> addresslist = new ArrayList<Address>();
HashMap<String, String> phonesCards = new HashMap<String, String>();
if (Objects.equals(key, "userId")) {
List<Long> userIds = new ArrayList<Long>();
try {
for (String s : queryV) {
if (s.length() > 8) {
return JsonResult.buildErrorStateResult("查询的userId" + s + "长度超过8位", s);
}
long uid = Long.valueOf(s);
userIds.add(uid);
}
}catch(Exception e){
return JsonResult.buildErrorStateResult("查询的userId有误",null);
} catch (Exception e) {
return JsonResult.buildErrorStateResult("查询的userId有误", null);
}
userDetails=userDetailService.findByUserIdIn(userIds);
}else if(Objects.equals(key,Constants.PHONE_NO)){
for(String pn:queryV){
if(!ValidationUtil.validatePhoneNo(pn)){
return JsonResult.buildErrorStateResult("查询的手机号码"+pn+"格式有误",pn);
userDetails = userDetailService.findByUserIdIn(userIds);
} else if (Objects.equals(key, Constants.PHONE_NO)) {
for (String pn : queryV) {
if (!ValidationUtil.validatePhoneNo(pn)) {
return JsonResult.buildErrorStateResult("查询的手机号码" + pn + "格式有误", pn);
}
}
userDetails=userDetailService.findByPhoneNos(queryV);
}else if(Objects.equals(key,"idNo")){
for(String idno:queryV){
if(!IdcardValidator.is18Idcard(idno)&&!IdcardValidator.is15Idcard(idno)){
return JsonResult.buildErrorStateResult("查询的身份证号"+idno+"格式有误",idno);
userDetails = userDetailService.findByPhoneNos(queryV);
} else if (Objects.equals(key, "idNo")) {
for (String idno : queryV) {
if (!IdcardValidator.is18Idcard(idno) && !IdcardValidator.is15Idcard(idno)) {
return JsonResult.buildErrorStateResult("查询的身份证号" + idno + "格式有误", idno);
}
}
userDetails=userDetailService.findByIdnos(queryV);
userDetails = userDetailService.findByIdnos(queryV);
}
if(columns.contains("bankCard")){
if (columns.contains("bankCard")) {
//需加银行卡信息
if(key.equals(Constants.PHONE_NO)){
phonesCards=getBankCardsByPhoneNos(queryV);
}else{
List<String> phones=new ArrayList<String>();
for(UserDetail uda:userDetails){
if (key.equals(Constants.PHONE_NO)) {
phonesCards = getBankCardsByPhoneNos(queryV);
} else {
List<String> phones = new ArrayList<String>();
for (UserDetail uda : userDetails) {
phones.add(uda.getPhoneNo());
}
phonesCards=getBankCardsByPhoneNos(phones);
phonesCards = getBankCardsByPhoneNos(phones);
}
}
if(columns.contains("address")){
List<Long> uidss=new ArrayList<Long>();
if (columns.contains("address")) {
List<Long> uidss = new ArrayList<Long>();
//加地址信息
for(UserDetail ud:userDetails){
for (UserDetail ud : userDetails) {
uidss.add(ud.getUserId());
}
if(uidss!=null&&uidss.size()>0){
addresslist=addressService.findByUserIds(uidss);
if (uidss != null && uidss.size() > 0) {
addresslist = addressService.findByUserIds(uidss);
}
}
for(UserDetail ud:userDetails){
UserQueryInfo uqi=new UserQueryInfo();
if(columns.contains("idNo")){
for (UserDetail ud : userDetails) {
UserQueryInfo uqi = new UserQueryInfo();
if (columns.contains("idNo")) {
uqi.setIdNo(ud.getIdNo());
}
if(columns.contains(Constants.PHONE_NO)){
if (columns.contains(Constants.PHONE_NO)) {
uqi.setPhoneNo(ud.getPhoneNo());
}
if(columns.contains("name")){
if (columns.contains("name")) {
uqi.setName(ud.getName());
}
if(columns.contains("userId")){
if (columns.contains("userId")) {
uqi.setUserId(ud.getUserId());
}
if(columns.contains("address")){
Optional<Address> oad=addresslist.stream().filter(addr->Objects.equals(addr.getUserId(), ud.getUserId())).findFirst();
if(oad.isPresent()){
if (columns.contains("address")) {
Optional<Address> oad = addresslist.stream().filter(addr -> Objects.equals(addr.getUserId(), ud.getUserId())).findFirst();
if (oad.isPresent()) {
uqi.setAddress(oad.get().toString());
}
}
if(columns.contains("bankCard")&&phonesCards!=null){
if (columns.contains("bankCard") && phonesCards != null) {
uqi.setBankCards(phonesCards.get(ud.getPhoneNo()));
}
uqls.add(uqi);
......@@ -487,67 +479,65 @@ public class UserQueryLogController {
HSSFCell cell = row.createCell(0);
cell.setCellValue("userId");
cell.setCellStyle(style);
cell = row.createCell( 1);
cell = row.createCell(1);
cell.setCellValue("手机号");
cell.setCellStyle(style);
cell = row.createCell( 2);
cell = row.createCell(2);
cell.setCellValue("姓名");
cell.setCellStyle(style);
cell = row.createCell( 3);
cell = row.createCell(3);
cell.setCellValue("身份证号");
cell.setCellStyle(style);
cell = row.createCell( 4);
cell = row.createCell(4);
cell.setCellValue("银行卡号");
cell.setCellStyle(style);
cell = row.createCell( 5);
cell = row.createCell(5);
cell.setCellValue("地址");
cell.setCellStyle(style);
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
//List list = CreateSimpleExcelToDisk.getStudent();
for (int i = 0; i < uqls.size(); i++)
{
for (int i = 0; i < uqls.size(); i++) {
row = sheet.createRow((int) i + 1);
UserQueryInfo user = uqls.get(i);
// 第四步,创建单元格,并设置值
if(user!=null&&row!=null){
HSSFCell cell0= row.createCell(0);
if(cell0!=null){
cell0.setCellValue(user.getUserId()==null?" ":String.valueOf(user.getUserId()));//user.getUserId()==null?" ":String.valueOf(user.getUserId())
if (user != null && row != null) {
HSSFCell cell0 = row.createCell(0);
if (cell0 != null) {
cell0.setCellValue(user.getUserId() == null ? " " : String.valueOf(user.getUserId()));//user.getUserId()==null?" ":String.valueOf(user.getUserId())
}
HSSFCell cell1= row.createCell(1);
if(cell1!=null){
cell1.setCellValue(user.getPhoneNo()==null?" ":user.getPhoneNo());
HSSFCell cell1 = row.createCell(1);
if (cell1 != null) {
cell1.setCellValue(user.getPhoneNo() == null ? " " : user.getPhoneNo());
}
HSSFCell cell2= row.createCell(2);
if(cell2!=null){
cell2.setCellValue(user.getName()==null?" ":user.getName());
HSSFCell cell2 = row.createCell(2);
if (cell2 != null) {
cell2.setCellValue(user.getName() == null ? " " : user.getName());
}
HSSFCell cell3= row.createCell(3);
if(cell3!=null){
cell3.setCellValue(user.getIdNo()==null?" ":user.getIdNo());
HSSFCell cell3 = row.createCell(3);
if (cell3 != null) {
cell3.setCellValue(user.getIdNo() == null ? " " : user.getIdNo());
}
HSSFCell cell4= row.createCell(4);
if(cell4!=null){
cell4.setCellValue(user.getBankCards()==null?" ":user.getBankCards());
HSSFCell cell4 = row.createCell(4);
if (cell4 != null) {
cell4.setCellValue(user.getBankCards() == null ? " " : user.getBankCards());
}
HSSFCell cell5= row.createCell(5);
if(cell5!=null){
cell5.setCellValue(user.getAddress()==null?" ":user.getAddress());
HSSFCell cell5 = row.createCell(5);
if (cell5 != null) {
cell5.setCellValue(user.getAddress() == null ? " " : user.getAddress());
}
}
}
// 第六步,将文件存到指定位置
try
{
OutputStream output=response.getOutputStream();
try {
OutputStream output = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=users.xlsx");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
......@@ -555,26 +545,24 @@ public class UserQueryLogController {
wb.write(output);
output.close();
}
catch (Exception e)
{
} catch (Exception e) {
e.printStackTrace();
}
return JsonResult.buildSuccessResult("导出成功",null);
return JsonResult.buildSuccessResult("导出成功", null);
}
private String checkUserToken(String token){
private String checkUserToken(String token) {
HashMap<String, String> parameters = new HashMap<>();
parameters.put("token", token);
//访问用户中心查询用户银行卡接口
String resultStr = httpService.post(yunyingUrl + "/user/info", parameters);
try{
try {
JsonObject resultUser = new JsonParser().parse(resultStr).getAsJsonObject();
if(Objects.equals("0000",resultUser.get("code").getAsString())&&resultUser.get("data").getAsJsonObject()!=null){
String userName=resultUser.get("data").getAsJsonObject().get("user").getAsString();
if (Objects.equals("0000", resultUser.get("code").getAsString()) && resultUser.get("data").getAsJsonObject() != null) {
String userName = resultUser.get("data").getAsJsonObject().get("user").getAsString();
return userName;
}
}catch(Exception e){
} catch (Exception e) {
LOGGER.info("解析运营系统用户token返回结果resultStr异常");
}
return "";
......
......@@ -28,6 +28,7 @@ import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ER
/**
* 第三方用户免密登录
*
* @author mengfan.feng
* @time 2015-10-27 11:41
*/
......@@ -75,10 +76,10 @@ public class AppController implements IBaseController {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
// Todo -- 截止2017-12-08 13:44:00只有52次调用记录,来自222(白条),最近一次:2017-11-11 12:15:53
LOGGER.info("第三方用户登录 [AppController] login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom,channelId,btRegisterChannelId, IPUtil.getRemoteIP(request),idNo,name);
LOGGER.info("第三方用户登录 [AppController] login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, channelId, btRegisterChannelId, IPUtil.getRemoteIP(request), idNo, name);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = userRegisterService.register(registerFrom, phoneNo, idNo, name, channelId,btRegisterChannelId);
user = userRegisterService.register(registerFrom, phoneNo, idNo, name, channelId, btRegisterChannelId);
}
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -132,7 +133,7 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
LOGGER.info("第三方用户登录 [AppController] loginSuper --> loginFrom:{},phoneNo:{},appChannel:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom,phoneNo, appChannel,channelId,btRegisterChannelId, IPUtil.getRemoteIP(request),idNo,name);
LOGGER.info("第三方用户登录 [AppController] loginSuper --> loginFrom:{},phoneNo:{},appChannel:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, phoneNo, appChannel, channelId, btRegisterChannelId, IPUtil.getRemoteIP(request), idNo, name);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = userRegisterService.register(registerFrom, phoneNo, idNo, name, channelId, btRegisterChannelId);
......@@ -161,13 +162,13 @@ public class AppController implements IBaseController {
context.setCreatedFrom(sessionStruct.getValues().getLoginProperties().getCreatedFrom());
context.setAppChannel(appChannel);
loginInfo.setLoginContext(context);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel,channelId);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel, channelId);
/*
* 部分免密渠道登录统计,用户中心不需识别,由统计平台来过滤
* 贷款导航(84660);壹账通H5(159384)
*/
user.setRegisteredFrom(registerFrom);
UserStatistics statistics = new UserStatistics(user, null,4, channelId);
UserStatistics statistics = new UserStatistics(user, null, 4, channelId);
//增加登陆统计发送
MqUtils.sendLoanVest(statistics);
......@@ -197,7 +198,7 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
LOGGER.info("第三方用户登录 [AppController] login2 --> loginFrom:{},channelId:{}, requestIp:{}", registerFrom,channelId, IPUtil.getRemoteIP(request));
LOGGER.info("第三方用户登录 [AppController] login2 --> loginFrom:{},channelId:{}, requestIp:{}", registerFrom, channelId, IPUtil.getRemoteIP(request));
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......
......@@ -188,7 +188,7 @@ public class InnerController implements IBaseController {
public JsonResult saveUser(
String phoneNo, Long registeredFrom, Long createdAt, Long updatedAt,
String password, String uuid) {
log.info("保存用户,phoneNo:{},registeredFrom;{},uuid:{},createdAt:{},updatedAt:{}", phoneNo, registeredFrom, uuid,createdAt,updatedAt);
log.info("保存用户,phoneNo:{},registeredFrom;{},uuid:{},createdAt:{},updatedAt:{}", phoneNo, registeredFrom, uuid, createdAt, updatedAt);
//参数验证
if (StringUtils.isBlank(phoneNo)) {
return JsonResult.buildErrorStateResult("用户手机号不能为空.", null);
......@@ -266,9 +266,9 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("身份证号码错误", null);
}
User user = userService.findById(userId);
if(Objects.isNull(user)){
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult("用户不存在", null);
}else if(!Objects.equals(user.getPhoneNo(), phoneNo)){
} else if (!Objects.equals(user.getPhoneNo(), phoneNo)) {
return JsonResult.buildErrorStateResult("用户手机号不匹配", null);
}
Timestamp now = new Timestamp(System.currentTimeMillis());
......@@ -276,14 +276,14 @@ public class InnerController implements IBaseController {
* 如果已存在记录,则更新
*/
UserDetail userDetail = userDetailService.findByUserId(userId);
if(Objects.isNull(userDetail)){
if (Objects.isNull(userDetail)) {
userDetail = userDetailService.findByPhoneNo(phoneNo);
// 按手机号查出记录,如果userId非空,说明是存疑数据或是其他用户的信息,停止修改操作,返回失败
if(Objects.nonNull(userDetail) && Objects.nonNull(userDetail.getUserId())){
if (Objects.nonNull(userDetail) && Objects.nonNull(userDetail.getUserId())) {
return JsonResult.buildErrorStateResult("手机号已使用.", null);
}
}
if(Objects.isNull(userDetail)){
if (Objects.isNull(userDetail)) {
userDetail = new UserDetail();
userDetail.setCreatedAt(now);
}
......@@ -311,10 +311,10 @@ public class InnerController implements IBaseController {
public JsonResult findUserDetailByUserId(Long userId) {
UserDetail userDetail = null;
// 增加容错性,防备DB中存在的脏数据触发异常
if(userId != null && userId > 0){
if (userId != null && userId > 0) {
userDetail = userDetailService.findByUserId(userId);
}
if(Objects.isNull(userDetail)) {
if (Objects.isNull(userDetail)) {
return JsonResult.buildErrorStateResult("", null);
}
return JsonResult.buildSuccessResult(null, UserDetailRet.getUserDetail(userDetail));
......@@ -384,6 +384,7 @@ public class InnerController implements IBaseController {
/**
* 更新用户email和qq
*
* @param qq
* @param email
* @param userId - 用户主键
......@@ -395,10 +396,10 @@ public class InnerController implements IBaseController {
if (Objects.isNull(userId) || userId == 0L) {
return JsonResult.buildErrorStateResult("userId为空", null);
}
if(StringUtils.isNotBlank(qq)){
if (StringUtils.isNotBlank(qq)) {
userDetailService.updateUserQQ(userId, qq);
}
if(StringUtils.isNotBlank(email)){
if (StringUtils.isNotBlank(email)) {
userDetailService.updateUserEmail(userId, email);
}
return JsonResult.buildSuccessResult(null, null);
......@@ -435,7 +436,8 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("参数不完整", String.valueOf(userId).concat(":").concat(contactsStr));
}
log.info("保存用户联系人:userId:{}, contacts:{}", userId, contactsStr);
List<Contact> contacts = JSONObject.parseObject(contactsStr, new TypeReference<List<Contact>>(){});
List<Contact> contacts = JSONObject.parseObject(contactsStr, new TypeReference<List<Contact>>() {
});
if (CollectionUtils.isEmpty(contacts)) {
log.info("联系人不能为空");
return JsonResult.buildErrorStateResult("联系人不能为空", contacts);
......@@ -607,7 +609,7 @@ public class InnerController implements IBaseController {
Map<String, String> param = builder.build();
String s = httpService.get(queryUrl.concat("/innerapi/user_detail/search_list"), param);
boolean isJson = StringUtils.isNotBlank(s) && s.trim().startsWith("{") && s.trim().endsWith("}");
if(!isJson){
if (!isJson) {
log.warn("用户详情信息查询结果不完整:{}", s);
JsonResult.buildErrorStateResult("数据不完整", s);
}
......@@ -659,9 +661,9 @@ public class InnerController implements IBaseController {
User user = null;
if (!Objects.isNull(id) && id > 0) {
user = userService.findById(id);
}else if (ValidationUtil.validatePhoneNo(phoneNo)) {
} else if (ValidationUtil.validatePhoneNo(phoneNo)) {
user = userService.findByPhoneWithCache(phoneNo);
}else if (StringUtils.isNotBlank(uuid)) {
} else if (StringUtils.isNotBlank(uuid)) {
user = userService.findByUuidWithCache(uuid);
}
UserDetail userDetail = null;
......@@ -670,7 +672,7 @@ public class InnerController implements IBaseController {
}
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult("用户不存在", "");
}else{
} else {
return JsonResult.buildSuccessResult("", new UserInfo(user, userDetail));
}
}
......@@ -857,6 +859,7 @@ public class InnerController implements IBaseController {
/**
* 刷新用户激活状态
*
* @param userId - 用户主键
* @param enable - 用户激活状态
* @return
......@@ -884,6 +887,7 @@ public class InnerController implements IBaseController {
/**
* 清除用户缓存信息
*
* @param phoneNo
* @return
*/
......@@ -969,6 +973,7 @@ public class InnerController implements IBaseController {
/**
* 手机号批量查询uuid
*
* @param userPhones
* @return
*/
......@@ -1121,10 +1126,10 @@ public class InnerController implements IBaseController {
@RequestParam String appChannel,
@RequestParam(required = false, defaultValue = "1") Long channelId,
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
@RequestParam(required = false,defaultValue = "xyqb") String key,
@RequestParam(required = false)Long btRegisterChannelId,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) Long btRegisterChannelId,
@RequestParam(required = false) String dimension) {
log.info("/innerapi/verifyPhoneAndCode -> phoneNo:{},verificationCode:{},channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{}",phoneNo,verificationCode,channelId,appChannel,createdFrom,btRegisterChannelId,key,dimension);
log.info("/innerapi/verifyPhoneAndCode -> phoneNo:{},verificationCode:{},channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{}", phoneNo, verificationCode, channelId, appChannel, createdFrom, btRegisterChannelId, key, dimension);
// 验证接入方
Merchant merchant = merchantService.findMerchantByName(key);
if (merchant == null) {
......@@ -1138,7 +1143,7 @@ public class InnerController implements IBaseController {
// 验证短信验证码
if (!smsService.verifyPhoneAndCode(phoneNo, verificationCode)) {
// 是否需要重新获取
if(smsService.needResendCode(phoneNo)){
if (smsService.needResendCode(phoneNo)) {
return JsonResult.buildErrorStateResult("验证码失效,请重新获取", "");
}
log.info("验证码校验失败,phoneNo:{} , verificationCode:{}", phoneNo, verificationCode);
......@@ -1147,19 +1152,19 @@ public class InnerController implements IBaseController {
User user = userService.findByPhoneWithCache(phoneNo);
// 检查用户有效性
if (user != null && !user.getEnable()) {
log.error("用户不存在,或者已经注销,phoneNo:{}",phoneNo);
log.error("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("登录失败", null);
}
// 用户不存在时自动注册
if (Objects.isNull(user)) {
user = userRegisterService.register(phoneNo, channelId, createdFrom, appChannel,btRegisterChannelId,dimension);
user = userRegisterService.register(phoneNo, channelId, createdFrom, appChannel, btRegisterChannelId, dimension);
// 注册失败
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult("用户不存在", "");
}
}
//增加登陆统计发送
UserStatistics statistics=new UserStatistics(user,dimension,3,channelId);
UserStatistics statistics = new UserStatistics(user, dimension, 3, channelId);
MqUtils.sendLoanVest(statistics);
return JsonResult.buildSuccessResult("校验成功", new UserRet(user));
}
......@@ -1230,6 +1235,7 @@ public class InnerController implements IBaseController {
/**
* 激活/启用 用户
* -- 供内部系统免密调用
*
* @param userId
* @return
*/
......@@ -1245,6 +1251,7 @@ public class InnerController implements IBaseController {
/**
* 注销/禁用 用户
* -- 供内部系统免密调用
*
* @param userId
* @return
*/
......@@ -1260,6 +1267,7 @@ public class InnerController implements IBaseController {
/**
* 重置用户实名信息接口
* -- 供内部系统免密调用
*
* @param userId - 用户主键
* @param idNo - 身份证号
* @param name - 姓名
......@@ -1269,7 +1277,7 @@ public class InnerController implements IBaseController {
@RequestMapping(path = "/userDetail/reset/{userId}", method = RequestMethod.POST)
public JsonResult resetName(@PathVariable("userId") Long userId, @RequestParam("name") String name, @RequestParam("idNo") String idNo) {
log.info("重置用户实名信息 userId:{},name:{},idNo:{}", userId, name, idNo);
if(Objects.nonNull(userId) && ValidationUtil.validateChinese(name)){
if (Objects.nonNull(userId) && ValidationUtil.validateChinese(name)) {
try {
User user = userService.findById(userId);
int rows = userDetailService.updateIdCard(name, idNo, user.getPhoneNo());
......@@ -1279,7 +1287,7 @@ public class InnerController implements IBaseController {
log.error("用户姓名重置失败,userId[{}],name[{}],err:[{}]", userId, name, e);
}
return JsonResult.buildErrorStateResult("用户姓名重置失败.", "Error data");
}else{
} else {
return JsonResult.buildErrorStateResult("用户姓名重置失败.", "Error data");
}
}
......@@ -1292,13 +1300,13 @@ public class InnerController implements IBaseController {
@ApiOperation(notes = "重置密码接口 - 供内部系统免密调用", value = "重置密码", nickname = "resetPassword")
@RequestMapping(path = "/user/password/reset", method = RequestMethod.POST)
public JsonResult resetPassword(@RequestParam("phone") String phone) {
if(ValidationUtil.validatePhoneNo(phone)){
if (ValidationUtil.validatePhoneNo(phone)) {
try {
// 默认重置的密码是123456
String password = "123456";
boolean result = userService.resetPassword(phone, password);
log.info("重置用户密码,phoneNo:[{}],password:[{}],result:[{}]", phone, password, result);
if(result){
if (result) {
return JsonResult.buildSuccessResult("用户密码已重置.", password);
}
} catch (Exception e) {
......@@ -1357,6 +1365,7 @@ public class InnerController implements IBaseController {
/**
* 注销/禁用 用户
* -- 供内部人员使用(例如绝影)
*
* @param phoneNo
* @param enable
* @param reason
......@@ -1391,6 +1400,7 @@ public class InnerController implements IBaseController {
/**
* 清除微信关联
* -- 供内部人员使用(例如绝影)
*
* @param userId
* @param reason
* @param content
......
......@@ -83,7 +83,7 @@ public class SyncUserController {
}
String phoneNo = userDetail.getPhoneNo();
User user = userService.findByPhoneWithCache(phoneNo);
if(Objects.isNull(user)){
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult(null, null);
}
userDetail.setUserId(user.getId());
......@@ -91,16 +91,16 @@ public class SyncUserController {
* 如果已存在记录,则更新
*/
UserDetail theUserDetail = userDetailService.findByUserId(user.getId());
if(Objects.isNull(theUserDetail)){
if (Objects.isNull(theUserDetail)) {
theUserDetail = userDetailService.findByPhoneNo(phoneNo);
// 按手机号查出记录,如果userId非空,说明是存疑数据或是其他用户的信息,停止修改操作,返回失败
if(Objects.nonNull(theUserDetail) && Objects.nonNull(theUserDetail.getUserId())){
if (Objects.nonNull(theUserDetail) && Objects.nonNull(theUserDetail.getUserId())) {
return JsonResult.buildErrorStateResult("手机号已使用.", null);
}
}
if(Objects.isNull(theUserDetail)){
if (Objects.isNull(theUserDetail)) {
userDetail.setId(null);
}else {
} else {
userDetail.setId(theUserDetail.getId());
}
userDetailService.saveUserDetail(userDetail);
......
......@@ -88,23 +88,23 @@ public class UserApiController {
@RequestMapping(value = "/valid/{token}", method = RequestMethod.POST)
public JsonResult checkToken(@ApiParam(value = "sid,session的id", required = true) @PathVariable("token") String token,
@ApiParam(value = "是否延续生命期,可选参数,默认为: false - 不延续", required = false) @RequestParam(name = "prolong", required = false, defaultValue = "false") Boolean prolong) {
if(Objects.isNull(token) || !ValidationUtil.validateToken(token)){
if (Objects.isNull(token) || !ValidationUtil.validateToken(token)) {
return JsonResult.buildErrorStateResult("token invalid", token);
}
String tokenKey = Constants.SESSION_PREFIX + token;
String tokenKey2 = Constants.Session.USER_SESSION_CACHE + token;
// 判断token是否存在
boolean exist = stringRedisTemplate.hasKey(tokenKey)||stringRedisTemplate.hasKey(tokenKey2);
boolean exist = stringRedisTemplate.hasKey(tokenKey) || stringRedisTemplate.hasKey(tokenKey2);
log.info("检查token:[{}]有效性[{}],延续生命期[{}]", token, exist, prolong);
/* token存在且需要延续时,进一步判断session是否有效,有效时,自动续期 */
if(Boolean.logicalAnd(exist, prolong)){
if (Boolean.logicalAnd(exist, prolong)) {
// 获取session信息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token);
if(Objects.isNull(sessionStruct)) {
if (Objects.isNull(sessionStruct)) {
log.info("延续token:[{}]生命期,result:[{}],SessionStruct:{}", token, false, sessionStruct);
/* 如果没有获取到session信息则返回错误信息 */
return JsonResult.buildErrorStateResult("session invalid", token);
}else{
} else {
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
......@@ -114,9 +114,9 @@ public class UserApiController {
}
}
}
if(exist){
if (exist) {
return JsonResult.buildSuccessResult("token valid", token);
}else{
} else {
return JsonResult.buildErrorStateResult("token invalid", token);
}
}
......
......@@ -14,7 +14,6 @@ import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.EmojiUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
......@@ -185,7 +184,8 @@ public class WeChatController implements IBaseController {
LOGGER.info("从微信extdata版本接口进入:{}, extData:{}", schema, extData);
HashMap<String, Object> extDataObj;
try {
extDataObj = JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>(){});
extDataObj = JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>() {
});
} catch (Exception ex) {
LOGGER.error("解析extData发生错误", ex);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
......@@ -201,6 +201,7 @@ public class WeChatController implements IBaseController {
/**
* 前端微信跳转页面
*
* @param code
* @param systemKey
* @param schema
......@@ -208,7 +209,7 @@ public class WeChatController implements IBaseController {
* @param redirect
* @param response
*/
private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, HttpServletResponse response){
private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, HttpServletResponse response) {
// 微信跳转请求入参监控
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
LOGGER.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:code:{},systemKey:{},schema:{},registerFrom:{},redirect:{},request:{}", code, systemKey, schema, registerFrom, redirect, JSON.toJSONString(getRequestHeaderMap(request)));
......@@ -219,7 +220,7 @@ public class WeChatController implements IBaseController {
redirect = Optional.ofNullable(redirect).orElse("");
schema = StringUtils.isBlank(schema) ? getProtocol() : schema;
String domain = userUiDomain;
if(Objects.equals(schema, "https:")){
if (Objects.equals(schema, "https:")) {
domain = userUiDomainS;
}
// 从code获取token
......@@ -228,7 +229,7 @@ public class WeChatController implements IBaseController {
LOGGER.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:merchant:{},token:{}", merchant, token);
if (Objects.isNull(token) || StringUtils.isBlank(token.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, registerFrom,domain);
redirectNormalUrl(response, merchant, registerFrom, domain);
return;
}
// 获取已授权信息 - db
......@@ -249,9 +250,9 @@ public class WeChatController implements IBaseController {
String nickName = EmojiUtil.filterUnicode4(userInfo.getNickName());
userInfo.setNickName(nickName);
}
try{
try {
userInfo = wechatService.saveWechatUserInfo(userInfo);
}catch (Exception e){
} catch (Exception e) {
LOGGER.warn("微信用户首次登陆,保存userInfo异常,执行操作:Nick置为*并重新保存.", e);
userInfo.setNickName(EmojiUtil.BYTE_4_REPLACE_TEMPLATE);
userInfo = wechatService.saveWechatUserInfo(userInfo);
......@@ -288,14 +289,14 @@ public class WeChatController implements IBaseController {
Long registerFrom = null;
String redirect = null;
String schema = "http:";
if(Objects.equals("https:", request.getScheme())){
if (Objects.equals("https:", request.getScheme())) {
schema = "https:";
}
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
}
private String createUserSession(User user, Merchant merchant, String redirect, String domain, Long registerFrom) {
LOGGER.info("[WeChatController][createUserSession]微信授权及跳转:user:{},merchant:{},redirect:{},domain:{},registerFrom:{}",user, merchant, redirect, domain, registerFrom);
LOGGER.info("[WeChatController][createUserSession]微信授权及跳转:user:{},merchant:{},redirect:{},domain:{},registerFrom:{}", user, merchant, redirect, domain, registerFrom);
if (StringUtils.isEmpty(redirect) || "redirect".equals(redirect)) {
LOGGER.info("微信登录:redirect为null,走正常流程.");
if ("baitiao".equals(merchant.getName())) {
......@@ -320,29 +321,29 @@ public class WeChatController implements IBaseController {
private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId, String domain, Long registerFrom) {
AuthBean authBean = sessionService.createSession(channelId, registerFrom, "", user, merchant);
LOGGER.info("[WeChatController][loginInWechatWithSessionCreated]微信授权及跳转:user:{},merchant:{},target:{},channelId:{},domain:{},registerFrom:{}",user, merchant, target, channelId, domain, registerFrom);
LOGGER.info("[WeChatController][loginInWechatWithSessionCreated]微信授权及跳转:user:{},merchant:{},target:{},channelId:{},domain:{},registerFrom:{}", user, merchant, target, channelId, domain, registerFrom);
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target;
}
private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String domain) {
String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo, registerFrom,domain);
LOGGER.info("[WeChatController][redirectWechatLoginUrlWithoutLogin]微信授权及跳转:redirectUrl:[{}]",redirectUrl);
private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo, Long registerFrom, String domain) {
String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo, registerFrom, domain);
LOGGER.info("[WeChatController][redirectWechatLoginUrlWithoutLogin]微信授权及跳转:redirectUrl:[{}]", redirectUrl);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private void redirectNormalUrl(HttpServletResponse response, Merchant merchant, Long registerFrom,String domain) {
String redirectUrl = assembleNormalRedirectUrl(merchant, registerFrom,domain);
LOGGER.info("[WeChatController][redirectNormalUrl]微信授权及跳转: redirectUrl:[{}]",redirectUrl);
private void redirectNormalUrl(HttpServletResponse response, Merchant merchant, Long registerFrom, String domain) {
String redirectUrl = assembleNormalRedirectUrl(merchant, registerFrom, domain);
LOGGER.info("[WeChatController][redirectNormalUrl]微信授权及跳转: redirectUrl:[{}]", redirectUrl);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom,String domain) {
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom, String domain) {
if ("baitiao".equals(merchant.getName())) {
if(registerFrom == 58L || registerFrom == 198L){
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom="+registerFrom;
}else{
if (registerFrom == 58L || registerFrom == 198L) {
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=" + registerFrom;
} else {
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198";
}
} else if ("wechat-pay".equals(merchant.getName())) {
......@@ -352,11 +353,11 @@ public class WeChatController implements IBaseController {
}
}
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String domain) {
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom, String domain) {
if ("baitiao".equals(merchant.getName())) {
if(registerFrom == 58L || registerFrom == 198L){
if (registerFrom == 58L || registerFrom == 198L) {
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=" + registerFrom + "&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
}else{
} else {
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
}
} else if ("wechat-pay".equals(merchant.getName())) {
......@@ -367,11 +368,11 @@ public class WeChatController implements IBaseController {
}
@RequestMapping("/active_redirect")
public void forwardWechatRequest(HttpServletRequest request,HttpServletResponse response){
String redirectUrl = xyqbDomainStr+"/api/coupon/activity/wechat/rent_house/bargain?";
public void forwardWechatRequest(HttpServletRequest request, HttpServletResponse response) {
String redirectUrl = xyqbDomainStr + "/api/coupon/activity/wechat/rent_house/bargain?";
Enumeration<String> parameterNames = request.getParameterNames();
ImmutableList.Builder<String> builder = ImmutableList.builder();
while (parameterNames.hasMoreElements()){
while (parameterNames.hasMoreElements()) {
String name = parameterNames.nextElement();
builder.add(name.concat("=").concat(request.getParameter(name)));
}
......
package cn.quantgroup.xyqb.controller.external.user.center;
import cn.quantgroup.user.enums.EducationEnum;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.user.enums.MaritalStatus;
import cn.quantgroup.user.enums.OccupationEnum;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.limit.PasswordFreeAccessValidator;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.util.EmojiUtil;
......@@ -18,7 +21,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Timestamp;
import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* Created by 11 on 2017/3/22.
......@@ -44,6 +50,7 @@ public class UserCenterController {
/**
* 用户中心首页,显示用户头像、昵称、姓名
*
* @param phoneNo
* @return
*/
......@@ -51,53 +58,54 @@ public class UserCenterController {
@RequestMapping("/index")
public JsonResult userCenterIndex(String phoneNo) {
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
UserAttached userAttached = userCenterService.searchUserAttachedByUserId(userId);
Map<String, String> result = new HashMap<>();
if(userAttached != null) {
if (userAttached != null) {
result.put("avatar", userAttached.getAvatar());
result.put("nick", userAttached.getNick());
}
UserDetail userDetail = userDetailService.findByUserId(userId);
if(userDetail != null) {
if (userDetail != null) {
result.put("name", userDetail.getName());
result.put("sex", Optional.ofNullable(userDetail.getGender()).orElse(cn.quantgroup.xyqb.model.Gender.UNKNOWN).ordinal() + "");
result.put(Constants.PHONE_NO, userDetail.getPhoneNo().substring(0,3)+"****"+userDetail.getPhoneNo().substring(7,11));
result.put(Constants.PHONE_NO, userDetail.getPhoneNo().substring(0, 3) + "****" + userDetail.getPhoneNo().substring(7, 11));
}
return JsonResult.buildSuccessResult(null, result);
}
/**
* 上传后调用该接口保存用户头像
*
* @param phoneNo 用户手机号
* @param avatarUrl 上传后生成的头像地址
* @return
*/
@RequestMapping("/save/avatar")
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) {
if(StringUtils.isBlank(avatarUrl) || StringUtils.isBlank(phoneNo)) {
if (StringUtils.isBlank(avatarUrl) || StringUtils.isBlank(phoneNo)) {
LOGGER.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
if(StringUtils.isBlank(avatarUrl)) {
if (StringUtils.isBlank(avatarUrl)) {
avatarUrl = Constants.UserAvatar.AVATAR_DEFAULT;
}
UserAttached userAttached = userCenterService.searchUserAttachedByUserId(userId);
//查询到数据,直接更新头像和更新时间
if(null != userAttached) {
if (null != userAttached) {
userAttached.setAvatar(avatarUrl);
userAttached.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
} else {
userAttached = createUserAttached(userId, avatarUrl, "");
}
UserAttached result = userCenterService.saveUserAttached(userAttached);
if(null == userAttached) {
if (null == userAttached) {
LOGGER.error("保存用户头像昵称失败.");
return JsonResult.buildErrorStateResult("信息保存失败,请稍后再试.", null);
}
......@@ -106,21 +114,22 @@ public class UserCenterController {
/**
* 根据用户手机号查询昵称.
*
* @param phoneNo
* @return
*/
@RequestMapping("/queryNick")
public JsonResult queryUserNick(String phoneNo) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
UserAttached userAttached = userCenterService.searchUserAttachedByUserId(userId);
if(null != userAttached) {
if (null != userAttached) {
LOGGER.info("获取用户昵称:{}", userAttached.getNick());
return JsonResult.buildSuccessResult(null, userAttached.getNick());
}
......@@ -129,18 +138,19 @@ public class UserCenterController {
/**
* 修改用户的昵称
*
* @param phoneNo
* @param nick
* @return
*/
@RequestMapping("/saveNick")
public JsonResult saveUserNick(String phoneNo, String nick) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
if (StringUtils.isNotBlank(nick)) {
......@@ -148,7 +158,7 @@ public class UserCenterController {
nick = EmojiUtil.filterUnicode4(nick);
}
UserAttached userAttached = userCenterService.searchUserAttachedByUserId(userId);
if(null == userAttached) {
if (null == userAttached) {
userAttached = createUserAttached(userId, "", nick);
} else {
userAttached.setNick(nick);
......@@ -160,48 +170,49 @@ public class UserCenterController {
/**
* 查询用户是否实名认证.
*
* @param phoneNo
* @return
*/
@RequestMapping("/query/verified")
public JsonResult queryVerified(String phoneNo) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
UserDetail userDetail = userDetailService.findByUserId(userId);
if(null != userDetail) {
if (null != userDetail) {
return JsonResult.buildSuccessResult(null, userDetail);
}
return JsonResult.buildSuccessResult(null, null);
}
/**
* 个人资料信息
*
* @param phoneNo
* @return
*/
@PasswordFreeAccessValidator
@RequestMapping("/personalData")
public JsonResult personalData(String phoneNo) {
if(StringUtils.isBlank(phoneNo)) {
if (StringUtils.isBlank(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId, true);
Map<String, Object> result = new HashMap<>();
if(null != userExtInfo) {
if (null != userExtInfo) {
result.put("contacts", null != contacts && contacts.size() > 0 ? true : false);
result.put("occupation", userExtInfo.getOccupationEnum() == null ? "" : userExtInfo.getOccupationEnum().ordinal());
result.put("education", userExtInfo.getEducationEnum() == null ? "" : userExtInfo.getEducationEnum().ordinal());
......@@ -209,7 +220,7 @@ public class UserCenterController {
result.put("marryStatus", userExtInfo.getMarryStatus() == null ? "" : userExtInfo.getMarryStatus().ordinal());
}
Address address = addressService.findByUserId(userId);
if(null != address) {
if (null != address) {
//用户住址信息,返回二级信息:
result.put("address", address.getAddress());
result.put("provinceCode", address.getProvinceCode());
......@@ -224,31 +235,33 @@ public class UserCenterController {
/**
* 保存用户联系人,
*
* @param phoneNo 用户手机号
* @param contactJson 要保存的联系人json串
* @return
*/
@RequestMapping("/contacts/save")
public JsonResult saveUserContact(String phoneNo, String contactJson) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("保存联系人,参数错误. phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数有误.", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
if(StringUtils.isEmpty(contactJson)) {
if (StringUtils.isEmpty(contactJson)) {
LOGGER.error("保存联系人,联系人参数为空.contactJson:{}", contactJson);
return JsonResult.buildErrorStateResult(null, null);
}
List<Contact> contacts = JSONObject.parseObject(contactJson, new TypeReference<List<Contact>>(){});
List<Contact> contacts = JSONObject.parseObject(contactJson, new TypeReference<List<Contact>>() {
});
if (CollectionUtils.isEmpty(contacts)) {
LOGGER.info("联系人不能空");
return JsonResult.buildErrorStateResult(null, null);
}
for(Contact contact : contacts){
for (Contact contact : contacts) {
if (!contact.valid()) {
LOGGER.info("用户手机号或姓名错误, phoneNo:{},name:{}", contact.getPhoneNo(), contact.getName());
return JsonResult.buildErrorStateResult(null, null);
......@@ -260,6 +273,7 @@ public class UserCenterController {
/**
* 保存用户住址信息
*
* @param province
* @param provinceCode
* @param city
......@@ -275,13 +289,13 @@ public class UserCenterController {
return JsonResult.buildErrorStateResult("参数错误", null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
//查询用户是否有保存地址信息
Address addressInfo = addressService.findByUserId(userId);
if(null == addressInfo) {
if (null == addressInfo) {
Timestamp now = new Timestamp(System.currentTimeMillis());
addressInfo = new Address();
addressInfo.setCreatedAt(now);
......@@ -307,16 +321,17 @@ public class UserCenterController {
/**
* 查询用户住址信息
*
* @param phoneNo
* @return
*/
@RequestMapping("/searchAddress/phoneNo")
public JsonResult searchUserAddress(String phoneNo) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -326,16 +341,17 @@ public class UserCenterController {
/**
* 查询用户联系人
*
* @param phoneNo
* @return
*/
@RequestMapping("/searchContacts/phoneNo")
public JsonResult searchUserContacts(String phoneNo) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
......@@ -345,6 +361,7 @@ public class UserCenterController {
/**
* 保存用户经济信息
*
* @param educationEnum 学历
* @param occupationEnum 职业
* @param incomeRangeEnum 月收入范围
......@@ -353,18 +370,18 @@ public class UserCenterController {
*/
@RequestMapping("/save/userExtInfo")
public JsonResult saveUserExtInfo(String phoneNo, EducationEnum educationEnum, MaritalStatus maritalStatus, IncomeRangeEnum incomeRangeEnum, OccupationEnum occupationEnum) {
if(StringUtils.isEmpty(phoneNo)) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
}
Long userId = queryUserId(phoneNo);
if(null == userId || userId == 0L) {
if (null == userId || userId == 0L) {
LOGGER.error("保存用户经济信息,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
//查询用户是否保存过.
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
Timestamp now = new Timestamp(System.currentTimeMillis());
if(null == userExtInfo) {
if (null == userExtInfo) {
userExtInfo = new UserExtInfo();
userExtInfo.setUserId(userId);
}
......@@ -381,6 +398,7 @@ public class UserCenterController {
/**
* 创建用户附加信息实体
*
* @param userId
* @param avatar
* @param nick
......@@ -400,6 +418,7 @@ public class UserCenterController {
/**
* 根据手机号查询用户id, nodejs调用接口无法获取到userId.
* 所以增加该接口来查询用户id
*
* @param phoneNo
* @return
*/
......
......@@ -6,13 +6,9 @@ import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.session.LoginInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -32,7 +28,7 @@ public class AuthInfoController implements IBaseController {
@RequestMapping("/info/login")
public JsonResult loginInfo(HttpServletRequest request) {
SessionStruct sessionStruct = getCurrentSessionFromRedis();
if(null != sessionStruct) {
if (null != sessionStruct) {
log.info("从用户中心获取到了用户登录信息:phone:[{}]", sessionStruct.getValues().getUser().getPhoneNo());
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(new UserRet(sessionStruct.getValues().getUser()));
......@@ -48,7 +44,7 @@ public class AuthInfoController implements IBaseController {
return JsonResult.buildSuccessResult("", loginInfo);
}
log.info("[/auth/info/login] 未查到用户登录信息, request-Header:{}", JSON.toJSONString(getRequestHeaderMap(request)));
return JsonResult.buildErrorStateResult("用户未登录",null);
return JsonResult.buildErrorStateResult("用户未登录", null);
}
}
......@@ -4,18 +4,13 @@ import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.MerchantConfig;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.Tuple;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.page.IPageService;
import cn.quantgroup.xyqb.service.page.bean.PageType;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import com.google.common.collect.ImmutableMap;
import java.util.HashMap;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
......@@ -57,7 +52,7 @@ public class PlatformAPIController implements IBaseController {
Tuple<String, Boolean> nextPageTuple = pageService.nextPage(user, target, currentPage);
Boolean isFinal = nextPageTuple.getValue();
String nextPage = nextPageTuple.getKey();
if("xyqb".equals(key)){
if ("xyqb".equals(key)) {
MerchantConfig merchantConfig = merchantService.findConfigByMerchantIdAndConfigName(4L, "returnUrl");
return JsonResult.buildSuccessResult("", ImmutableMap.of("type", "external", "transition", merchantConfig.getConfigValue()));
}
......
......@@ -49,6 +49,7 @@ public class SmsController implements IBaseController {
private static final Long PHONE_MAX_PER_DAY = 20L;//手机号短信上限
private static final Long PHONE_VOICE_MAX_PER_DAY = 5L;//手机号语音上限
private static final Long DEVICE_MAX_PER_DAY = 20L;//设备每天上限
/**
* 短信验证码: for H5
* 使用 @FPLock 注解并加入自定义限制参数, 做针对手机号的发送次数限制
......@@ -62,14 +63,15 @@ public class SmsController implements IBaseController {
@RequestMapping("/send_sms_verification_code")
public JsonResult verifyPhoneNoH5(@RequestParam String phoneNo,
@RequestParam(required = false) String registerFrom,
@RequestParam(required = false,defaultValue = "")String appName,
@RequestParam(required = false, defaultValue = "") String appName,
@RequestParam(required = false) String smsMerchant) {
LOGGER.info("注册-发送验证码, phoneNo:{}, registerFrom:{}", phoneNo, registerFrom);
return sendVerificationCode2(phoneNo,appName, smsMerchant);
return sendVerificationCode2(phoneNo, appName, smsMerchant);
}
/**
* 短信验证码 : 重置密码
*
* @param phoneNo - 手机号
* @param registerFrom -
* @param appName -
......@@ -80,10 +82,10 @@ public class SmsController implements IBaseController {
@RequestMapping("/send_reset_code")
public JsonResult resetPasswordH5(@RequestParam String phoneNo,
@RequestParam(required = false) String registerFrom,
@RequestParam(required = false,defaultValue = "")String appName,
@RequestParam(required = false, defaultValue = "") String appName,
@RequestParam(required = false) String smsMerchant) {
LOGGER.info("重置密码-发送验证码, phoneNo:{}, registerFrom:{}", phoneNo, registerFrom);
return sendVerificationCode2(phoneNo,appName, smsMerchant);
return sendVerificationCode2(phoneNo, appName, smsMerchant);
}
/**
......@@ -140,10 +142,10 @@ public class SmsController implements IBaseController {
@RequestMapping("/send_login_code")
public JsonResult sendLoginCode(@RequestParam String phoneNo,
@RequestParam(required = false) String registerFrom,
@RequestParam(required = false,defaultValue = "")String appName,
@RequestParam(required = false, defaultValue = "") String appName,
@RequestParam(required = false) String smsMerchant) {
LOGGER.info("快速登陆-发送验证码, phoneNo:{}, registerFrom:{}", phoneNo, registerFrom);
return sendVerificationCode2(phoneNo,appName, smsMerchant);
return sendVerificationCode2(phoneNo, appName, smsMerchant);
}
/**
......@@ -157,10 +159,10 @@ public class SmsController implements IBaseController {
@RequestMapping("/send_regist_code")
public JsonResult sendRegistCode(@RequestParam String phoneNo,
@RequestParam(required = false) String registerFrom,
@RequestParam(required = false,defaultValue = "")String appName,
@RequestParam(required = false, defaultValue = "") String appName,
@RequestParam(required = false) String smsMerchant) {
LOGGER.info("快速注册-发送验证码, phoneNo:{}, registerFrom:{}", phoneNo, registerFrom);
return sendVerificationCode2(phoneNo,appName, smsMerchant);
return sendVerificationCode2(phoneNo, appName, smsMerchant);
}
/**
......@@ -171,7 +173,7 @@ public class SmsController implements IBaseController {
* @param smsMerchant - 短信模板/类型
* @return
*/
private JsonResult sendVerificationCode2(String phoneNo,String appName, String smsMerchant) {
private JsonResult sendVerificationCode2(String phoneNo, String appName, String smsMerchant) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号格式有误", null);
}
......@@ -257,6 +259,7 @@ public class SmsController implements IBaseController {
/**
* 快速登陆发送短信验证码
*
* @param phoneNo - 手机号
* @param registerFrom -
* @param deviceId -
......@@ -268,13 +271,15 @@ public class SmsController implements IBaseController {
public JsonResult sendLoginSmsCodeNew(@RequestParam String phoneNo,
@RequestParam(required = false) String registerFrom,
@RequestParam(required = false) String deviceId,
@RequestParam(required = false,defaultValue = "")String appName,
@RequestParam(required = false, defaultValue = "") String appName,
@RequestParam(required = false) String smsMerchant) {
LOGGER.info("快速登陆-发送验证码, phoneNo:{}, registerFrom:{}", phoneNo, registerFrom);
return sendVerificationCode2New(phoneNo, deviceId, true,appName, smsMerchant);
return sendVerificationCode2New(phoneNo, deviceId, true, appName, smsMerchant);
}
/**
* 快速登陆发送短信验证码
*
* @param phoneNo - 手机号
* @param registerFrom -
* @param deviceId -
......@@ -286,10 +291,10 @@ public class SmsController implements IBaseController {
public JsonResult sendLoginSmsCodeNewForH5(@RequestParam String phoneNo,
@RequestParam(required = false) String registerFrom,
@RequestParam(required = false) String deviceId,
@RequestParam(required = false,defaultValue = "")String appName,
@RequestParam(required = false, defaultValue = "") String appName,
@RequestParam(required = false) String smsMerchant) {
LOGGER.info("快速登陆-发送验证码, phoneNo:{}, registerFrom:{}", phoneNo, registerFrom);
return sendVerificationCode2New(phoneNo, deviceId, false,appName, smsMerchant);
return sendVerificationCode2New(phoneNo, deviceId, false, appName, smsMerchant);
}
/**
......@@ -302,12 +307,12 @@ public class SmsController implements IBaseController {
* @param smsMerchant - 短信模板/类型
* @return
*/
private JsonResult sendVerificationCode2New(String phoneNo, String deviceId, boolean isApp,String appName, String smsMerchant) {
private JsonResult sendVerificationCode2New(String phoneNo, String deviceId, boolean isApp, String appName, String smsMerchant) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号格式有误", null);
}
String clientIp = getIp();
LOGGER.info("请求短信新版本接口:phoneNo:{},deviceId:{},IP:{}",phoneNo,deviceId,clientIp);
LOGGER.info("请求短信新版本接口:phoneNo:{},deviceId:{},IP:{}", phoneNo, deviceId, clientIp);
// 手机号计数器
Long getPhoneVerificationCount = redisTemplate.opsForHash().increment(Constants.REDIS_SMS_CODE_COUNT, phoneNo, 1);
redisTemplate.expire(Constants.REDIS_SMS_CODE_COUNT, DateUtils.getSeconds(), TimeUnit.SECONDS);
......@@ -342,7 +347,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,clientIp);
LOGGER.info("sendVerificationCode2New1分钟内不能重复获取验证码:phoneNo:{},deviceId:{},ip:{}", phoneNo, deviceId, clientIp);
return JsonResult.buildErrorStateResult("1分钟内不能重复获取验证码", null);
}
String randomCode = smsIsDebug ? "0000" : String.valueOf(random.nextInt(8999) + 1000);
......@@ -364,13 +369,13 @@ public class SmsController implements IBaseController {
redisTemplate.opsForValue().set(key, uniqueId + ":" + randomCode, EXPIRE_MINUTES, TimeUnit.MINUTES);
//删除用户重置密码,多次错误逻辑
deleteRetSendCode(phoneNo);
if(isApp && needImageVlidate(clientIp,deviceId,phoneNo)){
return JsonResult.buildSuccessResult("发送成功", uniqueId,0003L);
if (isApp && needImageVlidate(clientIp, deviceId, phoneNo)) {
return JsonResult.buildSuccessResult("发送成功", uniqueId, 0003L);
}
LOGGER.info("sendVerificationCode2New获取短信成功:phone:{},deviceId:{},ip:{}",phoneNo,deviceId,clientIp);
LOGGER.info("sendVerificationCode2New获取短信成功:phone:{},deviceId:{},ip:{}", phoneNo, deviceId, clientIp);
return JsonResult.buildSuccessResult("发送成功", uniqueId);
} catch (Exception e) {
LOGGER.error("发送短信验证码失败:phone:{},deviceId:{},ip:{}",phoneNo,deviceId,clientIp);
LOGGER.error("发送短信验证码失败:phone:{},deviceId:{},ip:{}", phoneNo, deviceId, clientIp);
return JsonResult.buildErrorStateResult("发送失败", null);
}
}
......@@ -386,7 +391,7 @@ public class SmsController implements IBaseController {
return JsonResult.buildErrorStateResult("usage参数无效", null);
}
String clientIp = getIp();
LOGGER.info("请求短信新版本接口:phoneNo:{},deviceId:{},usage:{},IP:{}",phoneNo,deviceId,usage,clientIp);
LOGGER.info("请求短信新版本接口:phoneNo:{},deviceId:{},usage:{},IP:{}", phoneNo, deviceId, usage, clientIp);
// 手机号计数器
String verificationCountKey = Constants.REDIS_VOICE_CODE_COUNT + usage;
Long getPhoneVerificationCount = redisTemplate.opsForHash().increment(verificationCountKey, phoneNo, 1);
......@@ -401,7 +406,7 @@ public class SmsController implements IBaseController {
// IP计数器
Long getIPVerificationCount = 0L;
if (StringUtils.isNotBlank(clientIp)) {
String verificationIPCountKey = Constants.REDIS_VOICE_IP_COUNT+clientIp;
String verificationIPCountKey = Constants.REDIS_VOICE_IP_COUNT + clientIp;
getIPVerificationCount = redisTemplate.opsForHash().increment(Constants.REDIS_VOICE_IP_COUNT, verificationIPCountKey, 1);
redisTemplate.expire(Constants.REDIS_VOICE_IP_COUNT, DateUtils.getSeconds(), TimeUnit.SECONDS);
}
......@@ -434,9 +439,9 @@ public class SmsController implements IBaseController {
redisTemplate.opsForValue().set(key, uniqueId + ":" + randomCode, EXPIRE_MINUTES, TimeUnit.MINUTES);
//删除用户重置密码,多次错误逻辑
deleteRetSendCode(phoneNo);
if(needImageVlidate(clientIp,deviceId,phoneNo)){
if (needImageVlidate(clientIp, deviceId, phoneNo)) {
return JsonResult.buildSuccessResult("发送成功", uniqueId,0003L);
return JsonResult.buildSuccessResult("发送成功", uniqueId, 0003L);
}
return JsonResult.buildSuccessResult("发送成功", uniqueId);
} catch (Exception e) {
......@@ -447,6 +452,7 @@ public class SmsController implements IBaseController {
/**
* 判断下次是否提示图形验证码
*
* @param clientIp
* @param deviceId
* @param phoneNo
......@@ -460,7 +466,7 @@ public class SmsController implements IBaseController {
Long ip = StringUtils.isBlank(countIP) ? 1L : Long.valueOf(countIP);
Long devId = StringUtils.isBlank(countDeviceId) ? 1L : Long.valueOf(countDeviceId);
Long phNo = StringUtils.isBlank(countPhoneNo) ? 1L : Long.valueOf(countPhoneNo);
if (ip >= Constants.Image_Need_Count || devId >= Constants.Image_Need_Count || phNo >= Constants.Image_Need_Count ) {
if (ip >= Constants.Image_Need_Count || devId >= Constants.Image_Need_Count || phNo >= Constants.Image_Need_Count) {
need = true;
}
return need;
......@@ -468,10 +474,11 @@ public class SmsController implements IBaseController {
/**
* 删除用户重置密码时短信验证错误
*
* @param phoneNo
*/
private void deleteRetSendCode(String phoneNo){
String verificationCountKey = Constants.REDIS_VERIFICATION_COUNT+phoneNo;
private void deleteRetSendCode(String phoneNo) {
String verificationCountKey = Constants.REDIS_VERIFICATION_COUNT + phoneNo;
redisTemplate.opsForHash().delete(verificationCountKey, Constants.REDIS_VERIFICATION_COUNT);
}
......
......@@ -40,7 +40,10 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* Http服务接口:用户注册、登录、重置密码
......@@ -103,10 +106,10 @@ public class UserController implements IBaseController {
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
@RequestParam(required = false, defaultValue = "") String userId,
@RequestParam(required = false,defaultValue = "xyqb") String key,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) String dimension,
HttpServletRequest request) {
log.info("loginV1 -> channelId:{},appChennel:{},createdFrom:{},userId:{},key:{},dimension:{}",channelId, appChannel, createdFrom, userId, key, dimension);
log.info("loginV1 -> channelId:{},appChennel:{},createdFrom:{},userId:{},key:{},dimension:{}", channelId, appChannel, createdFrom, userId, key, dimension);
return login(channelId, appChannel, createdFrom, userId, key, dimension, request);
}
......@@ -117,18 +120,18 @@ public class UserController implements IBaseController {
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
@RequestParam(required = false, defaultValue = "") String userId,
@RequestParam(required = false,defaultValue = "xyqb") String key,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) String dimension,
HttpServletRequest request) {
log.info("login -> channelId:{},appChannel:{},createdFrom:{},userId:{},key:{},dimension:{}",channelId,appChannel,createdFrom,userId,key,dimension);
log.info("login -> channelId:{},appChannel:{},createdFrom:{},userId:{},key:{},dimension:{}", channelId, appChannel, createdFrom, userId, key, dimension);
Merchant merchant = merchantService.findMerchantByName(key);
if (merchant == null) {
return JsonResult.buildErrorStateResult("未知的连接", null);
}
if (!StringUtils.isEmpty(userId) && userId.length() > 10) {
return loginWithUserId(channelId, appChannel, createdFrom, userId, merchant,dimension, request);
return loginWithUserId(channelId, appChannel, createdFrom, userId, merchant, dimension, request);
} else {
return loginWithHttpBasic(channelId, appChannel, createdFrom, merchant,dimension, request);
return loginWithHttpBasic(channelId, appChannel, createdFrom, merchant, dimension, request);
}
}
......@@ -150,12 +153,12 @@ public class UserController implements IBaseController {
public JsonResult loginFastV1(
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
@RequestParam(required = false,defaultValue = "xyqb") String key,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) Long btRegisterChannelId,
@RequestParam(required = false) String dimension,
@RequestParam(name = "click_id", required = false) String clickId,
HttpServletRequest request) {
log.info("login/fastV1 -> channelId:{},appChennel:{},createdFrom:{},key:{},btRegisterChannelId:{},dimension:{},clickId:{}",channelId, appChannel, createdFrom, key, btRegisterChannelId, dimension, clickId);
log.info("login/fastV1 -> channelId:{},appChennel:{},createdFrom:{},key:{},btRegisterChannelId:{},dimension:{},clickId:{}", channelId, appChannel, createdFrom, key, btRegisterChannelId, dimension, clickId);
return loginFast(channelId, appChannel, createdFrom, key, btRegisterChannelId, dimension, clickId, request);
}
......@@ -163,13 +166,13 @@ public class UserController implements IBaseController {
public JsonResult loginFast(
@RequestParam(required = false, defaultValue = "1") Long channelId, String appChannel,
@RequestParam(required = false, defaultValue = "1") Long createdFrom,
@RequestParam(required = false,defaultValue = "xyqb") String key,
@RequestParam(required = false)Long btRegisterChannelId,
@RequestParam(required = false, defaultValue = "xyqb") String key,
@RequestParam(required = false) Long btRegisterChannelId,
@RequestParam(required = false) String dimension,
@RequestParam(name = "click_id", required = false) String clickId,
HttpServletRequest request) {
Map<String, JsonResult> validMap = getHeaderParam(request);
log.info("login/fast -> channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{},clickId:{}",channelId,appChannel,createdFrom,btRegisterChannelId,key,dimension, clickId);
log.info("login/fast -> channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{},clickId:{}", channelId, appChannel, createdFrom, btRegisterChannelId, key, dimension, clickId);
if (null != validMap.get("fail")) {
return validMap.get("fail");
}
......@@ -188,23 +191,23 @@ public class UserController implements IBaseController {
verifyPhoneAndCode(phoneNo, verificationCode);
User user = userService.findByPhoneWithCache(phoneNo);
if (user != null && !user.getEnable()) {
log.error("用户不存在,或者已经注销,phoneNo:{}",phoneNo);
log.error("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("登录失败", null);
}
if (user == null) {
// Service层会负责发送注册消息到LoanVest
user = userRegisterService.register(phoneNo, channelId, createdFrom, appChannel,btRegisterChannelId,dimension);
user = userRegisterService.register(phoneNo, channelId, createdFrom, appChannel, btRegisterChannelId, dimension);
if (user == null) {
throw new UserNotExistException("用户未找到");
}
//广点通转化注册 - 发送消息 - 方法内过滤
MqUtils.sendRegisterMessageForGdt(phoneNo, clickId);
}
if(!wechatRelateUserIfNecessary(user, request)){
if (!wechatRelateUserIfNecessary(user, request)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
//增加登陆统计发送
UserStatistics statistics = new UserStatistics(user,dimension,3,channelId);
UserStatistics statistics = new UserStatistics(user, dimension, 3, channelId);
MqUtils.sendLoanVest(statistics);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
}
......@@ -259,8 +262,8 @@ public class UserController implements IBaseController {
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) {
log.info("用户注册:register -> phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},btRegisterChannelId:{},dimension:{}", phoneNo, verificationCode, channelId, registerFrom,btRegisterChannelId,dimension);
@RequestParam(required = false) Long btRegisterChannelId, @RequestParam(required = false) String dimension) {
log.info("用户注册:register -> phoneNo:{}, verificationCode:{}, channelId:{}, registerFrom:{},btRegisterChannelId:{},dimension:{}", phoneNo, verificationCode, channelId, registerFrom, btRegisterChannelId, dimension);
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
log.info("用户注册失败,手机号错误:register -> registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("手机号错误", null);
......@@ -281,7 +284,7 @@ public class UserController implements IBaseController {
log.info("用户注册失败,该手机号已经被注册:register -> registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("该手机号已经被注册", null);
}
if (!userRegisterService.register(phoneNo, password, registerFrom, getIp(), channelId,btRegisterChannelId,dimension)) {
if (!userRegisterService.register(phoneNo, password, registerFrom, getIp(), channelId, btRegisterChannelId, dimension)) {
log.info("用户快速注册失败,请稍后重试, registerFrom:{}, phoneNo:{}", registerFrom, phoneNo);
return JsonResult.buildErrorStateResult("注册失败,请稍后重试", null);
}
......@@ -355,7 +358,6 @@ public class UserController implements IBaseController {
}
/**
* 检查token是否已经过期不存在了
*
......@@ -365,16 +367,16 @@ public class UserController implements IBaseController {
@LogHttpCaller
@RequestMapping("/exists_token")
public JsonResult checkToken(@RequestParam String token) {
if(StringUtils.isEmpty(token)){
return JsonResult.buildSuccessResult(null,false);
if (StringUtils.isEmpty(token)) {
return JsonResult.buildSuccessResult(null, false);
}
if(token.contains("*")){
return JsonResult.buildSuccessResult(null,false);
if (token.contains("*")) {
return JsonResult.buildSuccessResult(null, false);
}
String tokenKey = Constants.SESSION_PREFIX + token;
String tokenKey2 = Constants.Session.USER_SESSION_CACHE + token;
// 判断token是否存在
boolean exist = stringRedisTemplate.hasKey(tokenKey)||stringRedisTemplate.hasKey(tokenKey2);
boolean exist = stringRedisTemplate.hasKey(tokenKey) || stringRedisTemplate.hasKey(tokenKey2);
return JsonResult.buildSuccessResult("token valid", exist);
}
......@@ -390,17 +392,17 @@ public class UserController implements IBaseController {
return JsonResult.buildSuccessResult("token校验成功", userModel);
}
private JsonResult loginWithHttpBasic(Long channelId, String appChannel, Long createdFrom, Merchant merchant,String dimension, HttpServletRequest request) {
private JsonResult loginWithHttpBasic(Long channelId, String appChannel, Long createdFrom, Merchant merchant, String dimension, HttpServletRequest request) {
User user = verificateUserNameAndPassword(request);
if (user == null) {
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}else if(!wechatRelateUserIfNecessary(user, request)){
} else if (!wechatRelateUserIfNecessary(user, request)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
//增加登陆统计发送
UserStatistics statistics=new UserStatistics(user,dimension,1,channelId);
UserStatistics statistics = new UserStatistics(user, dimension, 1, channelId);
MqUtils.sendLoanVest(statistics);
log.info("用户登陆成功phonNo:{},当前ip:{},用户登陆信息:{}",user.getPhoneNo(), IPUtil.getRemoteIP(request), statistics);
log.info("用户登陆成功phonNo:{},当前ip:{},用户登陆信息:{}", user.getPhoneNo(), IPUtil.getRemoteIP(request), statistics);
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
}
......@@ -452,17 +454,17 @@ public class UserController implements IBaseController {
return StringUtils.defaultString(targetPassword, "").equals(PasswordUtil.MD5(paramPass.toLowerCase() + Constants.PASSWORD_SALT));
}
private JsonResult loginWithUserId(Long channelId, String appChannel, Long createdFrom, String userId, Merchant merchant,String dimension,HttpServletRequest request) {
private JsonResult loginWithUserId(Long channelId, String appChannel, Long createdFrom, String userId, Merchant merchant, String dimension, HttpServletRequest request) {
//查询用户
User user = userService.findByUuidInDb(userId);
if (Objects.isNull(user) || !user.getEnable()) {
log.error("用户不存在,或者已经注销,userId:{}",userId);
log.error("用户不存在,或者已经注销,userId:{}", userId);
return JsonResult.buildErrorStateResult("登录失败", null);
} else if(!wechatRelateUserIfNecessary(user, request)){
} else if (!wechatRelateUserIfNecessary(user, request)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
}
//增加登陆统计发送
UserStatistics statistics=new UserStatistics(user,dimension,4,channelId);
UserStatistics statistics = new UserStatistics(user, dimension, 4, channelId);
MqUtils.sendLoanVest(statistics);
//更新session
return new JsonResult(sessionService.createSession(channelId, createdFrom, appChannel, user, merchant));
......@@ -470,45 +472,47 @@ public class UserController implements IBaseController {
/**
* 如果必要的话,关联用户和微信
*
* @param user - 用户标识
* @param request - 当前请求
* @return true - 继续登录,false - 微信关联失败,重新登录
*/
private boolean wechatRelateUserIfNecessary(User user,HttpServletRequest request){
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IPUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
boolean ready = paramKeys.contains(Constants.WECHAT_OPEN_ID);
if(!ready){
if (!ready) {
return true;
}else if(Objects.isNull(user) || Objects.isNull(user.getId()) || StringUtils.isBlank(request.getParameter(Constants.WECHAT_OPEN_ID))){
log.warn("微信关联失败,user:{}, request-Header:{}",user, JSON.toJSONString(getRequestHeaderMap(request)));
} else if (Objects.isNull(user) || Objects.isNull(user.getId()) || StringUtils.isBlank(request.getParameter(Constants.WECHAT_OPEN_ID))) {
log.warn("微信关联失败,user:{}, request-Header:{}", user, JSON.toJSONString(getRequestHeaderMap(request)));
return false;
}
Long userId = user.getId();
String phoneNo = user.getPhoneNo();
try{
try {
int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID));
return rows > 0;
}catch (Exception e){
log.error("微信关联失败,user:{}, request-Header:{}",user, JSON.toJSONString(getRequestHeaderMap(request)), e);
} catch (Exception e) {
log.error("微信关联失败,user:{}, request-Header:{}", user, JSON.toJSONString(getRequestHeaderMap(request)), e);
}
return false;
}
/**
* 校验短信验证码
*
* @param phoneNo
* @param verificationCode
*/
private void verifyPhoneAndCode(String phoneNo, String verificationCode) {
// 非生产环境直接跳过验证码检验
if(!TechEnvironment.isPro()){
if (!TechEnvironment.isPro()) {
return;
}
if (!smsService.verifyPhoneAndCode(phoneNo, verificationCode)) {
// 是否需要重新发送短信验证码
if(smsService.needResendCode(phoneNo)){
if (smsService.needResendCode(phoneNo)) {
throw new VerificationCodeErrorException("验证码失效,请重新获取");
}
log.info("验证码校验失败,phoneNo:{} , verificationCode:{}", phoneNo, verificationCode);
......
......@@ -58,14 +58,14 @@ public class UserDetailController implements IBaseController {
* 如果已存在记录,则更新
*/
UserDetail userDetail = userDetailService.findByUserId(user.getId());
if(Objects.isNull(userDetail)){
if (Objects.isNull(userDetail)) {
userDetail = userDetailService.findByPhoneNo(user.getPhoneNo());
// 按手机号查出记录,如果userId非空,说明是存疑数据或是其他用户的信息,停止修改操作,返回失败
if(Objects.nonNull(userDetail) && Objects.nonNull(userDetail.getUserId())){
if (Objects.nonNull(userDetail) && Objects.nonNull(userDetail.getUserId())) {
return JsonResult.buildErrorStateResult("手机号已使用.", null);
}
}
if(Objects.isNull(userDetail)){
if (Objects.isNull(userDetail)) {
userDetail = new UserDetail();
userDetail.setCreatedAt(now);
}
......
......@@ -43,11 +43,11 @@ public class Address implements Serializable {
private Timestamp updateAt;
@PreUpdate
public void preUpdate(){
public void preUpdate() {
this.updateAt = new Timestamp(System.currentTimeMillis());
}
public String toString(){
return province+"(省)"+city+"(市)"+district+"(区/县)"+address;
public String toString() {
return province + "(省)" + city + "(市)" + district + "(区/县)" + address;
}
}
......@@ -36,9 +36,10 @@ public class Contact implements Serializable {
/**
* 数据合法性校验
*
* @return
*/
public boolean valid(){
public boolean valid() {
return (ValidationUtil.validatePhoneNo(this.phoneNo) && ValidationUtil.validateChinese(this.name));
}
......
......@@ -57,7 +57,6 @@ public class User implements Serializable {
private static final long serialVersionUID = -1L;
public XUser toXUser() {
XUser xUser = new XUser();
xUser.setId(this.getId());
......
......@@ -16,7 +16,7 @@ public class UserAttached {
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column( name = "user_id")
@Column(name = "user_id")
private Long userId;
@Column(name = "avatar")
private String avatar;
......
......@@ -18,7 +18,7 @@ public class UserAuthorized {
@Id
@Column(name = "id")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name ="uuid" , strategy = "org.hibernate.id.UUIDGenerator")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
private String id;
@Column(name = "user_uuid")
......
......@@ -46,17 +46,17 @@ public class UserBtRegister implements Serializable {
@PrePersist
public void prePersist(){
public void prePersist() {
Timestamp now = new Timestamp(System.currentTimeMillis());
this.createdAt =now;
this.updatedAt =now;
this.createdAt = now;
this.updatedAt = now;
}
@PreUpdate
public void preUpdate(){
public void preUpdate() {
Timestamp now = new Timestamp(System.currentTimeMillis());
this.createdAt =now;
this.updatedAt =now;
this.createdAt = now;
this.updatedAt = now;
}
}
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.motan.retbean.XUserExtInfo;
//import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.user.enums.*;
import lombok.Data;
......@@ -9,6 +8,8 @@ import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
//import cn.quantgroup.xyqb.entity.enumerate.*;
/**
* Created by 11 on 2016/12/30.
*/
......@@ -47,7 +48,7 @@ public class UserExtInfo implements Serializable {
@Column(name = "updated_at")
private Timestamp updateAt;
public XUserExtInfo toXUserExtInfo(){
public XUserExtInfo toXUserExtInfo() {
XUserExtInfo xUserExtInfo = new XUserExtInfo();
xUserExtInfo.setId(this.id);
xUserExtInfo.setUserId(this.userId);
......
......@@ -5,7 +5,6 @@ import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
/**
......@@ -33,7 +32,7 @@ public class UserQueryLog implements Serializable {
@Column(name = "query_detail")
private String queryDetail;
@Column(name = "created_at")
private Date createdAt=new Date();
private Date createdAt = new Date();
@Transient
private String createDate;
......
......@@ -48,9 +48,10 @@ public class UserSpouse implements Serializable {
/**
* 数据合法性校验
*
* @return
*/
public boolean valid(){
public boolean valid() {
return (ValidationUtil.validatePhoneNo(this.spousePhone) && ValidationUtil.validateChinese(this.spouseName));
}
}
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.exception;
/**
* 密码错误次数达到上限异常
*
* @author 任文超
* @time 2017-11-10
*/
......
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.exception;
/**
* 微信关联用户异常
*
* @author 任文超
* @time 2018-04-03
*/
......
......@@ -7,8 +7,6 @@ import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
......@@ -46,10 +44,10 @@ public class RequestFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 带状态接口
if(isMatch(request)){
if (isMatch(request)) {
// 需获取session信息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis();
if(Objects.isNull(sessionStruct)) {
if (Objects.isNull(sessionStruct)) {
/* 如果没有获取到session信息则返回错误信息 */
response.setStatus(401);
response.setHeader("Content-Type", "application/json;charset=utf-8");
......@@ -57,7 +55,7 @@ public class RequestFilter implements Filter {
writer.print(UNAUTH_RESULT);
writer.close();
return;
}else{
} else {
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
......@@ -71,6 +69,7 @@ public class RequestFilter implements Filter {
/**
* 判断是否带状态请求
*
* @param request
* @return
*/
......
......@@ -7,6 +7,7 @@ import java.io.Serializable;
/**
* 地址信息数据模型
*
* @author renwc
* @date 2018-01-04
*/
......@@ -22,7 +23,9 @@ public class AddressModel implements Serializable {
private String district;
private String address;
private AddressModel(){}
private AddressModel() {
}
public static AddressModel entity2Model(Address entity) {
if (entity == null) {
return null;
......
......@@ -4,23 +4,26 @@ import java.util.Optional;
/**
* 验证码验证类型
*
* @author renwc
* @date 2018-02-02
*/
public enum ClientType {
APP("native"), H5("h5"), WEB("web");
ClientType(String alias){
ClientType(String alias) {
this.alias = alias;
}
private String alias;
public String getAlias(){
public String getAlias() {
return this.alias;
}
public final static ClientType valueByName(String name) {
name = Optional.ofNullable(name).orElse("").toLowerCase();
switch (name){
switch (name) {
case "app":
case "native":
return APP;
......
......@@ -9,6 +9,7 @@ import java.util.Optional;
/**
* 联系人数据模型
*
* @author renwc
* @date 2018-01-04
*/
......@@ -21,7 +22,9 @@ public class ContactModel implements Serializable {
private String relationName;
private String relation;
private ContactModel(){}
private ContactModel() {
}
public static ContactModel entity2Model(Contact entity) {
if (entity == null) {
return null;
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import lombok.Data;
import org.apache.commons.collections.CollectionUtils;
......
......@@ -123,6 +123,7 @@ public class JsonResult implements Serializable {
return "JsonResult{" +
"businessCode='" + businessCode + '\'' +
", code='" + code + '\'' +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
......
......@@ -11,5 +11,5 @@ public class LoginProperties {
private Long createdFrom = 1L;
private String appChannel = "";
private String merchantName;
private Long btMerchantId =1L;
private Long btMerchantId = 1L;
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import java.io.Serializable;
......
package cn.quantgroup.xyqb.model;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
/**
* Created by xuran on 2017/8/1.
......
......@@ -11,6 +11,7 @@ import java.util.Objects;
/**
* 用户综合信息数据模型
*
* @author renwc
* @date 2018-01-04
*/
......@@ -34,13 +35,14 @@ public class UserAssociationModel implements Serializable {
/**
* 填充地址模型列表
*
* @param entitylist
*/
public void putAddressList(List<Address> entitylist){
if(Objects.isNull(entitylist)){
public void putAddressList(List<Address> entitylist) {
if (Objects.isNull(entitylist)) {
return;
}
if(Objects.isNull(this.addressList)){
if (Objects.isNull(this.addressList)) {
this.addressList = new ArrayList<AddressModel>(entitylist.size());
}
for (Address entity : entitylist) {
......@@ -50,13 +52,14 @@ public class UserAssociationModel implements Serializable {
/**
* 填充联系人模型列表
*
* @param entitylist
*/
public void putContactList(List<Contact> entitylist){
if(Objects.isNull(entitylist)){
public void putContactList(List<Contact> entitylist) {
if (Objects.isNull(entitylist)) {
return;
}
if(Objects.isNull(this.contactList)){
if (Objects.isNull(this.contactList)) {
this.contactList = new ArrayList<ContactModel>(entitylist.size());
}
for (Contact entity : entitylist) {
......
......@@ -3,7 +3,7 @@ package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import cn.quantgroup.xyqb.model.IdType;
import java.io.Serializable;
/**
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import lombok.Data;
/**
......
......@@ -37,7 +37,7 @@ public class UserFullInfo implements Serializable {
}
public UserFullInfo(User user, UserDetail userDetail) {
if (user != null){
if (user != null) {
this.id = user.getId();
this.phoneNo = user.getPhoneNo();
this.registerFrom = user.getRegisteredFrom();
......
......@@ -2,10 +2,10 @@ package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import java.io.Serializable;
import jdk.nashorn.internal.ir.IdentNode;
import lombok.Data;
import java.io.Serializable;
/**
* Created by xuran on 2017/7/5.
*/
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import java.io.Serializable;
......@@ -38,5 +36,4 @@ public class UserQueryInfo implements Serializable {
private String address;
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import java.io.Serializable;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import java.io.Serializable;
/**
* Created by xuran on 2017/9/7.
......@@ -31,6 +31,7 @@ public class UserRegisterMqMessage implements Serializable {
//上一次修改时间
private Long updatedAt;
public UserRegisterMqMessage(User user) {
Long createTimeStamp = user.getCreatedAt().getTime();
Long updateTimeStamp = user.getUpdatedAt().getTime();
......
......@@ -16,7 +16,9 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public class UserRegisterParam {
/** ======数据部分开始====== */
/**
* ======数据部分开始======
*/
private Long registerFrom; // 注册渠道
private String phoneNo; // 手机号
private String password; // 密码
......@@ -30,7 +32,9 @@ public class UserRegisterParam {
private User user; // 注册生成的用户,也是返回结果
/** ======数据部分结束====== */
/** ======流程控制部分开始====== */
/**
* ======流程控制部分开始======
*/
private boolean generateRandomPwd = false; // 是否生成随机密码
private boolean sendSuccessSms = true; // 是否发送注册成功短信
private boolean sendAppSms = true; // 是否发送推送App短信
......
......@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import java.io.Serializable;
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.UserSpouse;
import cn.quantgroup.user.enums.MaritalStatus;
import cn.quantgroup.xyqb.entity.UserSpouse;
import lombok.Data;
/**
......
......@@ -39,11 +39,11 @@ public class UserStatistics {
}
public UserStatistics(User user, String dimension, int action,Long channel) {
public UserStatistics(User user, String dimension, int action, Long channel) {
this.uuid = user.getUuid();
this.registerFrom = user.getRegisteredFrom();
this.action = action;
this.dimension = dimension;
this.channel=channel;
this.channel = channel;
}
}
package cn.quantgroup.xyqb.model;
import java.io.Serializable;
import lombok.Data;
import java.io.Serializable;
/**
* Created by xuran on 2017/8/1.
*/
......
......@@ -24,7 +24,7 @@ public class LoginInfo {
}
public XLoginInfo toXLoginInfo() {
XLoginInfo xLoginInfo= new XLoginInfo();
XLoginInfo xLoginInfo = new XLoginInfo();
// xLoginInfo.setUser();
......
......@@ -3,10 +3,9 @@ package cn.quantgroup.xyqb.model.sms;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.Optional;
/**
* 短信模板适配枚举类
*
* @author renwc
* @date 2018-04-23
*/
......@@ -44,6 +43,7 @@ public enum SmsMerchant {
/**
* 获取短信模板id
*
* @return
*/
public String getMerchantId() {
......@@ -52,6 +52,7 @@ public enum SmsMerchant {
/**
* 获取短信contentId
*
* @return
*/
public String getContentId() {
......@@ -61,17 +62,18 @@ public enum SmsMerchant {
/**
* 根据name实例化枚举值
* 无匹配项时返回默认枚举值
*
* @param name
* @return
*/
public static SmsMerchant of(String name){
if(StringUtils.isBlank(name)){
public static SmsMerchant of(String name) {
if (StringUtils.isBlank(name)) {
return DEFAULT;
}
SmsMerchant merchant = null;
try{
try {
merchant = SmsMerchant.valueOf(name.toUpperCase());
}catch (Exception e){
} catch (Exception e) {
log.warn("短信模板适配类型:[非法值]:{}", name, e);
merchant = DEFAULT;
}
......
package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* Created by 11 on 2016/12/30.
*/
public interface IAddressRepository extends JpaRepository<Address, Long> ,JpaSpecificationExecutor<Address> {
public interface IAddressRepository extends JpaRepository<Address, Long>, JpaSpecificationExecutor<Address> {
Address findByUserId(Long userId);
}
......@@ -7,5 +7,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* Created by Administrator on 2017/5/16.
*/
public interface IUserBtRegisterRepository extends JpaRepository<UserBtRegister, Long>,JpaSpecificationExecutor<UserBtRegister> {
public interface IUserBtRegisterRepository extends JpaRepository<UserBtRegister, Long>, JpaSpecificationExecutor<UserBtRegister> {
}
......@@ -14,7 +14,7 @@ import java.util.List;
* @author mengfan.feng
* @time 2015-09-11 11:22
*/
public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,JpaSpecificationExecutor<UserDetail> {
public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>, JpaSpecificationExecutor<UserDetail> {
UserDetail findByUserId(Long userId);
......@@ -33,12 +33,13 @@ public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,J
@Transactional
@Modifying
@Query(value = "update user_detail set gender = ?1 where user_id = ?2", nativeQuery = true)
void updateGender( int gender, Long userId);
void updateGender(int gender, Long userId);
List<UserDetail> findAll(Specification<UserDetail> specification);
/**
* 修复线上身份证问题,后续误用
*
* @return
*/
@Modifying
......
......@@ -18,9 +18,9 @@ public interface IUserQueryLogRepository extends JpaRepository<UserQueryLog, Lon
@Transactional
@Modifying
@Query(nativeQuery=true,value = "select * from user_query_log ul where created_At between ?1 and ?2 limit ?3 ,?4 ")
List<UserQueryLog> findQueryLogCreatedAt(Date beginDate, Date endDate,Integer pageId,Integer pageSize);
@Query(nativeQuery = true, value = "select * from user_query_log ul where created_At between ?1 and ?2 limit ?3 ,?4 ")
List<UserQueryLog> findQueryLogCreatedAt(Date beginDate, Date endDate, Integer pageId, Integer pageSize);
@Query(nativeQuery=true,value = "select count(1) from user_query_log ul where created_At between ?1 and ?2 ")
@Query(nativeQuery = true, value = "select count(1) from user_query_log ul where created_At between ?1 and ?2 ")
Long findQueryLogCountCreatedAt(Date beginDate, Date endDate);
}
......@@ -23,8 +23,8 @@ public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecifica
User findById(Long id);
@Query(value ="select * from user where created_at>=?1 and created_at<?2 ", nativeQuery = true)
List<User> findRegisterUserByTime(String beginTime,String endTime);
@Query(value = "select * from user where created_at>=?1 and created_at<?2 ", nativeQuery = true)
List<User> findRegisterUserByTime(String beginTime, String endTime);
@Transactional
@Modifying
......
......@@ -24,6 +24,7 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
/**
* 解除关联关系 -- 当前用户的已关联微信
* 注:应用服务的JDBC数据源连接,无delete权限
*
* @param userId
* @return
*/
......@@ -34,6 +35,7 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
/**
* 关联用户
*
* @param userId - 用户标识
* @param phoneNo
* @param openId - 微信标识
......@@ -47,6 +49,7 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
/**
* 解除关联关系 -- 包括:1、当前微信旧的关联用户;2、当前用户旧的关联微信
* 强制事务
*
* @param openId - 微信标识
* @param userId - 用户标识
* @return 记录更新行数
......
......@@ -13,6 +13,7 @@ public interface IUserApiService {
/**
* 根据uuid查询用户完整信息
*
* @param uuid
* @return
*/
......@@ -20,6 +21,7 @@ public interface IUserApiService {
/**
* 根据phone查询完整信息
*
* @param phoneNo
* @return
*/
......
......@@ -2,7 +2,6 @@ package cn.quantgroup.xyqb.service.api.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserFullInfo;
import cn.quantgroup.xyqb.model.model.BlacklistMatchResult;
import cn.quantgroup.xyqb.service.api.IUserApiService;
......
......@@ -9,6 +9,7 @@ import java.util.Map;
public interface IQuantgroupCaptchaService {
/**
* 获取QG验证码
*
* @param locale
* @return
* @throws Exception EX
......@@ -17,6 +18,7 @@ public interface IQuantgroupCaptchaService {
/**
* 校验QG验证码
*
* @param captchaId
* @param captchaValue
* @return
......
......@@ -60,7 +60,7 @@ public class GeetestCaptchaServiceImpl implements IGeetestCaptchaService {
param.put("user_id", markId);
if (Objects.isNull(clientType)) {
param.put("client_type", ClientType.APP.getAlias());
}else{
} else {
param.put("client_type", clientType.getAlias());
}
param.put("ip_address", remoteIp);
......
......@@ -8,5 +8,6 @@ import java.io.Serializable;
*/
public interface IRegisterMqService {
void send(Serializable message);
void send4Gdt(Serializable message);
}
......@@ -33,34 +33,36 @@ public class IRegisterMqServiceImpl implements IRegisterMqService {
/**
* 发送用登陆统计信息
*
* @param message 订单信息
*/
@Override
@Async
public void send(Serializable message){
if(null==message){
public void send(Serializable message) {
if (null == message) {
LOGGER.error("广播用户注册消息不能为空");
}
LOGGER.info("广播用户注册消息,message={}",message);
LOGGER.info("广播用户注册消息,message={}", message);
String msg = JSONObject.toJSONString(message);
registerRabTemplate.convertAndSend(msg);
LOGGER.info("广播用户注册消息,message={}",msg);
LOGGER.info("广播用户注册消息,message={}", msg);
}
/**
* 发送用登陆统计信息
*
* @param message 订单信息
*/
@Override
@Async
public void send4Gdt(Serializable message){
if(null==message){
public void send4Gdt(Serializable message) {
if (null == message) {
LOGGER.error("广点通用户注册消息不能为空");
}
LOGGER.info("广点通用户注册消息,message={}",message);
LOGGER.info("广点通用户注册消息,message={}", message);
String msg = JSONObject.toJSONString(message);
registerRabbitTemplate4Gdt.convertAndSend(msg);
LOGGER.info("广点通用户注册消息,message={}",msg);
LOGGER.info("广点通用户注册消息,message={}", msg);
}
}
......@@ -7,7 +7,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
......@@ -32,18 +31,19 @@ public class LoanVestMQServiceImpl implements IVestService {
/**
* 发送用登陆统计信息
*
* @param message 订单信息
*/
@Override
@Async
public void send(UserStatistics message){
if(null==message){
public void send(UserStatistics message) {
if (null == message) {
LOGGER.error("用户登陆统计消息不能为空");
}
LOGGER.info("用户登陆统计发送,message={}",message);
LOGGER.info("用户登陆统计发送,message={}", message);
String msg = JSONObject.toJSONString(message);
loanVestRabbitTemplate.convertAndSend("statistics-user", msg);
LOGGER.info("用户登陆统计成功,message={}",msg);
LOGGER.info("用户登陆统计成功,message={}", msg);
}
}
......@@ -14,7 +14,7 @@ import java.util.Map;
* Created by liqing on 2017/12/5 0005.
*/
@Slf4j
public abstract class AbstractUserRegisterService implements IUserRegisterService,ApplicationContextAware {
public abstract class AbstractUserRegisterService implements IUserRegisterService, ApplicationContextAware {
private static Map<String, AbstractUserRegisterHandler> userRegisterHandlerMap = Maps.newConcurrentMap();
private static final String USER_REGISTER_HANDLER_DEFAULT_KEY = "register_default";
......@@ -31,9 +31,10 @@ public abstract class AbstractUserRegisterService implements IUserRegisterServic
/**
* 创建默认注册流程
* 1、保存基本信息 - 2、保存用户详情 - 3、保存白条信息 - 4、发送短信 - 5、发送mq
*
* @param applicationContext
*/
protected AbstractUserRegisterHandler createDefaultUserRegisterHandler(ApplicationContext applicationContext){
protected AbstractUserRegisterHandler createDefaultUserRegisterHandler(ApplicationContext applicationContext) {
AbstractUserRegisterHandler baseUserRegisterHandler = applicationContext.getBean("baseUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler detailUserRegisterHandler = applicationContext.getBean("detailUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler btUserRegisterHandler = applicationContext.getBean("btUserRegisterHandler", AbstractUserRegisterHandler.class);
......@@ -51,9 +52,10 @@ public abstract class AbstractUserRegisterService implements IUserRegisterServic
* 创建扩展注册流程
* 1、保存基本信息 - 2、保存用户详情 - 3、保存白条信息 - 4、保存用户地址 - 5、保存联系人
* 5、发送短信 - 6、发送mq
*
* @param applicationContext
*/
protected AbstractUserRegisterHandler createExtUserRegisterHandler(ApplicationContext applicationContext){
protected AbstractUserRegisterHandler createExtUserRegisterHandler(ApplicationContext applicationContext) {
AbstractUserRegisterHandler baseUserRegisterHandler = applicationContext.getBean("baseUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler detailUserRegisterHandler = applicationContext.getBean("detailUserRegisterHandler", AbstractUserRegisterHandler.class);
AbstractUserRegisterHandler btUserRegisterHandler = applicationContext.getBean("btUserRegisterHandler", AbstractUserRegisterHandler.class);
......@@ -73,14 +75,15 @@ public abstract class AbstractUserRegisterService implements IUserRegisterServic
/**
* 获取默认注册流程
*
* @return
*/
protected AbstractUserRegisterHandler getDefaultUserRegisterHandler(){
protected AbstractUserRegisterHandler getDefaultUserRegisterHandler() {
AbstractUserRegisterHandler curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_DEFAULT_KEY);
if (curUserRegisterHandler == null){
synchronized (USER_REGISTER_HANDLER_DEFAULT_KEY){
if (curUserRegisterHandler == null) {
synchronized (USER_REGISTER_HANDLER_DEFAULT_KEY) {
curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_DEFAULT_KEY);
if (curUserRegisterHandler == null){
if (curUserRegisterHandler == null) {
curUserRegisterHandler = createDefaultUserRegisterHandler(ApplicationContextHolder.getApplicationContext());
}
}
......@@ -90,14 +93,15 @@ public abstract class AbstractUserRegisterService implements IUserRegisterServic
/**
* 获取扩展注册流程
*
* @return
*/
protected AbstractUserRegisterHandler getExtUserRegisterHandler(){
protected AbstractUserRegisterHandler getExtUserRegisterHandler() {
AbstractUserRegisterHandler curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_EXT_KEY);
if (curUserRegisterHandler == null){
synchronized (USER_REGISTER_HANDLER_EXT_KEY){
if (curUserRegisterHandler == null) {
synchronized (USER_REGISTER_HANDLER_EXT_KEY) {
curUserRegisterHandler = userRegisterHandlerMap.get(USER_REGISTER_HANDLER_EXT_KEY);
if (curUserRegisterHandler == null){
if (curUserRegisterHandler == null) {
curUserRegisterHandler = createExtUserRegisterHandler(ApplicationContextHolder.getApplicationContext());
}
}
......
......@@ -10,6 +10,7 @@ public interface IUserRegisterService {
/**
* 以默认流程注册
*
* @param userRegisterParam
* @return
* @throws Exception
......@@ -18,6 +19,7 @@ public interface IUserRegisterService {
/**
* 以扩展流程注册
*
* @param userRegisterParam
* @return
* @throws Exception
......@@ -27,6 +29,7 @@ public interface IUserRegisterService {
/**
* 替换AppController.register
* /app/login,/app/login_super
*
* @param registerFrom
* @param phoneNo
* @param idNo
......@@ -40,6 +43,7 @@ public interface IUserRegisterService {
/**
* 替换InnerController里的userService.registerAndReturn
* /innerapi/user/register
*
* @param phoneNo
* @param password
* @param registerFrom
......@@ -50,6 +54,7 @@ public interface IUserRegisterService {
/**
* 替换UserController.register里的userService.register
* /user/register
*
* @param phoneNo
* @param password
* @param registerFrom
......@@ -59,11 +64,12 @@ public interface IUserRegisterService {
* @param dimension
* @return
*/
boolean register(String phoneNo, String password, Long registerFrom, String ip, Long channelId, Long btRegisterChannelId,String dimension);
boolean register(String phoneNo, String password, Long registerFrom, String ip, Long channelId, Long btRegisterChannelId, String dimension);
/**
* 替换UserController.loginFast里的registerFastWhenLogin
* /user/login/fast
*
* @param phoneNo
* @param channelId
* @param registerFrom
......@@ -72,11 +78,12 @@ public interface IUserRegisterService {
* @param dimension
* @return
*/
User register(String phoneNo, Long channelId, Long registerFrom, String appChannel, Long btRegisterChannelId,String dimension);
User register(String phoneNo, Long channelId, Long registerFrom, String appChannel, Long btRegisterChannelId, String dimension);
/**
* 替换InnerController.saveMulti里的userService.registerAndReturn
* /innserapi/user/save_multi
*
* @param registeredFrom
* @param channelId
* @param phoneNo
......@@ -92,10 +99,11 @@ public interface IUserRegisterService {
* @param contacts
* @return
*/
User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, String provinceCode, String province, String cityCode, String city, String districtCode, String district, String address, String contacts,Long btRegisterChannelId);
User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, String provinceCode, String province, String cityCode, String city, String districtCode, String district, String address, String contacts, Long btRegisterChannelId);
/**
* 替换MotanUserServiceImpl.appLoginAndFetchLoginInfo和MotanUserServiceImpl.appLogin里的register
*
* @param registerFrom
* @param phoneNo
* @param idNo
......
......@@ -35,7 +35,7 @@ public class AddressUserRegisterHandler extends AbstractUserRegisterHandler {
address.setCreatedAt(currentTime);
address.setUpdateAt(currentTime);
addressRepository.save(address);
if (successor != null){
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......
......@@ -43,7 +43,7 @@ public class BaseUserRegisterHandler extends AbstractUserRegisterHandler {
// user保存成功后同步用户信息到Lkb
pushUserToLkb(uuid, userRegisterParam);
userRegisterParam.setUser(user);
if (successor != null){
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......@@ -51,6 +51,7 @@ public class BaseUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 保存用户user信息
*
* @param uuid
* @param userRegisterParam
* @return
......@@ -71,7 +72,7 @@ public class BaseUserRegisterHandler extends AbstractUserRegisterHandler {
user.setRegisteredFrom(registerFrom);
}
String password = StringUtils.defaultString(userRegisterParam.getPassword(), "");
if (userRegisterParam.isGenerateRandomPwd()){ // 如果需要生成随机密码
if (userRegisterParam.isGenerateRandomPwd()) { // 如果需要生成随机密码
password = PasswordUtil.generateRandomPwd(Constants.RANDOM_PWD_LEN);
}
user.setPassword(PasswordUtil.MD5(password.toLowerCase() + Constants.PASSWORD_SALT));
......@@ -84,6 +85,7 @@ public class BaseUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 同步用户信息到Lkb,失败影响注册流程
*
* @param uuid
* @param userRegisterParam
*/
......@@ -91,7 +93,7 @@ public class BaseUserRegisterHandler extends AbstractUserRegisterHandler {
log.info("[pushUserToLkb]同步用户信息到Lkb,phoneNo : {}", userRegisterParam.getPhoneNo());
boolean pushResult = lkbUserService.pushUser(uuid, userRegisterParam.getPhoneNo(),
userRegisterParam.getName(), userRegisterParam.getIdNo());
if (!pushResult){
if (!pushResult) {
log.error("[userRegisterHandler][baseUserRegisterHandler]同步用户至Lkb出错,userRegisterParam:{}", JsonUtil.toJson(userRegisterParam));
throw new PushUserToLkbException("同步用户至Lkb出错");
}
......
......@@ -32,12 +32,12 @@ public class BtUserRegisterHandler extends AbstractUserRegisterHandler {
Long channelId = userRegisterParam.getChannelId();
User user = userRegisterParam.getUser();
Long btRegisterChannelId = userRegisterParam.getBtRegisterChannelId();
if(!Objects.isNull(user) && Objects.equals(channelId, 222L)){
if (!Objects.isNull(user) && Objects.equals(channelId, 222L)) {
UserBtRegister userBtRegister = new UserBtRegister();
userBtRegister.setUserId(user.getId());
if(null == btRegisterChannelId){
if (null == btRegisterChannelId) {
userBtRegister.setRegisterBtMerchantId(0L);
}else{
} else {
userBtRegister.setRegisterBtMerchantId(btRegisterChannelId);
}
userBtRegister.setIsActive(true);
......@@ -46,7 +46,7 @@ public class BtUserRegisterHandler extends AbstractUserRegisterHandler {
userBtRegister.setUpdatedAt(currentTime);
userBtRegisterService.save(userBtRegister);
}
if (!Objects.isNull(successor)){
if (!Objects.isNull(successor)) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......
......@@ -37,14 +37,15 @@ public class ContactUserRegisterHandler extends AbstractUserRegisterHandler {
String contact_str = userRegisterParam.getContacts();
User user = userRegisterParam.getUser();
if (StringUtils.isNotBlank(contact_str)) {
List<Contact> contactList = JSONObject.parseObject(contact_str, new TypeReference<List<Contact>>() {});
List<Contact> contactList = JSONObject.parseObject(contact_str, new TypeReference<List<Contact>>() {
});
if (CollectionUtils.isNotEmpty(contactList)) {
convertContactList(user.getId(), contactList, 2);
contactRepository.save(contactList);
}
}
if (successor != null){
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......@@ -52,11 +53,12 @@ public class ContactUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 转换联系人信息
*
* @param userId 用户id
* @param contacts 联系人列表
* @param number 允许的联系人数量
*/
private void convertContactList(Long userId, List<Contact> contacts,int number) {
private void convertContactList(Long userId, List<Contact> contacts, int number) {
Timestamp now = new Timestamp(System.currentTimeMillis());
int count = 1;
for (Contact c : contacts) {
......
......@@ -43,7 +43,7 @@ public class DetailUserRegisterHandler extends AbstractUserRegisterHandler {
log.error("[exception][detailUserRegisterHandler_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
if (successor != null){
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......@@ -51,6 +51,7 @@ public class DetailUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 执行用户详情注册
*
* @param userRegisterParam
*/
private void doHandleUserDetailRegister(UserRegisterParam userRegisterParam) throws Exception {
......
......@@ -29,7 +29,7 @@ public class MqUserRegisterHandler extends AbstractUserRegisterHandler {
log.error("[exception][mqUserRegisterHandler_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
if (successor != null){
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......@@ -37,16 +37,17 @@ public class MqUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 执行注册发送mq
*
* @param userRegisterParam
*/
private void doHandleMqUserRegister(UserRegisterParam userRegisterParam) {
if (!userRegisterParam.isSendSuccessMq()){
if (!userRegisterParam.isSendSuccessMq()) {
return;
}
Long channelId = userRegisterParam.getChannelId();
String dimension = userRegisterParam.getDimension();
User user = userRegisterParam.getUser();
if (user != null){
if (user != null) {
MqUtils.sendRegisterMessage(channelId, dimension, user);
}
}
......
......@@ -33,7 +33,7 @@ public class SmsUserRegisterHandler extends AbstractUserRegisterHandler {
log.error("[exception][smsUserRegisterHandler_exception]userRegisterParam={},error={}",
JsonUtil.toJson(userRegisterParam), e);
}
if (successor != null){
if (successor != null) {
return successor.handleRegister(userRegisterParam);
}
return userRegisterParam.getUser();
......@@ -41,6 +41,7 @@ public class SmsUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 执行发送短信
*
* @param userRegisterParam
*/
private void doHandleSmsUserRegister(UserRegisterParam userRegisterParam) {
......@@ -64,20 +65,22 @@ public class SmsUserRegisterHandler extends AbstractUserRegisterHandler {
/**
* 执行发送推送app短信 TODO
*
* @param userRegisterParam
*/
private void doHandleSendAppSms(UserRegisterParam userRegisterParam) {
if (!userRegisterParam.isSendAppSms()){
if (!userRegisterParam.isSendAppSms()) {
return;
}
}
/**
* 执行发送注册成功短信
*
* @param userRegisterParam
*/
private void doHandleSendSuccessSms(UserRegisterParam userRegisterParam) {
if (!userRegisterParam.isSendSuccessSms()){
if (!userRegisterParam.isSendSuccessSms()) {
return;
}
Long registerFrom = userRegisterParam.getRegisterFrom();
......@@ -85,7 +88,7 @@ public class SmsUserRegisterHandler extends AbstractUserRegisterHandler {
if (registerFrom != 645L && registerFrom != 900L && registerFrom != 158412L) {
smsService.sendAfterRegister(phoneNo);
log.info("第三方登录用户注册成功,registerFrom:{}, phoneNo:{},并且已发送短信通知", registerFrom, phoneNo);
}else if(registerFrom == 900L){
} else if (registerFrom == 900L) {
smsService.sendAfterRegister(phoneNo, "123");
log.info("第三方(聚美)登录用户注册成功,registerFrom:{},phoneNo:{},并且已发送短信通知", registerFrom, phoneNo);
}
......
......@@ -79,7 +79,7 @@ public class UserRegisterServiceImpl extends AbstractUserRegisterService {
@Transactional(rollbackFor = Exception.class)
@Override
public User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, String provinceCode, String province, String cityCode, String city, String districtCode, String district, String address, String contacts,Long btRegisterChannelId) {
public User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, String provinceCode, String province, String cityCode, String city, String districtCode, String district, String address, String contacts, Long btRegisterChannelId) {
Address addressObj = new Address();
addressObj.setProvinceCode(Long.valueOf(provinceCode));
addressObj.setProvince(province);
......
package cn.quantgroup.xyqb.service.session.aspect;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
......@@ -35,20 +34,20 @@ public class UserBtRegisterFillAspect {
public Object handleSingleServiceFeeRule(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
try {
args =fillUserBtRegister(args);
}catch (Exception e){
LOGGER.error("补充用户白条登录渠道信息失败",e);
args = fillUserBtRegister(args);
} catch (Exception e) {
LOGGER.error("补充用户白条登录渠道信息失败", e);
}
return pjp.proceed(args);
}
private Object[] fillUserBtRegister(Object[] args) {
for (int i = 0;i<args.length;i++){
for (int i = 0; i < args.length; i++) {
Object obj = args[i];
if (obj instanceof SessionValue){
SessionValue value =(SessionValue)obj;
if (obj instanceof SessionValue) {
SessionValue value = (SessionValue) obj;
UserBtRegister userBtRegister = userBtRegisterService.findByUserId(value.getUser().getId());
if(null != userBtRegister && null != value.getLoginProperties()){
if (null != userBtRegister && null != value.getLoginProperties()) {
value.getLoginProperties().setBtMerchantId(userBtRegister.getRegisterBtMerchantId());
}
}
......
......@@ -10,11 +10,7 @@ import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.user.impl.UserServiceImpl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Joiner;
import jdk.nashorn.internal.parser.JSONParser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -22,11 +18,9 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.persistence.Cacheable;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.TimeUnit;
......@@ -77,13 +71,13 @@ public class SessionServiceImpl implements ISessionService {
sessionStruct.setAttribute("appChannel", String.valueOf(appChannel));
sessionStruct.getValues().setLoginProperties(properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues());
}else{
} else {
sessionStruct = createSessionAndPersist(user, properties);
}
AuthBean authBean = new AuthBean();
authBean.setPhoneNo(user.getPhoneNo());
authBean.setToken(sessionStruct.getSid());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", createdFrom, user.getPhoneNo(), appChannel,channelId);
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", createdFrom, user.getPhoneNo(), appChannel, channelId);
return authBean;
}
......@@ -235,6 +229,7 @@ public class SessionServiceImpl implements ISessionService {
/**
* 获取用户的会话缓存Set的Redis-Key
*
* @param userId - 用户主键
* @return
*/
......
package cn.quantgroup.xyqb.service.sms;
import cn.quantgroup.sms.SmsSender;
import cn.quantgroup.xyqb.Constants;
/**
* 短信发送服务
......@@ -15,10 +14,11 @@ public interface ISmsService {
void sendAfterRegister(String phoneNo);
void sendAfterRegister(String phoneNo,String contentId);
void sendAfterRegister(String phoneNo, String contentId);
/**
* 验证手机号和验证码是否匹配
*
* @param phoneNo 手机号
* @param verificationCode 验证码(短信/语音)
* @return
......@@ -27,6 +27,7 @@ public interface ISmsService {
/**
* 是否需要重新发送短信验证码
*
* @param phoneNo
* @return
*/
......
......@@ -5,8 +5,6 @@ import cn.quantgroup.sms.SmsSender;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.service.sms.ISmsService;
import lombok.Synchronized;
import java.util.Collections;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
......@@ -17,6 +15,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Collections;
/**
* @author mengfan.feng
......@@ -31,7 +31,7 @@ public class SmsServiceImpl implements ISmsService {
private static final int SMS_VERIFICATION_MAXLEN = 4;
private static final String SMS_VERIFY_PREFIX = "sms:verify:";
private static SmsSender smsSender =null;
private static SmsSender smsSender = null;
@Value("${sms.is.debug}")
private Boolean isDebug;
@Autowired
......@@ -41,8 +41,8 @@ public class SmsServiceImpl implements ISmsService {
@Override
@Synchronized
public SmsSender getSmsSender() {
if(null==smsSender){
smsSender=new SmsSender();
if (null == smsSender) {
smsSender = new SmsSender();
}
return smsSender;
}
......@@ -51,6 +51,7 @@ public class SmsServiceImpl implements ISmsService {
/**
* 24-“【信用钱包】么么哒,等您好久了~感谢您注册信用钱包,我们来给您送钱啦,点击提交借款申请,万元现金立即到手 s.xyqb.com/a”
* 1005-“【信用钱包】等您好久了~感谢您的注册,尊享息费5折优惠。登录 s.xyqb.com/a 享更多优惠(合理消费,理性借贷)”
*
* @param phoneNo
*/
@Override
......@@ -119,7 +120,7 @@ public class SmsServiceImpl implements ISmsService {
String verificationCountKey = Constants.REDIS_VERIFICATION_COUNT + phoneNo;
Long getVerificationCount = stringRedisTemplate.opsForHash().increment(verificationCountKey, Constants.REDIS_VERIFICATION_COUNT, 1);
boolean needResend = getVerificationCount >= Constants.VERIFICATION_CODE_FINITE_COUNT;
if(needResend) {
if (needResend) {
String key = Constants.REDIS_PREFIX_VERIFICATION_CODE + phoneNo;
stringRedisTemplate.delete(key);
stringRedisTemplate.opsForHash().delete(verificationCountKey, Constants.REDIS_VERIFICATION_COUNT);
......
......@@ -10,7 +10,6 @@ import java.util.List;
*/
public interface IContactService {
/**
*
* @param userId - 用户主键
* @param trim - 是否清除非法错误记录,true-清除,false-不清除
* @return
......@@ -22,11 +21,13 @@ public interface IContactService {
/**
* 批量保存用户联系人
* 如果已存在联系人,则覆盖更新
*
* @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);
......
......@@ -26,6 +26,7 @@ public interface ILkbUserService {
/**
* 同步用戶信息
*
* @param uuid
* @param phoneNo
* @param name
......
......@@ -3,24 +3,28 @@ package cn.quantgroup.xyqb.service.user;
/**
* IPV4锁机制Service
*
* @author renwc
*/
public interface ILockIpv4Service {
/**
* 向该phoneNo添加错误计数器
*
* @param phoneNo
*/
void countErrorByPhoneNo(String phoneNo);
/**
* 向该ipv4添加错误计数器
*
* @param ip - 目标ip
*/
void countErrorByIpv4(String ip);
/**
* 锁定IPV4
*
* @param ip - 目标ip
* @param count - 错误计数
*/
......@@ -28,12 +32,14 @@ public interface ILockIpv4Service {
/**
* 向该phoneNo添加错误计数器
*
* @param ip - 目标ip
*/
void countSuccessByIpv4(String ip);
/**
* 锁定IPV4
*
* @param ip - 目标ip
* @param count - 错误计数
*/
......
......@@ -29,7 +29,7 @@ public interface IUserDetailService {
List<UserDetail> findByIdnos(List<String> idnos);
Page<UserDetail> getUserDetailsPage(List<Long> userId,List<String> phoneNos,List<String> idNos, int pageNumber, int pageSize,
Page<UserDetail> getUserDetailsPage(List<Long> userId, List<String> phoneNos, List<String> idNos, int pageNumber, int pageSize,
String sortType);
......
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.UserQueryLog;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
......@@ -12,7 +10,7 @@ import java.util.List;
*/
public interface IUserQueryLogService {
List<UserQueryLog> findByTimestamp(Date beginDate, Date endDate,Integer pageId,Integer pageSize);
List<UserQueryLog> findByTimestamp(Date beginDate, Date endDate, Integer pageId, Integer pageSize);
Long findByTimestampCount(Date beginDate, Date endDate);
......
......@@ -30,13 +30,13 @@ public interface IUserService {
List<User> findByPhones(List<String> phones);
List<User> findRegisterUserByTime(String beginTime,String endTime);
List<User> findRegisterUserByTime(String beginTime, String endTime);
/**
* 禁用用户
*
* @param phoneNo 电话号码
*/
int forbiddenUser(Boolean enable,String phoneNo);
int forbiddenUser(Boolean enable, String phoneNo);
}
......@@ -7,5 +7,6 @@ import cn.quantgroup.xyqb.entity.UserAttached;
*/
public interface UserCenterService {
UserAttached searchUserAttachedByUserId(Long userId);
UserAttached saveUserAttached(UserAttached userAttached);
}
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;
......@@ -17,8 +14,6 @@ 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;
......@@ -35,7 +30,7 @@ public class ContactServiceImpl implements IContactService {
@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){
if (trim) {
trim(contacts);
}
return contacts;
......@@ -43,14 +38,15 @@ public class ContactServiceImpl implements IContactService {
/**
* 过滤掉非法联系人记录
*
* @param contacts - 包含待清除记录的联系人列表
*/
private void trim(List<Contact> contacts){
if(CollectionUtils.isEmpty(contacts)){
return ;
private void trim(List<Contact> contacts) {
if (CollectionUtils.isEmpty(contacts)) {
return;
}
Iterator<Contact> iterator = contacts.iterator();
while(iterator.hasNext()){
while (iterator.hasNext()) {
Contact contact = iterator.next();
if (!contact.valid()) {
iterator.remove();
......@@ -68,7 +64,7 @@ public class ContactServiceImpl implements IContactService {
@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){
if (userId == null) {
return null;
}
// 合并当前用户列表到更新列表
......@@ -95,7 +91,7 @@ public class ContactServiceImpl implements IContactService {
if (null != relation) {
contact.setRelation(relation);
}
LOGGER.info("修改前联系人信息:{}",contact);
LOGGER.info("修改前联系人信息:{}", contact);
Timestamp now = new Timestamp(System.currentTimeMillis());
contact.setUpdateAt(now);
contact = save(contact);
......@@ -104,6 +100,7 @@ public class ContactServiceImpl implements IContactService {
/**
* 合并当前用户列表到更新列表
*
* @param userId - 用户主键
* @param contacts - 新联系人列表
*/
......@@ -112,14 +109,14 @@ public class ContactServiceImpl implements IContactService {
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 ++) {
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){
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());
......
......@@ -97,10 +97,10 @@ public class LkbUserviceImpl implements ILkbUserService {
parameters.put("token", token);
parameters.put("userId", uuid);
parameters.put("loginName", phoneNo);
if (StringUtils.isNotBlank(name)){
if (StringUtils.isNotBlank(name)) {
parameters.put("realName", name);
}
if (StringUtils.isNotBlank(idNo)){
if (StringUtils.isNotBlank(idNo)) {
parameters.put("idCardNo", idNo);
}
String response = httpService.post(clientUrl + userPushPath, parameters);
......
......@@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit;
/**
* IPV4锁机制Service实现
*
* @author renwc
*/
@Service
......@@ -51,13 +52,14 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
/**
* 对白名单之外的所有公有、私有IP执行错误计数
*
* @param ipv4
*/
@Override
public void countErrorByIpv4(String ipv4) {
if (ValidationUtil.validateIpv4(ipv4) && !IPUtil.whiteOf(ipv4)) {
String ipv4Key = getErrorIpKey(ipv4);
if(!stringRedisTemplate.hasKey(ipv4Key)){
if (!stringRedisTemplate.hasKey(ipv4Key)) {
// 计数周期1分钟
stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_FAILED_COUNT_MINUTES, TimeUnit.MINUTES);
}
......@@ -68,20 +70,20 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
}
@Override
public void lockErrorIpv4(String ip, long count){
public void lockErrorIpv4(String ip, long count) {
// 每分钟计数阈值
long counts = Constants.IPV4_LOCK_ON_FAILED_COUNTS;
String redisCounts = stringRedisTemplate.opsForValue().get(Constants.IPV4_LOCK_ON_COUNTS_REDIS);
if(StringUtils.isNumeric(redisCounts) && Integer.valueOf(redisCounts) > 0){
if (StringUtils.isNumeric(redisCounts) && Integer.valueOf(redisCounts) > 0) {
counts = Integer.valueOf(redisCounts);
}
if(count < counts){
if (count < counts) {
return;
}
// 锁定时长
long minutes = Constants.IPV4_FAILED_LOCK_MINUTES;
String redisMinutes = stringRedisTemplate.opsForValue().get(Constants.IPV4_LOCK_ON_COUNTS_REDIS);
if(StringUtils.isNumeric(redisMinutes) && Integer.valueOf(redisMinutes) > 0){
if (StringUtils.isNumeric(redisMinutes) && Integer.valueOf(redisMinutes) > 0) {
minutes = Integer.valueOf(redisMinutes);
}
String lockIpv4Key = getLockIpv4Key(ip);
......@@ -91,13 +93,14 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
/**
* 对白名单之外的所有公有、私有IP执行成功计数
*
* @param ipv4
*/
@Override
public void countSuccessByIpv4(String ipv4) {
if (ValidationUtil.validateIpv4(ipv4) && !IPUtil.whiteOf(ipv4)) {
String ipv4Key = getSuccessIpKey(ipv4);
if(!stringRedisTemplate.hasKey(ipv4Key)){
if (!stringRedisTemplate.hasKey(ipv4Key)) {
// 计数周期1分钟
stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_SUCCESS_COUNT_MINUTES, TimeUnit.MINUTES);
}
......@@ -109,9 +112,9 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
}
@Override
public void lockSuccessIpv4(String ip, long count){
public void lockSuccessIpv4(String ip, long count) {
// 每小时计数阈值
if(count < Constants.IPV4_LOCK_ON_SUCCESS_COUNTS){
if (count < Constants.IPV4_LOCK_ON_SUCCESS_COUNTS) {
return;
}
// 锁定时长
......@@ -120,15 +123,15 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
LOGGER.info("Lock_ipv4: locked success ip access:{}, success overstep {} times in {} minutes, do lock {} minutes", ip, Constants.IPV4_LOCK_ON_SUCCESS_COUNTS, Constants.IPV4_SUCCESS_COUNT_MINUTES, Constants.IPV4_SUCCESS_LOCK_MINUTES);
}
private final static String getErrorIpKey(String ipv4){
private final static String getErrorIpKey(String ipv4) {
return Constants.REDIS_PASSWORD_ERROR_COUNT_FOR_IPV4 + ipv4;
}
private final static String getSuccessIpKey(String ipv4){
private final static String getSuccessIpKey(String ipv4) {
return Constants.REDIS_PASSWORD_SUCCESS_COUNT_FOR_IPV4 + ipv4;
}
private final static String getLockIpv4Key(String ipv4){
private final static String getLockIpv4Key(String ipv4) {
return Constants.IPV4_LOCK + ipv4;
}
}
......@@ -22,7 +22,7 @@ public class UserBtRegisterServiceImpl implements IUserBtRegisterService {
@Override
@Cacheable(value = "btRegisterCache", key = "'userId' + #userId", unless = "#result == null", cacheManager = "cacheManager")
public UserBtRegister findByUserId(Long userId) {
if(null != userId) {
if (null != userId) {
return userBtRegisterRepository.findOne((root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
list.add(cb.equal(root.get("isActive").as(Boolean.class), Boolean.TRUE));
......
......@@ -12,17 +12,6 @@ import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.google.common.collect.Maps;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -35,6 +24,17 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* Created by 11 on 2016/12/29.
*/
......@@ -151,15 +151,15 @@ public class UserDetailServiceImpl implements IUserDetailService {
Specification<UserDetail> specification = new Specification<UserDetail>() {
@Override
public Predicate toPredicate(Root<UserDetail> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
if (userId!=null&&userId.size()>0) {
if (userId != null && userId.size() > 0) {
criteriaQuery.where(root.get("userId").in(userId));
list.add(criteriaQuery.getRestriction());
}
if (phoneNo!=null&&phoneNo.size()>0) {
if (phoneNo != null && phoneNo.size() > 0) {
criteriaQuery.where(root.get(Constants.PHONE_NO).in(phoneNo));
list.add(criteriaQuery.getRestriction());
}
if (idNo!=null&&idNo.size()>0) {
if (idNo != null && idNo.size() > 0) {
criteriaQuery.where(root.get("idNo").in(idNo));
list.add(criteriaQuery.getRestriction());
}
......@@ -183,27 +183,27 @@ public class UserDetailServiceImpl implements IUserDetailService {
public Page<UserDetail> getUserDetailsPage(List<Long> userId, List<String> phoneNos, List<String> idNos, int pageNumber, int pageSize,
String sortType) {
PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
Specification<UserDetail> spec = valueInSpecification(userId,phoneNos,idNos);
Specification<UserDetail> spec = valueInSpecification(userId, phoneNos, idNos);
return userDetailRepository.findAll(spec, pageRequest);
}
@Override
public void fixedIdNoAndGender() {
List<UserDetail> details=userDetailRepository.selectUserDetailsBy();
if(!CollectionUtils.isEmpty(details)){
for (UserDetail detail:details){
List<UserDetail> details = userDetailRepository.selectUserDetailsBy();
if (!CollectionUtils.isEmpty(details)) {
for (UserDetail detail : details) {
try {
if(!idCardService.isIdCardValid(detail.getIdNo())){
LOGGER.error("修复用户老数据身份证号错误",detail.getUserId());
if (!idCardService.isIdCardValid(detail.getIdNo())) {
LOGGER.error("修复用户老数据身份证号错误", detail.getUserId());
continue;
}
Gender gender=idCardService.getIdCardInfo(detail.getIdNo()).getGender();
if(null!=gender){
userDetailRepository.updateGender(gender.ordinal(),detail.getUserId());
Gender gender = idCardService.getIdCardInfo(detail.getIdNo()).getGender();
if (null != gender) {
userDetailRepository.updateGender(gender.ordinal(), detail.getUserId());
}
} catch (ParseException e) {
LOGGER.error("修复用户老数据身份证号错误",detail.getUserId());
LOGGER.error("修复用户老数据身份证号错误", detail.getUserId());
continue;
}
}
......
......@@ -6,7 +6,6 @@ import cn.quantgroup.xyqb.service.user.IUserQueryLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
......@@ -20,13 +19,13 @@ public class UserQueryLogServiceImpl implements IUserQueryLogService {
private IUserQueryLogRepository userQueryLogRepository;
@Override
public List<UserQueryLog> findByTimestamp(Date beginDate,Date endDate,Integer pageId,Integer pageSize) {
return userQueryLogRepository.findQueryLogCreatedAt(beginDate,endDate,pageId,pageSize);
public List<UserQueryLog> findByTimestamp(Date beginDate, Date endDate, Integer pageId, Integer pageSize) {
return userQueryLogRepository.findQueryLogCreatedAt(beginDate, endDate, pageId, pageSize);
}
@Override
public Long findByTimestampCount(Date beginDate, Date endDate) {
return userQueryLogRepository.findQueryLogCountCreatedAt(beginDate,endDate);
return userQueryLogRepository.findQueryLogCountCreatedAt(beginDate, endDate);
}
@Override
......
......@@ -2,7 +2,7 @@ package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.repository.*;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Maps;
......@@ -130,7 +130,7 @@ public class UserServiceImpl implements IUserService {
@Override
public List<User> findRegisterUserByTime(String beginTime, String endTime) {
return userRepository.findRegisterUserByTime(beginTime,endTime);
return userRepository.findRegisterUserByTime(beginTime, endTime);
}
@Override
......
......@@ -19,6 +19,7 @@ public interface IWechatService {
/**
* 关联用户和微信
*
* @param userId - 用户标识
* @param phoneNo
* @param openId - 微信标识
......@@ -29,6 +30,7 @@ public interface IWechatService {
/**
* 按userId查微信信息
* 此接口实现处不应加缓存,否则解绑时(在关联用户的事务中)不好清除
*
* @param userId - 用户标识
* @return
*/
......
......@@ -8,17 +8,12 @@ import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.domain.Example;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -124,11 +119,11 @@ public class WechatServiceImpl implements IWechatService {
@Override
@Transactional
public WechatUserInfo saveWechatUserInfo(WechatUserInfo userInfo) {
if(Objects.isNull(userInfo) || Objects.isNull(userInfo.getOpenId())){
if (Objects.isNull(userInfo) || Objects.isNull(userInfo.getOpenId())) {
return null;
}
long count = weChatUserRepository.countByOpenId(userInfo.getOpenId());
if(count > 0){
if (count > 0) {
//注意,这里会抛异常(5000/total),WeChatController中已捕获处理
return weChatUserRepository.findByOpenId(userInfo.getOpenId());
}
......@@ -141,35 +136,35 @@ public class WechatServiceImpl implements IWechatService {
@Override
@Transactional(rollbackFor = Exception.class)
public int relateUser(Long userId, String phoneNo, String openId) {
if(Objects.isNull(userId) || Objects.isNull(openId) || StringUtils.isBlank(openId)){
if (Objects.isNull(userId) || Objects.isNull(openId) || StringUtils.isBlank(openId)) {
log.error("微信关联失败:非法入参:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
return 0;
}
// Old - 当前openId的WechatUserInfo
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenId(openId);
if(Objects.nonNull(wechatUserInfo) && Objects.equals(userId, wechatUserInfo.getUserId()) && Objects.equals(openId, wechatUserInfo.getOpenId())){
if (Objects.nonNull(wechatUserInfo) && Objects.equals(userId, wechatUserInfo.getUserId()) && Objects.equals(openId, wechatUserInfo.getOpenId())) {
log.info("微信关联成功:重复关联:跳过:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
return 1;
}
// 强制解除关联
int dissociate = weChatUserRepository.dissociateUser(openId, userId);
if(dissociate < 1){
if (dissociate < 1) {
log.error("微信关联失败:解绑条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
throw new WechatRelateUserException("微信关联失败");
}
int relate = weChatUserRepository.relateUser(userId, Optional.ofNullable(phoneNo).orElse(""), openId);
if(relate < 1){
if (relate < 1) {
log.error("微信关联失败:绑定条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
throw new WechatRelateUserException("微信关联失败");
}
// Todo : 如果当前openId已关联其他用户,则解绑成功后要注销其登录session -- 考虑后暂时不执行,影响太大
log.info("微信关联成功:[service]:userId:{},phoneNo:{},openId:{},dissociate:{},relate:{},Old-WechatUserInfo:{}", userId, phoneNo, openId,dissociate,relate, wechatUserInfo);
log.info("微信关联成功:[service]:userId:{},phoneNo:{},openId:{},dissociate:{},relate:{},Old-WechatUserInfo:{}", userId, phoneNo, openId, dissociate, relate, wechatUserInfo);
return relate;
}
@Override
public WechatUserInfo findWechatUserInfoByPhoneNo(String phoneNo) {
if(!ValidationUtil.validatePhoneNo(phoneNo)){
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return null;
}
return weChatUserRepository.findByPhoneNo(phoneNo);
......@@ -193,6 +188,7 @@ public class WechatServiceImpl implements IWechatService {
/**
* 按userId查微信信息
* 此处不应加缓存,否则解绑时不好清除
*
* @param userId - 用户标识
* @return
*/
......
......@@ -6,8 +6,6 @@ import cn.quantgroup.xyqb.model.session.SessionValue;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
......@@ -28,20 +26,20 @@ public class XyqbSessionContextHolder {
SessionStruct sessionStruct;
if (threadSession.get() != null) {
sessionStruct = threadSession.get();
}else {
} else {
sessionStruct = getXSessionFromRedis();
threadSession.set(sessionStruct);
}
return sessionStruct;
}
public static SessionStruct getXSessionFromRedis(){
public static SessionStruct getXSessionFromRedis() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader(Constants.X_AUTH_TOKEN);
return getXSessionFromRedis(token);
}
public static SessionStruct getXSessionFromRedis(String token){
public static SessionStruct getXSessionFromRedis(String token) {
if (Objects.isNull(token) || token.length() != 36 || Objects.isNull(redisTemplate)) {
return null;
}
......@@ -60,7 +58,7 @@ public class XyqbSessionContextHolder {
sessionStruct.setSid(token);
sessionStruct.setValues(values);
return sessionStruct;
}catch (Exception e){
} catch (Exception e) {
log.warn("[XyqbSessionContextHolder][getXSessionFromRedis] 序列化SessionValue出错:sid:{},sessionValue:{}", token, result, e);
return null;
}
......
......@@ -34,7 +34,7 @@ public class SimpleCaptcha extends ImageCaptcha {
}
private Boolean validateResponse(String response) {
if(StringUtils.isBlank(this.response) || StringUtils.isBlank(response)){
if (StringUtils.isBlank(this.response) || StringUtils.isBlank(response)) {
return false;
}
return StringUtils.equals(this.response, response);
......
......@@ -4,7 +4,6 @@ import cn.quantgroup.xyqb.Constants;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import sun.misc.BASE64Decoder;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
......@@ -12,6 +11,7 @@ import javax.crypto.spec.SecretKeySpec;
/**
* AES编码器工具
* 使用AES加密解密 AES-128-ECB加密
*
* @version 1.0
*/
@Slf4j
......@@ -34,6 +34,7 @@ public class AESUtil {
/**
* 数据解密,返回字符串
*
* @param data 待解密的数据
* @param key 解密使用的KEY
* @return 解密之后的数据
......@@ -41,7 +42,7 @@ public class AESUtil {
public static String decryptAfterBase64Decode(String data, String key) {
try {
byte[] bytes = decryptAfterBase64DecodeToByte(data, key);
if (bytes != null && bytes.length > 0){
if (bytes != null && bytes.length > 0) {
return new String(bytes, DATA_ENCODING);
}
} catch (Exception e) {
......@@ -52,6 +53,7 @@ public class AESUtil {
/**
* 数据解密,返回字节数据
*
* @param data
* @param key
* @return
......@@ -92,6 +94,7 @@ public class AESUtil {
/**
* 对字节数组加密
*
* @param data
* @param key
* @return
......@@ -111,6 +114,7 @@ public class AESUtil {
/**
* 执行加密和base64编码
*
* @param data
* @param key
* @return
......@@ -125,7 +129,7 @@ public class AESUtil {
return new Base64().encodeToString(encrypted);
}
public static void main(String[] args){
public static void main(String[] args) {
System.out.println(encryptAndBase64Encode("45949139", Constants.AES_KEY));
System.out.println(encryptAndBase64Encode("18611428880", Constants.AES_KEY));
System.out.println(encryptAndBase64Encode("15810672369", Constants.AES_KEY));
......
......@@ -5,7 +5,6 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
/**
......
......@@ -9,6 +9,7 @@ public class DateUtils {
/**
* 计算当前时间到当天 23:59:59.999 时间差,
* 返回时间差(单位秒)
*
* @return
*/
public static long getSeconds() {
......
......@@ -4,6 +4,7 @@ import java.util.regex.Pattern;
/**
* 过滤emoji表情
*
* @author renwc
* @date 2018-02-26
*/
......@@ -30,6 +31,7 @@ public class EmojiUtil {
/**
* 替换所有Emoji表情字符
*
* @param text
* @return
*/
......@@ -40,6 +42,7 @@ public class EmojiUtil {
/**
* 替换所有Emoji表情字符
* 条件:UTF-8编码时4字节的
*
* @param text
* @return
*/
......
......@@ -6,7 +6,9 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
/**
* IP地址工具类
......@@ -17,7 +19,7 @@ import java.util.*;
public class IPUtil {
/**
* IP白名单
*
* <p>
* 192.168.3.0/24 - 公有云测试业务
* 192.168.4.0/24 - 公有云测试业务
* 172.16.0.0/16 - 公有云正式业务
......@@ -27,11 +29,12 @@ public class IPUtil {
*/
private static final Set<String> WHITE_ADDRESS = Sets.newHashSet();
private static final String LOCAL_ADDRESS = "127.0.0.1";
static {
String[] ips = {"172.16.", "172.20.", "172.30.", "172.41.", "192.168.3.", "192.168.4."};
WHITE_ADDRESS.addAll(Arrays.asList(ips));
//系统环境
if(!TechEnvironment.isPro()){
if (!TechEnvironment.isPro()) {
WHITE_ADDRESS.add("192.168.");
WHITE_ADDRESS.add("10.");
WHITE_ADDRESS.add(LOCAL_ADDRESS);
......@@ -40,13 +43,14 @@ public class IPUtil {
/**
* 判断是否为白名单IP
*
* @param ipv4
* @return
*/
public static final boolean whiteOf(String ipv4){
if(ValidationUtil.validateIpv4(ipv4)){
for(String ipField : WHITE_ADDRESS){
if(ipv4.startsWith(ipField)){
public static final boolean whiteOf(String ipv4) {
if (ValidationUtil.validateIpv4(ipv4)) {
for (String ipField : WHITE_ADDRESS) {
if (ipv4.startsWith(ipField)) {
return true;
}
}
......@@ -56,11 +60,12 @@ public class IPUtil {
/**
* 打印IP
*
* @param logger - 日志记录器
* @param request - 真实HttpServletRequest请求
*/
public static final void logIp(Logger logger, HttpServletRequest request) {
if(Objects.isNull(request)){
if (Objects.isNull(request)) {
return;
}
String remoteAddr = request.getRemoteAddr();
......
......@@ -2,6 +2,20 @@ package cn.quantgroup.xyqb.util;
/**
* Created by abe on 2017/6/15.
* <p>
* 身份证前6位【ABCDEF】为行政区划数字代码(简称数字码)说明(参考《GB/T 2260-2007 中华人民共和国行政区划代码》):
* 该数字码的编制原则和结构分析,它采用三层六位层次码结构,按层次分别表示我国各省(自治区,直辖市,特别行政区)、
* 市(地区,自治州,盟)、县(自治县、县级市、旗、自治旗、市辖区、林区、特区)。
* 数字码码位结构从左至右的含义是:
* 第一层为AB两位代码表示省、自治区、直辖市、特别行政区;
* 第二层为CD两位代码表示市、地区、自治州、盟、直辖市所辖市辖区、县汇总码、省(自治区)直辖县级行政区划汇总码,其中:
* ——01~20、51~70表示市,01、02还用于表示直辖市所辖市辖区、县汇总码;
* ——21~50表示地区、自治州、盟;
* ——90表示省(自治区)直辖县级行政区划汇总码。
* 第三层为EF两位表示县、自治县、县级市、旗、自治旗、市辖区、林区、特区,其中:
* ——01~20表示市辖区、地区(自治州、盟)辖县级市、市辖特区以及省(自治区)直辖县级行政区划中的县级市,01通常表示辖区汇总码;
* ——21~80表示县、自治县、旗、自治旗、林区、地区辖特区;
* ——81~99表示省(自治区)辖县级市。
*/
/**
* 身份证前6位【ABCDEF】为行政区划数字代码(简称数字码)说明(参考《GB/T 2260-2007 中华人民共和国行政区划代码》):
......@@ -24,8 +38,6 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
/**
......@@ -38,7 +50,7 @@ import java.util.regex.Pattern;
* :第7、8、9、10位为出生年份(四位数),第11、第12位为出生月份,第13、14位代表出生日期,第17位代表性别,奇数为男,偶数为女。
* </p>
*/
@SuppressWarnings({ "unchecked", "unused", "all" })
@SuppressWarnings({"unchecked", "unused", "all"})
public class IdcardValidator {
/**
......@@ -49,28 +61,28 @@ public class IdcardValidator {
* 51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
* 63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
*/
protected final static String codeAndCity[][] = { { "11", "北京" }, { "12", "天津" },
{ "13", "河北" }, { "14", "山西" }, { "15", "内蒙古" }, { "21", "辽宁" },
{ "22", "吉林" }, { "23", "黑龙江" }, { "31", "上海" }, { "32", "江苏" },
{ "33", "浙江" }, { "34", "安徽" }, { "35", "福建" }, { "36", "江西" },
{ "37", "山东" }, { "41", "河南" }, { "42", "湖北" }, { "43", "湖南" },
{ "44", "广东" }, { "45", "广西" }, { "46", "海南" }, { "50", "重庆" },
{ "51", "四川" }, { "52", "贵州" }, { "53", "云南" }, { "54", "西藏" },
{ "61", "陕西" }, { "62", "甘肃" }, { "63", "青海" }, { "64", "宁夏" },
{ "65", "新疆" }, { "71", "台湾" }, { "81", "香港" }, { "82", "澳门" },
{ "91", "国外" } };
private final static String cityCode[] = { "11", "12", "13", "14", "15", "21", "22",
protected final static String codeAndCity[][] = {{"11", "北京"}, {"12", "天津"},
{"13", "河北"}, {"14", "山西"}, {"15", "内蒙古"}, {"21", "辽宁"},
{"22", "吉林"}, {"23", "黑龙江"}, {"31", "上海"}, {"32", "江苏"},
{"33", "浙江"}, {"34", "安徽"}, {"35", "福建"}, {"36", "江西"},
{"37", "山东"}, {"41", "河南"}, {"42", "湖北"}, {"43", "湖南"},
{"44", "广东"}, {"45", "广西"}, {"46", "海南"}, {"50", "重庆"},
{"51", "四川"}, {"52", "贵州"}, {"53", "云南"}, {"54", "西藏"},
{"61", "陕西"}, {"62", "甘肃"}, {"63", "青海"}, {"64", "宁夏"},
{"65", "新疆"}, {"71", "台湾"}, {"81", "香港"}, {"82", "澳门"},
{"91", "国外"}};
private final static String cityCode[] = {"11", "12", "13", "14", "15", "21", "22",
"23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43",
"44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63",
"64", "65", "71", "81", "82", "91" };
"64", "65", "71", "81", "82", "91"};
// 每位加权因子
private final static int power[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
private final static int power[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 第18位校检码
private final static String verifyCode[] = { "1", "0", "X", "9", "8", "7", "6", "5",
"4", "3", "2" };
private final static String verifyCode[] = {"1", "0", "X", "9", "8", "7", "6", "5",
"4", "3", "2"};
/**
* 验证所有的身份证的合法性
......
......@@ -13,6 +13,7 @@ public class JsonUtil {
/**
* 转换json为对象
*
* @param jsonStr
* @param clazz
* @param <T>
......@@ -29,6 +30,7 @@ public class JsonUtil {
/**
* 将对象转成json字符串
*
* @param object
* @return
*/
......
......@@ -17,9 +17,10 @@ import org.apache.commons.lang.StringUtils;
public class MqUtils {
/**
* 发送用户统计信息
*
* @param vest
*/
public static void sendLoanVest(UserStatistics vest){
public static void sendLoanVest(UserStatistics vest) {
try {
IVestService mqService = ApplicationContextHolder.getBean("loanVestMQService");
mqService.send(vest);
......@@ -31,9 +32,10 @@ public class MqUtils {
/**
* 用户注册消息进行广播
*
* @param message
*/
private static void sendRegisterMessage(UserRegisterMqMessage message){
private static void sendRegisterMessage(UserRegisterMqMessage message) {
try {
IRegisterMqService rService = ApplicationContextHolder.getBean("registerMqService");
rService.send(message);
......@@ -43,24 +45,25 @@ public class MqUtils {
}
}
public static UserRet sendRegisterMessage(Long registeredFrom,String demension, User user) {
public static UserRet sendRegisterMessage(Long registeredFrom, String demension, User user) {
UserRet userRet;
UserStatistics statistics=new UserStatistics(user,demension,2,registeredFrom);
UserStatistics statistics = new UserStatistics(user, demension, 2, registeredFrom);
MqUtils.sendLoanVest(statistics);
userRet = new UserRet(user);
//增加用户注册广播
UserRegisterMqMessage registerMqMessage=new UserRegisterMqMessage(user);
UserRegisterMqMessage registerMqMessage = new UserRegisterMqMessage(user);
MqUtils.sendRegisterMessage(registerMqMessage);
return userRet;
}
/**
* 腾讯广点通转化的用户注册消息推送
*
* @param phoneNo - 转化成功的用户手机号
* @param clickId - 转化成功的点击动作唯一标识
*/
public static void sendRegisterMessageForGdt(String phoneNo, String clickId){
if(ValidationUtil.validatePhoneNo(phoneNo) && StringUtils.isNotBlank(clickId)){
public static void sendRegisterMessageForGdt(String phoneNo, String clickId) {
if (ValidationUtil.validatePhoneNo(phoneNo) && StringUtils.isNotBlank(clickId)) {
//填充广点通消息
JSONObject message = new JSONObject();
message.put("phoneNo", phoneNo);
......
......@@ -42,6 +42,7 @@ public class PasswordUtil {
/**
* 生成随机密码
*
* @param pwdLen 密码长度,必须大于0
* @return
*/
......
......@@ -32,21 +32,21 @@ public class Utils {
return builder.toString();
}
public static String coverPhone(String str){
if(str.length()<=0)
public static String coverPhone(String str) {
if (str.length() <= 0)
return "";
if(str.length()>1024) //长度超过1024的字符串不走正则匹配过滤手机号
if (str.length() > 1024) //长度超过1024的字符串不走正则匹配过滤手机号
return "";
Matcher matcher = pattern.matcher(str);
Map<String,String> replaceMap = new HashMap<>();
Map<String, String> replaceMap = new HashMap<>();
while (matcher.find()) {
String group = matcher.group();
String replace = group.substring(0,3).concat("****").concat(group.substring(7)).concat(" [".concat(PasswordUtil.MD5(group)).concat("]"));
replaceMap.put(group,replace);
String replace = group.substring(0, 3).concat("****").concat(group.substring(7)).concat(" [".concat(PasswordUtil.MD5(group)).concat("]"));
replaceMap.put(group, replace);
}
Set<Map.Entry<String, String>> entries = replaceMap.entrySet();
for (Map.Entry<String, String> entry :entries){
str = str.replaceAll(entry.getKey(),entry.getValue());
for (Map.Entry<String, String> entry : entries) {
str = str.replaceAll(entry.getKey(), entry.getValue());
}
return str;
}
......
......@@ -33,6 +33,7 @@ public class ValidationUtil {
/**
* 是否是合法的中国大陆手机号
*
* @param phoneNo
* @return
*/
......@@ -47,6 +48,7 @@ public class ValidationUtil {
/**
* 是否是合法的中文姓名
*
* @param chinese
* @return
*/
......@@ -55,10 +57,10 @@ public class ValidationUtil {
return false;
}
boolean valid = chinesePattern.matcher(chinese).find();
if(!valid){
if (!valid) {
StringBuilder uniCodeTemp = new StringBuilder();
for(int i=0;i<chinese.length();i++){
uniCodeTemp.append("\\u").append(Integer.toHexString((int)chinese.charAt(i)));
for (int i = 0; i < chinese.length(); i++) {
uniCodeTemp.append("\\u").append(Integer.toHexString((int) chinese.charAt(i)));
}
log.info("[ValidationUtil][validateChinese]:[chinese][unicode][length]:[{}][{}][{}]", chinese, chinese.length(), uniCodeTemp);
}
......@@ -69,6 +71,7 @@ public class ValidationUtil {
/**
* 是否是合法的IPV4地址
*
* @param ipv4
* @return
*/
......@@ -82,6 +85,7 @@ public class ValidationUtil {
/**
* 是否是合法的私有IPV4地址
*
* @param localIpv4
* @return
*/
......@@ -95,6 +99,7 @@ public class ValidationUtil {
/**
* 是否是合法的用户中心token
*
* @param token
* @return
*/
......@@ -109,6 +114,7 @@ public class ValidationUtil {
/**
* 验证密令
* 私钥 + 操作 + 时
*
* @param key - Md5密令
* @param lock - true or false
* @return
......@@ -120,6 +126,7 @@ public class ValidationUtil {
/**
* 计算密令
* 私钥 + 操作 + 时
*
* @param lock - true or false
* @return 加密后的Md5
*/
......
......@@ -8,7 +8,7 @@ public class Base64 {
/**
* Chunk size per RFC 2045 section 6.8.
*
* <p>
* <p>The {@value} character limit does not count the trailing CRLF, but counts
* all other characters, including any equal signs.</p>
*
......@@ -395,10 +395,10 @@ public class Base64 {
for (int i = 0; i < data.length; i++) {
switch (data[i]) {
case (byte) ' ' :
case (byte) '\n' :
case (byte) '\r' :
case (byte) '\t' :
case (byte) ' ':
case (byte) '\n':
case (byte) '\r':
case (byte) '\t':
break;
default:
groomedData[bytesCopied++] = data[i];
......
......@@ -9,7 +9,6 @@ import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class RSA {
/**
......@@ -20,12 +19,14 @@ public class RSA {
public static final String CHAR_ENCODING = "UTF-8";
public static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding";
/** *//**
/** */
/**
* RSA最大加密明文大小
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
/** *//**
/** */
/**
* RSA最大解密密文大小
*/
private static final int MAX_DECRYPT_BLOCK = 128;
......
......@@ -4,17 +4,11 @@ import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.LoggerContextVO;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.Utils;
import org.apache.commons.codec.digest.Md5Crypt;
import org.slf4j.Marker;
import java.util.Map;
/**
* Created by ocean on 2017/5/4.
*/
......@@ -24,27 +18,32 @@ public class WithOutPhoneLoggingEvent implements ILoggingEvent {
transient String withOutPhoneFormattedMessage;
public WithOutPhoneLoggingEvent(ILoggingEvent event){
public WithOutPhoneLoggingEvent(ILoggingEvent event) {
this.event = event;
}
@Override public String getThreadName() {
@Override
public String getThreadName() {
return this.event.getThreadName();
}
@Override public Level getLevel() {
@Override
public Level getLevel() {
return this.event.getLevel();
}
@Override public String getMessage() {
@Override
public String getMessage() {
return this.event.getMessage();
}
@Override public Object[] getArgumentArray() {
@Override
public Object[] getArgumentArray() {
return this.event.getArgumentArray();
}
@Override public String getFormattedMessage() {
@Override
public String getFormattedMessage() {
if (withOutPhoneFormattedMessage != null) {
return withOutPhoneFormattedMessage;
}
......@@ -53,43 +52,53 @@ public class WithOutPhoneLoggingEvent implements ILoggingEvent {
return withOutPhoneFormattedMessage;
}
@Override public String getLoggerName() {
@Override
public String getLoggerName() {
return this.event.getLoggerName();
}
@Override public LoggerContextVO getLoggerContextVO() {
@Override
public LoggerContextVO getLoggerContextVO() {
return this.event.getLoggerContextVO();
}
@Override public IThrowableProxy getThrowableProxy() {
@Override
public IThrowableProxy getThrowableProxy() {
return this.event.getThrowableProxy();
}
@Override public StackTraceElement[] getCallerData() {
@Override
public StackTraceElement[] getCallerData() {
return this.event.getCallerData();
}
@Override public boolean hasCallerData() {
@Override
public boolean hasCallerData() {
return this.event.hasCallerData();
}
@Override public Marker getMarker() {
@Override
public Marker getMarker() {
return this.event.getMarker();
}
@Override public Map<String, String> getMDCPropertyMap() {
@Override
public Map<String, String> getMDCPropertyMap() {
return this.event.getMDCPropertyMap();
}
@Override public Map<String, String> getMdc() {
@Override
public Map<String, String> getMdc() {
return this.event.getMdc();
}
@Override public long getTimeStamp() {
@Override
public long getTimeStamp() {
return this.event.getTimeStamp();
}
@Override public void prepareForDeferredProcessing() {
@Override
public void prepareForDeferredProcessing() {
this.getFormattedMessage();
this.getThreadName();
// fixes http://jira.qos.ch/browse/LBCLASSIC-104
......
......@@ -10,8 +10,8 @@ public class WithOutPhoneRollingFileAppender<E> extends RollingFileAppender<E> {
@Override
public void doAppend(E eventObject) {
if(eventObject instanceof ILoggingEvent){
eventObject = (E)new WithOutPhoneLoggingEvent((ILoggingEvent)eventObject);
if (eventObject instanceof ILoggingEvent) {
eventObject = (E) new WithOutPhoneLoggingEvent((ILoggingEvent) eventObject);
}
super.doAppend(eventObject);
}
......
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