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

查询我正在学习的课程

文章目录

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

概要

需求分析以及接口设计

参数

说明

请求方式

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层

效果展示


http://www.kler.cn/a/401870.html

相关文章:

  • JavaScript 高级—求数组的最大值与最小值
  • Linux系统Centos设置开机默认root用户
  • 大连理工大学概率上机作业免费下载
  • 内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理
  • Pandas-3:数据输入与输出
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04
  • C++:指针和引用
  • 速盾:cdn影响获取ip吗?
  • 21-JavaScript 解构赋值简介
  • Android:任意层级树形控件(有效果图和Demo示例)
  • 项目-摄像
  • python学习笔记1
  • 基于深度学习的文本信息提取方法研究(pytorch python textcnn框架)
  • 机器学习笔记 // 度量ML预测的准确率
  • Marin说PCB之电源完整性之电源网络的PDN仿真CST---04
  • 如何确保爬取的数据准确性和完整性?
  • 完整http服务器
  • 单片机智能家居火灾环境安全检测-分享
  • Modbus TCP转Modbus ASCII解决方案
  • 2、PyTorch张量的运算API(上)
  • 经验笔记:从生成 SSH 密钥到成功连接测试(以Gitee为例)
  • 微软Office 2021 24年11月授权版
  • c语言金典100题“从入门到放弃”10-15
  • Dubbo自定义扩展注册中心
  • Jav项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)
  • 数据结构(二)线性表