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