Commit fb93d201 by 段启岩

搜索更新

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