ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

搜索并展示文章列表

2021-09-22 17:31:06  阅读:118  来源: 互联网

标签:分页 展示 List 列表 搜索 new indexArticleBO null id


业务逻辑:

  1. 判断分页参数 设置默认值
  2. 根据分页参数构建Page列表
  3. 它这个前端有bug 只要一直往下划 分页一直 + 1 没有限制 所以我们若是结果为空 则直接返回
  4. 文章列表不单单只显示文章 还有显示发布文章的作者信息
  5. 根据查询到的文章列表中的作者id 远程调用获取用户信息
  6. 新建分页对象 将用户信息和文章拼接返回

controller

若分页参数为空这设置默认值

        // 0. 判断分页参数是否存在 若不存在 设置一个默认值
        if (page == null) {
            page = 0;
        }

        if (pageSize == null) {
            pageSize = 10;
        }

根据前端传入的参数分页查询文章列表 若结果为空 直接返回


        PageGridResult pageGridResult = portalService.queryListPageByCondition(keyword, category, page, pageSize);

        // 分页查询结果为空则直接返回
        if (pageGridResult.getRows().size() == 0) {
            return GraceJSONResult.ok(pageGridResult);
        }

这一陀shirt一样的代码逻辑:

  1. 因为set是不可以保存重复数据的 将作者id保存直set中
  2. 将set转换为json数据 发起远程调用
  3. 循环之前查出的所有文章 若文章的作者id相同 则构建indexArticleBO并保存至list
  4. 最后将list返回
    @NotNull
    private List<IndexArticleBO> getIndexArticleList(PageGridResult pageGridResult) {

        List<Article> pageGridResultRows = (List<Article>) pageGridResult.getRows();

        Set<String> userIdSet = new HashSet<>();

        List<String> articleIdList = new ArrayList<>();

        // 获取文章所对应而id 保存之set中 用于查询用户信息
        pageGridResultRows.forEach((article -> {
            userIdSet.add(article.getPublishUserId());
            articleIdList.add(REDIS_READ_ARTICLE_COUNT + ":" + article.getId());
        }));

        String userIdsJson = JsonUtil.objectForJson(userIdSet);

        // 根据article id类别获取阅读数 若为空 则list中保存的值为空 根据articleIdList自上而下保存之readCountList中 后面根据id列表遍历 获取
        // 若为空 则没人阅读 设置为空即可
        List<String> articleReadCountList = redisOperator.mget(articleIdList);

        // restTemplate原创调用根据id列表查询用户信息
        String url = "http://admin.imoocnews.com:8003/user/queryUserListByUserIds?userIds=" + userIdsJson;
        GraceJSONResult basicUserInformationJsonResult = restTemplate.getForObject(url, GraceJSONResult.class);

        if (basicUserInformationJsonResult == null) {
            GraceException.display(ResponseStatusEnum.USER_NOT_EXIST_ERROR);
        }

        Object data = basicUserInformationJsonResult.getData();
        List<PublishUserVO> publishUserVOS = null;
        try {
            publishUserVOS = objectMapper.readValue(objectMapper.writeValueAsString(data), TypeFactory.defaultInstance().constructCollectionType(List.class, PublishUserVO.class));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        if (publishUserVOS == null) {
            GraceException.display(ResponseStatusEnum.ARTICLE_QUERY_PARAMS_ERROR);
        }


        List<IndexArticleBO> indexArticleBOS = new ArrayList<>();

        // 构建主页每条文章分页信息 若userId == publishId直接设置
        for (int i = 0; i < pageGridResultRows.size(); i++) {
            IndexArticleBO indexArticleBO = new IndexArticleBO();
            BeanUtils.copyProperties(pageGridResultRows.get(i), indexArticleBO);

            for (PublishUserVO publishUserVO : publishUserVOS) {
                if (publishUserVO.getId().equalsIgnoreCase(indexArticleBO.getPublishUserId())) {
                    indexArticleBO.setPublisherVO(publishUserVO);
                    if (StringUtils.isBlank(articleReadCountList.get(i))) {
                        indexArticleBO.setReadCounts(0);
                    } else {
                        indexArticleBO.setReadCounts(Integer.valueOf(articleReadCountList.get(i)));
                    }
                }
            }

            indexArticleBOS.add(indexArticleBO);
        }

        return indexArticleBOS;
    }

最后controller直接返回indxAricleBO即可

service

判断参数非空 然后拼接上去即可 然后根据发文时间进行排序

 public PageGridResult queryListPageByCondition(String keyword, Integer category, Integer page, Integer pageSize) {
        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();

        if (keyword != null) {
            queryWrapper.like("title", keyword);
        }

        if (category != null) {
            queryWrapper.eq("category_id", category);
        }

        setCommonQueryMapper(queryWrapper);

        queryWrapper.orderByDesc("publish_time");

        Page<Article> articlePage = new Page<>(page, pageSize);
        articleMapper.selectPage(articlePage, queryWrapper);


        return setPageGridResult(articlePage);
    }

远程调用业务逻辑

很简单 遍历id列表 根据id查询返回

  public GraceJSONResult queryUserListByUserIds(String userIds) {
        if (StringUtils.isBlank(userIds)) {
            GraceException.display(ResponseStatusEnum.USER_STATUS_ERROR);
        }

        List<String> userIdList = null;
        try {
            userIdList = objectMapper.readValue(userIds, TypeFactory.defaultInstance().constructCollectionType(List.class, String.class));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }


        if (userIdList == null || userIdList.size() <= 0) {
            GraceException.display(ResponseStatusEnum.USER_STATUS_ERROR);
        }

        List<AccountBasicInfoVO> appUsers = new ArrayList<>();

        userIdList.forEach((userId) -> {
            // 因为首页会被用户不停的刷新 可以将用户数据存储到redis中以减少数据库的压力
            AppUser user = getUser(userId);
            AccountBasicInfoVO accountBasicInfoVO =
                    new AccountBasicInfoVO();

            BeanUtils.copyProperties(user, accountBasicInfoVO);
            appUsers.add(accountBasicInfoVO);

        });

        return GraceJSONResult.ok(appUsers);
    }

标签:分页,展示,List,列表,搜索,new,indexArticleBO,null,id
来源: https://www.cnblogs.com/lyraHeartstrings/p/15320841.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有