package com.quanxiaoha.weblog.web.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.Lists;
import com.google.common.eventbus.EventBus;
import com.quanxiaoha.weblog.common.PageResponse;
import com.quanxiaoha.weblog.common.Response;
import com.quanxiaoha.weblog.common.domain.dos.*;
import com.quanxiaoha.weblog.common.enums.EventEnum;
import com.quanxiaoha.weblog.common.eventbus.ArticleEvent;
import com.quanxiaoha.weblog.common.exception.ResourceNotFoundException;
import com.quanxiaoha.weblog.web.convert.ArticleConvert;
import com.quanxiaoha.weblog.web.dao.*;
import com.quanxiaoha.weblog.web.model.vo.article.*;
import com.quanxiaoha.weblog.web.model.vo.category.QueryCategoryListItemRspVO;
import com.quanxiaoha.weblog.web.model.vo.tag.QueryTagListItemRspVO;
import com.quanxiaoha.weblog.web.service.ArticleService;
import com.quanxiaoha.weblog.web.utils.MarkdownUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author: 犬小哈
* @url: www.quanxiaoha.com
* @date: 2023-04-17 12:08
* @description: TODO
**/
@Service
@Slf4j
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleDao articleDao;
@Autowired
private ArticleContentDao articleContentDao;
@Autowired
private CategoryDao categoryDao;
@Autowired
private ArticleCategoryRelDao articleCategoryRelDao;
@Autowired
private TagDao tagDao;
@Autowired
private ArticleTagRelDao articleTagRelDao;
@Autowired
private EventBus eventBus;
@Autowired
private ArticleConvert articleConvert;
@Override
public PageResponse queryIndexArticlePageList(QueryIndexArticlePageListReqVO queryIndexArticlePageListReqVO) {
Long current = queryIndexArticlePageListReqVO.getCurrent();
Long size = queryIndexArticlePageListReqVO.getSize();
IPage<ArticleDO> articleDOIPage = articleDao.queryArticlePageList(current, size);
List<ArticleDO> records = articleDOIPage.getRecords();
List<QueryIndexArticlePageItemRspVO> list = null;
if (!CollectionUtils.isEmpty(records)) {
list = records.stream()
.map(articleDO -> articleConvert.convert(articleDO))
.collect(Collectors.toList());
List<Long> articleIds = list.stream().map(p -> p.getId()).collect(Collectors.toList());
// 设置分类信息
List<CategoryDO> categoryDOS = categoryDao.selectAllCategory();
Map<Long, String> categoryIdNameMap = categoryDOS.stream().collect(Collectors.toMap(CategoryDO::getId, CategoryDO::getName));
List<ArticleCategoryRelDO> articleCategoryRelDOS = articleCategoryRelDao.selectByArticleIds(articleIds);
list = list.stream().map(p -> {
Long articleId = p.getId();
Optional<ArticleCategoryRelDO> optional = articleCategoryRelDOS.stream().filter(rel -> Objects.equals(rel.getArticleId(), articleId)).findFirst();
if (optional.isPresent()) {
ArticleCategoryRelDO articleCategoryRelDO = optional.get();
Long categoryId = articleCategoryRelDO.getCategoryId();
String categoryName = categoryIdNameMap.get(categoryId);
QueryCategoryListItemRspVO queryCategoryListItemRspVO = QueryCategoryListItemRspVO.builder()
.id(categoryId)
.name(categoryName)
.build();
p.setCategory(queryCategoryListItemRspVO);
}
return p;
}).collect(Collectors.toList());
// 设置标签信息
List<TagDO> tagDOS = tagDao.selectAllTag();
Map<Long, String> tagIdNameMap = tagDOS.stream().collect(Collectors.toMap(TagDO::getId, TagDO::getName));
List<ArticleTagRelDO> articleTagRelDOS = articleTagRelDao.selectByArticleIds(articleIds);
list = list.stream().map(p -> {
Long articleId = p.getId();
List<ArticleTagRelDO> articleTagRelDOList = articleTagRelDOS.stream().filter(rel -> Objects.equals(rel.getArticleId(), articleId)).collect(Collectors.toList());
List<QueryTagListItemRspVO> queryTagListItemRspVOS = Lists.newArrayList();
articleTagRelDOList.forEach(rel -> {
Long tagId = rel.getTagId();
String tagName = tagIdNameMap.get(tagId);
QueryTagListItemRspVO queryTagListItemRspVO = QueryTagListItemRspVO.builder()
.id(tagId)
.name(tagName)
.build();
queryTagListItemRspVOS.add(queryTagListItemRspVO);
});
p.setTags(queryTagListItemRspVOS);
return p;
}).collect(Collectors.toList());
}
return PageResponse.success(articleDOIPage, list);
}
@Override
public PageResponse queryCategoryArticlePageList(QueryCategoryArticlePageListReqVO queryCategoryArticlePageListReqVO) {
Long current = queryCategoryArticlePageListReqVO.getCurrent();
Long size = queryCategoryArticlePageListReqVO.getSize();
Long queryCategoryId = queryCategoryArticlePageListReqVO.getCategoryId();
List<ArticleCategoryRelDO> articleCategoryRelDOList = articleCategoryRelDao.selectByCategoryId(queryCategoryId);
// 判断该分类下是否存在文章
if (CollectionUtils.isEmpty(articleCategoryRelDOList)) {
return PageResponse.success(null, null);
}
List<Long> categoryArticleIds = articleCategoryRelDOList.stream().map(p -> p.getArticleId()).collect(Collectors.toList());
IPage<ArticleDO> articleDOIPage = articleDao.queryArticlePageListByArticleIds(current, size, categoryArticleIds);
List<ArticleDO> records = articleDOIPage.getRecords();
List<QueryIndexArticlePageItemRspVO> list = null;
if (!CollectionUtils.isEmpty(records)) {
list = records.stream()
.map(articleDO -> articleConvert.convert(articleDO))
.collect(Collectors.toList());
List<Long> articleIds = list.stream().map(p -> p.getId()).collect(Collectors.toList());
// 设置分类信息
List<CategoryDO> categoryDOS = categoryDao.selectAllCategory();
Map<Long, String> categoryIdNameMap = categoryDOS.stream().collect(Collectors.toMap(CategoryDO::getId, CategoryDO::getName));
List<ArticleCategoryRelDO> articleCategoryRelDOS = articleCategoryRelDao.selectByArticleIds(articleIds);
list = list.stream().map(p -> {
Long articleId = p.getId();
Optional<ArticleCategoryRelDO> optional = articleCategoryRelDOS.stream().filter(rel -> Objects.equals(rel.getArticleId(), articleId)).findFirst();
if (optional.isPresent()) {
ArticleCategoryRelDO articleCategoryRelDO = optional.get();
Long categoryId = articleCategoryRelDO.getCategoryId();
String categoryName = categoryIdNameMap.get(categoryId);
QueryCategoryListItemRspVO queryCategoryListItemRspVO = QueryCategoryListItemRspVO.builder()
.id(categoryId)
.name(categoryName)
.build();
p.setCategory(queryCategoryListItemRspVO);
}
return p;
}).collect(Collectors.toList());
// 设置标签信息
List<TagDO> tagDOS =
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该项目是一款基于Spring Boot、Vue 3.2和Vite 4.3开发的个人博客系统源码,旨在作为Java毕业设计项目。该系统采用前后端分离架构,包含270个文件,其中Java源文件180个,Vue组件30个,JavaScript、CSS、HTML和其它相关文件共计60个。项目结构清晰,代码质量高,适合有志于实践全栈开发技能的同学们参考学习。
资源推荐
资源详情
资源评论
收起资源包目录
基于Spring Boot + Vue 3.2 + Vite 4.3的Java毕业设计个人博客设计源码 (269个子文件)
base.css 2KB
main.css 742B
.env.development 24B
.DS_Store 6KB
.gitignore 425B
.gitignore 418B
.gitignore 418B
.gitignore 418B
.gitignore 302B
.gitignore 26B
index.html 339B
favicon.ico 4KB
ArticleServiceImpl.java 16KB
MarkdownUtil.java 9KB
AdminArticleServiceImpl.java 9KB
ApiOperationLogAspect.java 6KB
AdminDashboardServiceImpl.java 5KB
AdminCategoryServiceImpl.java 5KB
AgentRegionUtils.java 4KB
JwtTokenHelper.java 4KB
AdminTagServiceImpl.java 4KB
GlobalExceptionHandler.java 3KB
AdminBlogSettingServiceImpl.java 3KB
TokenAuthenticationFilter.java 3KB
ArchiveServiceImpl.java 3KB
WebSecurityConfig.java 3KB
AdminArticleDaoImpl.java 3KB
AdminStatisticsArticlePVDaoImpl.java 3KB
JwtAuthenticationSecurityConfig.java 2KB
AdminArticleController.java 2KB
AdminTagDaoImpl.java 2KB
AdminTagController.java 2KB
AdminCategoryController.java 2KB
ArticleDaoImpl.java 2KB
Response.java 2KB
UserDetailServiceImpl.java 2KB
MinioUtil.java 2KB
JwtAuthenticationLoginFilter.java 2KB
AdminArticleContentDaoImpl.java 2KB
AdminDashboardController.java 2KB
AdminUserController.java 2KB
LoginAuthenticationSuccessHandler.java 2KB
ArticleCategoryRelDaoImpl.java 2KB
AdminBlogSettingController.java 2KB
RestAuthenticationEntryPoint.java 2KB
CategoryController.java 2KB
LoginAuthenticationFailureHandler.java 2KB
CategoryServiceImpl.java 2KB
ArticleTagRelDaoImpl.java 2KB
TagController.java 2KB
AdminUserDaoImpl.java 1KB
AdminArticleCategoryRelDaoImpl.java 1KB
ArchiveController.java 1KB
TagServiceImpl.java 1KB
AdminArticleTagRelDaoImpl.java 1KB
AdminUserServiceImpl.java 1KB
ArticleConvert.java 1KB
ResponseCodeEnum.java 1KB
ResultUtil.java 1KB
PageResponse.java 1KB
AdminFileServiceImpl.java 1KB
ArticleController.java 1KB
BlogSettingServiceImpl.java 1KB
IndexController.java 1KB
BlogSettingController.java 1KB
RestAccessDeniedHandler.java 1KB
UpdateArticleReqVO.java 1KB
AdminCategoryDaoImpl.java 1KB
CategoryDaoImpl.java 1KB
AdminFileController.java 1KB
PublishArticleReqVO.java 1KB
PVIncreaseAsyncTask.java 1KB
ArticleContentDaoImpl.java 1011B
TagDaoImpl.java 1002B
ArticleService.java 988B
AdminEventListener.java 986B
AdminUserRoleDaoImpl.java 980B
MybatisPlusConfig.java 963B
InsertBatchSqlInjector.java 946B
CrosConfig.java 935B
MinioConfig.java 878B
ThreadPoolConfig.java 847B
BlogSettingConvert.java 846B
UpdateBlogSettingReqVO.java 833B
AdminCategoryService.java 829B
AdminTagService.java 802B
ArticleMapper.java 799B
QueryArticleDetailRspVO.java 793B
AdminArticleDao.java 757B
AdminUserService.java 746B
PasswordEncoderConfig.java 736B
VisitorRecordDO.java 716B
EventBusConfig.java 701B
QueryBlogSettingRspVO.java 676B
QueryIndexArticlePageItemRspVO.java 675B
BlogSettingDO.java 640B
ArticleDO.java 631B
AdminBlogSettingService.java 626B
QueryBlogSettingRspVO.java 606B
AdminArticleService.java 592B
共 269 条
- 1
- 2
- 3
资源评论
xyq2024
- 粉丝: 1937
- 资源: 5353
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python命令行参数处理及argparse应用实例(包含详细的完整的程序和数据)
- Python面向对象与模块化:构建宠物管理系统的实战案例(包含详细的完整的程序和数据)
- 计算机视觉中人脸检测技术的Python实现及其应用(包含详细的完整的程序和数据)
- TestSonya,Qt判断文本编码格式(支持UTF-8、UTF-16LE/BE、GBK等格式)
- LabVIEW编程入门与进阶技术详解
- 基于链表的联系人管理系统的设计与实现(包含详细的完整的程序和数据)
- Python中递归算法的理解与应用实例(包含详细的完整的程序和数据)
- PyTorch基础:使用卷积神经网络进行CIFAR-10图像分类(包含详细的完整的程序和数据)
- 使用OpenCV与Python进行人脸识别的方法与实践(包含详细的完整的程序和数据)
- matlab永磁同步电机反步控制仿真模型,程序,包括仿真结果分析文档
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功