Commit 272a6472 authored by 技术部-任文超's avatar 技术部-任文超

增加两个接口:1、根据用户主键批量获取用户实名信息;2、根据手机号或身份证号查询用户UUID

parent 62efa1b3
......@@ -38,6 +38,7 @@ import cn.quantgroup.tech.db.DSType;
import cn.quantgroup.tech.db.TargetDataSource;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.entity.enumerate.*;
......@@ -104,6 +105,24 @@ public class InnerController implements IBaseController {
'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};
/**
* 根据手机号或身份证号查询用户UUID
* @param phoneNo - 手机号
* @param idNo - 身份证号
* @return user表的uuid
*/
@IpValidator
@RequestMapping("/fetchUuid")
@ApiOperation(httpMethod = "POST", value = "根据手机号或身份证号查询用户UUID")
public JsonResult fetchUuid(String phoneNo, String idNo) {
String uuid = userService.findUuid(phoneNo, idNo);
log.info("根据手机号或身份证号查询用户UUID,phoneNo:{},idNo:{},uuid:{}", phoneNo, idNo, uuid);
if (org.apache.commons.lang.StringUtils.isBlank(uuid)) {
return JsonResult.buildErrorStateResult("未找到该用户", null);
}
return JsonResult.buildSuccessResult(null, uuid);
}
@RequestMapping("/user/search/phoneNo")
@ApiOperation(httpMethod = "GET", value = "根据手机号查询用户信息")
public JsonResult findByPhoneNo(String phoneNo) {
......
package cn.quantgroup.xyqb.controller.external.user;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.IdCardInfo;
......@@ -11,17 +29,6 @@ import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import cn.quantgroup.xyqb.validator.ChineseName;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Timestamp;
import java.util.Objects;
/**
* 同步用户数据,第三方模块访问时
......@@ -130,4 +137,22 @@ public class SyncUserController {
UserModel userModel = new UserModel(user, detail);
return JsonResult.buildSuccessResult(null, userModel);
}
/**
* 根据用户主键批量获取用户实名信息
* @param userIds - 多个之间用英文,分隔
* @return List<UserDetail>
*/
@IpValidator
@RequestMapping("/listByUserIds")
@ApiOperation(httpMethod = "POST", value = "根据用户主键批量获取用户实名信息")
public JsonResult listByUserIds(String userIds) {
if (!ValidationUtil.validateNumbers(userIds)) {
return JsonResult.buildErrorStateResult("参数不正确", null);
}
userIds = ValidationUtil.filterNumbers(userIds);
List<Long> userIdList = Arrays.asList(userIds.split(",|;")).stream().map(userId -> Long.valueOf(userId)).collect(Collectors.toList());
List<UserDetail> userDetailList = userDetailService.findByUserIdIn(userIdList);
return JsonResult.buildSuccessResult(null, userDetailList);
}
}
......@@ -20,6 +20,22 @@ public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecifica
User findByUuid(String uuid);
/**
* 根据手机号查询用户UUID
* @param phoneNo - 手机号
* @return user表的uuid
*/
@Query(value = "select uuid from user where phone_no=?1", nativeQuery = true)
String findUuidByPhoneNo(String phoneNo);
/**
* 根据身份证号查询用户UUID
* @param idNo - 身份证号
* @return user表的uuid
*/
@Query(value = "select uuid from user where id=(select user_id from user_detail where id_no=?1) ", nativeQuery = true)
String findUuidByIdNo(String idNo);
List<User> findByIdIn(List<Long> ids);
User findById(Long id);
......
......@@ -23,6 +23,14 @@ public interface IUserService {
User findByUuidInDb(String uuid);
/**
* 根据手机号或身份证号查询用户UUID
* @param phoneNo - 手机号
* @param idNo - 身份证号
* @return user表的uuid
*/
String findUuid(String phoneNo, String idNo);
Map<Long, String> findPhoneByIdsInDb(List<Long> userIds);
User saveUser(User user);
......
......@@ -27,6 +27,7 @@ import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
/**
* Created by Miraculous on 15/7/5.
......@@ -65,6 +66,19 @@ public class UserServiceImpl implements IUserService {
return userRepository.findByUuid(uuid);
}
@Override
public String findUuid(String phoneNo, String idNo) {
// 优先按手机号查
if(ValidationUtil.validatePhoneNo(phoneNo)){
return userRepository.findUuidByPhoneNo(phoneNo);
}
// 按身份证号查
if(StringUtils.isNotBlank(idNo)){
return userRepository.findUuidByIdNo(idNo);
}
return null;
}
@Override
@CacheEvict(value = "usercache", key = "'xyqbuser' + #user.phoneNo", cacheManager = "cacheManager")
public User saveUser(User user) {
......
......@@ -25,6 +25,9 @@ public class ValidationUtil {
private static final String ipv4RegExp = "^((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\\.){3}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)$";
private static final String localIpv4RegExp = "^((172\\.(1[0-6]|2[0-9]|3[01]))|(192\\.168|169\\.254)|((127|10)\\.(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)))(\\.(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)){2}$";
private static final String tokenRegExp = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$";
public static final String numberRegExp = "^([0-9]+)((,|;)+[0-9]+)+$";
public static final String numberFilterRegExp = "(,|;)+\\s*(,|;)+";
private static final Pattern phonePattern = Pattern.compile(phoneRegExp);
private static final Pattern chinesePattern = Pattern.compile(chineseNameRegExp);
......@@ -32,6 +35,7 @@ public class ValidationUtil {
private static final Pattern ipv4Pattern = Pattern.compile(ipv4RegExp);
private static final Pattern localIpv4Pattern = Pattern.compile(localIpv4RegExp);
private static final Pattern tokenPattern = Pattern.compile(tokenRegExp);
public static final Pattern numberPattern = Pattern.compile(numberRegExp);
/**
* 是否是合法的中国大陆手机号
......@@ -113,6 +117,33 @@ public class ValidationUtil {
return matcher.find();
}
/**
* 是否是合法的多个数值串
*
* @param numbers
* @return
*/
public static boolean validateNumbers(String numbers) {
if (StringUtils.isBlank(numbers)) {
return false;
}
Matcher matcher = numberPattern.matcher(numbers);
return matcher.find();
}
/**
* 过滤掉合法的多个数值串间的空白值
*
* @param numbers
* @return
*/
public static String filterNumbers(String numbers) {
if (!validateNumbers(numbers)) {
return null;
}
return numbers.replaceAll(numberFilterRegExp, ",");
}
/**
* 验证密令
* 私钥 + 操作 + 时
......
package common;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import cn.quantgroup.xyqb.util.ValidationUtil;
@Slf4j
@RunWith(JUnit4.class)
public class TestJdk8 {
@Test
public void testString() {
String userIds = "1,2;3,4;5,,;6";
log.info("userIds:{}", userIds);
Assert.assertTrue(userIds, ValidationUtil.validateNumbers(userIds));
String formatUserIds = ValidationUtil.filterNumbers(userIds);
log.info("formatUserIds:{}", formatUserIds);
List<String> userIdStrList = Arrays.asList(formatUserIds.split(",|;"));
log.info("userIdStrList:{}", userIdStrList);
List<Long> userIdList = userIdStrList.stream().map(userId -> Long.valueOf(userId)).collect(Collectors.toList());
log.info("userIdList:{}", userIdList);
assert true;
}
}
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