目录
一、模块需求分析
二、课程预览
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、点击课程预览,通过Nginx、后台服务网关请求内容管理服务进行课程预览。
1.2、内容管理服务查询课程相关信息进行整合,并通过模板引擎技术在服务端渲染生成页面,返回给浏览器。
1.3、通过课程预览页面点击”马上学习“打开视频播放页面。
1.4、视频播放页面通过Nginx请求后台服务网关,查询课程信息展示课程计划目录,请求媒资服务查询课程计划绑定的视频文件地址,在线浏览播放视频。
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.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.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