| | |
| | | package com.ruoyi.article.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.article.domain.pojo.Article; |
| | | import com.google.common.collect.Lists; |
| | | import com.ruoyi.article.controller.forepart.dto.ArticleDTO; |
| | | import com.ruoyi.article.controller.forepart.vo.ArticleCommentsVO; |
| | | import com.ruoyi.article.controller.forepart.vo.ArticleVO; |
| | | import com.ruoyi.article.controller.management.dto.MgtArticleQuery; |
| | | import com.ruoyi.article.controller.management.vo.MgtArticleVO; |
| | | import com.ruoyi.article.domain.Article; |
| | | import com.ruoyi.article.domain.ArticleComments; |
| | | import com.ruoyi.article.domain.MemberArticleCollection; |
| | | import com.ruoyi.article.domain.MemberLike; |
| | | import com.ruoyi.article.mapper.ArticleMapper; |
| | | import com.ruoyi.article.service.IArticleCommentsService; |
| | | import com.ruoyi.article.service.IArticleService; |
| | | import com.ruoyi.article.service.IMemberArticleCollectionService; |
| | | import com.ruoyi.article.service.IMemberLikeService; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.enums.ArticleTypeEnum; |
| | | import com.ruoyi.common.core.enums.AuditStatusEnum; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.core.utils.page.PageDTO; |
| | | import com.ruoyi.system.api.domain.Member; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.domain.dto.MemberDTO; |
| | | import com.ruoyi.system.api.feignClient.MemberClient; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | import javax.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | |
| | | * @since 2024-05-16 |
| | | */ |
| | | @Service |
| | | public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements |
| | | IArticleService { |
| | | public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements IArticleService { |
| | | |
| | | |
| | | @Resource |
| | | private IArticleCommentsService articleCommentsService; |
| | | |
| | | @Resource |
| | | private MemberClient memberClient; |
| | | |
| | | @Resource |
| | | private IMemberLikeService memberLikeService; |
| | | |
| | | @Resource |
| | | private IMemberArticleCollectionService memberArticleCollectionService; |
| | | |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | | |
| | | @Override |
| | | public PageDTO<ArticleVO> getArticleList(ArticleDTO articleDTO) { |
| | | Page<Article> page = new Page<>(articleDTO.getPageCurr(), articleDTO.getPageSize()); |
| | | LambdaQueryWrapper< Article> wrapper= Wrappers.lambdaQuery(); |
| | | if (articleDTO.getArticleType()!=0){ |
| | | wrapper.eq(Article::getArticleType,articleDTO.getArticleType()); |
| | | } |
| | | if (articleDTO.getTitle()!=null){ |
| | | wrapper.like(Article::getTitle,articleDTO.getTitle()); |
| | | } |
| | | wrapper.eq(Article::getStatus,2); |
| | | wrapper.eq( Article::getDelFlag,0); |
| | | wrapper.orderByDesc(Article::getCreateTime); |
| | | Page< Article> page1 = this.page(page, wrapper); |
| | | |
| | | PageDTO<ArticleVO> articleCommentsVOPageDTO = PageDTO.of(page1, ArticleVO.class); |
| | | List<ArticleVO> list2 = articleCommentsVOPageDTO.getList(); |
| | | for (ArticleVO articleVO:list2) { |
| | | if (articleVO.getMemberId()!=null){ |
| | | R<Member> membeOne = memberClient.getMembeOne(articleVO.getMemberId(), |
| | | SecurityConstants.INNER); |
| | | Member data = membeOne.getData(); |
| | | articleVO.setMemberNickname(data.getNickname()); |
| | | articleVO.setMemberAvatar(data.getAvatar()); |
| | | } |
| | | LambdaQueryWrapper<MemberLike> wrapper1 = Wrappers.lambdaQuery(); |
| | | wrapper1.eq(MemberLike::getMemberId, articleDTO.getMemberId()); |
| | | wrapper1.eq(MemberLike::getArticleId, articleVO.getId()); |
| | | wrapper1.eq(MemberLike::getType, 1); |
| | | wrapper1.eq(MemberLike::getDelFlag, 0); |
| | | List<MemberLike> list = memberLikeService.list(wrapper1); |
| | | if (list.size() > 0) { |
| | | articleVO.setIsLike(1); |
| | | } else { |
| | | articleVO.setIsLike(2); |
| | | } |
| | | |
| | | LambdaQueryWrapper<MemberArticleCollection> wrapper2 = Wrappers.lambdaQuery(); |
| | | wrapper2.eq(MemberArticleCollection::getMemberId, articleDTO.getMemberId()); |
| | | wrapper2.eq(MemberArticleCollection::getTargetId, articleVO.getId()); |
| | | wrapper2.eq(MemberArticleCollection::getDelFlag, 0); |
| | | List<MemberArticleCollection> list1 = memberArticleCollectionService.list(wrapper2); |
| | | if (list1.size() > 0) { |
| | | articleVO.setIsCollect(1); |
| | | } else { |
| | | articleVO.setIsCollect(2); |
| | | } |
| | | } |
| | | return articleCommentsVOPageDTO; |
| | | } |
| | | |
| | | @Override |
| | | public PageDTO<Article> getMemberArticleList(ArticleDTO articleDTO) { |
| | | Page<Article> page = new Page<>(articleDTO.getPageCurr(), articleDTO.getPageSize()); |
| | | LambdaQueryWrapper< Article> wrapper= Wrappers.lambdaQuery(); |
| | | wrapper.eq(Article::getMemberId,articleDTO.getMemberId()); |
| | | wrapper.eq(Article::getArticleType,2); |
| | | wrapper.eq( Article::getDelFlag,0); |
| | | wrapper.orderByDesc(Article::getCreateTime); |
| | | Page<Article> page1 = this.page(page, wrapper); |
| | | return PageDTO.of(page1); |
| | | } |
| | | |
| | | @Override |
| | | public void saveMemberArticle(ArticleDTO articleDTO) { |
| | | Article article=new Article(); |
| | | if (articleDTO.getId()!=null){ |
| | | article=this.getById(articleDTO.getId()); |
| | | } |
| | | article.setMemberId(articleDTO.getMemberId()); |
| | | |
| | | article.setArticleType(ArticleTypeEnum.USER_POSTING); |
| | | article.setStatus(AuditStatusEnum.TO_BE_REVIEWED); |
| | | article.setContent(articleDTO.getContent()); |
| | | article.setTitle(articleDTO.getTitle()); |
| | | article.setImages(articleDTO.getRticleImageUrl()); |
| | | this.saveOrUpdate(article); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void delMemberArticle(ArticleDTO articleDTO) { |
| | | this.removeById(articleDTO.getId()); |
| | | } |
| | | |
| | | @Override |
| | | public ArticleVO getMemberArticleInfo(ArticleDTO articleDTO) { |
| | | Article article=this.getById(articleDTO.getId()); |
| | | ArticleVO articleVO=new ArticleVO(); |
| | | |
| | | BeanUtils.copyProperties(article, articleVO); |
| | | |
| | | R<Member> membeOne = memberClient.getMembeOne(articleVO.getMemberId(), |
| | | SecurityConstants.INNER); |
| | | Member data = membeOne.getData(); |
| | | articleVO.setMemberNickname(data.getNickname()); |
| | | articleVO.setMemberAvatar(data.getAvatar()); |
| | | |
| | | LambdaQueryWrapper<MemberLike> wrapper1= Wrappers.lambdaQuery(); |
| | | wrapper1.eq(MemberLike::getMemberId,articleDTO.getMemberId()); |
| | | wrapper1.eq(MemberLike::getArticleId,article.getId()); |
| | | wrapper1.eq(MemberLike::getType,1); |
| | | wrapper1.eq( MemberLike::getDelFlag,0); |
| | | List<MemberLike> list = memberLikeService.list(wrapper1); |
| | | if (list.size()>0){ |
| | | articleVO.setIsLike(1); |
| | | }else { |
| | | articleVO.setIsLike(2); |
| | | } |
| | | |
| | | LambdaQueryWrapper<MemberArticleCollection> wrapper2= Wrappers.lambdaQuery(); |
| | | wrapper2.eq(MemberArticleCollection::getMemberId,articleDTO.getMemberId()); |
| | | wrapper2.eq(MemberArticleCollection::getTargetId,article.getId()); |
| | | wrapper2.eq( MemberArticleCollection::getDelFlag,0); |
| | | List<MemberArticleCollection> list1 = memberArticleCollectionService.list(wrapper2); |
| | | if (list1.size()>0){ |
| | | articleVO.setIsCollect(1); |
| | | }else { |
| | | articleVO.setIsCollect(2); |
| | | } |
| | | return articleVO; |
| | | } |
| | | |
| | | @Override |
| | | public PageDTO<ArticleCommentsVO> getArticleCommentsList(ArticleDTO articleDTO) { |
| | | Page<ArticleComments> page = new Page<>(articleDTO.getPageCurr(), articleDTO.getPageSize()); |
| | | LambdaQueryWrapper< ArticleComments> wrapper= Wrappers.lambdaQuery(); |
| | | wrapper.eq(ArticleComments::getArticleId,articleDTO.getId()); |
| | | wrapper.eq( ArticleComments::getDelFlag,0); |
| | | wrapper.eq( ArticleComments::getType,1); |
| | | wrapper.orderByDesc(ArticleComments::getCreateTime); |
| | | Page<ArticleComments> page1 = articleCommentsService.page(page, wrapper); |
| | | PageDTO<ArticleCommentsVO> articleCommentsVOPageDTO = PageDTO.of(page1, ArticleCommentsVO.class); |
| | | List<ArticleCommentsVO> list2 = articleCommentsVOPageDTO.getList(); |
| | | for(ArticleCommentsVO articleCommentsVO:list2){ |
| | | R<Member> membeOne = memberClient.getMembeOne(articleCommentsVO.getMemberId(), |
| | | SecurityConstants.INNER); |
| | | Member data = membeOne.getData(); |
| | | articleCommentsVO.setMemberNickname(data.getNickname()); |
| | | articleCommentsVO.setBmemberNickavatar(data.getAvatar()); |
| | | LambdaQueryWrapper<MemberLike> wrapper1= Wrappers.lambdaQuery(); |
| | | wrapper1.eq(MemberLike::getMemberId,articleCommentsVO.getMemberId()); |
| | | wrapper1.eq(MemberLike::getArticleId,articleCommentsVO.getArticleId()); |
| | | wrapper1.eq(MemberLike::getType,2); |
| | | wrapper1.eq( MemberLike::getDelFlag,0); |
| | | List<MemberLike> list = memberLikeService.list(wrapper1); |
| | | if (list.size()>0){ |
| | | articleCommentsVO.setIslike(1); |
| | | }else { |
| | | articleCommentsVO.setIslike(2); |
| | | } |
| | | |
| | | |
| | | List<ArticleCommentsVO> articleCommentsVOList1=new ArrayList<>(); |
| | | |
| | | LambdaQueryWrapper< ArticleComments> wrapper2= Wrappers.lambdaQuery(); |
| | | wrapper2.eq(ArticleComments::getReplyId,articleCommentsVO.getArticleId()); |
| | | wrapper2.eq( ArticleComments::getDelFlag,0); |
| | | wrapper2.eq( ArticleComments::getType,2); |
| | | List<ArticleComments> list1 = articleCommentsService.list(wrapper2); |
| | | for (ArticleComments articleComments1:list1){ |
| | | ArticleCommentsVO articleCommentsVO1=new ArticleCommentsVO(); |
| | | |
| | | R<Member> membeOne1 = memberClient.getMembeOne(articleCommentsVO.getMemberId(), |
| | | SecurityConstants.INNER); |
| | | Member data1 = membeOne1.getData(); |
| | | |
| | | R<Member> membeOne2 = memberClient.getMembeOne(articleCommentsVO.getBmemberId(), |
| | | SecurityConstants.INNER); |
| | | Member data2 = membeOne2.getData(); |
| | | |
| | | articleCommentsVO1.setArticleId(articleComments1.getArticleId()); |
| | | articleCommentsVO1.setContent(articleComments1.getContent()); |
| | | articleCommentsVO1.setMemberId(articleComments1.getMemberId()); |
| | | articleCommentsVO1.setId(articleComments1.getId()); |
| | | articleCommentsVO1.setMemberNickname(data1.getNickname()); |
| | | articleCommentsVO1.setBmemberNickavatar(data1.getAvatar()); |
| | | articleCommentsVO1.setLikeCount(articleComments1.getLikeCount()); |
| | | articleCommentsVO1.setCreateTime(articleComments1.getCreateTime()); |
| | | articleCommentsVO1.setBmemberNickavatar(data2.getAvatar()); |
| | | articleCommentsVO1.setBmemberNickname(data2.getNickname()); |
| | | |
| | | LambdaQueryWrapper<MemberLike> wrapper3= Wrappers.lambdaQuery(); |
| | | wrapper3.eq(MemberLike::getMemberId,articleCommentsVO.getMemberId()); |
| | | wrapper3.eq(MemberLike::getArticleId,articleCommentsVO.getArticleId()); |
| | | wrapper3.eq(MemberLike::getType,2); |
| | | wrapper3.eq( MemberLike::getDelFlag,0); |
| | | List<MemberLike> list3 = memberLikeService.list(wrapper3); |
| | | if (list3.size()>0){ |
| | | articleCommentsVO1.setIslike(1); |
| | | }else { |
| | | articleCommentsVO1.setIslike(2); |
| | | } |
| | | articleCommentsVOList1.add(articleCommentsVO1); |
| | | } |
| | | |
| | | articleCommentsVO.setArticleCommentsVOList(articleCommentsVOList1); |
| | | |
| | | list2.add(articleCommentsVO); |
| | | } |
| | | |
| | | return articleCommentsVOPageDTO; |
| | | } |
| | | |
| | | @Override |
| | | public void getReport(ArticleDTO articleDTO) { |
| | | Article article= this.getById(articleDTO.getId()); |
| | | R<Member> membeOne = memberClient.getMembeOne(articleDTO.getMemberId(), |
| | | SecurityConstants.INNER); |
| | | Member data = membeOne.getData(); |
| | | article.setReportBy(data.getNickname()); |
| | | article.setReportedTime(LocalDateTime.now()); |
| | | this.saveOrUpdate(article); |
| | | } |
| | | |
| | | @Override |
| | | public PageDTO<MgtArticleVO> getArticlePage(MgtArticleQuery query) { |
| | | // 构建查询条件 |
| | | Set<Long> sysUserIdSet = null; |
| | | Set<Long> memberIdSet = null; |
| | | if (StringUtils.isNotBlank(query.getCreateBy()) || StringUtils.isNotBlank( |
| | | query.getPhone())) { |
| | | SysUser user = new SysUser(); |
| | | user.setNickName(query.getCreateBy()); |
| | | user.setPhonenumber(query.getPhone()); |
| | | List<SysUser> sysUserList = sysUserClient.getUserListByName(user, |
| | | SecurityConstants.INNER).getData(); |
| | | sysUserIdSet = sysUserList.stream().map(SysUser::getUserId) |
| | | .collect(Collectors.toSet()); |
| | | MemberDTO memberDTO = new MemberDTO(); |
| | | memberDTO.setNickname(query.getCreateBy()); |
| | | memberDTO.setPhone(query.getPhone()); |
| | | List<Member> memberlist = memberClient.getMemberListByCondition(memberDTO, |
| | | SecurityConstants.INNER).getData(); |
| | | memberIdSet = memberlist.stream().map(Member::getId) |
| | | .collect(Collectors.toSet()); |
| | | } |
| | | // 分页查询 |
| | | Page<Article> page = this.lambdaQuery() |
| | | .in(StringUtils.isNotEmpty(sysUserIdSet), Article::getCreateBy, |
| | | sysUserIdSet) |
| | | .in(StringUtils.isNotEmpty(memberIdSet), Article::getMemberId, memberIdSet) |
| | | .eq(StringUtils.isNotNull(query.getListingStatus()), Article::getListingStatus, |
| | | query.getListingStatus()) |
| | | .like(StringUtils.isNotBlank(query.getTitle()), Article::getTitle, query.getTitle()) |
| | | .orderByDesc(Article::getStatus) |
| | | .page(new Page<>(query.getPageCurr(), query.getPageSize())); |
| | | |
| | | // 若为空直接返回 |
| | | if (StringUtils.isNotEmpty(page.getRecords())) { |
| | | return PageDTO.empty(page); |
| | | } |
| | | /*根据资讯的发布类型分别从系统用户表和会员表中查询发布人信息并封装VO*/ |
| | | PageDTO<MgtArticleVO> pageVO = PageDTO.of(page, MgtArticleVO.class); |
| | | List<MgtArticleVO> voList = pageVO.getList(); |
| | | Set<Integer> sysUserIds = voList.stream().filter(articleVO -> articleVO.getArticleType() |
| | | .equals(ArticleTypeEnum.PLATFORM_RELEASE)).map(MgtArticleVO::getCreateBy) |
| | | .map(Integer::valueOf).collect( |
| | | Collectors.toSet()); |
| | | |
| | | Map<Long, SysUser> userMap; |
| | | Map<Long, Member> memberMap; |
| | | if (StringUtils.isNotEmpty(sysUserIds)) { |
| | | List<SysUser> userList = sysUserClient.getUserList(Lists.newArrayList(sysUserIds)) |
| | | .getData(); |
| | | userMap = userList.stream().collect( |
| | | Collectors.toMap(SysUser::getUserId, Function.identity())); |
| | | } else { |
| | | userMap = null; |
| | | } |
| | | Set<Long> memIds = voList.stream().filter(articleVO -> articleVO.getArticleType() |
| | | .equals(ArticleTypeEnum.USER_POSTING)).map(MgtArticleVO::getMemberId).collect( |
| | | Collectors.toSet()); |
| | | if (StringUtils.isNotEmpty(memIds)) { |
| | | List<Member> memberList = memberClient.getMemberListByIds(memIds, |
| | | SecurityConstants.INNER) |
| | | .getData(); |
| | | memberMap = memberList.stream().collect( |
| | | Collectors.toMap(Member::getId, Function.identity())); |
| | | } else { |
| | | memberMap = null; |
| | | } |
| | | if (StringUtils.isNotNull(userMap)) { |
| | | voList.stream().filter(articleVO -> articleVO.getArticleType() |
| | | .equals(ArticleTypeEnum.PLATFORM_RELEASE)).forEach(articleVO -> { |
| | | SysUser sysUser = userMap.get(Long.valueOf(articleVO.getCreateBy())); |
| | | if (StringUtils.isNotNull(sysUser)) { |
| | | articleVO.setCreateBy(sysUser.getNickName()); |
| | | articleVO.setPhone(sysUser.getPhonenumber()); |
| | | } |
| | | }); |
| | | } |
| | | if (StringUtils.isNotNull(memberMap)) { |
| | | voList.stream().filter(articleVO -> articleVO.getArticleType() |
| | | .equals(ArticleTypeEnum.USER_POSTING)).forEach(articleVO -> { |
| | | Member member = memberMap.get(articleVO.getMemberId()); |
| | | if (StringUtils.isNotNull(member)) { |
| | | articleVO.setCreateBy(member.getNickname()); |
| | | articleVO.setPhone(member.getPhone()); |
| | | } |
| | | }); |
| | | } |
| | | return pageVO; |
| | | } |
| | | } |