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 @@ ...@@ -86,6 +86,16 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <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>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
......
package cn.quantgroup.xyqb; package cn.quantgroup.xyqb;
import cn.quantgroup.tech.db.EnableDynamicDataSource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
...@@ -20,6 +21,7 @@ import org.springframework.scheduling.annotation.EnableAsync; ...@@ -20,6 +21,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
@EnableAsync @EnableAsync
@EnableAspectJAutoProxy @EnableAspectJAutoProxy
@SpringBootApplication @SpringBootApplication
@EnableDynamicDataSource
public class Bootstrap { public class Bootstrap {
public static void main(String[] args) { public static void main(String[] args) {
......
package cn.quantgroup.xyqb.aspect.logcaller; package cn.quantgroup.xyqb.aspect.logcaller;
import cn.quantgroup.xyqb.util.IPUtil; import cn.quantgroup.xyqb.util.IPUtil;
import com.google.common.base.Stopwatch;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
...@@ -14,7 +15,7 @@ import org.springframework.web.context.request.RequestContextHolder; ...@@ -14,7 +15,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Objects; import java.util.concurrent.TimeUnit;
/** /**
* 调用者记录 * 调用者记录
...@@ -34,17 +35,23 @@ public class LogCallHttpAspect { ...@@ -34,17 +35,23 @@ public class LogCallHttpAspect {
@Around("logHttpCaller()") @Around("logHttpCaller()")
public Object record(ProceedingJoinPoint pjp) throws Throwable { public Object record(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed(); Stopwatch stopwatch = Stopwatch.createStarted();
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (Objects.nonNull(attrs)) { HttpServletRequest request = attrs.getRequest();
try { String remoteIP = IPUtil.getRemoteIP(request);
HttpServletRequest request = attrs.getRequest(); Object[] args = pjp.getArgs();
String remoteIP = IPUtil.getRemoteIP(request); boolean hasException = false;
Object[] args = pjp.getArgs(); Object result;
LOGGER.info("http api is called,from IP:[{}],args:[{}]", remoteIP, args); try {
} catch (Exception e) { result = pjp.proceed();
LOGGER.error("打印http请求日志出错", e); } 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; return result;
} }
......
...@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter; import org.springframework.orm.jpa.JpaVendorAdapter;
...@@ -54,28 +55,13 @@ public class JpaConfig { ...@@ -54,28 +55,13 @@ public class JpaConfig {
properties.put("hibernate.jdbc.batch_size", 30); properties.put("hibernate.jdbc.batch_size", 30);
properties.put("hibernate.order_inserts", true); properties.put("hibernate.order_inserts", true);
properties.put("hibernate.order_updates", true); properties.put("hibernate.order_updates", true);
entityManager.setJpaProperties(properties); entityManager.setJpaProperties(properties);
entityManager.setJpaVendorAdapter(jpaVendorAdapter()); entityManager.setJpaVendorAdapter(jpaVendorAdapter());
entityManager.afterPropertiesSet(); entityManager.afterPropertiesSet();
return entityManager.getObject(); 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() { private JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false); hibernateJpaVendorAdapter.setShowSql(false);
......
...@@ -134,7 +134,7 @@ public class HttpConfig { ...@@ -134,7 +134,7 @@ public class HttpConfig {
connectionManager.setDefaultMaxPerRoute(2000); connectionManager.setDefaultMaxPerRoute(2000);
// retry handler // retry handler
HttpRequestRetryHandler retryHandler = new StandardHttpRequestRetryHandler(3, false); HttpRequestRetryHandler retryHandler = new StandardHttpRequestRetryHandler();
// keep alive strategy // keep alive strategy
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy(); ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
......
...@@ -4,6 +4,8 @@ import cn.quantgroup.xyqb.Constants; ...@@ -4,6 +4,8 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaValidator; import cn.quantgroup.xyqb.aspect.captcha.CaptchaValidator;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService; 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.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
...@@ -28,6 +30,7 @@ import java.util.UUID; ...@@ -28,6 +30,7 @@ import java.util.UUID;
*/ */
@RestController @RestController
@RequestMapping("/api") @RequestMapping("/api")
@Api(value = "/api", description = "叫Api, 实际上是图形验证码. 你说神奇不神奇...")
public class ImageCaptchaController { public class ImageCaptchaController {
private static final String IMAGE_FORMAT_PNG = "png"; private static final String IMAGE_FORMAT_PNG = "png";
...@@ -42,6 +45,7 @@ public class ImageCaptchaController { ...@@ -42,6 +45,7 @@ public class ImageCaptchaController {
* 默认匹配 GET /captcha, 提供4位数字和字母混合图片验证码 * 默认匹配 GET /captcha, 提供4位数字和字母混合图片验证码
*/ */
@RequestMapping(value = "/captcha") @RequestMapping(value = "/captcha")
@ApiOperation(value = "获取验证码", notes = "获取图形验证码接口, 会返回一个base64的图形验证码", httpMethod = "GET")
public JsonResult fetchCaptcha(HttpServletRequest request) { public JsonResult fetchCaptcha(HttpServletRequest request) {
String imageId = UUID.randomUUID().toString(); String imageId = UUID.randomUUID().toString();
BufferedImage challenge = imageCaptchaService.getImageChallengeForID(Constants.IMAGE_CAPTCHA_KEY + imageId, request.getLocale()); BufferedImage challenge = imageCaptchaService.getImageChallengeForID(Constants.IMAGE_CAPTCHA_KEY + imageId, request.getLocale());
...@@ -67,6 +71,7 @@ public class ImageCaptchaController { ...@@ -67,6 +71,7 @@ public class ImageCaptchaController {
*/ */
@CaptchaValidator @CaptchaValidator
@RequestMapping("/verification_image_code") @RequestMapping("/verification_image_code")
@ApiOperation(value = "验证图形验证码", notes = "验证图形验证码", httpMethod = "POST")
public JsonResult verificationImageCode() { public JsonResult verificationImageCode() {
return JsonResult.buildSuccessResult("", null); return JsonResult.buildSuccessResult("", null);
} }
......
...@@ -8,6 +8,7 @@ import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService; ...@@ -8,6 +8,7 @@ import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil; import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.PasswordUtil; import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil; import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -38,6 +39,7 @@ public class NewCaptchaController { ...@@ -38,6 +39,7 @@ public class NewCaptchaController {
@RequestMapping(value = "/captcha/new") @RequestMapping(value = "/captcha/new")
@ApiOperation(value = "获取新图形验证码", notes = "获取新图形验证码", httpMethod = "POST")
public JsonResult getCaptcha(String phoneNo, String clientType, HttpServletRequest request) { public JsonResult getCaptcha(String phoneNo, String clientType, HttpServletRequest request) {
String remoteIp = IPUtil.getRemoteIP(request); String remoteIp = IPUtil.getRemoteIP(request);
log.info("获取验证码, phoneNo:{}, clientType:{}, ip:{}, verifyType-qg:{}", phoneNo, clientType, remoteIp, geetestClose); log.info("获取验证码, phoneNo:{}, clientType:{}, ip:{}, verifyType-qg:{}", phoneNo, clientType, remoteIp, geetestClose);
......
package cn.quantgroup.xyqb.controller.external.motan;
import cn.quantgroup.motan.bean.*;
import cn.quantgroup.motan.retbean.*;
import cn.quantgroup.motan.service.UserMotanService;
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.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;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.stream.Collectors;
import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ERROR;
/**
* Created by 11 on 2017/2/27.
*/
@Slf4j
public class MotanUserServiceImpl implements UserMotanService {
private static final ObjectMapper MAPPER = new ObjectMapper();
private final static Random random = new Random();
static {
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
@Autowired
private IIdCardService idCardService;
@Autowired
private IUserService userService;
@Autowired
private IUserDetailService userDetailService;
@Autowired
private IMerchantService merchantService;
@Autowired
private ISessionService sessionService;
@Autowired
private IContactService contactService;
@Autowired
private IAddressService addressService;
@Autowired
private IUserExtInfoService userExtInfoService;
@Autowired
private IWechatService wechatService;
@Autowired
private IUserSpouseService userSpouseService;
@Autowired
private IUserApiService userApiService;
@Autowired
private IUserRegisterService userRegisterService;
@Override
public UserSysResult<XUser> saveUserRelatedInfo(UserRelatedBean userRelatedBean) {
return null;
}
@Override
public UserSysResult<XUser> findUserByPhoneNo(String phoneNo) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return returnErrorValue("手机号格式不正确");
}
User user = userService.findByPhoneInDb(phoneNo);
return returnSuccessValue(fromUser(user));
}
@Override
public UserSysResult<XUser> findUserByUuid(String uuid) {
if (StringUtils.isBlank(uuid)) {
return returnErrorValue("参数不能为空");
}
User user = userService.findByUuidInDb(uuid);
return returnSuccessValue(fromUser(user));
}
@Override
public UserSysResult<XUser> saveUser(UserBean userBean) {
if (null == userBean || !ValidationUtil.validatePhoneNo(userBean.getPhoneNo())) {
return returnErrorValue(userBean == null ? "要保存的用户对象不能为null" : "手机号不正确");
}
Timestamp now = new Timestamp(System.currentTimeMillis());
User user = userService.findByPhoneWithCache(userBean.getPhoneNo());
if (user == null) {
user = new User();
user.setCreatedAt(now);
user.setPhoneNo(userBean.getPhoneNo());
user.setEnable(true);
String password = userBean.getPassword();
if (StringUtils.isBlank(password)) {
password = String.valueOf(random.nextInt(899999) + 100000);
}
user.setPassword(PasswordUtil.MD5(password + Constants.PASSWORD_SALT));
} else {
if (StringUtils.isNotBlank(user.getPassword())) {
user.setPassword(PasswordUtil.MD5(userBean.getPassword() + Constants.PASSWORD_SALT));
}
}
user.setUpdatedAt(now);
user.setUuid(userBean.getUuid());
user.setRegisteredFrom(null == userBean.getRegisteredFrom() ? 0L : userBean.getRegisteredFrom());
User saveUser = userService.saveUser(user);
return returnSuccessValue(fromUser(saveUser));
}
@Override
public UserSysResult<XUserDetail> findUserDetailByUserId(Long userId) {
if (userId == null || userId < 1) {
return returnErrorValue("参数必须是正整数");
}
UserDetail userDetail = userDetailService.findByUserId(userId);
XUserDetail xUserDetail = fromUserDetail(userDetail);
return returnSuccessValue(xUserDetail);
}
private XUserDetail fromUserDetail(UserDetail userDetail) {
return userDetail == null ? null : userDetail.toXUserDetail();
}
private XUserDetail fromUserDetailVO(UserDetailVO userDetail) {
return userDetail == null ? null : userDetail.toXUserDetail();
}
private XUser fromUser(User user) {
return user == null ? null : user.toXUser();
}
@Override
public UserSysResult<XUser> findUserByUserId(Long id) {
if (id == null || id < 1) {
return returnErrorValue("参数必须是正整数");
}
User user = userService.findById(id);
return returnSuccessValue(fromUser(user));
}
@Override
public UserSysResult<XUserDetail> findUserDetailByPhone(String phoneNo) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return returnErrorValue("手机号格式不正确");
}
UserDetail userDetail = userDetailService.findByPhoneNo(phoneNo);
return returnSuccessValue(fromUserDetail(userDetail));
}
@Override
public UserSysResult<XUserDetail> updateUserDetail(UserDetailUpdateBean userDetailUpdateBean) {
if (null == userDetailUpdateBean) {
return returnErrorValue("要保存的用户详情对象不能为null");
}
UserDetail userDetail = new UserDetail();
if (!ValidationUtil.validateChinese(userDetailUpdateBean.getName())) {
return returnErrorValue("用户姓名错误");
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(userDetailUpdateBean.getIdNo());
} catch (ParseException ex) {
log.error("用户身份证号错误, idNo: {}", userDetailUpdateBean.getIdNo(), ex);
}
if (Objects.isNull(info) || !info.isValid()) {
return returnErrorValue("身份证号码错误");
}
if (null != userDetailUpdateBean.getId() && userDetailUpdateBean.getId() > 0L) {
userDetail.setId(userDetailUpdateBean.getId());
}
userDetail.setUserId(userDetailUpdateBean.getUserId());
userDetail.setName(userDetailUpdateBean.getName());
userDetail.setPhoneNo(userDetailUpdateBean.getPhoneNo());
userDetail.setIdNo(userDetailUpdateBean.getIdNo());
Timestamp time = new Timestamp(System.currentTimeMillis());
userDetail.setCreatedAt(time);
userDetail.setUpdatedAt(time);
userDetail.setIdType(IdType.ID_CARD);
userDetail.setGender(info.getGender());
userDetail.setEmail(userDetailUpdateBean.getEmail());
userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) {
XUserDetail xUserDetail = convertObject(JSON.toJSONString(userDetail), new TypeReference<XUserDetail>() {
});
return returnSuccessValue(xUserDetail);
}
return returnErrorValue("保存失败");
}
@Override
public UserSysResult<XUserDetail> saveUserDetail(UserDetailSaveBean userDetailSaveBean) {
if (userDetailSaveBean == null) {
return returnErrorValue("数据不能为空");
}
Long userId = userDetailSaveBean.getUserId();
if (userId == null || userId == 0L) {
return returnErrorValue("用户id为空");
}
if (StringUtils.isBlank(userDetailSaveBean.getPhoneNo())) {
return returnErrorValue("用户手机号为空");
}
if (StringUtils.isBlank(userDetailSaveBean.getName())) {
return returnErrorValue("用户名为空");
}
if (StringUtils.isBlank(userDetailSaveBean.getIdNo())) {
return returnErrorValue("用户身份证为空");
}
if (!ValidationUtil.validateChinese(userDetailSaveBean.getName())) {
return returnErrorValue("用户姓名错误");
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(userDetailSaveBean.getIdNo());
} catch (ParseException ex) {
log.error("用户身份证号错误, idNo: {}", userDetailSaveBean.getIdNo(), ex);
}
if (Objects.isNull(info) || !info.isValid()) {
return returnErrorValue("身份证号码错误");
}
Timestamp time = new Timestamp(System.currentTimeMillis());
UserDetail userDetail = userDetailService.findByUserId(userId);
if (userDetail == null) {
userDetail = new UserDetail();
userDetail.setUserId(userId);
userDetail.setCreatedAt(time);
userDetail.setUpdatedAt(time);
} else {
userDetail.setUpdatedAt(time);
}
userDetail.setName(userDetailSaveBean.getName());
userDetail.setPhoneNo(userDetailSaveBean.getPhoneNo());
userDetail.setIdType(IdType.ID_CARD);
userDetail.setGender(info.getGender());
userDetail.setIdNo(userDetailSaveBean.getIdNo());
userDetail.setEmail(userDetailSaveBean.getEmail());
userDetail = userDetailService.saveUserDetail(userDetail);
if (userDetail != null) {
return returnSuccessValue(fromUserDetail(userDetail));
}
return returnErrorValue("操作失败");
}
@Override
public UserSysResult<XLoginInfo> appLoginAndFetchLoginInfo(AppLoginParam appLoginParam, String requestIp) {
if (!ValidationUtil.validatePhoneNo(appLoginParam.getPhoneNo())) {
return returnErrorValue("账户或者密码错误");
}
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());
}
if (user == null) {
return returnErrorValue("账户或者密码错误");
}
Merchant merchant = merchantService.findMerchantByName(appLoginParam.getKey());
if (merchant == null) {
return returnErrorValue("无效的商户");
}
LoginProperties loginProperties = new LoginProperties();
loginProperties.setChannelId(appLoginParam.getChannelId());
loginProperties.setMerchantName(merchant.getName());
loginProperties.setCreatedFrom(appLoginParam.getRegisterFrom());
loginProperties.setAppChannel(appLoginParam.getAppChannel());
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, loginProperties);
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(new UserRet(user));
loginInfo.setToken(sessionStruct.getSid());
LoginInfo.LoginContext context = new LoginInfo.LoginContext();
context.setChannelId(sessionStruct.getValues().getLoginProperties().getChannelId());
context.setCreatedFrom(sessionStruct.getValues().getLoginProperties().getCreatedFrom());
context.setAppChannel(appLoginParam.getAppChannel());
loginInfo.setLoginContext(context);
log.info("第三方用户获取信息登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getAppChannel());
XLoginInfo xLoginInfo = convertObject(JSON.toJSONString(loginInfo), new TypeReference<XLoginInfo>() {
});
return returnSuccessValue(xLoginInfo);
}
private <T> T convertObject(String json, TypeReference typeReference) {
try {
if (StringUtils.isEmpty(json)) {
return null;
}
return MAPPER.readValue(json, typeReference);
} catch (Exception ex) {
log.error("用户信息转换出错,json:{}", json, ex);
return null;
}
}
@Override
public void updateUserQQ(String qq, Long userId) {
if (StringUtils.isEmpty(qq) || userId == null || userId == 0L) {
log.error("QQ或用户id非法,不允许修改:qq{}, userid:{}", qq, userId);
return;
}
userDetailService.updateUserQQ(userId, qq);
}
@Override
public UserSysResult<List<XContact>> findContactsByUserId(Long userId) {
List<Contact> contacts = contactService.findByUserId(userId, true);
List<XContact> xContacts = convertObject(JSON.toJSONString(contacts), new TypeReference<List<XContact>>() {
});
return returnSuccessValue(xContacts);
}
@Override
public UserSysResult<List<XContact>> saveContacts(Long userId, List<XContact> contacts) {
if (null == userId || userId == 0L) {
return returnErrorValue("保存联系人列表失败,用户id为空");
}
if (CollectionUtils.isEmpty(contacts)) {
return returnErrorValue("保存联系人列表失败,列表为空");
}
//做一次类型转换,
String jsonContacts = JSON.toJSONString(contacts);
List<Contact> contactList = null;
try {
contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>() {
});
} catch (Exception e) {
log.error("联系人列表转换错误", e);
return returnErrorValue("联系人转换错误");
}
for (Contact c : contactList) {
if (!c.valid()) {
log.info("用户手机号或姓名错误, phoneNo:{},name:{}", c.getPhoneNo(), c.getName());
return returnErrorValue("用户手机号或姓名错误");
}
}
List<Contact> result = contactService.save(userId, contactList);
List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>() {
});
return returnSuccessValue(xResult);
}
@Override
public UserSysResult<XAddress> findAddressByUserId(Long userId) {
UserSysResult<XAddress> userSysResult = returnErrorValue(null);
Address address = addressService.findByUserId(userId);
if (null == address) {
return userSysResult;
}
XAddress xAddress = convertObject(JSON.toJSONString(address), new TypeReference<XAddress>() {
});
return returnSuccessValue(xAddress);
}
@Override
public UserSysResult<XAddress> saveAddress(Long userId, Long provinceCode, String province, Long cityCode, String city,
Long districtCode, String district, String address) {
if (null == userId || null == provinceCode || null == cityCode || StringUtils.isBlank(address)) {
return returnErrorValue("参数不能为空");
}
Address addressObj = addressService.findByUserId(userId);
if (addressObj == null) {
addressObj = new Address();
Timestamp now = new Timestamp(System.currentTimeMillis());
addressObj.setCreatedAt(now);
addressObj.setUpdateAt(now);
}
addressObj.setUserId(userId);
addressObj.setProvinceCode(provinceCode);
addressObj.setCityCode(cityCode);
addressObj.setCity(city);
addressObj.setDistrictCode(districtCode);
addressObj.setDistrict(district);
addressObj.setAddress(address);
addressObj.setProvince(province);
addressObj = addressService.save(addressObj);
XAddress xAddress = convertObject(JSON.toJSONString(addressObj), new TypeReference<XAddress>() {
});
return returnSuccessValue(xAddress);
}
@Override
public UserSysResult<XUserExtInfo> updateUserExtInfo(
Long userId, cn.quantgroup.motan.enums.IncomeEnum incomeEnum, cn.quantgroup.motan.enums.IncomeRangeEnum incomeRangeEnum,
cn.quantgroup.motan.enums.OccupationEnum occupationEnum, cn.quantgroup.motan.enums.EducationEnum educationEnum, Boolean hasCar,
Boolean hasSocialSecurity, Boolean hasHouse, Boolean hasCreditCard, cn.quantgroup.motan.enums.MaritalStatus maritalStatus) {
UserSysResult<XUserExtInfo> userSysResult = returnValue(null, null);
if (null == userId || 0L == userId) {
return returnErrorValue("用户id为空");
}
UserExtInfo info = userExtInfoService.findByUserId(userId);
if (info == null) {
Timestamp now = new Timestamp(System.currentTimeMillis());
info = new UserExtInfo();
info.setUserId(userId);
info.setCreatedAt(now);
info.setUpdateAt(now);
}
if (incomeEnum != null) {
info.setIncomeEnum(IncomeEnum.valueOf(incomeEnum.name()));
}
if (incomeRangeEnum != null) {
info.setIncomeRangeEnum(IncomeRangeEnum.valueOf(incomeRangeEnum.name()));
}
if (occupationEnum != null) {
info.setOccupationEnum(OccupationEnum.valueOf(occupationEnum.name()));
}
if (educationEnum != null) {
info.setEducationEnum(EducationEnum.valueOf(educationEnum.name()));
}
if (hasCar != null) {
info.setHasCar(hasCar);
}
if (hasCreditCard != null) {
info.setHasCreditCard(hasCreditCard);
}
if (hasHouse != null) {
info.setHasHouse(hasHouse);
}
if (maritalStatus != null) {
info.setMarryStatus(MaritalStatus.valueOf(maritalStatus.name()));
}
info = userExtInfoService.save(info);
XUserExtInfo userExtInfo = convertObject(JSON.toJSONString(info), new TypeReference<XUserExtInfo>() {
});
return returnSuccessValue(userExtInfo);
}
@Override
public UserSysResult<String> queryOpenIdByXyqbUserId(Long userId) {
if (userId == null || userId < 1) {
return returnErrorValue("用户id不能为空");
}
WechatUserInfo wechatUserInfo = wechatService.queryByUserId(userId);
if (wechatUserInfo == null) {
return returnErrorValue("wechat信息为空");
}
return returnValue(wechatUserInfo.getOpenId(), "success");
}
@Override
public UserSysResult<Boolean> disableUser(Long userId) {
if (null == userId || 0L == userId) {
throw new RuntimeException("userId不能为空");
}
User user = userService.findById(userId);
if (null == user) {
throw new RuntimeException("未查询到该用户,用户id:" + userId);
}
user.setEnable(false);
user.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
log.info("注销用户的信息,userId={}", userId);
user = userService.saveUser(user);
if (!user.getEnable()) {
sessionService.deleteByUserId(userId);
}
return returnSuccessValue(Boolean.TRUE);
}
@Override
public UserSysResult<String> queryOpenIdByPhoneNo(String phoneNo) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return returnErrorValue("手机号格式不正确");
}
WechatUserInfo wechatUserInfo = wechatService.findWechatUserInfoByPhoneNo(phoneNo);
String openId = null == wechatUserInfo ? null : wechatUserInfo.getOpenId();
return returnSuccessValue(openId);
}
@Override
public UserSysResult<UserRegisterTrace> findRegisterTraceByPhoneNo(String phoneNo) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return returnErrorValue("手机号格式不正确");
}
return null;
}
@Override
public UserSysResult<XUserSpouse> findUserSpouseByUserId(Long userId) {
if (userId == null || userId == 0) {
return returnErrorValue("用户不能为空");
}
UserSpouse userSpouse = userSpouseService.findByUserId(userId);
if (userSpouse == null || !userSpouse.valid()) {
userSpouse = new UserSpouse(userId);
userSpouse.setStatus(MaritalStatus.UNKNOWN);
}
return returnSuccessValue(fromUserSpouse(userSpouse));
}
private XUserSpouse fromUserSpouse(UserSpouse userSpouse) {
if (userSpouse == null) {
return null;
}
XUserSpouse xUserSpouse = new XUserSpouse();
xUserSpouse.setUserId(userSpouse.getUserId());
xUserSpouse.setSpousePhone(userSpouse.getSpousePhone());
xUserSpouse.setSpouseName(userSpouse.getSpouseName());
xUserSpouse.setCreatedAt(userSpouse.getCreatedAt());
xUserSpouse.setUpdateAt(userSpouse.getUpdateAt());
xUserSpouse.setStatus(cn.quantgroup.motan.enums.MaritalStatus.valueOf(userSpouse.getStatus().name()));
return xUserSpouse;
}
@Override
public UserSysResult<XUserExtInfo> findUserExtInfoByUserId(Long userId) {
if (userId == null) {
return returnErrorValue("userId不能为空");
}
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
if (userExtInfo == null) {
return returnErrorValue("未找到用户扩展信息");
}
return returnSuccessValue(fromUserExtInfo(userExtInfo));
}
private XUserExtInfo fromUserExtInfo(UserExtInfo userExtInfo) {
return null == userExtInfo ? null : userExtInfo.toXUserExtInfo();
}
@Override
public UserSysResult<List<XUserDetail>> queryUserDetailBySpecification(String name, String phoneNo, String idNo) {
List<UserDetailVO> userDetails = userDetailService.searchUserDetailList(name, phoneNo, idNo);
if (CollectionUtils.isEmpty(userDetails)) {
return null;
}
List<XUserDetail> xUserDetails = userDetails.stream().map(this::fromUserDetailVO).collect(Collectors.toList());
return returnSuccessValue(xUserDetails);
}
@Override
public UserSysResult<String> loginWithUuid(String uuid) {
return returnErrorValue("MotanUserServiceImpl loginWithUuid(String uuid) need to be finish.");
}
@Override
public UserSysResult<Boolean> userImportCheck(String phoneNo, String registerFrom) {
if ("244".equals(registerFrom)) {
return returnErrorValue("用户导入检查拒绝");
}
if (org.apache.commons.lang3.StringUtils.isEmpty(phoneNo) || org.apache.commons.lang3.StringUtils.isEmpty(registerFrom)) {
return returnErrorValue("检查传入的参数,参数不全。");
}
boolean checkPassed = userApiService.userImportCheck(phoneNo);
if (checkPassed) {
return returnValue(Boolean.TRUE, "success");
}
return returnErrorValue("用户导入检查拒绝");
}
@Override
public UserSysResult<XUserSpouse> saveUserSpouse(XUserSpouse xUserSpouse) {
if (xUserSpouse.getUserId() == null || xUserSpouse.getUserId() == 0) {
return returnErrorValue("用户不能为空");
}
cn.quantgroup.motan.enums.MaritalStatus status = xUserSpouse.getStatus();
String spousePhone = xUserSpouse.getSpousePhone();
String spouseName = xUserSpouse.getSpouseName();
if (xUserSpouse.getStatus() == cn.quantgroup.motan.enums.MaritalStatus.MARRIED) {
if (!ValidationUtil.validatePhoneNo(spousePhone)) {
return returnErrorValue("手机号格式错误");
}
if (!ValidationUtil.validateChinese(spouseName)) {
return returnErrorValue("配偶姓名错误");
}
}
UserSpouse userSpouse = userSpouseService.findByUserId(xUserSpouse.getUserId());
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
if (userSpouse == null) {
userSpouse = new UserSpouse(xUserSpouse.getUserId());
userSpouse.setCreatedAt(timestamp);
}
userSpouse.setSpouseName(status == cn.quantgroup.motan.enums.MaritalStatus.MARRIED ? spouseName : "");
userSpouse.setSpousePhone(status == cn.quantgroup.motan.enums.MaritalStatus.MARRIED ? spousePhone : "");
userSpouse.setStatus(cn.quantgroup.user.enums.MaritalStatus.valueOf(status.name()));
userSpouse.setUpdateAt(timestamp);
userSpouse = userSpouseService.save(userSpouse);
return returnSuccessValue(fromUserSpouse(userSpouse));
}
@Override
public UserSysResult<AppLoginResultBean> appLogin(AppLoginParam appLoginParam) {
if (!ValidationUtil.validatePhoneNo(appLoginParam.getPhoneNo())) {
throw new RuntimeException(USER_ERROR_OR_PASSWORD_ERROR);
}
log.info("第三方用户登录, appLoginParam:{} ", appLoginParam);
User user = userService.findByPhoneInDb(appLoginParam.getPhoneNo());
if (user == null) {
user = userRegisterService.register(appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getIdNo(), appLoginParam.getName(), appLoginParam.getChannelId());
}
if (user == null) {
throw new RuntimeException(USER_ERROR_OR_PASSWORD_ERROR);
}
if (!user.getEnable()) {
throw new RuntimeException("登录失败");
}
Merchant merchant = merchantService.findMerchantByName(appLoginParam.getKey());
if (merchant == null) {
throw new RuntimeException("无效的商户");
}
LoginProperties loginProperties = new LoginProperties();
loginProperties.setChannelId(appLoginParam.getChannelId());
loginProperties.setMerchantName(merchant.getName());
loginProperties.setCreatedFrom(appLoginParam.getRegisterFrom());
loginProperties.setAppChannel(appLoginParam.getAppChannel());
SessionStruct sessionStruct = sessionService.createSessionAndPersist(user, loginProperties);
AppLoginResultBean appLoginResultBean = new AppLoginResultBean();
appLoginResultBean.setToken(sessionStruct.getSid());
appLoginResultBean.setPhoneNo(appLoginParam.getPhoneNo());
log.info("第三方用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{}", appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getAppChannel());
return returnSuccessValue(appLoginResultBean);
}
@Override
public UserSysResult<XLoginInfo> getLoginInfo(String token) {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token);
if (null != sessionStruct) {
log.info("从用户中心获取到了用户登录信息:phone:[{}]", sessionStruct.getValues().getUser().getPhoneNo());
XLoginInfo loginInfo = new XLoginInfo();
loginInfo.setUser(sessionStruct.getValues().getUser().toXUser());
loginInfo.setToken(sessionStruct.getSid());
LoginContext context = new LoginContext();
context.setChannelId(sessionStruct.getValues().getLoginProperties().getChannelId());
context.setCreatedFrom(sessionStruct.getValues().getLoginProperties().getCreatedFrom());
context.setAppChannel(sessionStruct.getValues().getLoginProperties().getAppChannel());
loginInfo.setLoginContext(context);
return returnSuccessValue(loginInfo);
}
return returnErrorValue("用户未登录");
}
/**
* 封装返回结果.
*
* @param t
* @param message
* @param <T>
* @return
*/
private <T> UserSysResult<T> returnValue(T t, String message) {
UserSysResult<T> userSysResult = new UserSysResult();
userSysResult.setMsg(message);
/**
* 无返回结果时,返回的code和BusinessCode均是0001
*/
if (null == t) {
userSysResult.setBusinessCode("0001");
userSysResult.setCode("0001");
} else {
userSysResult.setBusinessCode("0000");
userSysResult.setCode("0000");
}
userSysResult.setData(t);
return userSysResult;
}
private <T> UserSysResult<T> returnErrorValue(String message) {
return returnValue(null, message);
}
private <T> UserSysResult<T> returnSuccessValue(T t) {
return returnValue(t, "");
}
@Override
public UserSysResult<XUserDetail> modifyUserDetail(UserDetailUpdateBean userDetailUpdateBean) {
return returnErrorValue("MotanUserServiceImpl modifyUserDetail(UserDetailUpdateBean userDetailUpdateBean) need to be finish.");
}
@Override
public UserSysResult<Map<Long, String>> findPhoneByUserIds(List<Long> userIds) {
if (!CollectionUtils.isEmpty(userIds) && userIds.size() <= 500) {
Map<Long, String> userIdAndPhoneMap = userService.findPhoneByIdsInDb(userIds);
return returnSuccessValue(userIdAndPhoneMap);
} else {
return returnErrorValue("批量查询每次最多进行500条用户信息的查询");
}
}
}
...@@ -16,6 +16,7 @@ import cn.quantgroup.xyqb.util.ValidationUtil; ...@@ -16,6 +16,7 @@ import cn.quantgroup.xyqb.util.ValidationUtil;
import cn.quantgroup.xyqb.util.encrypt.MD5Util; import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.util.encrypt.RSA; import cn.quantgroup.xyqb.util.encrypt.RSA;
import com.google.gson.*; import com.google.gson.*;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.usermodel.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -65,6 +66,7 @@ public class UserQueryLogController { ...@@ -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=="; 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") @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) { 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); LOGGER.info("查询日期:beginDate{},endDate{}", beginDate, endDate);
String token = request.getHeader(Constants.X_AUTH_TOKEN); String token = request.getHeader(Constants.X_AUTH_TOKEN);
...@@ -124,6 +126,7 @@ public class UserQueryLogController { ...@@ -124,6 +126,7 @@ public class UserQueryLogController {
} }
@RequestMapping("/queryUserInfo") @RequestMapping("/queryUserInfo")
@ApiOperation(value = "给运营系统提供的查询用户信息的接口", notes = "给运营系统提供的查询用户信息的接口", httpMethod = "POST")
public JsonResult queryForResult(HttpServletRequest request, String key, String keyValues, String columns, Integer pageId, Integer pageSize) { public JsonResult queryForResult(HttpServletRequest request, String key, String keyValues, String columns, Integer pageId, Integer pageSize) {
LOGGER.info("查询条件:key{},columns{}", key, columns); LOGGER.info("查询条件:key{},columns{}", key, columns);
String token = request.getHeader(Constants.X_AUTH_TOKEN); String token = request.getHeader(Constants.X_AUTH_TOKEN);
...@@ -331,6 +334,7 @@ public class UserQueryLogController { ...@@ -331,6 +334,7 @@ public class UserQueryLogController {
} }
@RequestMapping("/exportUserInfo") @RequestMapping("/exportUserInfo")
@ApiOperation(value = "给运营系统提供的导出用户信息的接口", notes = "给运营系统提供的导出用户信息的接口", httpMethod = "POST")
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) {
......
...@@ -14,6 +14,7 @@ import cn.quantgroup.xyqb.service.user.IUserService; ...@@ -14,6 +14,7 @@ import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.IPUtil; import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.MqUtils; import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.ValidationUtil; import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -60,9 +61,9 @@ public class AppController implements IBaseController { ...@@ -60,9 +61,9 @@ public class AppController implements IBaseController {
* @param request * @param request
* @return Token和phoneNo * @return Token和phoneNo
*/ */
@IpValidator @IpValidator
@RequestMapping("/login") @RequestMapping("/login")
@ApiOperation(value = "App登陆", notes = "App登陆", httpMethod = "POST")
public JsonResult login( public JsonResult login(
String phoneNo, String phoneNo,
String idNo, String name, String key, String idNo, String name, String key,
...@@ -74,7 +75,6 @@ public class AppController implements IBaseController { ...@@ -74,7 +75,6 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) { if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null); 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); User user = userService.findByPhoneInDb(phoneNo);
if (user == null) { if (user == null) {
...@@ -121,6 +121,7 @@ public class AppController implements IBaseController { ...@@ -121,6 +121,7 @@ public class AppController implements IBaseController {
@IpValidator @IpValidator
@RequestMapping("/login_super") @RequestMapping("/login_super")
@ApiOperation(value = "免密登陆, 新手机号还自动注册", notes = "免密登陆, 新手机号还自动注册", httpMethod = "POST")
public JsonResult loginSuper( public JsonResult loginSuper(
String phoneNo, String phoneNo,
String idNo, String name, String key, String idNo, String name, String key,
...@@ -162,10 +163,10 @@ public class AppController implements IBaseController { ...@@ -162,10 +163,10 @@ public class AppController implements IBaseController {
context.setAppChannel(appChannel); context.setAppChannel(appChannel);
loginInfo.setLoginContext(context); 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) * 贷款导航(84660);壹账通H5(159384)
*/ */
user.setRegisteredFrom(registerFrom); user.setRegisteredFrom(registerFrom);
UserStatistics statistics = new UserStatistics(user, null, 4, channelId); UserStatistics statistics = new UserStatistics(user, null, 4, channelId);
//增加登陆统计发送 //增加登陆统计发送
...@@ -188,6 +189,7 @@ public class AppController implements IBaseController { ...@@ -188,6 +189,7 @@ public class AppController implements IBaseController {
@IpValidator @IpValidator
@RequestMapping("/login2") @RequestMapping("/login2")
@ApiOperation(value = "免密登陆, 新手机号不自动注册", notes = "免密登陆, 新手机号不自动注册", httpMethod = "POST")
public JsonResult login2( public JsonResult login2(
String phoneNo, String phoneNo,
@RequestParam(required = false, defaultValue = "1") Long registerFrom, @RequestParam(required = false, defaultValue = "1") Long registerFrom,
......
package cn.quantgroup.xyqb.controller.external.user; package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.tech.db.DSType;
import cn.quantgroup.tech.db.TargetDataSource;
import cn.quantgroup.user.enums.Relation; import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.IBaseController; import cn.quantgroup.xyqb.controller.IBaseController;
...@@ -9,23 +11,18 @@ import cn.quantgroup.xyqb.exception.UserNotExistException; ...@@ -9,23 +11,18 @@ import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.*; import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.service.api.IUserApiService; import cn.quantgroup.xyqb.service.api.IUserApiService;
import cn.quantgroup.xyqb.service.auth.IIdCardService; import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService; import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService; import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.sms.ISmsService; import cn.quantgroup.xyqb.service.sms.ISmsService;
import cn.quantgroup.xyqb.service.user.*; import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import cn.quantgroup.xyqb.service.wechat.IWechatService; import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*; import cn.quantgroup.xyqb.util.*;
import cn.quantgroup.xyqb.util.encrypt.MD5Util; import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
...@@ -37,7 +34,6 @@ import org.apache.commons.lang3.StringUtils; ...@@ -37,7 +34,6 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -84,20 +80,8 @@ public class InnerController implements IBaseController { ...@@ -84,20 +80,8 @@ public class InnerController implements IBaseController {
@Autowired @Autowired
private ISmsService smsService; private ISmsService smsService;
@Autowired @Autowired
private IHttpService httpService;
@Autowired
private IUserRegisterService userRegisterService; private IUserRegisterService userRegisterService;
@Value("${userqry.http}")
private String queryUrl;
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MAPPER.configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, true);
}
private static final char[] PWD_BASE = { private static final char[] PWD_BASE = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
...@@ -105,6 +89,7 @@ public class InnerController implements IBaseController { ...@@ -105,6 +89,7 @@ public class InnerController implements IBaseController {
}; };
@RequestMapping("/user/search/phoneNo") @RequestMapping("/user/search/phoneNo")
@ApiOperation(httpMethod = "POST", value = "根据手机号查询用户信息")
public JsonResult findByPhoneNo(String phoneNo) { public JsonResult findByPhoneNo(String phoneNo) {
User user = userService.findByPhoneInDb(phoneNo); User user = userService.findByPhoneInDb(phoneNo);
if (user == null) { if (user == null) {
...@@ -112,11 +97,11 @@ public class InnerController implements IBaseController { ...@@ -112,11 +97,11 @@ public class InnerController implements IBaseController {
} }
UserRet userRet = new UserRet(user); UserRet userRet = new UserRet(user);
return JsonResult.buildSuccessResult("", userRet); return JsonResult.buildSuccessResult("", userRet);
} }
@RequestMapping("/user/search/uuid") @RequestMapping("/user/search/uuid")
@ApiOperation(httpMethod = "POST", value = "根据UUID查询用户信息")
public JsonResult findByUuid(String uuid) { public JsonResult findByUuid(String uuid) {
User user = userService.findByUuidWithCache(uuid); User user = userService.findByUuidWithCache(uuid);
if (user == null) { if (user == null) {
...@@ -127,6 +112,7 @@ public class InnerController implements IBaseController { ...@@ -127,6 +112,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/userInfo/search/uuid") @RequestMapping("/userInfo/search/uuid")
@ApiOperation(httpMethod = "POST", value = "根据UUID查询用户详细信息")
public JsonResult findUserInfoByUuid(@RequestParam(value = "uuid") String uuid) { public JsonResult findUserInfoByUuid(@RequestParam(value = "uuid") String uuid) {
log.info("需要查询的用户uuidid, uuid:" + uuid); log.info("需要查询的用户uuidid, uuid:" + uuid);
...@@ -146,6 +132,7 @@ public class InnerController implements IBaseController { ...@@ -146,6 +132,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/userInfo/search/phone") @RequestMapping("/userInfo/search/phone")
@ApiOperation(httpMethod = "POST", value = "根据手机号查询用户详细信息")
public JsonResult findUserInfoByPhone(@RequestParam(value = "phone") String phone) { public JsonResult findUserInfoByPhone(@RequestParam(value = "phone") String phone) {
log.info("需要查询的用户phone, phone:" + phone); log.info("需要查询的用户phone, phone:" + phone);
...@@ -165,6 +152,7 @@ public class InnerController implements IBaseController { ...@@ -165,6 +152,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/getPhoneByUserIds") @RequestMapping("/user/getPhoneByUserIds")
@ApiOperation(httpMethod = "POST", value = "根据用户 ID 批量查询用户信息")
public JsonResult findByIds(@RequestParam(value = "userIds") String userIdsString) { public JsonResult findByIds(@RequestParam(value = "userIds") String userIdsString) {
log.info("批量查询用户的手机号列表, userIdsString:" + userIdsString); log.info("批量查询用户的手机号列表, userIdsString:" + userIdsString);
if (StringUtils.isEmpty(userIdsString)) { if (StringUtils.isEmpty(userIdsString)) {
...@@ -181,6 +169,7 @@ public class InnerController implements IBaseController { ...@@ -181,6 +169,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/save") @RequestMapping("/user/save")
@ApiOperation(httpMethod = "POST", value = "注册用户")
public JsonResult saveUser( public JsonResult saveUser(
String phoneNo, Long registeredFrom, Long createdAt, Long updatedAt, String phoneNo, Long registeredFrom, Long createdAt, Long updatedAt,
String password, String uuid) { String password, String uuid) {
...@@ -232,6 +221,7 @@ public class InnerController implements IBaseController { ...@@ -232,6 +221,7 @@ public class InnerController implements IBaseController {
* 适用于:创建 或 修改 * 适用于:创建 或 修改
*/ */
@RequestMapping("/user_detail/save") @RequestMapping("/user_detail/save")
@ApiOperation(httpMethod = "POST", value = "填写用户详情")
public JsonResult saveUserDetail(Long userId, String phoneNo, String name, String idNo, public JsonResult saveUserDetail(Long userId, String phoneNo, String name, String idNo,
String email, String qq) { String email, String qq) {
log.info("保存用户详细信息,[saveUserDetail] userId:{},phoneNo:{},name:{},idNo:{},email:{},qq:{}", userId, phoneNo, name, idNo, email, qq); log.info("保存用户详细信息,[saveUserDetail] userId:{},phoneNo:{},name:{},idNo:{},email:{},qq:{}", userId, phoneNo, name, idNo, email, qq);
...@@ -267,9 +257,9 @@ public class InnerController implements IBaseController { ...@@ -267,9 +257,9 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("用户手机号不匹配", null); return JsonResult.buildErrorStateResult("用户手机号不匹配", null);
} }
Timestamp now = new Timestamp(System.currentTimeMillis()); Timestamp now = new Timestamp(System.currentTimeMillis());
/* /*
* 如果已存在记录,则更新 * 如果已存在记录,则更新
*/ */
UserDetail userDetail = userDetailService.findByUserId(userId); UserDetail userDetail = userDetailService.findByUserId(userId);
if (Objects.isNull(userDetail)) { if (Objects.isNull(userDetail)) {
userDetail = userDetailService.findByPhoneNo(phoneNo); userDetail = userDetailService.findByPhoneNo(phoneNo);
...@@ -302,6 +292,7 @@ public class InnerController implements IBaseController { ...@@ -302,6 +292,7 @@ public class InnerController implements IBaseController {
* 根据用户id查询用户的详细信息 * 根据用户id查询用户的详细信息
*/ */
@RequestMapping("/user_detail/search/userId") @RequestMapping("/user_detail/search/userId")
@ApiOperation(httpMethod = "POST", value = "查询用户详情")
public JsonResult findUserDetailByUserId(Long userId) { public JsonResult findUserDetailByUserId(Long userId) {
UserDetail userDetail = null; UserDetail userDetail = null;
// 增加容错性,防备DB中存在的脏数据触发异常 // 增加容错性,防备DB中存在的脏数据触发异常
...@@ -315,6 +306,7 @@ public class InnerController implements IBaseController { ...@@ -315,6 +306,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/search/userId") @RequestMapping("/user/search/userId")
@ApiOperation(httpMethod = "POST", value = "查询用户基本信息")
public JsonResult findUserByUserId(Long userId) { public JsonResult findUserByUserId(Long userId) {
User user = userService.findById(userId); User user = userService.findById(userId);
if (user != null) { if (user != null) {
...@@ -324,6 +316,7 @@ public class InnerController implements IBaseController { ...@@ -324,6 +316,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user_detail/search/phone") @RequestMapping("/user_detail/search/phone")
@ApiOperation(httpMethod = "POST", value = "查询用户详情")
public JsonResult findUserDetailByPhone(String phoneNo) { public JsonResult findUserDetailByPhone(String phoneNo) {
UserDetail userDetail = userDetailService.findByPhoneNo(phoneNo); UserDetail userDetail = userDetailService.findByPhoneNo(phoneNo);
if (userDetail != null) { if (userDetail != null) {
...@@ -339,6 +332,7 @@ public class InnerController implements IBaseController { ...@@ -339,6 +332,7 @@ public class InnerController implements IBaseController {
* @return * @return
*/ */
@RequestMapping("/user_full_info/search/phone") @RequestMapping("/user_full_info/search/phone")
@ApiOperation(httpMethod = "POST", value = "查询用户全部信息(user+detail)")
public JsonResult findUserFullInfoByPhone(String phoneNo) { public JsonResult findUserFullInfoByPhone(String phoneNo) {
if (StringUtils.isBlank(phoneNo)) { if (StringUtils.isBlank(phoneNo)) {
log.warn("[findUserFullInfoByPhone]phoneNo为空"); log.warn("[findUserFullInfoByPhone]phoneNo为空");
...@@ -359,6 +353,7 @@ public class InnerController implements IBaseController { ...@@ -359,6 +353,7 @@ public class InnerController implements IBaseController {
* @return * @return
*/ */
@RequestMapping("/user_full_info/search/uuid") @RequestMapping("/user_full_info/search/uuid")
@ApiOperation(httpMethod = "POST", value = "查询用户全部信息(user+detail)")
public JsonResult findUserFullInfoByUUuid(String uuid) { public JsonResult findUserFullInfoByUUuid(String uuid) {
if (StringUtils.isBlank(uuid)) { if (StringUtils.isBlank(uuid)) {
log.warn("[findUserFullInfoByUUuid]uuid为空"); log.warn("[findUserFullInfoByUUuid]uuid为空");
...@@ -381,6 +376,7 @@ public class InnerController implements IBaseController { ...@@ -381,6 +376,7 @@ public class InnerController implements IBaseController {
* @return * @return
*/ */
@RequestMapping("/user_detail/update") @RequestMapping("/user_detail/update")
@ApiOperation(httpMethod = "POST", value = "更新用户详情")
public JsonResult updateUserDetail(String qq, String email, Long userId) { public JsonResult updateUserDetail(String qq, String email, Long userId) {
if (Objects.isNull(userId) || userId == 0L) { if (Objects.isNull(userId) || userId == 0L) {
return JsonResult.buildErrorStateResult("userId为空", null); return JsonResult.buildErrorStateResult("userId为空", null);
...@@ -395,6 +391,7 @@ public class InnerController implements IBaseController { ...@@ -395,6 +391,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user_detail/update/qq") @RequestMapping("/user_detail/update/qq")
@ApiOperation(httpMethod = "POST", value = "更新用户QQ")
public JsonResult updateUserQQ(String qq, Long userId) { public JsonResult updateUserQQ(String qq, Long userId) {
if (StringUtils.isEmpty(qq) || userId == null || userId == 0L) { if (StringUtils.isEmpty(qq) || userId == null || userId == 0L) {
return JsonResult.buildErrorStateResult("参数校验失败,qq或用户id为空", null); return JsonResult.buildErrorStateResult("参数校验失败,qq或用户id为空", null);
...@@ -404,6 +401,7 @@ public class InnerController implements IBaseController { ...@@ -404,6 +401,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/contact/search/user_id") @RequestMapping("/contact/search/user_id")
@ApiOperation(httpMethod = "POST", value = "查询用户联系人")
public JsonResult findContactsByUserId(Long userId) { public JsonResult findContactsByUserId(Long userId) {
if (null == userId) { if (null == userId) {
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
...@@ -416,6 +414,7 @@ public class InnerController implements IBaseController { ...@@ -416,6 +414,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/contact/save/contacts") @RequestMapping("/contact/save/contacts")
@ApiOperation(httpMethod = "POST", value = "保存联系人")
public JsonResult save2Contact(Long userId, @RequestParam(value = "contacts") String contactsStr) { public JsonResult save2Contact(Long userId, @RequestParam(value = "contacts") String contactsStr) {
if (Objects.isNull(userId) || StringUtils.isBlank(contactsStr)) { if (Objects.isNull(userId) || StringUtils.isBlank(contactsStr)) {
log.warn("保存用户联系人:参数不完整:userId:{}, contacts:{}", userId, contactsStr); log.warn("保存用户联系人:参数不完整:userId:{}, contacts:{}", userId, contactsStr);
...@@ -439,6 +438,7 @@ public class InnerController implements IBaseController { ...@@ -439,6 +438,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/contact/update/contact") @RequestMapping("/contact/update/contact")
@ApiOperation(httpMethod = "POST", value = "更新用户联系人")
public JsonResult updateContact(@RequestParam Long contactId, @RequestParam(required = false) String name, public JsonResult updateContact(@RequestParam Long contactId, @RequestParam(required = false) String name,
@RequestParam(required = false) String phoneNo, @RequestParam(required = false) String phoneNo,
@RequestParam(required = false) Relation relation, String key, @RequestParam(required = false) Relation relation, String key,
...@@ -472,6 +472,7 @@ public class InnerController implements IBaseController { ...@@ -472,6 +472,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/address/search/user_id") @RequestMapping("/address/search/user_id")
@ApiOperation(httpMethod = "POST", value = "查询用户地址")
public JsonResult findAddressByUserId(Long userId) { public JsonResult findAddressByUserId(Long userId) {
if (userId == null) { if (userId == null) {
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
...@@ -484,6 +485,7 @@ public class InnerController implements IBaseController { ...@@ -484,6 +485,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/address/save") @RequestMapping("/address/save")
@ApiOperation(httpMethod = "POST", value = "保存用户地址")
public JsonResult saveAddress( public JsonResult saveAddress(
Long userId, Long provinceCode, Long cityCode, String city, Long userId, Long provinceCode, Long cityCode, String city,
Long districtCode, String district, String address, String province) { Long districtCode, String district, String address, String province) {
...@@ -517,6 +519,7 @@ public class InnerController implements IBaseController { ...@@ -517,6 +519,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user_ext_info/update") @RequestMapping("/user_ext_info/update")
@ApiOperation(httpMethod = "POST", value = "更新用户扩展信息")
public JsonResult updateMarryStatus( public JsonResult updateMarryStatus(
Long userId, IncomeEnum incomeEnum, IncomeRangeEnum incomeRangeEnum, Long userId, IncomeEnum incomeEnum, IncomeRangeEnum incomeRangeEnum,
OccupationEnum occupationEnum, EducationEnum educationEnum, Boolean hasCar, OccupationEnum occupationEnum, EducationEnum educationEnum, Boolean hasCar,
...@@ -567,37 +570,20 @@ public class InnerController implements IBaseController { ...@@ -567,37 +570,20 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user_detail/search_list") @RequestMapping("/user_detail/search_list")
@ApiOperation(httpMethod = "POST", value = "批量查询用户详情")
@TargetDataSource(type = DSType.SLAVE)
public JsonResult searchUserDetailList(String name, String phoneNo, String idNo) { public JsonResult searchUserDetailList(String name, String phoneNo, String idNo) {
log.info("searchUserDetailList ,param.name:{},phone:{},idNo:{},ip:{}", name, phoneNo, idNo, getIp()); log.info("searchUserDetailList ,param.name:{},phone:{},idNo:{},ip:{}", name, phoneNo, idNo, getIp());
if (StringUtils.isBlank(name) && StringUtils.isBlank(phoneNo) && StringUtils.isBlank(idNo)) { if (StringUtils.isBlank(name) && StringUtils.isBlank(phoneNo) && StringUtils.isBlank(idNo)) {
return JsonResult.buildErrorStateResult("至少必须满足一个条件不为空", null); return JsonResult.buildErrorStateResult("至少必须满足一个条件不为空", null);
} }
/*List<UserDetailVO> userDetails = userDetailService.searchUserDetailList(name, phoneNo, idNo); List<UserDetailVO> userDetails = userDetailService.searchUserDetailList(name, phoneNo, idNo);
return JsonResult.buildSuccessResult("success", userDetails);*/ return JsonResult.buildSuccessResult("success", userDetails);
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
if (StringUtils.isNotBlank(name)) {
builder.put("name", name);
}
if (StringUtils.isNotBlank(phoneNo)) {
builder.put(Constants.PHONE_NO, phoneNo);
}
if (StringUtils.isNotBlank(idNo)) {
builder.put("idNo", idNo);
}
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) {
log.warn("用户详情信息查询结果不完整:{}", s);
JsonResult.buildErrorStateResult("数据不完整", s);
}
return JSON.parseObject(s, JsonResult.class);
} }
@RequestMapping("/user_ext_info/search/user_id") @RequestMapping("/user_ext_info/search/user_id")
@ApiOperation(httpMethod = "POST", value = "查询用户扩展信息")
public JsonResult searchUserExtInfoByUserId(Long userId) { public JsonResult searchUserExtInfoByUserId(Long userId) {
if (userId == null) { if (userId == null) {
return JsonResult.buildErrorStateResult("userId不能为空", null); return JsonResult.buildErrorStateResult("userId不能为空", null);
...@@ -610,6 +596,7 @@ public class InnerController implements IBaseController { ...@@ -610,6 +596,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/query/openId") @RequestMapping("/user/query/openId")
@ApiOperation(httpMethod = "POST", value = "查询微信openId")
public JsonResult queryOpenIdByUserId(Long userId) { public JsonResult queryOpenIdByUserId(Long userId) {
if (userId == null) { if (userId == null) {
return JsonResult.buildErrorStateResult("userId不能为空", null); return JsonResult.buildErrorStateResult("userId不能为空", null);
...@@ -635,6 +622,7 @@ public class InnerController implements IBaseController { ...@@ -635,6 +622,7 @@ public class InnerController implements IBaseController {
* } * }
*/ */
@RequestMapping("/user-association/search") @RequestMapping("/user-association/search")
@ApiOperation(httpMethod = "POST", value = "查询用户user+userDetail")
public JsonResult findUserAssociationModel(Long id, String phoneNo, String uuid) { public JsonResult findUserAssociationModel(Long id, String phoneNo, String uuid) {
User user = null; User user = null;
if (!Objects.isNull(id) && id > 0) { if (!Objects.isNull(id) && id > 0) {
...@@ -729,7 +717,7 @@ public class InnerController implements IBaseController { ...@@ -729,7 +717,7 @@ public class InnerController implements IBaseController {
@ApiOperation(notes = "用户全量信息查询接口", value = "用户全量信息查询接口", nickname = "findUserAssociationModel") @ApiOperation(notes = "用户全量信息查询接口", value = "用户全量信息查询接口", nickname = "findUserAssociationModel")
@RequestMapping(path = "/user-association/search/userId", method = {RequestMethod.GET, RequestMethod.POST}) @RequestMapping(path = "/user-association/search/userId", method = {RequestMethod.GET, RequestMethod.POST})
public JsonResult findUserAssociationModelByUserId(@ApiParam(value = "用户ID", required = false) @RequestParam(name = "userId", required = false) Long userId, public JsonResult findUserAssociationModelByUserId(@ApiParam(value = "用户ID", required = false) @RequestParam(name = "userId", required = false) Long userId,
@ApiParam(value = "用户注册手机号", required = false) @RequestParam(name = "phoneNo", required = false) String phoneNo) { @ApiParam(value = "用户注册手机号", required = false) @RequestParam(name = "phoneNo", required = false) String phoneNo) {
boolean userIdOk = Objects.nonNull(userId) && userId > 0; boolean userIdOk = Objects.nonNull(userId) && userId > 0;
boolean phoneNoOk = ValidationUtil.validatePhoneNo(phoneNo); boolean phoneNoOk = ValidationUtil.validatePhoneNo(phoneNo);
if (!userIdOk && !phoneNoOk) { if (!userIdOk && !phoneNoOk) {
...@@ -870,28 +858,8 @@ public class InnerController implements IBaseController { ...@@ -870,28 +858,8 @@ public class InnerController implements IBaseController {
return Objects.equals(enable, user.getEnable()); return Objects.equals(enable, user.getEnable());
} }
/**
* 清除用户缓存信息
*
* @param phoneNo
* @return
*/
@RequestMapping("/flush/cache")
public JsonResult flushCache(String phoneNo) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号格式错误", null);
}
User user = userService.findByPhoneInDb(phoneNo);
if (null == user) {
return JsonResult.buildErrorStateResult("未查询到该用户,用户phoneNo:" + phoneNo, null);
}
sessionService.deleteByUserId(user.getId());
sessionService.deleteUserCatch(user);
log.info("删除用户缓存信息,phoneNo:{},userId:{},", user.getPhoneNo(), user.getId());
return JsonResult.buildSuccessResult("用户缓存信息已经删除", null);
}
@RequestMapping("/user/spouse/save") @RequestMapping("/user/spouse/save")
@ApiOperation(value = "保存配偶信息", httpMethod = "POST")
public JsonResult saveSpouse(Long userId, MaritalStatus status, String spousePhone, String spouseName) { public JsonResult saveSpouse(Long userId, MaritalStatus status, String spousePhone, String spouseName) {
if (userId == null || userId == 0) { if (userId == null || userId == 0) {
return JsonResult.buildErrorStateResult("用户不能为空", null); return JsonResult.buildErrorStateResult("用户不能为空", null);
...@@ -919,6 +887,7 @@ public class InnerController implements IBaseController { ...@@ -919,6 +887,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/spouse/findByUserId") @RequestMapping("/user/spouse/findByUserId")
@ApiOperation(value = "查询配偶信息", httpMethod = "POST")
public JsonResult querySpouse(Long userId) { public JsonResult querySpouse(Long userId) {
if (userId == null || userId == 0) { if (userId == null || userId == 0) {
return JsonResult.buildErrorStateResult("用户不能为空", null); return JsonResult.buildErrorStateResult("用户不能为空", null);
...@@ -932,6 +901,7 @@ public class InnerController implements IBaseController { ...@@ -932,6 +901,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/findByPhones") @RequestMapping("/user/findByPhones")
@ApiOperation(value = "根据手机号查询用户信息", httpMethod = "POST")
public JsonResult getUserIdByPhones(@RequestParam("userPhones") String userPhones) { public JsonResult getUserIdByPhones(@RequestParam("userPhones") String userPhones) {
if (StringUtils.isBlank(userPhones)) { if (StringUtils.isBlank(userPhones)) {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null); return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
...@@ -939,7 +909,7 @@ public class InnerController implements IBaseController { ...@@ -939,7 +909,7 @@ public class InnerController implements IBaseController {
List<String> phones = JSONObject.parseObject(userPhones, new TypeReference<List<String>>() { List<String> phones = JSONObject.parseObject(userPhones, new TypeReference<List<String>>() {
}); });
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(phones)) { if (org.apache.commons.collections.CollectionUtils.isNotEmpty(phones)) {
if (!(phones.size() > 500)) { if (!(phones.size() > MAX_SIZE)) {
List<User> users = userService.findByPhones(phones); List<User> users = userService.findByPhones(phones);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(users)) { if (org.apache.commons.collections.CollectionUtils.isNotEmpty(users)) {
return JsonResult.buildSuccessResult(null, users.stream().collect(Collectors.toMap(User::getPhoneNo, User::getId))); return JsonResult.buildSuccessResult(null, users.stream().collect(Collectors.toMap(User::getPhoneNo, User::getId)));
...@@ -952,16 +922,43 @@ public class InnerController implements IBaseController { ...@@ -952,16 +922,43 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null); return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
} }
private static long MAX_SIZE = 500L;
/** /**
* 手机号批量查询uuid * 手机号批量查询uuid
* todo 代码增加读写分离. 这里需要查从库
* *
* @param userPhones * @param userPhones
* @return * @return
*/ */
@RequestMapping("/uuid/findByPhones") @RequestMapping("/uuid/findByPhones")
@ApiOperation(value = "根据手机号批量查询UUID", httpMethod = "POST")
@TargetDataSource(type = DSType.SLAVE)
public JsonResult getUuidsByPhones(@RequestParam("userPhones") String userPhones) { public JsonResult getUuidsByPhones(@RequestParam("userPhones") String userPhones) {
return JsonResult.buildErrorStateResult("主库不提供查询", null); if (StringUtils.isBlank(userPhones)) {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
}
List<String> phones = JSONObject.parseObject(userPhones, new TypeReference<List<String>>() {
});
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(phones)) {
if (!(phones.size() > MAX_SIZE)) {
List<UserInfo> userInfos = userService.findUserInfosByPhones(phones);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(userInfos)) {
Map<String, UserInfo> userInfoMap = Maps.newHashMapWithExpectedSize(userInfos.size());
userInfos.forEach(userInfo -> {
userInfoMap.put(userInfo.getPhoneNo(), userInfo);
});
return JsonResult.buildSuccessResult(null, userInfoMap);
} else {
return JsonResult.buildSuccessResult(null, null);
}
}
return JsonResult.buildErrorStateResult("uuid单次批量查询不可超过500个手机号", null);
}
return JsonResult.buildErrorStateResult("uuid批量传入用户手机号不可为空", null);
} }
/** /**
...@@ -971,6 +968,7 @@ public class InnerController implements IBaseController { ...@@ -971,6 +968,7 @@ public class InnerController implements IBaseController {
* 保存用户信息,其中地址信息和联系人信息为非必要条件;注意:如果同时提供了province和address字段则需要保证Address的完整 * 保存用户信息,其中地址信息和联系人信息为非必要条件;注意:如果同时提供了province和address字段则需要保证Address的完整
*/ */
@RequestMapping("/user/save_multi") @RequestMapping("/user/save_multi")
@ApiOperation(value = "保存多种用户信息", httpMethod = "POST")
public JsonResult saveMulti( public JsonResult saveMulti(
String registeredFrom, String registeredFrom,
String channelId, String channelId,
...@@ -1059,6 +1057,7 @@ public class InnerController implements IBaseController { ...@@ -1059,6 +1057,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/user/register") @RequestMapping("/user/register")
@ApiOperation(value = "用户注册", httpMethod = "POST")
public JsonResult register(String phoneNo, String password, Long channelId) { public JsonResult register(String phoneNo, String password, Long channelId) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) { if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号不正确", null); return JsonResult.buildErrorStateResult("手机号不正确", null);
...@@ -1076,6 +1075,7 @@ public class InnerController implements IBaseController { ...@@ -1076,6 +1075,7 @@ public class InnerController implements IBaseController {
//根据日期时间段查询新注册用户信息并返回 //根据日期时间段查询新注册用户信息并返回
@RequestMapping("/contract/queryRegisterUsers") @RequestMapping("/contract/queryRegisterUsers")
@ApiOperation(value = "根据日期时间段查询新注册用户信息并返回", httpMethod = "POST")
public JsonResult findRegisterUserByTime(String beginTime, String endTime) { public JsonResult findRegisterUserByTime(String beginTime, String endTime) {
if (null == beginTime || endTime == null) { if (null == beginTime || endTime == null) {
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
...@@ -1116,6 +1116,7 @@ public class InnerController implements IBaseController { ...@@ -1116,6 +1116,7 @@ public class InnerController implements IBaseController {
* @return * @return
*/ */
@RequestMapping("/verifyPhoneAndCode") @RequestMapping("/verifyPhoneAndCode")
@ApiOperation(value = "验证手机号和验证码是否匹配", httpMethod = "POST")
public JsonResult verifyPhoneAndCode( public JsonResult verifyPhoneAndCode(
@RequestParam String phoneNo, @RequestParam String verificationCode, @RequestParam String phoneNo, @RequestParam String verificationCode,
@RequestParam String appChannel, @RequestParam String appChannel,
...@@ -1165,6 +1166,7 @@ public class InnerController implements IBaseController { ...@@ -1165,6 +1166,7 @@ public class InnerController implements IBaseController {
} }
@RequestMapping("/login") @RequestMapping("/login")
@ApiOperation(value = "登陆....怎么又一个...", httpMethod = "POST")
public JsonResult login(@RequestParam String phoneNo, @RequestParam String password) { public JsonResult login(@RequestParam String phoneNo, @RequestParam String password) {
User user = checkPhoneNoAndPassword(phoneNo, password); User user = checkPhoneNoAndPassword(phoneNo, password);
if (user == null) { if (user == null) {
...@@ -1211,6 +1213,7 @@ public class InnerController implements IBaseController { ...@@ -1211,6 +1213,7 @@ public class InnerController implements IBaseController {
* @return * @return
*/ */
@RequestMapping("/user/enable") @RequestMapping("/user/enable")
@ApiOperation(value = "查看用户是否存在,存在则返回id,uuid", httpMethod = "POST")
public JsonResult isEnable(String phoneNo) { public JsonResult isEnable(String phoneNo) {
boolean flag = false; boolean flag = false;
Map validMap = Maps.newHashMap(); Map validMap = Maps.newHashMap();
......
...@@ -32,32 +32,11 @@ public class UserApiController { ...@@ -32,32 +32,11 @@ public class UserApiController {
@Resource @Resource
private IUserService userService; private IUserService userService;
@Resource @Resource
private IUserApiService userApiService;
@Resource
private ISessionService sessionService; private ISessionService sessionService;
@Resource @Resource
@Qualifier("stringRedisTemplate") @Qualifier("stringRedisTemplate")
private RedisTemplate<String, String> 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") @RequestMapping("/user/is_passwd_set")
public JsonResult isPasswordSet(String key, String phoneNo) { public JsonResult isPasswordSet(String key, String phoneNo) {
if (!"abc1234".equals(key) || StringUtils.isEmpty(phoneNo)) { if (!"abc1234".equals(key) || StringUtils.isEmpty(phoneNo)) {
......
...@@ -12,6 +12,7 @@ import cn.quantgroup.xyqb.service.user.*; ...@@ -12,6 +12,7 @@ import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.util.EmojiUtil; import cn.quantgroup.xyqb.util.EmojiUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -56,6 +57,7 @@ public class UserCenterController { ...@@ -56,6 +57,7 @@ public class UserCenterController {
*/ */
@PasswordFreeAccessValidator @PasswordFreeAccessValidator
@RequestMapping("/index") @RequestMapping("/index")
@ApiOperation(value = "用户中心首页", notes = "用户中心首页显示头像, 昵称, 姓名", httpMethod = "POST")
public JsonResult userCenterIndex(String phoneNo) { public JsonResult userCenterIndex(String phoneNo) {
Long userId = queryUserId(phoneNo); Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) { if (null == userId || userId == 0L) {
...@@ -83,6 +85,7 @@ public class UserCenterController { ...@@ -83,6 +85,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/queryNick") @RequestMapping("/queryNick")
@ApiOperation(value = "查询昵称", notes = "查询用户昵称", httpMethod = "POST")
public JsonResult queryUserNick(String phoneNo) { public JsonResult queryUserNick(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) { if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo); LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
...@@ -108,6 +111,7 @@ public class UserCenterController { ...@@ -108,6 +111,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/saveNick") @RequestMapping("/saveNick")
@ApiOperation(value = "保存昵称", notes = "保存用户昵称", httpMethod = "POST")
public JsonResult saveUserNick(String phoneNo, String nick) { public JsonResult saveUserNick(String phoneNo, String nick) {
if (StringUtils.isEmpty(phoneNo)) { if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo); LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
...@@ -133,6 +137,7 @@ public class UserCenterController { ...@@ -133,6 +137,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/save/avatar") @RequestMapping("/save/avatar")
@ApiOperation(value = "保存头像", notes = "保存用户头像", httpMethod = "POST")
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) { 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); LOGGER.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
...@@ -160,6 +165,7 @@ public class UserCenterController { ...@@ -160,6 +165,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/query/verified") @RequestMapping("/query/verified")
@ApiOperation(value = "查询用户是否实名认证", notes = "查询用户是否实名认证", httpMethod = "POST")
public JsonResult queryVerified(String phoneNo) { public JsonResult queryVerified(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) { if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo); LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
...@@ -185,6 +191,7 @@ public class UserCenterController { ...@@ -185,6 +191,7 @@ public class UserCenterController {
*/ */
@PasswordFreeAccessValidator @PasswordFreeAccessValidator
@RequestMapping("/personalData") @RequestMapping("/personalData")
@ApiOperation(value = "查询个人资料信息", notes = "查询个人资料信息", httpMethod = "POST")
public JsonResult personalData(String phoneNo) { public JsonResult personalData(String phoneNo) {
if (StringUtils.isBlank(phoneNo)) { if (StringUtils.isBlank(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo); LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
...@@ -226,6 +233,7 @@ public class UserCenterController { ...@@ -226,6 +233,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/contacts/save") @RequestMapping("/contacts/save")
@ApiOperation(value = "保存用户联系人", notes = "保存用户联系人", httpMethod = "POST")
public JsonResult saveUserContact(String phoneNo, String contactJson) { public JsonResult saveUserContact(String phoneNo, String contactJson) {
if (StringUtils.isEmpty(phoneNo)) { if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("保存联系人,参数错误. phoneNo:{}", phoneNo); LOGGER.error("保存联系人,参数错误. phoneNo:{}", phoneNo);
...@@ -267,6 +275,7 @@ public class UserCenterController { ...@@ -267,6 +275,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/address/save") @RequestMapping("/address/save")
@ApiOperation(value = "保存用户地址", notes = "保存用户地址", httpMethod = "POST")
public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address, public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address,
Long districtCode, String district) { Long districtCode, String district) {
LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address); LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address);
...@@ -311,6 +320,7 @@ public class UserCenterController { ...@@ -311,6 +320,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/searchAddress/phoneNo") @RequestMapping("/searchAddress/phoneNo")
@ApiOperation(value = "查询用户地址", notes = "查询用户地址", httpMethod = "POST")
public JsonResult searchUserAddress(String phoneNo) { public JsonResult searchUserAddress(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) { if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
...@@ -331,6 +341,7 @@ public class UserCenterController { ...@@ -331,6 +341,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/searchContacts/phoneNo") @RequestMapping("/searchContacts/phoneNo")
@ApiOperation(value = "查询用户联系人", notes = "查询用户联系人", httpMethod = "POST")
public JsonResult searchUserContacts(String phoneNo) { public JsonResult searchUserContacts(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) { if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null); return JsonResult.buildErrorStateResult(null, null);
...@@ -354,6 +365,7 @@ public class UserCenterController { ...@@ -354,6 +365,7 @@ public class UserCenterController {
* @return * @return
*/ */
@RequestMapping("/save/userExtInfo") @RequestMapping("/save/userExtInfo")
@ApiOperation(value = "保存用户经济学历等信息", notes = "保存用户经济学历等信息", httpMethod = "POST")
public JsonResult saveUserExtInfo(String phoneNo, EducationEnum educationEnum, MaritalStatus maritalStatus, IncomeRangeEnum incomeRangeEnum, OccupationEnum occupationEnum) { 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); return JsonResult.buildErrorStateResult(null, null);
......
...@@ -78,13 +78,6 @@ public class UserController implements IBaseController { ...@@ -78,13 +78,6 @@ public class UserController implements IBaseController {
@Autowired @Autowired
private IUserRegisterService userRegisterService; 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 { ...@@ -190,7 +183,7 @@ public class UserController implements IBaseController {
verifyPhoneAndCode(phoneNo, verificationCode); verifyPhoneAndCode(phoneNo, verificationCode);
User user = userService.findByPhoneWithCache(phoneNo); User user = userService.findByPhoneWithCache(phoneNo);
if (user != null && !user.getEnable()) { if (user != null && !user.getEnable()) {
log.error("用户不存在,或者已经注销,phoneNo:{}", phoneNo); log.info("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("登录失败", null); return JsonResult.buildErrorStateResult("登录失败", null);
} }
if (user == null) { if (user == null) {
......
...@@ -23,10 +23,6 @@ public enum MaritalStatus { ...@@ -23,10 +23,6 @@ public enum MaritalStatus {
return description; return description;
} }
public void setDescription(String description) {
this.description = description;
}
@Override @Override
public String toString() { public String toString() {
String sb = "MaritalStatus{" + "description='" + description + '\'' + 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 { ...@@ -18,10 +18,6 @@ public enum Gender {
return name; return name;
} }
public void setName(String name) {
this.name = name;
}
@Override @Override
public String toString() { public String toString() {
return name; return name;
......
...@@ -26,10 +26,6 @@ public enum IdType { ...@@ -26,10 +26,6 @@ public enum IdType {
return name; return name;
} }
public void setName(String name) {
this.name = name;
}
@Override @Override
public String toString() { public String toString() {
return name; return name;
......
...@@ -79,14 +79,4 @@ public enum SmsMerchant { ...@@ -79,14 +79,4 @@ public enum SmsMerchant {
} }
return merchant; 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; ...@@ -9,8 +9,6 @@ import java.util.Optional;
*/ */
public interface IUserApiService { public interface IUserApiService {
boolean userImportCheck(String phoneNo);
/** /**
* 根据uuid查询用户完整信息 * 根据uuid查询用户完整信息
* *
......
...@@ -3,9 +3,7 @@ package cn.quantgroup.xyqb.service.api.impl; ...@@ -3,9 +3,7 @@ package cn.quantgroup.xyqb.service.api.impl;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail; import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserFullInfo; 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.api.IUserApiService;
import cn.quantgroup.xyqb.service.model.IModelService;
import cn.quantgroup.xyqb.service.user.IUserDetailService; import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService; import cn.quantgroup.xyqb.service.user.IUserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -19,29 +17,11 @@ import java.util.Optional; ...@@ -19,29 +17,11 @@ import java.util.Optional;
@Service @Service
public class UserApiServiceImpl implements IUserApiService { public class UserApiServiceImpl implements IUserApiService {
@Autowired
private IModelService modelService;
@Autowired @Autowired
private IUserService userService; private IUserService userService;
@Autowired @Autowired
private IUserDetailService userDetailService; 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 @Override
public Optional<UserFullInfo> getUserFullInfoByUuid(String uuid) { public Optional<UserFullInfo> getUserFullInfoByUuid(String uuid) {
User user = userService.findByUuidWithCache(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 { ...@@ -78,7 +78,7 @@ public class SmsServiceImpl implements ISmsService {
getSmsSender().sendMsg(msgParams); getSmsSender().sendMsg(msgParams);
log.info("注册完成,发送短信, phoneNo:{}", phoneNo); log.info("注册完成,发送短信, phoneNo:{}", phoneNo);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("注册完成短信发送异常", e);
} }
} }
......
...@@ -6,23 +6,6 @@ package cn.quantgroup.xyqb.service.user; ...@@ -6,23 +6,6 @@ package cn.quantgroup.xyqb.service.user;
*/ */
public interface ILkbUserService { 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 { ...@@ -42,4 +42,6 @@ public interface IUserDetailService {
* @return 受影响的行数 * @return 受影响的行数
*/ */
int updateIdCard(String name, String idNo, String phoneNo); int updateIdCard(String name, String idNo, String phoneNo);
List<UserDetail> findByPhones(List<String> phoneNos);
} }
package cn.quantgroup.xyqb.service.user; package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserInfo;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -39,4 +40,6 @@ public interface IUserService { ...@@ -39,4 +40,6 @@ public interface IUserService {
*/ */
int forbiddenUser(Boolean enable, String phoneNo); int forbiddenUser(Boolean enable, String phoneNo);
List<UserInfo> findUserInfosByPhones(List<String> phones);
} }
...@@ -5,8 +5,6 @@ import cn.quantgroup.xyqb.service.http.IHttpService; ...@@ -5,8 +5,6 @@ import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.ILkbUserService; import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.util.JsonUtil; import cn.quantgroup.xyqb.util.JsonUtil;
import cn.quantgroup.xyqb.util.PasswordUtil; import cn.quantgroup.xyqb.util.PasswordUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -14,7 +12,6 @@ import org.slf4j.Logger; ...@@ -14,7 +12,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map; import java.util.Map;
...@@ -39,54 +36,6 @@ public class LkbUserviceImpl implements ILkbUserService { ...@@ -39,54 +36,6 @@ public class LkbUserviceImpl implements ILkbUserService {
@Value("${lkb.client.url}") @Value("${lkb.client.url}")
private String clientUrl; 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 @Override
public boolean pushUser(String uuid, String phoneNo, String name, String idNo) { public boolean pushUser(String uuid, String phoneNo, String name, String idNo) {
String timeunit = System.currentTimeMillis() + ""; String timeunit = System.currentTimeMillis() + "";
...@@ -103,7 +52,7 @@ public class LkbUserviceImpl implements ILkbUserService { ...@@ -103,7 +52,7 @@ public class LkbUserviceImpl implements ILkbUserService {
if (StringUtils.isNotBlank(idNo)) { if (StringUtils.isNotBlank(idNo)) {
parameters.put("idCardNo", 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); Optional<Map> resultOptional = JsonUtil.fromJson(response, Map.class);
if (!resultOptional.isPresent() || !"0000".equals(resultOptional.get().get("code"))) { if (!resultOptional.isPresent() || !"0000".equals(resultOptional.get().get("code"))) {
LOGGER.error("[lkb_user_push]向LKB同步用户失败,phoneNo:{},response={}", phoneNo, response); LOGGER.error("[lkb_user_push]向LKB同步用户失败,phoneNo:{},response={}", phoneNo, response);
......
...@@ -64,7 +64,7 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service { ...@@ -64,7 +64,7 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_FAILED_COUNT_MINUTES, TimeUnit.MINUTES); stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_FAILED_COUNT_MINUTES, TimeUnit.MINUTES);
} }
Long count = stringRedisTemplate.opsForValue().increment(ipv4Key, 1L); 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); lockErrorIpv4(ipv4, count);
} }
} }
......
...@@ -197,4 +197,13 @@ public class UserDetailServiceImpl implements IUserDetailService { ...@@ -197,4 +197,13 @@ public class UserDetailServiceImpl implements IUserDetailService {
} }
return 0; 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; ...@@ -2,9 +2,13 @@ package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User; 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.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService; import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil; import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
...@@ -16,6 +20,7 @@ import org.springframework.stereotype.Service; ...@@ -16,6 +20,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -31,6 +36,9 @@ public class UserServiceImpl implements IUserService { ...@@ -31,6 +36,9 @@ public class UserServiceImpl implements IUserService {
RedisTemplate<String, String> stringRedisTemplate; RedisTemplate<String, String> stringRedisTemplate;
@Autowired @Autowired
private IUserRepository userRepository; private IUserRepository userRepository;
@Autowired
private IUserDetailService userDetailService;
@Override @Override
@Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager") @Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
...@@ -137,4 +145,34 @@ public class UserServiceImpl implements IUserService { ...@@ -137,4 +145,34 @@ public class UserServiceImpl implements IUserService {
return userRepository.forbiddenUser(enable, phoneNo); 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" ?> <?xml version="1.0" encoding="UTF-8" ?>
<configuration> <configuration>
<springProperty name="spring.application.name" source="spring.application.name"/> <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}"/> <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"> <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