当前位置: 首页 > news >正文

分页查询互动问题(管理端)

文章目录

    • 概要
    • 整体架构流程
    • 技术细节
    • 小结

概要

需求分析以及接口设计

技术细节

1.Controller层

package com.tianji.learning.controller;


import com.tianji.common.domain.dto.PageDTO;
import com.tianji.learning.domain.query.QuestionAdminPageQuery;
import com.tianji.learning.domain.vo.QuestionAdminVO;
import com.tianji.learning.service.IInteractionQuestionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 互动提问的问题表 前端控制器
 * </p>
 *
 * @author cjh
 * @since 2025-03-18
 */
@RestController
@Api(tags = "互动问题相关结构---管理端")
@RequiredArgsConstructor
@RequestMapping("/admin/questions")
public class InteractionQuestionAdminController {

    private final IInteractionQuestionService questionService;

    @GetMapping("/page")
    @ApiOperation("分页查询互动问题")
    public PageDTO<QuestionAdminVO> queryQuestionPageAdmin(QuestionAdminPageQuery query){
        return questionService.queryQuestionPageAdmin(query);
    }

}

2.Service层:

@Override
    public PageDTO<QuestionAdminVO> queryQuestionPageAdmin(QuestionAdminPageQuery query) {
        //1.处理课程名称,调用es搜索服务获取到课程id集合
        List<Long> cIds = null;
        if (StringUtils.isNotBlank(query.getCourseName())) {
            cIds = searchClient.queryCoursesIdByName(query.getCourseName());
            if (CollUtils.isEmpty(cIds)) {
                return PageDTO.empty(0L, 0L);
            }
        }

        //2.分页查询
        Page<InteractionQuestion> page = this.lambdaQuery()
                .in(CollUtils.isNotEmpty(cIds), InteractionQuestion::getCourseId, cIds)
                .eq(query.getStatus() != null, InteractionQuestion::getSectionId, query.getStatus())
                .between(query.getBeginTime() != null && query.getEndTime() != null,
                        InteractionQuestion::getCreateTime, query.getBeginTime(), query.getEndTime())
                .page(query.toMpPageDefaultSortByCreateTimeDesc());
        List<InteractionQuestion> records = page.getRecords();
        if (CollUtils.isEmpty(records)) {
            return PageDTO.empty(page);
        }
        //3.准备vo所需数据
        HashSet<Long> courseIds = new HashSet<>();
        HashSet<Long> userIds = new HashSet<>();
        HashSet<Long> chapterAndSectionIds = new HashSet<>();
        for (InteractionQuestion record : records) {
            courseIds.add(record.getCourseId());
            userIds.add(record.getUserId());
            chapterAndSectionIds.add(record.getChapterId());
            chapterAndSectionIds.add(record.getSectionId());
        }
        //3.1调用课程服务获取课程信息
        List<CourseSimpleInfoDTO> cInfoList = courseClient.getSimpleInfoList(courseIds);
        Map<Long, CourseSimpleInfoDTO> cInfoMap = new HashMap<>(cInfoList.size());
        if (CollUtils.isNotEmpty(cInfoList)) {
            cInfoMap = cInfoList.stream().collect(Collectors.toMap(CourseSimpleInfoDTO::getId, c -> c));
        }
        //3.2调用用户服务获取用户信息
        List<UserDTO> userDTOList = userClient.queryUserByIds(userIds);
        Map<Long, UserDTO> userDTOMap = userDTOList.stream().collect(Collectors.toMap(UserDTO::getId, c -> c));
        //3.3.根据id查询章节
        List<CataSimpleInfoDTO> cataSimpleInfoDTOList = catalogueClient.batchQueryCatalogue(chapterAndSectionIds);
        Map<Long, String> cataMap = cataSimpleInfoDTOList.stream()
                .collect(Collectors.toMap(CataSimpleInfoDTO::getId, CataSimpleInfoDTO::getName));

        //4.封装vo
        ArrayList<QuestionAdminVO> voList = new ArrayList<>();
        for (InteractionQuestion record : records) {
            QuestionAdminVO vo = BeanUtils.copyBean(record, QuestionAdminVO.class);
            UserDTO userDTO = userDTOMap.get(record.getUserId());
            if (userDTO != null){
                vo.setUserName(userDTO.getName());
            }
            CourseSimpleInfoDTO courseSimpleInfoDTO = cInfoMap.get(record.getCourseId());
            if (courseSimpleInfoDTO != null){
                vo.setCourseName(courseSimpleInfoDTO.getName());
                //获取一二三级分类名称
                String categoryNames = categoryCache.getCategoryNames(courseSimpleInfoDTO.getCategoryIds());
                vo.setCategoryName(categoryNames);
            }
            vo.setChapterName(cataMap.get(record.getChapterId()));
            vo.setSectionName(cataMap.get(record.getSectionId()));
            voList.add(vo);
        }

        return PageDTO.of(page, voList);
    }

3.Mapper层

效果展示

相关文章:

  • 测试工程 常用Python库
  • FPGA_DDS_IP核
  • 【RHCE】LVS-NAT模式负载均衡实验
  • 那些正常的动态规划
  • Tekton系列之实践篇-从触发到完成的完整执行过程
  • 流影---开源网络流量分析平台(一)(小白超详细)
  • SAP-ABAP:SAP报错全链路排查指南:从界面告警到代码级诊断
  • 于纷扰中寻静谧:正念观照的智慧之旅
  • XSS复现漏洞简单前八关靶场
  • G口服务器和普通服务器之间的区别
  • LeetCode热题100JS(/100)第十三天|34
  • C语言:扫雷
  • 为什么不同的损失函数可以提升模型性能?
  • 使用QRencode生成二维码
  • selenium基本使用(一)
  • 【微前端-致命隐患】主子应用异步加载
  • C++11QT复习 (三)
  • 【嵌入式学习2】c语言重点整理
  • Shiro漏洞攻略
  • c#处理算数溢出的情况
  • 山东一景区怕游客赶不到海撒三千斤蛤蜊:给游客提供情绪价值
  • 微软上财季净利增长18%:云业务增速环比提高,业绩指引高于预期
  • 【社论】法治是对民营经济最好的促进
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪