Commit fb93d201 by 段启岩

搜索更新

parent c81aca95
...@@ -6,6 +6,7 @@ import cn.meteor.beyondclouds.modules.project.entity.Project; ...@@ -6,6 +6,7 @@ import cn.meteor.beyondclouds.modules.project.entity.Project;
import cn.meteor.beyondclouds.modules.question.entity.Question; import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.user.entity.User; import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.entity.UserFollow; import cn.meteor.beyondclouds.modules.user.entity.UserFollow;
import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import lombok.Getter; import lombok.Getter;
/** /**
...@@ -20,6 +21,11 @@ public enum DataItemType { ...@@ -20,6 +21,11 @@ public enum DataItemType {
USER(User.class), USER(User.class),
/** /**
* 用户统计信息
*/
USER_STATISTICS(UserStatistics.class),
/**
* 博客 * 博客
*/ */
BLOG(Blog.class), BLOG(Blog.class),
......
package cn.meteor.beyondclouds.modules.search.entity;
public class ProjectExtra {
}
package cn.meteor.beyondclouds.modules.search.entity;
public class QuestionExtra {
}
...@@ -19,7 +19,7 @@ import java.util.Date; ...@@ -19,7 +19,7 @@ import java.util.Date;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@Document(indexName = "search_items") @Document(indexName = "search_items")
public class SearchItem { public class SearchItem<T> {
/** /**
* 快捷构造函数 * 快捷构造函数
...@@ -84,7 +84,10 @@ public class SearchItem { ...@@ -84,7 +84,10 @@ public class SearchItem {
@Field(index = false, type = FieldType.Date) @Field(index = false, type = FieldType.Date)
private Date updateTime; private Date updateTime;
private T extra;
public static SearchItem of(BlogDetailDTO blogDetail) { public static SearchItem of(BlogDetailDTO blogDetail) {
return null; return null;
} }
} }
package cn.meteor.beyondclouds.modules.search.entity;
import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Data
public class UserExtra {
private static final long serialVersionUID=1L;
@Field(index = false, type = FieldType.Long)
private Integer followedNum;
@Field(index = false, type = FieldType.Long)
private Integer fansNum;
@Field(index = false, type = FieldType.Long)
private Integer blogNum;
@Field(index = false, type = FieldType.Long)
private Integer projectNum;
@Field(index = false, type = FieldType.Long)
private Integer postNum;
@Field(index = false, type = FieldType.Long)
private Integer questionNum;
@Field(index = false, type = FieldType.Long)
private Integer visitedNum;
}
...@@ -17,16 +17,21 @@ import cn.meteor.beyondclouds.modules.question.service.IQuestionService; ...@@ -17,16 +17,21 @@ import cn.meteor.beyondclouds.modules.question.service.IQuestionService;
import cn.meteor.beyondclouds.modules.search.entity.SearchItem; import cn.meteor.beyondclouds.modules.search.entity.SearchItem;
import cn.meteor.beyondclouds.modules.search.entity.SearchItemId; import cn.meteor.beyondclouds.modules.search.entity.SearchItemId;
import cn.meteor.beyondclouds.core.queue.message.DataItemType; import cn.meteor.beyondclouds.core.queue.message.DataItemType;
import cn.meteor.beyondclouds.modules.search.entity.UserExtra;
import cn.meteor.beyondclouds.modules.search.repository.ISearchRepository; import cn.meteor.beyondclouds.modules.search.repository.ISearchRepository;
import cn.meteor.beyondclouds.modules.search.service.ISearchService; import cn.meteor.beyondclouds.modules.search.service.ISearchService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicService; import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import cn.meteor.beyondclouds.modules.user.dto.UserInfoDTO;
import cn.meteor.beyondclouds.modules.user.entity.User; import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import cn.meteor.beyondclouds.modules.user.exception.UserServiceException;
import cn.meteor.beyondclouds.modules.user.service.IUserService; import cn.meteor.beyondclouds.modules.user.service.IUserService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.DisMaxQueryBuilder; import org.elasticsearch.index.query.DisMaxQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
...@@ -186,6 +191,7 @@ public class SearchServiceImpl implements ISearchService { ...@@ -186,6 +191,7 @@ public class SearchServiceImpl implements ISearchService {
searchItem = buildSearchItemFromProject(itemId); searchItem = buildSearchItemFromProject(itemId);
break; break;
case USER: case USER:
case USER_STATISTICS:
searchItem = buildSearchItemFromUser(itemId); searchItem = buildSearchItemFromUser(itemId);
break; break;
case QUESTION: case QUESTION:
...@@ -216,15 +222,20 @@ public class SearchServiceImpl implements ISearchService { ...@@ -216,15 +222,20 @@ public class SearchServiceImpl implements ISearchService {
return null; return null;
} }
private SearchItem buildSearchItemFromUser(String userId) { private SearchItem buildSearchItemFromUser(String userId) throws UserServiceException {
User user = userService.getById(userId); UserInfoDTO userInfoDTO = userService.getUserInfo(userId, true);
if (null != user) { if (null != userInfoDTO) {
SearchItem searchItem = new SearchItem(DataItemType.USER, userId); SearchItem<UserExtra> searchItem = new SearchItem(DataItemType.USER, userId);
searchItem.setTitle(user.getNickName()); searchItem.setTitle(userInfoDTO.getNickName());
searchItem.setCover(user.getUserAvatar()); searchItem.setCover(userInfoDTO.getUserAvatar());
searchItem.setDescription(user.getSignature()); searchItem.setDescription(userInfoDTO.getSignature());
searchItem.setCreateTime(user.getCreateTime()); searchItem.setCreateTime(userInfoDTO.getCreateTime());
searchItem.setUpdateTime(user.getUpdateTime()); searchItem.setUpdateTime(userInfoDTO.getUpdateTime());
UserExtra userExtra = new UserExtra();
BeanUtils.copyProperties(userInfoDTO.getStatistics(), userExtra);
searchItem.setExtra(userExtra);
return searchItem; return searchItem;
} }
return null; return null;
......
...@@ -174,7 +174,7 @@ public class UserApi { ...@@ -174,7 +174,7 @@ public class UserApi {
// 获取用户信息 // 获取用户信息
try { try {
UserInfoDTO userInfoDTO = userService.getUserInfo((String) subject.getId()); UserInfoDTO userInfoDTO = userService.getUserInfo((String) subject.getId(), true);
// 返回结果 // 返回结果
return Response.success(userInfoDTO); return Response.success(userInfoDTO);
} catch (UserServiceException e) { } catch (UserServiceException e) {
...@@ -190,7 +190,7 @@ public class UserApi { ...@@ -190,7 +190,7 @@ public class UserApi {
// 获取用户信息 // 获取用户信息
try { try {
UserInfoDTO userInfoDTO = userService.getUserInfo(userId); UserInfoDTO userInfoDTO = userService.getUserInfo(userId, false);
// 去除敏感信息 // 去除敏感信息
userInfoDTO.setEmail(null); userInfoDTO.setEmail(null);
......
...@@ -4,6 +4,8 @@ import cn.meteor.beyondclouds.modules.user.entity.UserStatistics; ...@@ -4,6 +4,8 @@ import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* @author meteor * @author meteor
*/ */
...@@ -36,5 +38,9 @@ public class UserInfoDTO { ...@@ -36,5 +38,9 @@ public class UserInfoDTO {
@ApiModelProperty(value = "QQ号") @ApiModelProperty(value = "QQ号")
private String qqNumber; private String qqNumber;
private Date createTime;
private Date updateTime;
private UserStatistics statistics; private UserStatistics statistics;
} }
...@@ -3,14 +3,11 @@ package cn.meteor.beyondclouds.modules.user.listener; ...@@ -3,14 +3,11 @@ package cn.meteor.beyondclouds.modules.user.listener;
import cn.meteor.beyondclouds.core.listener.DataItemChangeListener; import cn.meteor.beyondclouds.core.listener.DataItemChangeListener;
import cn.meteor.beyondclouds.core.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.core.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.core.queue.message.DataItemType; import cn.meteor.beyondclouds.core.queue.message.DataItemType;
import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import cn.meteor.beyondclouds.modules.blog.service.IBlogService; import cn.meteor.beyondclouds.modules.blog.service.IBlogService;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.service.IPostService; import cn.meteor.beyondclouds.modules.post.service.IPostService;
import cn.meteor.beyondclouds.modules.project.entity.Project;
import cn.meteor.beyondclouds.modules.project.service.IProjectService; import cn.meteor.beyondclouds.modules.project.service.IProjectService;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.service.IQuestionService; import cn.meteor.beyondclouds.modules.question.service.IQuestionService;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.user.entity.UserFollow; import cn.meteor.beyondclouds.modules.user.entity.UserFollow;
import cn.meteor.beyondclouds.modules.user.entity.UserStatistics; import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import cn.meteor.beyondclouds.modules.user.service.IUserFollowService; import cn.meteor.beyondclouds.modules.user.service.IUserFollowService;
...@@ -31,12 +28,19 @@ public class UserStatisticsListener implements DataItemChangeListener { ...@@ -31,12 +28,19 @@ public class UserStatisticsListener implements DataItemChangeListener {
private IUserFollowService userFollowService; private IUserFollowService userFollowService;
private IMessageQueueService messageQueueService;
@Autowired @Autowired
public UserStatisticsListener(IUserStatisticsService userStatisticsService, IUserFollowService userFollowService, IBlogService blogService, IProjectService projectService, IPostService postService, IQuestionService questionService) { public UserStatisticsListener(IUserStatisticsService userStatisticsService, IUserFollowService userFollowService, IBlogService blogService, IProjectService projectService, IPostService postService, IQuestionService questionService) {
this.userStatisticsService = userStatisticsService; this.userStatisticsService = userStatisticsService;
this.userFollowService = userFollowService; this.userFollowService = userFollowService;
} }
@Autowired
public void setMessageQueueService(IMessageQueueService messageQueueService) {
this.messageQueueService = messageQueueService;
}
@Override @Override
public void onDataItemAdd(DataItemChangeMessage dataItemChangeMessage) { public void onDataItemAdd(DataItemChangeMessage dataItemChangeMessage) {
DataItemType itemType = dataItemChangeMessage.getItemType(); DataItemType itemType = dataItemChangeMessage.getItemType();
...@@ -75,6 +79,10 @@ public class UserStatisticsListener implements DataItemChangeListener { ...@@ -75,6 +79,10 @@ public class UserStatisticsListener implements DataItemChangeListener {
// 新增发问答的用户的问答发布量 // 新增发问答的用户的问答发布量
increaseUserStatisticValue(operatorId, "question_num"); increaseUserStatisticValue(operatorId, "question_num");
} }
// 修改完用户统计信息后发送用户统计信息修改的通知
messageQueueService.sendDataItemChangeMessage(DataItemChangeMessage.updateMessage(DataItemType.USER_STATISTICS, itemId, (String) itemId));
} }
@Override @Override
...@@ -115,6 +123,10 @@ public class UserStatisticsListener implements DataItemChangeListener { ...@@ -115,6 +123,10 @@ public class UserStatisticsListener implements DataItemChangeListener {
// 减少发问答的用户的问答发布量 // 减少发问答的用户的问答发布量
decreaseUserStatisticValue(operatorId, "question_num"); decreaseUserStatisticValue(operatorId, "question_num");
} }
// 修改完用户统计信息后发送用户统计信息修改的通知
messageQueueService.sendDataItemChangeMessage(DataItemChangeMessage.updateMessage(DataItemType.USER_STATISTICS, itemId, (String) itemId));
} }
/** /**
......
...@@ -91,7 +91,8 @@ public interface IUserService extends IService<User> { ...@@ -91,7 +91,8 @@ public interface IUserService extends IService<User> {
/** /**
* 获取用户信息 * 获取用户信息
* @param userId * @param userId
* @param selfView
* @return * @return
*/ */
UserInfoDTO getUserInfo(String userId) throws UserServiceException; UserInfoDTO getUserInfo(String userId, boolean selfView) throws UserServiceException;
} }
...@@ -395,13 +395,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU ...@@ -395,13 +395,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
} }
@Override @Override
public UserInfoDTO getUserInfo(String userId) throws UserServiceException { public UserInfoDTO getUserInfo(String userId, boolean selfView) throws UserServiceException {
User user = getById(userId); User user = getById(userId);
if (null == user) { if (null == user) {
throw new UserServiceException(UserErrorCode.USER_NOT_EXISTS); throw new UserServiceException(UserErrorCode.USER_NOT_EXISTS);
} }
UserStatistics userStatistics = userStatisticsService.getById(userId); UserStatistics userStatistics = getStatistics(userId, selfView);
UserInfoDTO userInfoDTO = new UserInfoDTO(); UserInfoDTO userInfoDTO = new UserInfoDTO();
BeanUtils.copyProperties(user, userInfoDTO); BeanUtils.copyProperties(user, userInfoDTO);
......
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