Day14前端讲师和课程的完善

讲师完善

分页查询讲师

新建front包

来到controller层

package com.atguigu.eduservice.controller.front;


import com.atguigu.commonutils.R;
import com.atguigu.eduservice.entity.EduTeacher;
import com.atguigu.eduservice.service.EduTeacherService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Api(description="qianduan讲师管理")  //swagger提示注解定义在类上:@Api
@RestController
@RequestMapping("/eduservice/teacherfront")
@CrossOrigin
public class TeacherFrontController {
    @Autowired
    private EduTeacherService eduTeacherService;

    @ApiOperation(value = "分页查询讲师")
    @PostMapping("pagequeryteacher/{page}/{limit}")
    public R pagequeryteacher(@PathVariable long page,@PathVariable long limit){
        //Page对象需要的是long类型的参数
        Page<EduTeacher> pagePram = new Page<>(page,limit);

        //需要key来去value,所以key是string类型,而value又不一定放哪种类型,所以直接上object,父类型引用自动转换子类型对象
        Map<String,Object> map = eduTeacherService.pageSelectTeacher(pagePram);

        return R.ok().data(map);
    }

service层

    //分页查询前端讲师
    @Override
    public Map<String, Object> pageSelectTeacher(Page<EduTeacher> pagePram) {
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.orderByDesc("gmt_modified");
        //现在pagePram有所有讲师的数据
        baseMapper.selectPage(pagePram,wrapper);
        //获取当前页所有讲师
        List<EduTeacher> records = pagePram.getRecords();
        //获取总记录数
        long total = pagePram.getTotal();
        //获取总共多少页
        long pages = pagePram.getPages();
        //获取当前页有多少条数据
        long size = pagePram.getSize();
        //获取当前页码
        long current = pagePram.getCurrent();
        //获取下一页
        boolean hasNext = pagePram.hasNext();
        //获取上一页
        boolean hasPrevious = pagePram.hasPrevious();

        //将上面的数据全部封装到map集合并返回
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("items",records);
        hashMap.put("total",total);
        hashMap.put("pages",pages);
        hashMap.put("size",size);
        hashMap.put("current",current);
        hashMap.put("hasNext",hasNext);
        hashMap.put("hasPrevious",hasPrevious);


        return hashMap;
    }

查询讲师详情

controller层

 @ApiOperation(value = "根据讲师ID查询讲师信息和相关课程")
    @GetMapping("queryTeacherById/{teacherId}")
    public R queryTeacherById(@PathVariable String teacherId){
        //根据id查询讲师信息和相关课程
        EduTeacher eduTeacher = eduTeacherService.getById(teacherId);
        QueryWrapper<EduCourse> wrapper = new QueryWrapper<>();
        wrapper.eq("teacher_id",teacherId);
        List<EduCourse> courseList = eduCourseService.list(wrapper);

        return R.ok().data("teacher",eduTeacher).data("courseList",courseList);
    }

查询课程分类和信息带分页

controller层

package com.atguigu.eduservice.controller.front;

import com.atguigu.commonutils.R;
import com.atguigu.eduservice.entity.EduCourse;
import com.atguigu.eduservice.entity.frontvo.CourseQueryVO;
import com.atguigu.eduservice.entity.subject.OneSubject;
import com.atguigu.eduservice.service.EduCourseService;
import com.atguigu.eduservice.service.EduSubjectService;
import com.atguigu.eduservice.service.EduTeacherService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@Api(description="前台讲师管理")  //swagger提示注解定义在类上:@Api
@RestController
@RequestMapping("/eduservice/coursefront")
@CrossOrigin
public class CourseFrontController {
    @Autowired
    private EduTeacherService eduTeacherService;
    @Autowired
    private EduCourseService eduCourseService;
    @Autowired
    private EduSubjectService eduSubjectService;
    //查询课程信息,课程分类,课程价格,热度,最新时间
    @ApiOperation(value = "分页查询课程信息")
    @PostMapping("pageCourseBySubject/{page}/{limit}")
    public R pageCourseBySubject(@PathVariable long page,@PathVariable long limit,
                                 @RequestBody(required = false) CourseQueryVO courseQueryVO
                                 //@RequestBody(required = false)表示前端传递数据时可以没有json对象
                                 ){
        //查询所有一级分类和二级分类
        List<OneSubject> oneSubjectList = eduSubjectService.selectSubject();
        Page<EduCourse> pagePram = new Page<>(page,limit);
        //List<EduCourse> pageCourseBySubject = eduCourseService.selectCoursePageByOneSubjectIdOrTwoSubjectId(courseQueryVO,pagePram);
        Map<String,Object> pageCourseBySubject = eduCourseService.selectCoursePageByOneSubjectIdOrTwoSubjectId(courseQueryVO,pagePram);
        return R.ok().data("oneSubjectList",oneSubjectList).data("pageCourseBySubject",pageCourseBySubject);
    }

service层

    //查询前台课程的数据
    @Override
    public Map<String,Object> selectCoursePageByOneSubjectIdOrTwoSubjectId(CourseQueryVO courseQueryVO, Page pagePram) {
        QueryWrapper<EduCourse> wrapper = new QueryWrapper();
        //如果二级分类的id被选中就不再根据一级分类查询
        if(!StringUtils.isEmpty(courseQueryVO.getSubjectId())) {
            wrapper.eq("subject_id",courseQueryVO.getSubjectId());
        }else if(!StringUtils.isEmpty(courseQueryVO.getSubjectParentId())){
            wrapper.eq("subject_parent_id", courseQueryVO.getSubjectParentId());
        }
        //按照热度、价格、最新时间查询课程信息,先查询再分页
        FrontCourseSortUtils.frontCourseSort(wrapper, courseQueryVO);

        baseMapper.selectPage(pagePram, wrapper);
        //获取当前页所有讲师
        List<EduTeacher> records = pagePram.getRecords();
        //获取总记录数
        long total = pagePram.getTotal();
        //获取总共多少页
        long pages = pagePram.getPages();
        //获取当前页有多少条数据
        long size = pagePram.getSize();
        //获取当前页码
        long current = pagePram.getCurrent();
        //获取下一页
        boolean hasNext = pagePram.hasNext();
        //获取上一页
        boolean hasPrevious = pagePram.hasPrevious();

        //将上面的数据全部封装到map集合并返回
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("items",records);
        hashMap.put("total",total);
        hashMap.put("pages",pages);
        hashMap.put("size",size);
        hashMap.put("current",current);
        hashMap.put("hasNext",hasNext);
        hashMap.put("hasPrevious",hasPrevious);
//        //如果前端传过来page和limit的数据表示需要进行分页
//        if(courseQueryVO.getPage() != 0 && courseQueryVO.getLimit() != 0){
//            Page<EduCourse> eduCoursePage = new Page<>(courseQueryVO.getPage(),courseQueryVO.getLimit());
//            baseMapper.selectPage(eduCoursePage, wrapper);
//            //获取数据list集合
//            List<EduCourse> records = eduCoursePage.getRecords();
//            //获取总记录数
//            //long total = eduCoursePage.getTotal();
//            return records;
//        }

//
//        List<EduCourse> list = baseMapper.selectList(wrapper);
//        hashMap.put("allCourseList",list);
        return hashMap;
    }

多表联查:根据课程ID查询课程详情

返回前端数据的vo类

package com.atguigu.eduservice.entity.frontvo;

import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 根据id查询课程详细信息的实体类对象
 * 用于封装查询到的数据到这个实体类返回给前端
 */
public class CourseWebVo implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "课程id")
    private String id;

    @ApiModelProperty(value = "课程标题")

    private String title;

    @ApiModelProperty(value = "课程销售价格,设置为0则可免费观看")

    private BigDecimal price;

    @ApiModelProperty(value = "总课时")

    private Integer lessonNum;

    @ApiModelProperty(value = "课程封面图片路径")

    private String cover;
    @ApiModelProperty(value = "销售数量")

    private Long buyCount;

    @ApiModelProperty(value = "浏览数量")
    private Long viewCount;

    @ApiModelProperty(value = "课程简介")
    private String description;

    @ApiModelProperty(value = "讲师ID")
    private String teacherId;

    @ApiModelProperty(value = "讲师姓名")
    private String teacherName;

    @ApiModelProperty(value = "讲师资历,一句话说明讲师")
    private String intro;

    @ApiModelProperty(value = "讲师头像")
    private String avatar;

    @ApiModelProperty(value = "课程类别一级分类ID")
    private String subjectLevelOneId;

    @ApiModelProperty(value = "类别一级分类名称")
    private String subjectLevelOne;

    @ApiModelProperty(value = "课程类别二级分类ID")
    private String subjectLevelTwoId;

    @ApiModelProperty(value = "类别二级分类名称")
    private String subjectLevelTwo;
}

controller层


    //根据课程id查询课程详情信息
    @GetMapping("queryCourseById/{id}")
    public R queryCourseById(@PathVariable String id){
        //根据id查询课程详细信息
        CourseWebVo courseWebVo = eduCourseService.selectCourseById(id);

        //根据id查询课程章节信息
        List<ChapterVo> courseChapter = eduChapterService.getCourseChapter(id);
        return R.ok().data("courseWebVo",courseWebVo).data("courseChapter",courseChapter);
    }

service层

@Override
    public CourseWebVo selectCourseById(String id) {
        return baseMapper.selectCourseById(id);
    }

mapper层

@Mapper
public interface EduCourseMapper extends BaseMapper<EduCourse> {
    //根据课程id查询课程发布信息
    CoursePublishVo getPublishCourseInfo(String courseId);

    //根据课程id查询课程详情信息
    CourseWebVo selectCourseById(String id);

}

xml多表联查

<!--    CourseWebVo selectCourseById(String id);根据课程id查询课程详情信息-->
    <select id="selectCourseById" parameterType="string" resultType="com.atguigu.eduservice.entity.frontvo.CourseWebVo">
        SELECT ec.id,ec.`title`,ec.`price`,ec.`lesson_num` AS lessonNum,ec.cover,ec.`buy_count` AS buyCount,ec.`view_count` AS viewCount,
               ecd.`description`,
               et.id AS teacherId, et.name AS teacherName,et.intro,et.avatar,
               es1.id AS subjectLevelOneId,es1.`title` AS subjectLevelOne,
               es2.id AS subjectLevelTwoId,es2.`title` AS subjectLevelTwo
        FROM `edu_course` ec LEFT OUTER JOIN `edu_course_description` ecd ON ec.id = ecd.id
                             LEFT OUTER JOIN  `edu_teacher` et ON ec.`teacher_id` = et.id
                             LEFT OUTER JOIN `edu_subject` es1 ON ec.`subject_parent_id` = es1.id
                             LEFT OUTER JOIN `edu_subject` es2 ON ec.`subject_id` = es2.id
        WHERE ec.id = #{id}
    </select>

序列化异常,返回前端的实体类封装数据如果不做可序列化处理,就会报这个异常,当然90%是我忘了加@Date注解,然后找不到属性进行数据的注入。

配置项目到本地运行,可以通过本地ip访问。

获取阿里云视频凭证

 //获取阿里云视频凭证
    @ApiOperation(value = "根据视频id获取阿里云视频凭证")
    @GetMapping("getAlyVideoVoucher/{id}")
    public R getAlyVideoVoucher(@PathVariable String id){
        //获取阿里云客户端连接
        DefaultAcsClient client = InitObject.initVodClient(VideoUtil.KEY_ID, VideoUtil.KEY_SECRET);
        //创建获取视频凭证的请求对象
        GetVideoPlayAuthRequest getVideoPlayAuthRequest = new GetVideoPlayAuthRequest();
        //注入请求的视频id
        getVideoPlayAuthRequest.setVideoId(id);
        //通过客户端连接获取响应对象  获取视频地址
        try {
            GetVideoPlayAuthResponse acsResponse = client.getAcsResponse(getVideoPlayAuthRequest);
            String playAuth = acsResponse.getPlayAuth();
            //把视频地址扔给前端
            return R.ok().data("playAuth",playAuth);
        } catch (ClientException e) {
            e.printStackTrace();
            throw new GuliException(20001,"获取视频地址失败");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值