Commit a0acda43 authored by xiaoguang.xu's avatar xiaoguang.xu

feat: 回复findByPhones 接口. 暂时未增加读写分离.

parent 6b2cd7d7
......@@ -102,7 +102,6 @@ public class InnerController implements IBaseController {
};
@RequestMapping("/user/search/phoneNo")
public JsonResult findByPhoneNo(String phoneNo) {
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
......@@ -110,7 +109,6 @@ public class InnerController implements IBaseController {
}
UserRet userRet = new UserRet(user);
return JsonResult.buildSuccessResult("", userRet);
}
......@@ -271,9 +269,9 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("用户手机号不匹配", null);
}
Timestamp now = new Timestamp(System.currentTimeMillis());
/*
* 如果已存在记录,则更新
*/
/*
* 如果已存在记录,则更新
*/
UserDetail userDetail = userDetailService.findByUserId(userId);
if (Objects.isNull(userDetail)) {
userDetail = userDetailService.findByPhoneNo(phoneNo);
......@@ -970,17 +968,41 @@ public class InnerController implements IBaseController {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
}
private static long MAX_SIZE = 500L;
/**
* 手机号批量查询uuid
* todo 代码增加读写分离. 这里需要查从库
*
* @param userPhones
* @return
*/
@RequestMapping("/uuid/findByPhones")
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);
}
/**
......
......@@ -42,4 +42,6 @@ public interface IUserDetailService {
* @return 受影响的行数
*/
int updateIdCard(String name, String idNo, String phoneNo);
List<UserDetail> findByPhones(List<String> phoneNos);
}
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserInfo;
import java.util.List;
import java.util.Map;
......@@ -39,4 +40,6 @@ public interface IUserService {
*/
int forbiddenUser(Boolean enable, String phoneNo);
List<UserInfo> findUserInfosByPhones(List<String> phones);
}
......@@ -197,4 +197,13 @@ public class UserDetailServiceImpl implements IUserDetailService {
}
return 0;
}
@Override
public List<UserDetail> findByPhones(List<String> phoneNos) {
List<UserDetail> userDetails = userDetailRepository.findAll((root, query, cb) -> {
query.where(root.get("phoneNo").as(String.class).in(phoneNos));
return query.getRestriction();
});
return userDetails;
}
}
......@@ -2,9 +2,13 @@ package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
......@@ -16,6 +20,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -31,6 +36,9 @@ public class UserServiceImpl implements IUserService {
RedisTemplate<String, String> stringRedisTemplate;
@Autowired
private IUserRepository userRepository;
@Autowired
private IUserDetailService userDetailService;
@Override
@Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
......@@ -137,4 +145,34 @@ public class UserServiceImpl implements IUserService {
return userRepository.forbiddenUser(enable, phoneNo);
}
@Override
public List<UserInfo> findUserInfosByPhones(List<String> phones) {
List<User> users = findByPhones(phones);
if(CollectionUtils.isEmpty(phones)){
return Collections.emptyList();
}
List<UserDetail> userDetails= userDetailService.findByPhones(phones);
if (!CollectionUtils.isEmpty(users)) {
Map<Long, User> userMap = Maps.newHashMapWithExpectedSize(users.size());
users.forEach(user -> {
userMap.put(user.getId(), user);
});
if (!CollectionUtils.isEmpty(userDetails)) {
List<UserInfo> userInfos = Lists.newArrayListWithExpectedSize(userDetails.size());
userDetails.forEach(userDetail -> {
UserInfo userInfo = new UserInfo(userMap.get(userDetail.getUserId()), userDetail);
userInfos.add(userInfo);
});
return userInfos;
}
}
return Collections.emptyList();
}
}
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