提交 4b09fd31 编写于 作者: F fengyw

优化功能,不强制依赖es

上级 8ec9f2c1
package com.roncoo.education.course.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.roncoo.education.common.core.enums.PutawayEnum;
import com.roncoo.education.common.core.enums.StatusIdEnum;
import com.roncoo.education.common.core.tools.BeanUtil;
......@@ -30,28 +31,30 @@ import java.util.List;
@Component
public class CourseJob {
@Autowired(required = false)
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Autowired
private CourseDao courseDao;
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
/**
* 每天凌晨5点执行一次
*/
@XxlJob("courseJobHandler")
public void course() {
CourseExample example = new CourseExample();
example.createCriteria().andStatusIdEqualTo(StatusIdEnum.YES.getCode()).andIsPutawayEqualTo(PutawayEnum.UP.getCode());
List<Course> courseList = courseDao.listByExample(example);
if (CollUtil.isNotEmpty(courseList)) {
List<IndexQuery> queries = new ArrayList<>();
for (Course course : courseList) {
EsCourse esCourse = BeanUtil.copyProperties(course, EsCourse.class);
IndexQuery query = new IndexQueryBuilder().withObject(esCourse).build();
queries.add(query);
if (ObjectUtil.isNotNull(elasticsearchRestTemplate)) {
CourseExample example = new CourseExample();
example.createCriteria().andStatusIdEqualTo(StatusIdEnum.YES.getCode()).andIsPutawayEqualTo(PutawayEnum.UP.getCode());
List<Course> courseList = courseDao.listByExample(example);
if (CollUtil.isNotEmpty(courseList)) {
List<IndexQuery> queries = new ArrayList<>();
for (Course course : courseList) {
EsCourse esCourse = BeanUtil.copyProperties(course, EsCourse.class);
IndexQuery query = new IndexQueryBuilder().withObject(esCourse).build();
queries.add(query);
}
elasticsearchRestTemplate.indexOps(EsCourse.class).delete();
elasticsearchRestTemplate.bulkIndex(queries, IndexCoordinates.of(EsCourse.COURSE));
}
elasticsearchRestTemplate.indexOps(EsCourse.class).delete();
elasticsearchRestTemplate.bulkIndex(queries, IndexCoordinates.of(EsCourse.COURSE));
}
XxlJobHelper.handleSuccess("完成");
}
......
......@@ -23,11 +23,11 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@Component
public class UserStudyJob {
@Autowired
private UserStudyDao userStudyDao;
@Autowired
private CacheRedis cacheRedis;
@Autowired
private UserStudyDao userStudyDao;
/**
* 每10秒执行一次
......
......@@ -24,7 +24,6 @@ import com.roncoo.education.course.service.admin.resp.AdminCoursePageResp;
import com.roncoo.education.course.service.admin.resp.AdminCourseViewResp;
import com.roncoo.education.user.feign.interfaces.IFeignLecturer;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
......@@ -48,16 +47,15 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class AdminCourseBiz extends BaseBiz {
@NotNull
private final IFeignLecturer feignLecturer;
@NotNull
private final CourseDao dao;
@NotNull
private final CategoryDao categoryDao;
@NotNull
private final IFeignLecturer feignLecturer;
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
private final ElasticsearchRestTemplate elasticsearchRestTemplate;
/**
* 课程信息分页
......@@ -106,8 +104,10 @@ public class AdminCourseBiz extends BaseBiz {
}
Course record = BeanUtil.copyProperties(req, Course.class);
if (dao.save(record) > 0) {
EsCourse esCourse = BeanUtil.copyProperties(record, EsCourse.class);
elasticsearchRestTemplate.index(new IndexQueryBuilder().withObject(esCourse).build(), IndexCoordinates.of(EsCourse.COURSE));
if (ObjectUtil.isNotNull(elasticsearchRestTemplate)) {
EsCourse esCourse = BeanUtil.copyProperties(record, EsCourse.class);
elasticsearchRestTemplate.index(new IndexQueryBuilder().withObject(esCourse).build(), IndexCoordinates.of(EsCourse.COURSE));
}
return Result.success("操作成功");
}
return Result.error("操作失败");
......@@ -140,8 +140,10 @@ public class AdminCourseBiz extends BaseBiz {
}
Course record = BeanUtil.copyProperties(req, Course.class);
if (dao.updateById(record) > 0) {
EsCourse esCourse = BeanUtil.copyProperties(record, EsCourse.class);
elasticsearchRestTemplate.index(new IndexQueryBuilder().withObject(esCourse).build(), IndexCoordinates.of(EsCourse.COURSE));
if (ObjectUtil.isNotNull(elasticsearchRestTemplate)) {
EsCourse esCourse = BeanUtil.copyProperties(record, EsCourse.class);
elasticsearchRestTemplate.index(new IndexQueryBuilder().withObject(esCourse).build(), IndexCoordinates.of(EsCourse.COURSE));
}
return Result.success("操作成功");
}
return Result.error("操作失败");
......@@ -155,7 +157,9 @@ public class AdminCourseBiz extends BaseBiz {
*/
public Result<String> delete(Long id) {
if (dao.deleteById(id) > 0) {
elasticsearchRestTemplate.delete(id.toString(), EsCourse.class);
if (ObjectUtil.isNotNull(elasticsearchRestTemplate)) {
elasticsearchRestTemplate.delete(id.toString(), EsCourse.class);
}
return Result.success("操作成功");
}
return Result.error("操作失败");
......@@ -168,13 +172,15 @@ public class AdminCourseBiz extends BaseBiz {
List<Course> courseList = dao.listByExample(example);
if (CollUtil.isNotEmpty(courseList)) {
List<IndexQuery> queries = new ArrayList<>();
for (Course course : courseList) {
EsCourse esCourse = BeanUtil.copyProperties(course, EsCourse.class);
queries.add(new IndexQueryBuilder().withObject(esCourse).build());
if (ObjectUtil.isNotNull(elasticsearchRestTemplate)) {
for (Course course : courseList) {
EsCourse esCourse = BeanUtil.copyProperties(course, EsCourse.class);
queries.add(new IndexQueryBuilder().withObject(esCourse).build());
}
// 更新es
elasticsearchRestTemplate.indexOps(EsCourse.class).delete();
elasticsearchRestTemplate.bulkIndex(queries, IndexCoordinates.of(EsCourse.COURSE));
}
// 更新es
elasticsearchRestTemplate.indexOps(EsCourse.class).delete();
elasticsearchRestTemplate.bulkIndex(queries, IndexCoordinates.of(EsCourse.COURSE));
}
return Result.success("操作成功");
}
......
......@@ -3,6 +3,7 @@ package com.roncoo.education.course.service.api.biz;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.roncoo.education.common.core.base.Page;
import com.roncoo.education.common.core.base.PageUtil;
import com.roncoo.education.common.core.base.Result;
import com.roncoo.education.common.core.enums.PutawayEnum;
import com.roncoo.education.common.core.enums.StatusIdEnum;
......@@ -58,6 +59,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class ApiCourseBiz extends BaseBiz {
@NotNull
private final IFeignLecturer feignLecturer;
@NotNull
private final CourseDao dao;
@NotNull
......@@ -67,20 +71,36 @@ public class ApiCourseBiz extends BaseBiz {
@NotNull
private final CategoryDao categoryDao;
@NotNull
private final IFeignLecturer feignLecturer;
@NotNull
private final ElasticsearchRestTemplate elasticsearchRestTemplate;
public Result<Page<ApiCoursePageResp>> searchForPage(ApiCoursePageReq req) {
if (ObjectUtil.isNotNull(elasticsearchRestTemplate)) {
// elasticsearch
return getPageResultForElasticsearch(req);
}
// mysql
CourseExample example = new CourseExample();
CourseExample.Criteria criteria = example.createCriteria();
if (ObjectUtil.isNotEmpty(req.getCategoryId())) {
criteria.andCategoryIdEqualTo(req.getCategoryId());
}
if (ObjectUtil.isNotEmpty(req.getIsFree())) {
criteria.andIsFreeEqualTo(req.getIsFree());
}
if (StringUtils.hasText(req.getCourseName())) {
criteria.andCourseNameLike(PageUtil.like(req.getCourseName()));
}
example.setOrderByClause("course_sort asc, id desc");
Page<Course> page = dao.page(req.getPageCurrent(), req.getPageSize(), example);
return Result.success(PageUtil.transform(page, ApiCoursePageResp.class));
}
private Result<Page<ApiCoursePageResp>> getPageResultForElasticsearch(ApiCoursePageReq req) {
NativeSearchQueryBuilder nsb = new NativeSearchQueryBuilder();
// 高亮字段
nsb.withHighlightFields(new HighlightBuilder.Field("courseName").preTags("<mark>").postTags("</mark>"));
// 分页
nsb.withPageable(PageRequest.of(req.getPageCurrent() - 1, req.getPageSize()));
BoolQueryBuilder qb = QueryBuilders.boolQuery();
if (ObjectUtil.isNotEmpty(req.getCategoryId())) {
List<Long> categoryIdList = listCategoryId(req.getCategoryId());
......@@ -98,7 +118,6 @@ public class ApiCourseBiz extends BaseBiz {
nsb.withSort(new FieldSortBuilder("id").order(SortOrder.DESC));
}
nsb.withQuery(qb);
SearchHits<EsCourse> searchHits = elasticsearchRestTemplate.search(nsb.build(), EsCourse.class, IndexCoordinates.of(EsCourse.COURSE));
return Result.success(EsPageUtil.transform(searchHits, req.getPageCurrent(), req.getPageSize(), ApiCoursePageResp.class));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册