mitao
2024-06-11 c8a21748f87bc0a23744d9fee5dec3eaaa403fdc
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleServiceImpl.java
@@ -4,34 +4,42 @@
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.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.controller.forepart.dto.ArticleDTO;
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.article.controller.forepart.vo.ArticleCommentsVO;
import com.ruoyi.article.controller.forepart.vo.ArticleVO;
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.util.HuaWeiOBSUtil;
import java.io.IOException;
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;
import org.springframework.web.multipart.MultipartFile;
/**
 * <p>
@@ -57,6 +65,9 @@
    @Resource
    private IMemberArticleCollectionService memberArticleCollectionService;
    @Resource
    private SysUserClient sysUserClient;
    @Override
    public PageDTO<ArticleVO> getArticleList(ArticleDTO articleDTO) {
        Page<Article> page = new Page<>(articleDTO.getPageCurr(), articleDTO.getPageSize());
@@ -64,7 +75,9 @@
        if (articleDTO.getArticleType()!=0){
            wrapper.eq(Article::getArticleType,articleDTO.getArticleType());
        }
        wrapper.like(Article::getTitle,articleDTO.getTitle());
        if (articleDTO.getTitle()!=null){
            wrapper.like(Article::getTitle,articleDTO.getTitle());
        }
        wrapper.eq(Article::getStatus,2);
        wrapper.eq( Article::getDelFlag,0);
        wrapper.orderByDesc(Article::getCreateTime);
@@ -78,6 +91,7 @@
                        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());
@@ -110,6 +124,7 @@
        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);
@@ -123,22 +138,12 @@
            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());
        List<String> urlList=new ArrayList<>();
        if (articleDTO.getRticleImageUrl().length>0){
            for (MultipartFile file:articleDTO.getRticleImageUrl()){
                try {
                    String url= HuaWeiOBSUtil.obsUpload(file);
                    urlList.add(url);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            article.setImages(urlList.toString());
        }
        article.setImages(articleDTO.getRticleImageUrl());
        this.saveOrUpdate(article);
    }
@@ -152,7 +157,14 @@
    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());
@@ -270,4 +282,94 @@
        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;
    }
}