Commit 32f74a41 authored by minminyan's avatar minminyan

http支持批量查询userId的手机号,返回id+phone的map

当请求数据量过大时一次只拿1000条,休息1ms,确保服务不挂
parent 46092b41
...@@ -21,6 +21,7 @@ import java.sql.Timestamp; ...@@ -21,6 +21,7 @@ import java.sql.Timestamp;
import java.text.ParseException; import java.text.ParseException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* Created by Miraculous on 2016/12/19. * Created by Miraculous on 2016/12/19.
...@@ -69,6 +70,18 @@ public class InnerController { ...@@ -69,6 +70,18 @@ public class InnerController {
return JsonResult.buildSuccessResult("", userRet); return JsonResult.buildSuccessResult("", userRet);
} }
@RequestMapping("/user/getPhoneByUserIds")
public JsonResult findByIds(@RequestParam(value = "userIds") String userIdsString) {
LOGGER.info("批量查询用户的手机号列表, userIdsString:" + userIdsString);
if (StringUtils.isEmpty(userIdsString)) {
return JsonResult.buildErrorStateResult(null, null);
}
List<Long> userIds = JSONObject.parseObject(userIdsString, new TypeReference<List<Long>>() {
});
Map<Long, String> userIdAndPhoneMap = userService.findPhoneByIdsInDb(userIds);
return JsonResult.buildSuccessResult("", userIdAndPhoneMap);
}
@RequestMapping("/user/save") @RequestMapping("/user/save")
public JsonResult saveUser( public JsonResult saveUser(
String phoneNo, Long registeredFrom, Long createdAt, Long updatedAt, String phoneNo, Long registeredFrom, Long createdAt, Long updatedAt,
......
...@@ -3,6 +3,8 @@ package cn.quantgroup.xyqb.repository; ...@@ -3,6 +3,8 @@ package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
/** /**
* Created by Miraculous on 15/7/4. * Created by Miraculous on 15/7/4.
*/ */
...@@ -12,5 +14,7 @@ public interface IUserRepository extends JpaRepository<User, Long> { ...@@ -12,5 +14,7 @@ public interface IUserRepository extends JpaRepository<User, Long> {
User findByUuid(String uuid); User findByUuid(String uuid);
List<User> findByIdIn(List<Long> ids);
User findById(Long id); User findById(Long id);
} }
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.entity.WechatUserInfo;
import java.util.List;
import java.util.Map;
/** /**
* Created by Miraculous on 15/7/5. * Created by Miraculous on 15/7/5.
...@@ -24,6 +26,8 @@ public interface IUserService { ...@@ -24,6 +26,8 @@ public interface IUserService {
User findByUuidInDb(String uuid); User findByUuidInDb(String uuid);
Map<Long, String> findPhoneByIdsInDb(List<Long> userIds);
User saveUser(User user); User saveUser(User user);
User findById(Long userId); User findById(Long userId);
......
...@@ -7,21 +7,27 @@ import cn.quantgroup.xyqb.service.sms.ISmsService; ...@@ -7,21 +7,27 @@ import cn.quantgroup.xyqb.service.sms.ISmsService;
import cn.quantgroup.xyqb.service.user.ILkbUserService; import cn.quantgroup.xyqb.service.user.ILkbUserService;
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.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* Created by Miraculous on 15/7/5. * Created by Miraculous on 15/7/5.
*/ */
@Service @Service
@Slf4j
public class UserServiceImpl implements IUserService { public class UserServiceImpl implements IUserService {
@Autowired @Autowired
...@@ -41,6 +47,31 @@ public class UserServiceImpl implements IUserService { ...@@ -41,6 +47,31 @@ public class UserServiceImpl implements IUserService {
return userRepository.findByPhoneNo(phone); return userRepository.findByPhoneNo(phone);
} }
@Override
public Map<Long, String> findPhoneByIdsInDb(List<Long> userIds) {
if (CollectionUtils.isEmpty(userIds)) {
return Maps.newHashMap();
}
Map<Long, String> userIdAndPhoneMap = Maps.newHashMap();
int pageSize = 1000;
int idSize = userIds.size();
for (int i = 0; i < idSize; i += pageSize) {
List<Long> subList = userIds.subList(i, Math.min(idSize, i + pageSize));
List<User> users = userRepository.findByIdIn(subList);
users.stream().forEach(user -> {
userIdAndPhoneMap.put(user.getId(), user.getPhoneNo());
});
if (i + pageSize < idSize) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
log.error("线程sleep失败", e);
}
}
}
return userIdAndPhoneMap;
}
@Override @Override
public User findByUuidInDb(String uuid) { public User findByUuidInDb(String uuid) {
return userRepository.findByUuid(uuid); return userRepository.findByUuid(uuid);
...@@ -101,7 +132,7 @@ public class UserServiceImpl implements IUserService { ...@@ -101,7 +132,7 @@ public class UserServiceImpl implements IUserService {
user.setUuid(uuid); user.setUuid(uuid);
user.setPassword(PasswordUtil.MD5(password.toLowerCase() + Constants.PASSWORD_SALT)); user.setPassword(PasswordUtil.MD5(password.toLowerCase() + Constants.PASSWORD_SALT));
//解决线上白条registerFrom为1的问题 //解决线上白条registerFrom为1的问题
if(channelId == 222L) { if (channelId == 222L) {
user.setRegisteredFrom(channelId); user.setRegisteredFrom(channelId);
} else { } else {
user.setRegisteredFrom(registerFrom); user.setRegisteredFrom(registerFrom);
...@@ -120,10 +151,11 @@ public class UserServiceImpl implements IUserService { ...@@ -120,10 +151,11 @@ public class UserServiceImpl implements IUserService {
/** /**
* 修改用户密码 * 修改用户密码
* @date 2017-02-15 修改用户修改密码时,更新updatedAt时间 *
* @param phoneNo * @param phoneNo
* @param password * @param password
* @return * @return
* @date 2017-02-15 修改用户修改密码时,更新updatedAt时间
*/ */
@Override @Override
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phone", cacheManager = "cacheManager") @CacheEvict(value = "usercache", key = "'xyqbuser' + #phone", cacheManager = "cacheManager")
......
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