分页查询互动问题(管理端)
文章目录
-
- 概要
- 整体架构流程
- 技术细节
- 小结
概要
需求分析以及接口设计

技术细节
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层