1 课程发布
1.1 需求分析
课程发布后将生成正式的课程详情页面,课程发布后用户即可浏览课程详情页面,并开始课程的学习。
课程发布生成课程详情页面的流程与课程预览业务流程相同,如下:
1、用户进入教学管理中心,进入某个课程的管理界面
2、点击课程发布,前端请求到课程管理服务
3、课程管理服务远程调用CMS生成课程发布页面,CMS将课程详情页面发布到服务器
4、课程管理服务修改课程发布状态为 “已发布”,并向前端返回发布成功
5、用户在教学管理中心点击“课程详情页面”链接,查看课程详情页面内容
1.2 CMS 一键发布接口
1.2.1 需求分析
根据需求分析内容,需要在 cms服务增加页面发布接口供课程管理服务调用,此接口的功能如下:
1、接收课程管理服务发布的页面信息
2、将页面信息添加到 数据库(mongodb)
3、对页面信息进行静态化
4、将页面信息发布到服务器
1.2.3 接口定义
1、创建响应结果类型
页面发布成功cms返回页面的url
页面Url= cmsSite.siteDomain+cmsSite.siteWebPath+ cmsPage.pageWebPath + cmsPage.pageName
就是:站点的的域名+站点绝对路径+页面路径+页面名称
@Data
@ToString
//Feign,远程调用,需要无参构造。注意
@NoArgsConstructor
public class CoursePublishResult extends ResponseResult {
String previewUrl;//页面预览的url,必须得到页面id才可以拼装
public CoursePublishResult(ResultCode resultCode, String previewUrl) {
super(resultCode);
this.previewUrl = previewUrl;
}
}
2、在api工程cms中定义页面发布接口
@ApiOperation("一键发布页面")
public CmsPostPageResult postPageQuick(CmsPage cmsPage);
2.2.4 Dao
1、站点dao
接口中需要获取站点的信息(站点域名、站点访问路径等)
public interface CmsSiteRepository extends MongoRepository<CmsSite,String> {
}
2.2.5 Service,添加3个方法
1、添加页面,如果已存在则更新页面,
//保存页面
public CmsPageResult save(CmsPage cmsPage) {
//先通过唯一索引,判断,有没有这个页面
CmsPage cmsPage1 =
cmsPageRepository.findByPageNameAndPageWebPathAndSiteId(cmsPage.getPageName(),
cmsPage.getPageWebPath(), cmsPage.getSiteId());
//如果有这个页面,执行更新
if (cmsPage1 != null) {
CmsPageResult edit = this.edit(cmsPage1.getPageId(), cmsPage);
System.err.println(edit.getCmsPage());
return edit;
}
//如果没有,就执行新增
CmsPageResult add = this.add(cmsPage);
System.err.println(add.getCmsPage());
return add;
}
//一键发布的功能
public CmsPostPageResult postPageQuick(CmsPage cmsPage) {
//将页面信息存储到cms_page 集合中
CmsPageResult save = this.save(cmsPage);
if(!save.isSuccess()){
ExceptionCast.cast(CommonCode.FAIL);
}
//得到页面的id
CmsPage cmsPageSave = save.getCmsPage();
String pageId = cmsPageSave.getPageId();
//执行页面发布(先静态化、保存GridFS,向MQ发送消息)
ResponseResult post = this.post(pageId);
if(!post.isSuccess()){
ExceptionCast.cast(CommonCode.FAIL);
}
//拼接页面Url= cmsSite.siteDomain+cmsSite.siteWebPath+ cmsPage.pageWebPath + cmsPage.pageName
//取出站点id
String siteId = cmsPageSave.getSiteId();
CmsSite cmsSite = this.findCmsSiteById(siteId);
//页面url
String pageUrl =cmsSite.getSiteDomain() + cmsSite.getSiteWebPath() + cmsPageSave.getPageWebPath() + cmsPageSave.getPageName();
return new CmsPostPageResult(CommonCode.SUCCESS,pageUrl);
}
//根据站点id查询站点信息
public CmsSite findCmsSiteById(String siteId){
Optional<CmsSite> optional = cmsSiteRepository.findById(siteId);
if(optional.isPresent()){
return optional.get();
}
return null;
}
2.2.6 Controller
//发布页面的方法
@Override
@PostMapping("/postPageQuick")
public CmsPostPageResult postPageQuick(@RequestBody CmsPage cmsPage) {
CmsPostPageResult cmsPostPageResult = pageService.postPageQuick(cmsPage);
return cmsPostPageResult;
}
1.3 course课程发布接口
1.3.1 Api接口
此Api接口由课程管理提供,由课程管理前端调用此Api接口,实现课程发布。
在api工程下课程管理包下定义接口:
@ApiOperation("通过课程id,一键发布课程的接口")
public CoursePublishResult publish(String id);
1.3.2 创建Feign Client
在课程管理工程创建CMS服务页面发布的Feign Client,
注意:pom中加入Feign的依赖。和启动类加Feign的开启注释
1.3.3 Service
1、配置课程发布页面参数
在application.yml中配置
# 远程调用课程预览,所需要的配置参数
course-publish:
# 站点id
siteId: 5b30cba5f58b4411fc6cb1e5
# 模板id
templateId: 5b345a6b94db44269cb2bfec
# 预览地址前缀
previewUrl: http://www.xuecheng.com/cms/preview/
# 课程路径
pageWebPath: /course/detail/
# 页面路径
pagePhysicalPath: /course/detail/
# 数据模型路径
dataUrlPre: http://localhost:31200/course/courseview/
Service
注入远程调用的接口:
@Autowired
CmsPageClient cmsPageClient;
具体的发布方法:
//课程一键发布,传进来的是课程id
@Transactional
public CoursePublishResult publish(String id) {
//提前需要拼装,课程页面信息
//查询课程基本信息
CourseBase courseBaseById = this.findCourseById(id);
/