课程上线并保存到ElasticSearch里面,课程资源下线把数据从ElasticSearch中删除

课程上线与下线

课程上线:

  • 发起上线请求-》修改数据库状态为上线-》将上线的课程存储在elasticsearch中
  • 为什么放在elasticsearch中:
    检索流程:门户网站区搜索:
  • 不会去mysql,而是去elasticsearch搜索-》返回结果给客户端
    取消发布课程:
  • 修改mysql数据状态为下线:-》从elasticsearch删除要下线的课程

- 课程上线实现:

控制层调用服务层处理前台发起的上线请求

  • service层:
  • 1根据id查询对象
  • 2判断课程状态为下线才能上线(使用常量)
  • 3修改课程状态为上线
  • 4 保存修改的课程到数据库
  • 5保存课程到elasticsearch
  • 需要用到coursedoc,所以coursedoc不能放在common-server里面,服务之间不能依赖
  • 在公共微服务创建新的子模块common-component用来装coursedoc
  • 把课程对象转成文档对象,因为上线是课程对象而es保存的是文档对象
  • 考虑doc应该有那些字段,看es存储需要那些字段->看展示的字段+搜索条件的字段+排序的字段
  • 需要关键词搜索的就需要分词(有两个搜索的关键词时可以加一个字段包含这两个字段来进行分词搜索)展示销量,评论数
  • 5.1在公共服务common-server编写es控制层往es里面添加数据
//保存方法
    @RequestMapping(value = "/save/coursedoc",method = RequestMethod.POST)
    public AjaxResult save(@RequestBody CourseDoc coursedoc){
        try {
            courseElasticsearchRepository.save(coursedoc);
            return AjaxResult.me().setMessage("保存成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("保存失败");
        }
    }
  • 5.2为common-server编写feign接口和托低方法(new 接口,使用匿名内部类的方式来编写托低方法,注意调用托低方法要打印错误和打印日志)

  • 5.3common-server调用ES的feign完成保存

  • 服务层代码

/**
     * 课程上线
     * @param id 课程id
     */
    @Override
    public void onLineCourse(Long id) {
        //根据id查询课程
        Course course = baseMapper.selectById(id);
        //判断课程是否是下线状态  如果不是就直接结束
        if(course.getStatus()==Course.ONLINE_STATUS||course.getStatus()==null){
            logger.error("课程已经上线!");
            return;
        }
        //修改数据库课程状态为上线
        course.setStatus(Course.ONLINE_STATUS);
        baseMapper.updateById(course);
        //存到es
        //写es控制层和feign接口
        CourseDetail courseDetail = courseDetailMapper.selectById(id);
        CourseMarket courseMarket = courseMarketMapper.selectById(id);
        //将course装转成doc对象
        CourseDoc courseDoc=new CourseDoc();
        courseDoc.setSearchField(course.getName()+courseDetail.getDescription());
        BeanUtils.copyProperties(course,courseDoc);
        BeanUtils.copyProperties(courseDetail,courseDoc);
        BeanUtils.copyProperties(courseMarket,courseDoc);
        courseDoc.setPic(fastDfsUrl+course.getPic());
        System.out.println(courseDoc.getPic());
        AjaxResult ajaxResult = commonFeignClient.save(courseDoc);
        System.out.println(courseDetail);
        System.out.println(courseMarket);
        System.out.println(courseDoc);
        if(!ajaxResult.isSuccess()){
            logger.error("存入Es失败!");
        }
        pushMessage(course);
    }
  • 扩展批量上线

- 下线逻辑一样

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

甜甜掉在星星上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值