课程上线与下线
课程上线:
- 发起上线请求-》修改数据库状态为上线-》将上线的课程存储在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);
}
- 扩展批量上线