package com.zhouj.es.controller;
import com.sun.xml.internal.messaging.saaj.packaging.mime.util.QEncoderStream;
import com.zhouj.es.doc.CourseDoc;
import com.zhouj.es.repository.CourseDocRepository;
import com.zhouj.es.result.Hig;
import com.zhouj.es.utils.PageList;
import com.zhouj.es.vo.CourseAggsVo;
import com.zhouj.third.es.CourseDocQuery;
import com.zhouj.utils.util.AjaxResult;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.search.highlight.Highlighter;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.BucketOrder;
import org.elasticsearch.search.aggregations.InternalOrder;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.ws.Service;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author: zj
* @description:
* @CreateTime: 2021-12-22
*/
@RestController
@RequestMapping("course")
public class CourseController {
@Autowired
private CourseDocRepository courseDocRepository;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
/**
* 新增课程
* @param courseDtoList
* @return
*/
@PostMapping("/saveCourseList")
@PreAuthorize("hasAuthority('courseDoc:add')")
AjaxResult saveCourseList(@RequestBody List<CourseDoc> courseDtoList){
System.out.println("===");
System.out.println("course保存成功");
courseDocRepository.saveAll(courseDtoList);
return AjaxResult.me();
}
/**
* 删除课程
* @param collect
* @return
*/
@PostMapping("/removeCourse")
AjaxResult deleteCourse(@RequestBody List<CourseDoc> collect){
courseDocRepository.deleteAll(collect);
System.out.println("course删除成功");
// HighlightBuilder.Field field = new HighlightBuilder.Field("name"); //.preTags("<font style='color:red'><b>").postTags("</b></font>");
// NativeSearchQuery build = new NativeSearchQueryBuilder()
// //条件
// .withQuery(queryBuilder)
// //排序
// .withSort(SortBuilders.fieldSort("id").order(SortOrder.ASC))
// //高亮
// .withHighlightFields(field)
// //分页
// .withPageable(PageRequest.of(pageNum - 1, pageSize))
// //构建
// .build();
return AjaxResult.me();
}
// private List<String> searchCategoryList(Map searchMap) {
// NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
// // 构建查询
// BoolQueryBuilder boolQueryBuilder = buildBasicQuery(searchMap);
// nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
// // 分类聚合名
// String groupName = "sku_category";
// // 构建聚合查询
// TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms(groupName).field("categoryName");
// nativeSearchQueryBuilder.addAggregation(termsAggregationBuilder);
// // 获取聚合分页结果
// AggregatedPage<Goods> goodsList = (AggregatedPage<Goods>) goodsRepository.search(nativeSearchQueryBuilder.build());
// // 在查询结果中找到聚合 - 根据聚合名称
// StringTerms stringTerms = (StringTerms) goodsList.getAggregation(groupName);
// // 获取桶
// List<StringTerms.Bucket> buckets = stringTerms.getBuckets();
// // 使用流Stream 将分类名存入集合
// List<String> categoryList = buckets.stream().map(bucket -> bucket.getKeyAsString()).collect(Collectors.toList());
// // 打印分类名称
// categoryList.forEach(System.out::println);
// return categoryList;
// }
/**
* 查询课程 高亮(repository不支持高亮)
* @param query
* @return
*/
@PostMapping("/queryCourses")
public AjaxResult queryCourses(@RequestBody CourseDocQuery query){
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//执行查询
String keyword = query.getKeyword();
// TermsAggregationBuilder aggregation = AggregationBuilders
// //别名
// .terms("uid")
// //聚合字段名
// .field("uid.keyword")
// //降序
// .order(BucketOrder.count(false))
// //聚合结果数据量,默认只返回前十条
// .size(100);
// SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// searchSourceBuilder.aggregation(aggregation);
if(!StringUtils.isEmpty(keyword)){
//模糊查询
boolQuery.must(QueryBuilders.multiMatchQuery(keyword,"name","courseTypeName","gradeName"));
//高亮查询
HighlightBuilder.Field field = new HighlightBuilder.Field("name").preTags("<font style='color:red'><b>").postTags("</b></font>");
searchQueryBuilder.withHighlightFields(field);
}
searchQueryBuilder.withQuery(boolQuery);
//查询
System.out.println(query.getKeyword());//搜索关键词
//聚合查询
// searchQueryBuilder.addAggregation(AggregationBuilders.terms("aggCourseTypeName").field("courseTypeName").size(20));
searchQueryBuilder.addAggregation(AggregationBuilders.terms("aggGradeName").field("gradeName").order(BucketOrder.count(false)).size(20));
//聚合查询,按照机构名字聚合,安装数量倒排
//searchQueryBuilder.addAggregation(AggregationBuilders.terms("tenantNameAgg").field("tenantName").order(Terms.Order.count(false)).size(20));
// searchQueryBuilder.addAggregation(AggregationBuilders.terms("aggCourseTypeName").field("courseTypeName").order(InternalOrder.count(true)));
NativeSearchQuery build = searchQueryBuilder.build();
//排序
String sortType = query.getSortType();
Sort.Direction direction = sortType.equals("desc") ? Sort.Direction.DESC : Sort.Direction.ASC;
Sort sort = new Sort(direction,"price");
build.addSort(sort);
//分页
PageRequest of = PageRequest.of(query.getPage()-1, query.getRows());
build.setPageable(of);
//Page<CourseDoc> search = courseDocRepository.
没有合适的资源?快使用搜索试试~ 我知道了~
基于Vue和TypeScript的hrm-parent人力资源管理系统设计源码
共1646个文件
js:558个
jpg:361个
java:226个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 10 浏览量
2024-09-29
10:46:46
上传
评论
收藏 38.48MB ZIP 举报
温馨提示
该项目是一款基于Vue和TypeScript开发的hrm-parent人力资源管理系统源码,共计1630个文件,涵盖558个JavaScript文件、361个JPG图片文件、226个Java源文件、123个CSS样式文件、94个PNG图片文件、60个XML配置文件、32个GIF图片文件、28个HTML文件、26个Vue组件文件以及19个Markdown文档。系统采用多种编程语言和文件格式,旨在为用户提供全面的人力资源管理解决方案。
资源推荐
资源详情
资源评论
收起资源包目录
基于Vue和TypeScript的hrm-parent人力资源管理系统设计源码 (1646个子文件)
.babelrc 96B
file.conf 2KB
registry.conf 2KB
index.css 124KB
index.css 124KB
user.css 109KB
common.css 94KB
common.css 91KB
flow.css 57KB
goods.css 46KB
index.css 44KB
category.css 25KB
highslide.css 20KB
col.css 20KB
col.css 20KB
date-picker.css 16KB
date-picker.css 16KB
color-style.css 16KB
color-style.css 16KB
message-box.css 14KB
message-box.css 14KB
layer.css 14KB
layer.css 14KB
pagination.css 14KB
pagination.css 14KB
slider.css 11KB
slider.css 11KB
select.css 11KB
select.css 11KB
table.css 10KB
table.css 10KB
upload.css 10KB
upload.css 10KB
time-picker.css 9KB
time-picker.css 9KB
register.css 9KB
dropdown.css 9KB
dropdown.css 9KB
button.css 8KB
button.css 8KB
cascader.css 7KB
cascader.css 7KB
input-number.css 7KB
input-number.css 7KB
iconfont.css 6KB
autocomplete.css 6KB
autocomplete.css 6KB
login.css 6KB
time-select.css 6KB
time-select.css 6KB
table-column.css 5KB
table-column.css 5KB
input.css 5KB
input.css 5KB
tabs.css 4KB
tabs.css 4KB
share_style0_16.css 4KB
color-picker.css 4KB
color-picker.css 4KB
base.css 4KB
base.css 4KB
menu.css 4KB
menu.css 4KB
radio.css 3KB
radio.css 3KB
reset.css 3KB
reset.css 3KB
checkbox.css 3KB
checkbox.css 3KB
tooltip.css 3KB
tooltip.css 3KB
step.css 3KB
step.css 3KB
icon.css 2KB
icon.css 2KB
popover.css 2KB
popover.css 2KB
switch.css 2KB
switch.css 2KB
progress.css 2KB
carousel.css 2KB
progress.css 2KB
carousel.css 2KB
tag.css 2KB
tag.css 2KB
tree.css 2KB
tree.css 2KB
form.css 2KB
form.css 2KB
dialog.css 1KB
dialog.css 1KB
notification.css 1KB
notification.css 1KB
message.css 1KB
message.css 1KB
loading.css 1KB
loading.css 1KB
alert.css 989B
alert.css 989B
select-dropdown.css 985B
共 1646 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
lly202406
- 粉丝: 2795
- 资源: 5454
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功