Commit 84c878ed authored by 技术部-任文超's avatar 技术部-任文超

Merge branch 'master' into 20180525-innerApi-update

# Conflicts:
#	src/main/java/cn/quantgroup/xyqb/controller/external/user/center/UserCenterController.java
parents dc0195dd 8c69aa89
......@@ -86,6 +86,16 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
......
package cn.quantgroup.xyqb;
import cn.quantgroup.tech.db.EnableDynamicDataSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......@@ -20,6 +21,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
@EnableAsync
@EnableAspectJAutoProxy
@SpringBootApplication
@EnableDynamicDataSource
public class Bootstrap {
public static void main(String[] args) {
......
package cn.quantgroup.xyqb.aspect.logcaller;
import cn.quantgroup.xyqb.util.IPUtil;
import com.google.common.base.Stopwatch;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
......@@ -14,7 +15,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* 调用者记录
......@@ -34,17 +35,23 @@ public class LogCallHttpAspect {
@Around("logHttpCaller()")
public Object record(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed();
Stopwatch stopwatch = Stopwatch.createStarted();
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (Objects.nonNull(attrs)) {
try {
HttpServletRequest request = attrs.getRequest();
String remoteIP = IPUtil.getRemoteIP(request);
Object[] args = pjp.getArgs();
LOGGER.info("http api is called,from IP:[{}],args:[{}]", remoteIP, args);
} catch (Exception e) {
LOGGER.error("打印http请求日志出错", e);
}
HttpServletRequest request = attrs.getRequest();
String remoteIP = IPUtil.getRemoteIP(request);
Object[] args = pjp.getArgs();
boolean hasException = false;
Object result;
try {
result = pjp.proceed();
} catch (Throwable e) {
hasException = true;
throw e;
} finally {
Stopwatch stop = stopwatch.stop();
long elapsed = stop.elapsed(TimeUnit.MILLISECONDS);
LOGGER.info("[httpRequestLog],url:[{}],remoteIP:[{}],args:[{}],duration:[{}],exception:[{}]",
request.getRequestURL(), remoteIP, args, elapsed, hasException);
}
return result;
}
......
......@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
......@@ -54,28 +55,13 @@ public class JpaConfig {
properties.put("hibernate.jdbc.batch_size", 30);
properties.put("hibernate.order_inserts", true);
properties.put("hibernate.order_updates", true);
entityManager.setJpaProperties(properties);
entityManager.setJpaVendorAdapter(jpaVendorAdapter());
entityManager.afterPropertiesSet();
return entityManager.getObject();
}
@Bean(name = "dataSource")
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(xyqbJdbcUrl);
config.setPassword(password);
config.setUsername(user);
config.setMaximumPoolSize(maxPoolSize);
config.setMinimumIdle(20);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
return new HikariDataSource(config);
}
private JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false);
......
......@@ -134,7 +134,7 @@ public class HttpConfig {
connectionManager.setDefaultMaxPerRoute(2000);
// retry handler
HttpRequestRetryHandler retryHandler = new StandardHttpRequestRetryHandler(3, false);
HttpRequestRetryHandler retryHandler = new StandardHttpRequestRetryHandler();
// keep alive strategy
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
......
......@@ -4,6 +4,8 @@ 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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -28,6 +30,7 @@ import java.util.UUID;
*/
@RestController
@RequestMapping("/api")
@Api(value = "/api", description = "叫Api, 实际上是图形验证码. 你说神奇不神奇...")
public class ImageCaptchaController {
private static final String IMAGE_FORMAT_PNG = "png";
......@@ -42,6 +45,7 @@ public class ImageCaptchaController {
* 默认匹配 GET /captcha, 提供4位数字和字母混合图片验证码
*/
@RequestMapping(value = "/captcha")
@ApiOperation(value = "获取验证码", notes = "获取图形验证码接口, 会返回一个base64的图形验证码", httpMethod = "GET")
public JsonResult fetchCaptcha(HttpServletRequest request) {
String imageId = UUID.randomUUID().toString();
BufferedImage challenge = imageCaptchaService.getImageChallengeForID(Constants.IMAGE_CAPTCHA_KEY + imageId, request.getLocale());
......@@ -67,6 +71,7 @@ public class ImageCaptchaController {
*/
@CaptchaValidator
@RequestMapping("/verification_image_code")
@ApiOperation(value = "验证图形验证码", notes = "验证图形验证码", httpMethod = "POST")
public JsonResult verificationImageCode() {
return JsonResult.buildSuccessResult("", null);
}
......
......@@ -8,6 +8,7 @@ import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
......@@ -38,6 +39,7 @@ public class NewCaptchaController {
@RequestMapping(value = "/captcha/new")
@ApiOperation(value = "获取新图形验证码", notes = "获取新图形验证码", httpMethod = "POST")
public JsonResult getCaptcha(String phoneNo, String clientType, HttpServletRequest request) {
String remoteIp = IPUtil.getRemoteIP(request);
log.info("获取验证码, phoneNo:{}, clientType:{}, ip:{}, verifyType-qg:{}", phoneNo, clientType, remoteIp, geetestClose);
......
......@@ -16,6 +16,7 @@ import cn.quantgroup.xyqb.util.ValidationUtil;
import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.util.encrypt.RSA;
import com.google.gson.*;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.hssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -65,6 +66,7 @@ public class UserQueryLogController {
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")
@ApiOperation(value = "给运营系统提供的查询查询记录的", notes = "给运营系统提供的查询查询记录的", httpMethod = "POST")
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);
......@@ -124,6 +126,7 @@ public class UserQueryLogController {
}
@RequestMapping("/queryUserInfo")
@ApiOperation(value = "给运营系统提供的查询用户信息的接口", notes = "给运营系统提供的查询用户信息的接口", httpMethod = "POST")
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);
......@@ -331,6 +334,7 @@ public class UserQueryLogController {
}
@RequestMapping("/exportUserInfo")
@ApiOperation(value = "给运营系统提供的导出用户信息的接口", notes = "给运营系统提供的导出用户信息的接口", httpMethod = "POST")
public JsonResult exportExcel(final HttpServletResponse response, HttpServletRequest request, String key, String keyValues, String columns) {
......
......@@ -14,6 +14,7 @@ import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -60,9 +61,9 @@ public class AppController implements IBaseController {
* @param request
* @return Token和phoneNo
*/
@IpValidator
@RequestMapping("/login")
@ApiOperation(value = "App登陆", notes = "App登陆", httpMethod = "POST")
public JsonResult login(
String phoneNo,
String idNo, String name, String key,
......@@ -74,7 +75,6 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
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);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
......@@ -121,6 +121,7 @@ public class AppController implements IBaseController {
@IpValidator
@RequestMapping("/login_super")
@ApiOperation(value = "免密登陆, 新手机号还自动注册", notes = "免密登陆, 新手机号还自动注册", httpMethod = "POST")
public JsonResult loginSuper(
String phoneNo,
String idNo, String name, String key,
......@@ -162,10 +163,10 @@ public class AppController implements IBaseController {
context.setAppChannel(appChannel);
loginInfo.setLoginContext(context);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel, channelId);
/*
* 部分免密渠道登录统计,用户中心不需识别,由统计平台来过滤
* 贷款导航(84660);壹账通H5(159384)
*/
/*
* 部分免密渠道登录统计,用户中心不需识别,由统计平台来过滤
* 贷款导航(84660);壹账通H5(159384)
*/
user.setRegisteredFrom(registerFrom);
UserStatistics statistics = new UserStatistics(user, null, 4, channelId);
//增加登陆统计发送
......@@ -188,6 +189,7 @@ public class AppController implements IBaseController {
@IpValidator
@RequestMapping("/login2")
@ApiOperation(value = "免密登陆, 新手机号不自动注册", notes = "免密登陆, 新手机号不自动注册", httpMethod = "POST")
public JsonResult login2(
String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom,
......
......@@ -32,32 +32,11 @@ public class UserApiController {
@Resource
private IUserService userService;
@Resource
private IUserApiService userApiService;
@Resource
private ISessionService sessionService;
@Resource
@Qualifier("stringRedisTemplate")
private RedisTemplate<String, String> stringRedisTemplate;
@RequestMapping("/user/check")
public JsonResult userImportCheck(String phoneNo, String registerFrom) {
if ("244".equals(registerFrom)) {
log.info("[user_import_check]用户导入检查拒绝。phoneNo=[{}], registerFrom=[{}]", phoneNo, registerFrom);
return JsonResult.buildErrorStateResult("用户导入检查拒绝", false);
}
if (StringUtils.isEmpty(phoneNo) || StringUtils.isEmpty(registerFrom)) {
log.error("[user_import_check]检查传入的参数,参数不全。phoneNo=[{}], registerFrom=[{}]", phoneNo, registerFrom);
return JsonResult.buildErrorStateResult("检查传入的参数,参数不全。", null);
}
boolean checkPassed = userApiService.userImportCheck(phoneNo);
if (checkPassed) {
log.info("[user_import_check]用户可以导入。phoneNo=[{}], registerFrom=[{}]", phoneNo, registerFrom);
return JsonResult.buildSuccessResult("用户可以导入", checkPassed);
}
log.info("[user_import_check]用户导入检查拒绝。phoneNo=[{}], registerFrom=[{}]", phoneNo, registerFrom);
return JsonResult.buildErrorStateResult("用户导入检查拒绝", checkPassed);
}
@RequestMapping("/user/is_passwd_set")
public JsonResult isPasswordSet(String key, String phoneNo) {
if (!"abc1234".equals(key) || StringUtils.isEmpty(phoneNo)) {
......
......@@ -12,6 +12,7 @@ import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.util.EmojiUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
......@@ -56,6 +57,7 @@ public class UserCenterController {
*/
@PasswordFreeAccessValidator
@RequestMapping("/index")
@ApiOperation(value = "用户中心首页", notes = "用户中心首页显示头像, 昵称, 姓名", httpMethod = "POST")
public JsonResult userCenterIndex(String phoneNo) {
Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) {
......@@ -83,6 +85,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/queryNick")
@ApiOperation(value = "查询昵称", notes = "查询用户昵称", httpMethod = "POST")
public JsonResult queryUserNick(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
......@@ -108,6 +111,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/saveNick")
@ApiOperation(value = "保存昵称", notes = "保存用户昵称", httpMethod = "POST")
public JsonResult saveUserNick(String phoneNo, String nick) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
......@@ -133,6 +137,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/save/avatar")
@ApiOperation(value = "保存头像", notes = "保存用户头像", httpMethod = "POST")
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) {
if (StringUtils.isBlank(avatarUrl) || StringUtils.isBlank(phoneNo)) {
LOGGER.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
......@@ -160,6 +165,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/query/verified")
@ApiOperation(value = "查询用户是否实名认证", notes = "查询用户是否实名认证", httpMethod = "POST")
public JsonResult queryVerified(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
......@@ -185,6 +191,7 @@ public class UserCenterController {
*/
@PasswordFreeAccessValidator
@RequestMapping("/personalData")
@ApiOperation(value = "查询个人资料信息", notes = "查询个人资料信息", httpMethod = "POST")
public JsonResult personalData(String phoneNo) {
if (StringUtils.isBlank(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
......@@ -226,6 +233,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/contacts/save")
@ApiOperation(value = "保存用户联系人", notes = "保存用户联系人", httpMethod = "POST")
public JsonResult saveUserContact(String phoneNo, String contactJson) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("保存联系人,参数错误. phoneNo:{}", phoneNo);
......@@ -267,6 +275,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/address/save")
@ApiOperation(value = "保存用户地址", notes = "保存用户地址", httpMethod = "POST")
public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address,
Long districtCode, String district) {
LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address);
......@@ -311,6 +320,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/searchAddress/phoneNo")
@ApiOperation(value = "查询用户地址", notes = "查询用户地址", httpMethod = "POST")
public JsonResult searchUserAddress(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
......@@ -331,6 +341,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/searchContacts/phoneNo")
@ApiOperation(value = "查询用户联系人", notes = "查询用户联系人", httpMethod = "POST")
public JsonResult searchUserContacts(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
......@@ -354,6 +365,7 @@ public class UserCenterController {
* @return
*/
@RequestMapping("/save/userExtInfo")
@ApiOperation(value = "保存用户经济学历等信息", notes = "保存用户经济学历等信息", httpMethod = "POST")
public JsonResult saveUserExtInfo(String phoneNo, EducationEnum educationEnum, MaritalStatus maritalStatus, IncomeRangeEnum incomeRangeEnum, OccupationEnum occupationEnum) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
......
......@@ -78,13 +78,6 @@ public class UserController implements IBaseController {
@Autowired
private IUserRegisterService userRegisterService;
@RequestMapping("/test")
public JsonResult test() {
HttpServletRequest request = getRequest();
IPUtil.logIp(log, request);
return JsonResult.buildSuccessResult("", getCurrentUserFromRedis());
}
/**
* 登录(账号 + 密码)
* 密码错误达到限定次数时执行图形验证码校验
......@@ -190,7 +183,7 @@ public class UserController implements IBaseController {
verifyPhoneAndCode(phoneNo, verificationCode);
User user = userService.findByPhoneWithCache(phoneNo);
if (user != null && !user.getEnable()) {
log.error("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
log.info("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("登录失败", null);
}
if (user == null) {
......
......@@ -23,10 +23,6 @@ public enum MaritalStatus {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
String sb = "MaritalStatus{" + "description='" + description + '\'' +
......
package cn.quantgroup.xyqb.exception;
/**
* Created by Miraculous on 15/7/29.
*/
public class ResubmissionException extends RuntimeException {
private static final long serialVersionUID = -1L;
public ResubmissionException() {
super("不能重复提交表单");
}
}
......@@ -18,10 +18,6 @@ public enum Gender {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
......
......@@ -26,10 +26,6 @@ public enum IdType {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
......
......@@ -79,14 +79,4 @@ public enum SmsMerchant {
}
return merchant;
}
/*
public static void main(String[] args){
String name = "FLYING_cow_TO_BORROW";
name = null;
name = Optional.ofNullable(name).orElse("");
System.out.println(SmsMerchant.of(name.toUpperCase()));
System.out.println(SmsMerchant.valueOf(name.toUpperCase()));
}
*/
}
......@@ -9,8 +9,6 @@ import java.util.Optional;
*/
public interface IUserApiService {
boolean userImportCheck(String phoneNo);
/**
* 根据uuid查询用户完整信息
*
......
......@@ -3,9 +3,7 @@ package cn.quantgroup.xyqb.service.api.impl;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserFullInfo;
import cn.quantgroup.xyqb.model.model.BlacklistMatchResult;
import cn.quantgroup.xyqb.service.api.IUserApiService;
import cn.quantgroup.xyqb.service.model.IModelService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -19,29 +17,11 @@ import java.util.Optional;
@Service
public class UserApiServiceImpl implements IUserApiService {
@Autowired
private IModelService modelService;
@Autowired
private IUserService userService;
@Autowired
private IUserDetailService userDetailService;
@Override
public boolean userImportCheck(String phoneNo) {
User user = userService.findByPhoneWithCache(phoneNo);
if (user != null) {
return false;
}
BlacklistMatchResult blacklistMatchResult = modelService.getBlacklistMatchResult(phoneNo);
if (blacklistMatchResult == null) {
return true;
}
return !blacklistMatchResult.getFlag();
}
@Override
public Optional<UserFullInfo> getUserFullInfoByUuid(String uuid) {
User user = userService.findByUuidWithCache(uuid);
......
package cn.quantgroup.xyqb.service.model;
import cn.quantgroup.xyqb.model.model.BlacklistMatchResult;
/**
* Created by FrankChow on 15/12/16.
*/
public interface IModelService {
/**
* 验证用户是否在黑名单里
*
* @param phoneNo
* @return
*/
BlacklistMatchResult getBlacklistMatchResult(String phoneNo);
}
package cn.quantgroup.xyqb.service.model.impl;
import cn.quantgroup.xyqb.model.model.BlacklistMatchResult;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.model.IModelService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* Created by FrankChow on 15/12/16.
*/
@Service
public class ModelServiceImpl implements IModelService {
private static final String BLACKLIST_URL_PATTERN =
"%s/Model/openapi/checkBlack.json?appId=0001&userId=0001_001&timeunit=%s&token=%s&phone=%s";
String TOKEN_PATTERN = "timeunit=%sappkey=wer123!@";
@Value("${model.quantgroup.url}")
private String modelUrlPrefix;
@Autowired
private IHttpService httpService;
@Override
public BlacklistMatchResult getBlacklistMatchResult(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
return null;
}
String url = buildBlacklistMatchUrl(phoneNo);
String result = httpService.get(url);
try {
return JSONObject.parseObject(result, BlacklistMatchResult.class);
} catch (Exception e) {
return null;
}
}
private String buildBlacklistMatchUrl(String phoneNo) {
Long timeUnit = System.currentTimeMillis();
String token = PasswordUtil.MD5(String.format(TOKEN_PATTERN, String.valueOf(timeUnit)));
String url = String.format(BLACKLIST_URL_PATTERN, modelUrlPrefix, timeUnit, token, phoneNo);
return url;
}
}
......@@ -78,7 +78,7 @@ public class SmsServiceImpl implements ISmsService {
getSmsSender().sendMsg(msgParams);
log.info("注册完成,发送短信, phoneNo:{}", phoneNo);
} catch (Exception e) {
e.printStackTrace();
log.error("注册完成短信发送异常", e);
}
}
......
......@@ -6,23 +6,6 @@ package cn.quantgroup.xyqb.service.user;
*/
public interface ILkbUserService {
/**
* App用户注册
*
* @param phoneNo
* @param password
* @return
*/
String registerApp(String phoneNo, String password);
/**
* 同步用户信息
*
* @param uuid
* @param name
* @param idNo
*/
void userUpdate(String uuid, String name, String idNo);
/**
* 同步用戶信息
......
......@@ -42,4 +42,6 @@ public interface IUserDetailService {
* @return 受影响的行数
*/
int updateIdCard(String name, String idNo, String phoneNo);
List<UserDetail> findByPhones(List<String> phoneNos);
}
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserInfo;
import java.util.List;
import java.util.Map;
......@@ -39,4 +40,6 @@ public interface IUserService {
*/
int forbiddenUser(Boolean enable, String phoneNo);
List<UserInfo> findUserInfosByPhones(List<String> phones);
}
......@@ -5,8 +5,6 @@ import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.util.JsonUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -14,7 +12,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.Map;
......@@ -39,54 +36,6 @@ public class LkbUserviceImpl implements ILkbUserService {
@Value("${lkb.client.url}")
private String clientUrl;
@Value("${lkb.client.user.register.app}")
private String registerApp;
@Value("${lkb.client.user.update}")
private String userUpdate;
@Value("${lkb.client.user.push}")
private String userPushPath;
@Override
public String registerApp(String phoneNo, String password) {
String timeunit = System.currentTimeMillis() + "";
String token = PasswordUtil.MD5(String.format(TOKEN_PATTERN, timeunit));
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("appId", Constants.Channel.LKB_CODE)
.put("timeunit", timeunit)
.put("token", token)
.put("userName", phoneNo)
.put("password", password)
.build();
String response = httpService.get(clientUrl + registerApp, parameters);
Map<String, String> result = JSONObject.parseObject(response, Map.class);
if (result == null || "0".equals(result.get("flag"))) {
LOGGER.warn("向LKB注册用户失败, phoneNo:{}, password:{}", phoneNo, password);
return "";
}
return result.get("uid");
}
@Override
@Async
public void userUpdate(String uuid, String name, String idNo) {
Map<String, String> parameters = ImmutableMap.<String, String>builder()
.put("userId", uuid)
.put("realName", name)
.put("idcard", idNo)
.build();
String response = httpService.get(clientUrl + userUpdate, parameters);
//Map<String, String> result = GSON.fromJson(response, Map.class);
Map<String, String> result = JSONObject.parseObject(response, Map.class);
if (result == null || "false".equals(result.get("flag"))) {
LOGGER.warn("向LKB-Client同步用户信息失败, result: {}", result);
}
}
@Override
public boolean pushUser(String uuid, String phoneNo, String name, String idNo) {
String timeunit = System.currentTimeMillis() + "";
......@@ -103,7 +52,7 @@ public class LkbUserviceImpl implements ILkbUserService {
if (StringUtils.isNotBlank(idNo)) {
parameters.put("idCardNo", idNo);
}
String response = httpService.post(clientUrl + userPushPath, parameters);
String response = httpService.post(clientUrl + "/user/push.json", parameters);
Optional<Map> resultOptional = JsonUtil.fromJson(response, Map.class);
if (!resultOptional.isPresent() || !"0000".equals(resultOptional.get().get("code"))) {
LOGGER.error("[lkb_user_push]向LKB同步用户失败,phoneNo:{},response={}", phoneNo, response);
......
......@@ -64,7 +64,7 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_FAILED_COUNT_MINUTES, TimeUnit.MINUTES);
}
Long count = stringRedisTemplate.opsForValue().increment(ipv4Key, 1L);
LOGGER.info("Lock_ipv4: count error ip access: ip={}, count={}", ipv4, count);
LOGGER.info("Lock_ipv4: count deny ip access: ip={}, count={}", ipv4, count);
lockErrorIpv4(ipv4, count);
}
}
......
......@@ -197,4 +197,13 @@ public class UserDetailServiceImpl implements IUserDetailService {
}
return 0;
}
@Override
public List<UserDetail> findByPhones(List<String> phoneNos) {
List<UserDetail> userDetails = userDetailRepository.findAll((root, query, cb) -> {
query.where(root.get("phoneNo").as(String.class).in(phoneNos));
return query.getRestriction();
});
return userDetails;
}
}
......@@ -2,9 +2,13 @@ package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
......@@ -16,6 +20,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -31,6 +36,9 @@ public class UserServiceImpl implements IUserService {
RedisTemplate<String, String> stringRedisTemplate;
@Autowired
private IUserRepository userRepository;
@Autowired
private IUserDetailService userDetailService;
@Override
@Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
......@@ -137,4 +145,34 @@ public class UserServiceImpl implements IUserService {
return userRepository.forbiddenUser(enable, phoneNo);
}
@Override
public List<UserInfo> findUserInfosByPhones(List<String> phones) {
List<User> users = findByPhones(phones);
if(CollectionUtils.isEmpty(phones)){
return Collections.emptyList();
}
List<UserDetail> userDetails= userDetailService.findByPhones(phones);
if (!CollectionUtils.isEmpty(users)) {
Map<Long, User> userMap = Maps.newHashMapWithExpectedSize(users.size());
users.forEach(user -> {
userMap.put(user.getId(), user);
});
if (!CollectionUtils.isEmpty(userDetails)) {
List<UserInfo> userInfos = Lists.newArrayListWithExpectedSize(userDetails.size());
userDetails.forEach(userDetail -> {
UserInfo userInfo = new UserInfo(userMap.get(userDetail.getUserId()), userDetail);
userInfos.add(userInfo);
});
return userInfos;
}
}
return Collections.emptyList();
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<springProperty name="spring.application.name" source="spring.application.name"/>
<property name="LOG_LEVEL_PATTERN" value="%5p [${spring.application.name:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]"/>
<property name="LOG_LEVEL_PATTERN" value="%5p [${spring.application.name:-}-%X{X-B3-TraceId:-}-%X{X-B3-SpanId:-}-%X{X-Span-Export:-}]"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] [%file:%line] %logger - %msg%n}"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
......
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