Commit d6b5734c by 段启岩

博客浏览量完成

parent 6d548d79
......@@ -31,6 +31,11 @@ public enum DataItemType {
BLOG(Blog.class),
/**
* 博客浏览量
*/
BLOG_VIEW_NUM(Blog.class),
/**
* 项目
*/
PROJECT(Project.class),
......
......@@ -7,6 +7,9 @@ import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.annotation.PreventDuplicate;
import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.authentication.Subject;
import cn.meteor.beyondclouds.core.flow.AccessInfo;
import cn.meteor.beyondclouds.core.flow.CollectAccessInfo;
import cn.meteor.beyondclouds.core.flow.ParamType;
import cn.meteor.beyondclouds.core.validation.groups.InsertGroup;
import cn.meteor.beyondclouds.core.validation.groups.UpdateGroup;
import cn.meteor.beyondclouds.modules.blog.dto.BlogDetailDTO;
......@@ -15,6 +18,7 @@ import cn.meteor.beyondclouds.modules.blog.exception.BlogCategoryServiceExceptio
import cn.meteor.beyondclouds.modules.blog.exception.BlogServiceException;
import cn.meteor.beyondclouds.modules.blog.form.BlogForm;
import cn.meteor.beyondclouds.modules.blog.service.IBlogService;
import cn.meteor.beyondclouds.util.AccessInfoUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -82,9 +86,16 @@ public class BlogApi {
@Anonymous
@ApiOperation("博客详情")
@GetMapping("/blog/{blogId}")
public Response<BlogDetailDTO> getBlog(@PathVariable("blogId") String blogId, @CurrentSubject Subject subject) {
public Response<BlogDetailDTO> getBlog(@PathVariable("blogId") String blogId,
@CurrentSubject Subject subject,
@CollectAccessInfo(paramName = "blogId", type = ParamType.BLOG)AccessInfo accessInfo) {
boolean updateViewNum = false;
if (AccessInfoUtils.hasFieldInfo(accessInfo)) {
updateViewNum = accessInfo.getFieldVisitCount() == 0;
}
try {
BlogDetailDTO blogDetail = blogService.getBlog(blogId, subject);
BlogDetailDTO blogDetail = blogService.getBlog(blogId, subject, updateViewNum);
return Response.success(blogDetail);
} catch (BlogServiceException e) {
e.printStackTrace();
......
......@@ -34,4 +34,11 @@ public interface BlogMapper extends BaseMapper<Blog> {
* @return
*/
List<Blog> listByIdsWithTags(@Param("blogIds") Collection<String> blogIds);
/**
* 查询用户所有博客的浏览量
* @param userId
* @return
*/
long selectAllViewCount(@Param("userId") String userId);
}
......@@ -66,5 +66,11 @@
</foreach>
</select>
<select id="selectAllViewCount" resultType="java.lang.Long">
select count(view_num)
from blog
where user_id = #{userId}
</select>
</mapper>
......@@ -41,10 +41,11 @@ public interface IBlogService extends IService<Blog> {
* 获取博客详情
* @param blogId
* @param subject
* @param updateViewNum
* @return
* @throws BlogServiceException
*/
BlogDetailDTO getBlog(String blogId, Subject subject) throws BlogServiceException;
BlogDetailDTO getBlog(String blogId, Subject subject, boolean updateViewNum) throws BlogServiceException;
/**
* 博客列表
......@@ -123,5 +124,12 @@ public interface IBlogService extends IService<Blog> {
void updateBlogUserAvatar(String userId);
/**
* 获取用户所有博客的浏览量
* @param operatorId
* @return
*/
long allBlogViewCount(String operatorId);
}
......@@ -41,7 +41,6 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
......@@ -234,11 +233,12 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
* 博客详情
*
* @param blogId
* @param updateViewNum
* @return
* @throws BlogServiceException
*/
@Override
public BlogDetailDTO getBlog(String blogId, Subject subject) throws BlogServiceException {
public BlogDetailDTO getBlog(String blogId, Subject subject, boolean updateViewNum) throws BlogServiceException {
Assert.notNull(subject, "subject must not be null");
// 1.获取博客
......@@ -255,12 +255,15 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
}
//更新浏览次数
if (null == blog.getViewNumber()) {
blog.setViewNumber(1);
} else {
blog.setViewNumber(blog.getViewNumber() + 1);
if (updateViewNum) {
if (null == blog.getViewNumber()) {
blog.setViewNumber(1);
} else {
blog.setViewNumber(blog.getViewNumber() + 1);
}
updateById(blog);
messageQueueService.sendDataItemChangeMessage(DataItemChangeMessage.updateMessage(DataItemType.BLOG_VIEW_NUM, blogId, blog.getUserId()));
}
updateById(blog);
//2.获取项目内容
QueryWrapper<BlogExt> blogExtQueryWrapper = new QueryWrapper();
blogExtQueryWrapper.eq("blog_id", blogId);
......@@ -631,4 +634,9 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
update(blogUserAvatarUpdeteWrapper);
}
}
@Override
public long allBlogViewCount(String userId) {
return blogMapper.selectAllViewCount(userId);
}
}
......@@ -334,7 +334,7 @@ public class SearchServiceImpl implements ISearchService {
}
private SearchItem buildSearchItemFromBlog(String blogId) throws BlogServiceException {
BlogDetailDTO blogDetail = blogService.getBlog(blogId, Subject.anonymous(this.getClass().getName()));
BlogDetailDTO blogDetail = blogService.getBlog(blogId, Subject.anonymous(this.getClass().getName()), false);
if (null != blogDetail) {
SearchItem searchItem = new SearchItem(DataItemType.BLOG, blogId);
searchItem.setTitle(blogDetail.getBlogTitle());
......
......@@ -40,6 +40,9 @@ public class UserStatistics implements Serializable {
@ApiModelProperty(value = "博客数量")
private Integer blogNum;
@ApiModelProperty(value = "博客浏览量")
private Integer blogViewNum;
@ApiModelProperty(value = "项目数量")
private Integer projectNum;
......
......@@ -86,6 +86,12 @@ public class UserStatisticsListener implements DataItemChangeListener {
onDataChange(dataItemChangeMessage);
}
@Override
public void onDataItemUpdate(DataItemChangeMessage dataItemChangeMessage) {
if (dataItemChangeMessage.getItemType().equals(DataItemType.BLOG_VIEW_NUM)) {
onDataChange(dataItemChangeMessage);
}
}
/**
* 汇总ADD和delete消息
......@@ -131,6 +137,11 @@ public class UserStatisticsListener implements DataItemChangeListener {
updateUserStatisticValue(operatorId, "blog_num", blogCount);
}
if (itemType.equals(DataItemType.BLOG_VIEW_NUM)) {
// 更新博客浏览量
updateUserStatisticValue((String) itemId, "blog_view_num", blogService.allBlogViewCount(operatorId));
}
if (itemType.equals(DataItemType.PROJECT)) {
// 更新项目发布量
QueryWrapper<Project> projectQueryWrapper = new QueryWrapper<>();
......
package cn.meteor.beyondclouds.util;
import cn.meteor.beyondclouds.core.flow.AccessInfo;
/**
* @author meteor
*/
public class AccessInfoUtils {
public static boolean hasFieldInfo(AccessInfo accessInfo) {
return null != accessInfo && null != accessInfo.getFieldVisitCount();
}
}
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