自学内容网 自学内容网

查询我正在学习的课程

文章目录

概要

需求分析以及接口设计

参数

说明

请求方式

GET

请求路径

/lessons/now

请求参数

无参,程序从登录凭证中获取当前用户

返回值

字段名

类型

说明

courseId

String

课程id

courseName

String

课程名称

sections

int

课程总课时数

learnedSections

int

已学习课时数

createTime

LocalDateTime

加入课表时间

expireTime

LocalDateTime

过期时间

courseAmount

long

课表中课程总数

latestSectionName

String

最近一次学习的小节名称

latestSectionIndex

int

最近一次学习的小节序号

可以看到返回值结果与分页查询的课表VO基本类似,因此这里可以复用LearningLessonVO实体,但是需要添加几个字段:

  • courseAmount

  • latestSectionName

  • latestSectionIndex

    其中CataSimpleInfoDTO中就包含了章节信息:

    @Data public class CataSimpleInfoDTO { @ApiModelProperty("目录id") private Long id; @ApiModelProperty("目录名称") private String name; @ApiModelProperty("数字序号,不包含章序号") private Integer cIndex; }

技术细节

1.Controller层

@ApiOperation("查询我正在学习的课程")
    @GetMapping("/now")
    public LearningLessonVO queryMyCurrentLesson(){
        return iLearningLessonService.queryMyCurrentLesson();
    }

2.Service层:

public LearningLessonVO queryMyCurrentLesson() {
        //1.获取到用户id
        Long userId = UserContext.getUser();
        //2.查询最近一次的学习课程信息(根据userid,status = 1,latest_learn_time倒序排序即可得出)
        LearningLesson lesson = this.lambdaQuery()
                .eq(LearningLesson::getUserId, userId)
                .eq(LearningLesson::getStatus, LessonStatus.LEARNING)
                .orderByDesc(LearningLesson::getLatestLearnTime)
                .last("limit 1")
                .one();
        //3.填充vo
        LearningLessonVO vo = new LearningLessonVO();
        vo.setCourseId(lesson.getCourseId());
        vo.setCreateTime(lesson.getCreateTime());
        vo.setExpireTime(lesson.getExpireTime());
        vo.setLearnedSections(lesson.getLearnedSections());
        //远程调用course服务
        CourseFullInfoDTO courseFullInfoDTO = courseClient.getCourseInfoById(lesson.getCourseId(), false, false);
        vo.setSections(courseFullInfoDTO.getSectionNum());
        vo.setCourseName(courseFullInfoDTO.getName());
        Integer courseAmount = Math.toIntExact(this.lambdaQuery()
                .eq(LearningLesson::getUserId, userId)
                .count());
        vo.setCourseAmount(courseAmount);
        //远程调用catalogue服务
        List<Long> latestSectionId = List.of(lesson.getLatestSectionId());
        List<CataSimpleInfoDTO> cataSimpleInfoDTOList = catalogueClient.batchQueryCatalogue(latestSectionId);
        CataSimpleInfoDTO cataSimpleInfoDTO = cataSimpleInfoDTOList.get(0);
        vo.setLatestSectionName(cataSimpleInfoDTO.getName());
        vo.setLatestSectionIndex(cataSimpleInfoDTO.getCIndex());
        //4.返回vo
        return vo;
    }

3.Mapper层

效果展示


原文地址:https://blog.csdn.net/Very_a/article/details/143894495

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!