|
|
package com.yohomars.search.index.builder.impls;
|
|
|
|
|
|
import com.yoho.search.dal.SocialUserDetailMapper;
|
|
|
import com.yoho.search.dal.SocialUserMapper;
|
|
|
import com.yoho.search.dal.model.SocialUser;
|
|
|
import com.yoho.search.dal.model.UserFollower;
|
|
|
import com.yoho.search.dal.model.UserFollowing;
|
|
|
import com.yoho.tools.common.redis.RedisValueHelper;
|
|
|
import com.yohomars.search.index.builder.IIndexBuilder;
|
|
|
import com.yohomars.search.utils.Index;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
...
|
...
|
@@ -19,32 +25,96 @@ import java.util.*; |
|
|
@Component
|
|
|
public class SocialUserIndexBuilder extends IIndexBuilder {
|
|
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(SocialUserIndexBuilder.class);
|
|
|
|
|
|
@Autowired
|
|
|
private SocialUserMapper socialUserMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private SocialUserDetailMapper socialUserDetailMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private RedisValueHelper redisValueHelper;
|
|
|
|
|
|
private Long lastUpdateTime;
|
|
|
|
|
|
private Long getLastUpdateTime(){
|
|
|
// return 1504050513724L;
|
|
|
return redisValueHelper.get(Index.social_user.getKey(),Long.class);
|
|
|
}
|
|
|
|
|
|
private List<UserFollowing> getFollowings(List<Integer> suids){
|
|
|
List<UserFollowing> followings = socialUserDetailMapper.selectUserFollowing(suids);
|
|
|
if(CollectionUtils.isNotEmpty(followings)){
|
|
|
Set<Integer> uids = new HashSet<>();
|
|
|
for(UserFollowing following : followings){
|
|
|
uids.add(following.getT_uid());
|
|
|
}
|
|
|
List<Integer> tuids = new ArrayList<>();
|
|
|
tuids.addAll(uids);
|
|
|
// 获取关注的用户的详情
|
|
|
List<SocialUser> users = socialUserMapper.selectByUids(tuids);
|
|
|
if(CollectionUtils.isNotEmpty(users)){
|
|
|
for(UserFollowing following : followings){
|
|
|
for(SocialUser user : users){
|
|
|
if(user.getS_uid().equals(following.getT_uid())){
|
|
|
following.setT_nick_name(user.getS_nick_name());
|
|
|
following.setT_head_pic(user.getS_head_pic());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return followings;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public int getTotalCount() throws Exception {
|
|
|
lastUpdateTime = getLastUpdateTime();
|
|
|
return socialUserMapper.selectCount(lastUpdateTime);
|
|
|
int totalCount = socialUserMapper.selectCount(lastUpdateTime);
|
|
|
LOGGER.info("[SocialUserIndexBuilder] getTotalCount with totalCount={}",totalCount);
|
|
|
return totalCount;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public List<?> getPageLists(int offset, int limit) throws Exception {
|
|
|
List<SocialUser> list = socialUserMapper.selectPageList(offset,limit,lastUpdateTime);
|
|
|
if(CollectionUtils.isEmpty(list)){
|
|
|
LOGGER.info("[SocialUserIndexBuilder] getPageLists with offset={},limit={}",offset,limit);
|
|
|
List<SocialUser> socialUsers = socialUserMapper.selectPageList(offset,limit,lastUpdateTime);
|
|
|
if(CollectionUtils.isEmpty(socialUsers)){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
List<Map<String, Object>> dataList = new ArrayList<>(list.size());
|
|
|
for(SocialUser socialUser : list) {
|
|
|
// TODO socialUser transfer
|
|
|
List<Integer> suids = new ArrayList<>(socialUsers.size());
|
|
|
for(SocialUser socialUser : socialUsers) {
|
|
|
suids.add(socialUser.getS_uid());
|
|
|
}
|
|
|
List<UserFollower> followers = socialUserDetailMapper.selectUserFollower(suids);
|
|
|
// 设置socialUser的s_followers_number等属性
|
|
|
if(CollectionUtils.isNotEmpty(followers)){
|
|
|
for(UserFollower follower : followers){
|
|
|
for(SocialUser socialUser : socialUsers) {
|
|
|
if(socialUser.getS_uid().equals(follower.getS_uid())){
|
|
|
socialUser.setS_followers_number(follower.getS_followers_number());
|
|
|
socialUser.setS_talent(follower.getS_talent());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
List<UserFollowing> followings = getFollowings(suids);
|
|
|
// 设置socialUser的s_following等属性
|
|
|
if(CollectionUtils.isNotEmpty(followings)){
|
|
|
for(UserFollowing following : followings){
|
|
|
for(SocialUser socialUser : socialUsers) {
|
|
|
if(socialUser.getS_uid().equals(following.getS_uid())){
|
|
|
SocialUser.UserFollowing userFollowing = new SocialUser.UserFollowing();
|
|
|
BeanUtils.copyProperties(following,userFollowing);
|
|
|
socialUser.addFollowing(userFollowing);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
List<Map<String, Object>> dataList = new ArrayList<>(socialUsers.size());
|
|
|
for(SocialUser socialUser : socialUsers) {
|
|
|
dataList.add(beanToMap(socialUser));
|
|
|
}
|
|
|
return dataList;
|
...
|
...
|
@@ -62,10 +132,13 @@ public class SocialUserIndexBuilder extends IIndexBuilder { |
|
|
*/
|
|
|
public Map<String, Object> beanToMap(SocialUser socialUser) {
|
|
|
Map<String, Object> map = new LinkedHashMap<>();
|
|
|
map.put("id", socialUser.getId());
|
|
|
map.put("uid", socialUser.getUid());
|
|
|
map.put("nick_name", StringUtils.isBlank(socialUser.getNickName())?"":socialUser.getNickName());
|
|
|
map.put("head_pic", StringUtils.isBlank(socialUser.getHeadPic())?"":socialUser.getHeadPic());
|
|
|
map.put("id", socialUser.getS_uid());
|
|
|
map.put("s_uid", socialUser.getS_uid());
|
|
|
map.put("s_nick_name", StringUtils.isBlank(socialUser.getS_nick_name())?"":socialUser.getS_nick_name());
|
|
|
map.put("s_head_pic", StringUtils.isBlank(socialUser.getS_head_pic())?"":socialUser.getS_head_pic());
|
|
|
map.put("s_talent",socialUser.getS_talent());
|
|
|
map.put("s_followers_number",socialUser.getS_followers_number());
|
|
|
map.put("s_following",CollectionUtils.isNotEmpty(socialUser.getS_following())?socialUser.getS_following():Collections.emptyList());
|
|
|
return map;
|
|
|
}
|
|
|
} |
...
|
...
|
|