10、课程发布

课程发布后将生成正式的课程详情页面,课程发布后用户即可浏览课程详情页面,并开始课程的学习。
在这里插入图片描述
CMS一键发布接口
根据需求分析内容,需要在cms服务增加页面发布接口供课程管理服务调用,此接口的功能如下: 1、接收课程管理服务发布的页面信息
2、将页面信息添加到 数据库(mongodb)
3、对页面信息进行静态化
4、将页面信息发布到服务器
接口定义
1、创建响应结果类型
页面发布成功后cms返回页面的url
页面:Url= cmsSite.siteDomain+cmsSite.siteWebPath+ cmsPage.pageWebPath + cmsPage.pageName

@Data
@NoArgsConstructor
public class CmsPostPageResult extends ResponseResult {
    String pageUrl;

    public CmsPostPageResult(ResultCode resultCode, String pageUrl) {
        super(resultCode);
        this.pageUrl = pageUrl;
    }
}

2、API
在CmsPageControllerApi中编写以下方法:

@ApiOperation("一键发布页面")
public CmsPostPageResult postPageQuick(CmsPage cmsPage);

3、Dao
接口中需要获取站点的信息(站点域名、站点访问路径等)

public interface CmsSiteRepository extends MongoRepository<CmsSite,String> {
}

4、Service
1、添加页面方法,如果已存在则更新页面

public CmsPageResult save(CmsPage cmsPage) {	}

2、页面发布方法

public CmsPostPageResult postPageQuick(CmsPage cmsPage) {	}

3、根据id查询站点信息

public CmsSite findCmsSiteById(String siteId){	}

5、Controller
在CmsPageController添加以下代码:

@Override
@PostMapping("/postPageQuick")
public CmsPostPageResult postPageQuick(@RequestBody CmsPage cmsPage) {
    return pageService.postPageQuick(cmsPage);
}

课程发布接口
1、API接口
此Api接口由课程管理提供,由课程管理前端调用此Api接口,实现课程发布。
在api工程下的课程管理包下定义接口:

@ApiOperation("课程发布")
public CoursePublishResult publish(String id);

2、创建Feign Client
在CmsPageClient中添加如下方法:

//一键发布页面
@PostMapping("/cms/page/postPageQuick")
public CmsPostPageResult postPageQuick(@RequestBody CmsPage cmsPage);

3、在course工程的yml文件中添加:

course-publish:
  siteId: 5b30cba5f58b4411fc6cb1e5
  templateId: 5ecd0a0cda11e33814bfa410
  previewUrl: http://www.xuecheng.com/cms/preview/
  pageWebPath: /course/detail/
  pagePhysicalPath: /course/detail/
  dataUrlPre: http://localhost:31200/course/courseview/

由于在课程预览时已添加,可以不用重复添加
4、Service
在CourseService中配置如下方法:

    //课程发布
    @Transactional
    public CoursePublishResult publish(String id) {	}

更新课程状态为已发布

private CourseBase  saveCoursePubState(String courseId){		}

5、Controller
在CourseController中添加如下方法:

@Override
@PostMapping("/publish/{id}")
public CoursePublishResult publish(@PathVariable("id")String id) {
    return courseService.publish(id);
}

测试CMS一键发布接口
1、 配置虚拟主机
http下配置:

#静态资源服务
upstream static_server_pool{
	server 127.0.0.1:91 weight=10;
}

cms会将课程预览页面发布到服务器的D:/Workspace/webstorm/xcEduUI/xc-ui-pc-static-portal/course/detail/下,通过 www.xuecheng.com/course/detail/来访问。
例如:http://www.xuecheng.com/course/detail/4028e58161bcf7f40161bcf8b77c0000.html

新增站点和模板
1、新增课程详情页面的站点信息
向cms_site中新增如下信息

{ 
    "_id" : ObjectId("5b30cba5f58b4411fc6cb1e5"), 
    "_class" : "com.xuecheng.framework.domain.cms.CmsSite", 
    "siteName" : "课程详情站点", 
    "siteDomain" : "http://www.xuecheng.com", 
    "sitePort" : "80", 
    "siteWebPath" : "", 
    "siteCreateTime" : ISODate("2018-02-03T02:34:19.113+0000"), 
    "sitePhysicalPath" : "D:/Workspace/webstorm/xcEduUI/xc-ui-pc-static-portal"
}

2、新增课程详情模板信息
可直接使用前边章节制作的课程详情信息模板。

 @Test
 public void testStore() throws FileNotFoundException {
     //定义file
     File file =new File("D:/Workspace/xcEduService01/test-freemarker/src/main/resources/templates/course.ftl");
     //定义fileInputStream
     FileInputStream fileInputStream = new FileInputStream(file);
     ObjectId objectId = gridFsTemplate.store(fileInputStream, "course.ftl");
     System.out.println(objectId);
 }

在cms-client的yml文件中添加:

xuecheng:
  mq:
    #cms客户端监控的队列名称(不同的客户端监控的队列不能重复)
    queue: queue_cms_postpage_03
    routingKey: 5b30cba5f58b4411fc6cb1e5	#此routingKey为门户站点ID

测试
1、启动RabbitMQ服务
2、启动eureka01、cms01、cmsclient、course服务
3、注意配置routingKey和队列名称
打开swagger:http://localhost:31200/swagger-ui.html#!/course45controller/publishUsingPOST
输入:4028e581617f945f01617f9dabc40000
在这里插入图片描述
此时会在该路径下新增该页面
在这里插入图片描述
响应成功:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rsun04551

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值