黑马学成在线-课程分布

目录

一、模块需求分析

二、课程预览

        1.课程预览需求分析

        2.使用Freemarker模板引擎渲染前端页面

        3.定义接口

        4.视频播放页面接口开发

三、课程审核

        1.业务流程

        2.接口定义

        3.在课程发布CoursePublishService类中定义接口:

        4.实现Service接口       

 四、课程发布    

        1.业务需求分析

        2.分布式事务技术方案

        3.接口定义

        4.Service接口开发,在CoursePublishService类中添加课程发布接口

        5.实现Service接口

        6.消息处理SDK

        7.页面静态化 

五、课程搜索

         1.业务流程分析

         2.搭建ES环境

         3.索引管理

         4.搜索   


一、模块需求分析

        课程信息编辑完毕即可发布课程,发布课程相当于一个确认操作,课程发布后学习者在网站可以搜索到课程,然后查看课程的详细信息,进一步选课、支付、在线学习。

        教学机构确认课程内容无误,提交审核,平台运营人员对课程内容审核,审核通过后教学机构人员发布课程成功。

课程发布模块共包括三块功能:课程预览、课程审核、课程发布。

黑马学成在线-课程分布_第1张图片

二、课程预览

        1.课程预览需求分析

                 课程预览就是把课程的相关信息进行整合,在课程详情界面进行展示,通过课程预览页面查看信息是否存在问题。

黑马学成在线-课程分布_第2张图片

黑马学成在线-课程分布_第3张图片

        说明如下:

                1.1、点击课程预览,通过Nginx、后台服务网关请求内容管理服务进行课程预览。

                1.2、内容管理服务查询课程相关信息进行整合,并通过模板引擎技术在服务端渲染生成页面,返回给浏览器。

                1.3、通过课程预览页面点击”马上学习“打开视频播放页面。

                1.4、视频播放页面通过Nginx请求后台服务网关,查询课程信息展示课程计划目录,请求媒资服务查询课程计划绑定的视频文件地址,在线浏览播放视频。

        2.使用Freemarker模板引擎渲染前端页面

                2.1、在nacos为内容管理接口层配置freemarker,公用配置组新加一个freemarker-config-dev.yaml

spring:
  freemarker:
    enabled: true
    cache: false   #关闭模板缓存,方便测试
    settings:
      template_update_delay: 0
    suffix: .ftl   #页面模板后缀名
    charset: UTF-8
    template-loader-path: classpath:/templates/   #页面模板位置(默认为 classpath:/templates/)
    resources:
      add-mappings: false   #关闭项目中的静态资源映射(static、resources文件夹下的资源)

                2.2、在内容管理接口工程添加freemarker-config-dev.yaml 

          - data-id: freemarker-config-dev.yaml
            group: xuecheng-plus-common
            refresh: true

                2.3、添加模板 ,从课程资料目录下获取课程预览页面course_template.html,拷贝至内容管理的接口工程的resources/templates下,并将其在本目录复制一份命名为course_template.ftl

        3.定义接口

                3.1、接口层Controller调用Service方法获取模板引擎需要的模型数据

    @GetMapping("/coursepreview/{courseId}")
    public ModelAndView preview(@PathVariable("courseId") Long courseId) {

        ModelAndView modelAndView = new ModelAndView();
        //查询课程的信息作为模型数据
        CoursePreviewDto coursePreviewInfo = coursePublishService.getCoursePreviewInfo(courseId);
        //指定模型
        modelAndView.addObject("model", coursePreviewInfo);
        //指定模板
        modelAndView.setViewName("course_template");//根据视图名称加.ftl找到模板
        return modelAndView;
    }

                3.2、定义数据模型

package com.xuecheng.content.model.dto;

import lombok.Data;
import java.util.List;

/**
 * @description 课程预览模型类
 */
@Data
public class CoursePreviewDto {

 //课程基本信息,营销信息
 private CourseBaseInfoDto courseBase;

 //课程计划信息
 private List teachplans;

 //课程师资信息...

}

                3.3、定义Service接口

                         在CoursePublishService接口中添加获取课程预览信息的方法

 /**
  * @description 获取课程预览信息
  * @param courseId 课程id
  * @return com.xuecheng.content.model.dto.CoursePreviewDto
  */
 public CoursePreviewDto getCoursePreviewInfo(Long courseId);

                3.4、实现Service方法               

    @Override
    public CoursePreviewDto getCoursePreviewInfo(Long courseId) {
        CoursePreviewDto coursePreviewDto = new CoursePreviewDto();
        //课程基本信息,营销信息
        CourseBaseInfoDto courseBaseInfo = courseBaseInfoService.getCourseBaseInfo(courseId);
        coursePreviewDto.setCourseBase(courseBaseInfo);
        //课程计划信息
        List teachplanTree = teachplanService.findTeachplanTree(courseId);
        coursePreviewDto.setTeachplans(teachplanTree);

        return coursePreviewDto;
    }

        4.视频播放页面接口开发

                在此页面需要从后台获取课程信息、根据课程计划获取对应的视频地址,这两个接口编写如下:

                4.1、获取课程信息接口:/open/content/course/whole/{courseId}       

package com.xuecheng.content.api;

import com.alibaba.fastjson.JSON;
import com.xuecheng.content.model.dto.CourseBaseInfoDto;
import com.xuecheng.content.model.dto.CoursePreviewDto;
import com.xuecheng.co

你可能感兴趣的:(黑马学成在线,服务器,java,运维)