学成在线day10,课程发布功能,全文检索 Elasticearch,win安装和配置,ES 快速入门案例,IK分词器,搜索管理,ES的相关操作案例

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);
        /
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值