课程发布后将生成正式的课程详情页面,课程发布后用户即可浏览课程详情页面,并开始课程的学习。
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
此时会在该路径下新增该页面
响应成功: