package fight.it.gmall.list.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import fight.it.gmall.list.repository.GoodsElasticsearchRepository;
import fight.it.gmall.list.service.ListService;
import fight.it.gmall.model.list.*;
import fight.it.gmall.model.product.BaseTrademark;
import fight.it.gmall.model.product.SkuInfo;
import fight.it.gmall.product.client.ProductFeignClient;
import io.lettuce.core.GeoArgs;
import net.bytebuddy.description.modifier.ProvisioningState;
import org.apache.lucene.queryparser.xml.builders.BooleanQueryBuilder;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
import org.elasticsearch.search.aggregations.bucket.terms.*;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class ListServiceImpl implements ListService {
@Autowired
ProductFeignClient productFeignClient;
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
@Autowired
GoodsElasticsearchRepository goodsElasticsearchRepository;
@Autowired
RestHighLevelClient restHighLevelClient;
@Autowired
RedisTemplate redisTemplate;
@Override
public List<JSONObject> getBaseCategoryList(){
List<JSONObject> list= productFeignClient.getBaseCategoryList();
return list;
}
@Override
public void cancelSale(Long skuId) {
goodsElasticsearchRepository.deleteById(skuId);
}
@Override
public void hotScore(Long skuId) {
Integer hotScoreRedis = (Integer)redisTemplate.opsForValue().get("hotScore:" + skuId);
if (null!=hotScoreRedis){
hotScoreRedis++;
redisTemplate.opsForValue().set("hotScore:"+skuId,hotScoreRedis);
}else{
redisTemplate.opsForValue().set("hotScore:" + skuId,1);
}
if(hotScoreRedis%10==0){
Goods goods = goodsElasticsearchRepository.findById(skuId).get();
goods.setHotScore(Long.parseLong(hotScoreRedis+""));
goodsElasticsearchRepository.save(goods);
}
}
@Override
public void onSale(Long skuId) {
Goods goods = new Goods();
//获取商品信息
SkuInfo skuInfo= productFeignClient.getSkuInfoById(skuId);
//获取属性数据
List<SearchAttr> searchAttrs = productFeignClient.getSearchAttrList(skuId);
//商标数据
BaseTrademark baseTrademark = productFeignClient.getTrademarkById(skuInfo.getTmId());
goods.setTitle(skuInfo.getSkuName());
goods.setHotScore(0l);
goods.setCategory3Id(skuInfo.getCategory3Id());
goods.setCreateTime(new Date());
goods.setDefaultImg(skuInfo.getSkuDefaultImg());
goods.setPrice(skuInfo.getPrice().doubleValue());
goods.setTmLogoUrl(baseTrademark.getLogoUrl());
goods.setTmName(baseTrademark.getTmName());
goods.setTmId(baseTrademark.getId());
goods.setAttrs(searchAttrs);
goods.setId(skuId);
goodsElasticsearchRepository.save(goods);
}
@Override
public void createGoodsIndex() {
elasticsearchRestTemplate.createIndex(Goods.class);
elasticsearchRestTemplate.putMapping(Goods.class);
}
@Override
public SearchResponseVo list(SearchParam searchParam) {
// 需要解析的返回结果
SearchResponse searchResponse = null;
//封装请求
SearchRequest searchRequest = getSearchRequest(searchParam);
try {
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
}catch (IOException e){
e.printStackTrace();
}
//解析返回结果
SearchResponseVo searchResponseVo = parseSearchResponse(searchResponse);
return searchResponseVo;
}
//封装请求
private SearchRequest getSearchRequest(SearchParam searchParam) {
SearchRequest searchRequest = new SearchRequest();// 请求
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//dsl
searchRequest.indices("goods");
searchRequest.types("info");
// 参数
Long category3Id = searchParam.getCategory3Id();
String keyword = searchParam.getKeyword();
String[] props = searchParam.getProps();// 属性id:属性值名称:属性名称
String trademark = searchParam.getTrademark();// 商标id:商标名称
String order = searchParam.getOrder();
//
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
//商标
if(!StringUtils.isEmpty(trademark)){
TermQueryBuilder termQueryBuilder= new TermQueryBuilder("tmId",trademark.split(":")[0]);
boolQueryBuilder.filter(termQueryBuilder);
}
// 关键字
if(!StringUtils.isEmpty(keyword)){
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("title",keyword);
boolQueryBuilder.must(matchQueryBuilder);
}
//属性
if(null!=props&&props.length>0){
for (String prop : props) {
String[] split = prop.split(":");
long attrId = Long.parseLong(split[0]);
String attrValueName = split[1];
String attrName = split[2];
BoolQueryBuilder boolQueryBuilderNested = new BoolQueryBuilder();
TermQueryBuilder termQueryBuilder = new TermQueryBuilder("attrs.attrId",attrId);
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("attrs.attrValue",attrValueName);
boolQueryBuilderNested.filter(termQueryBuilder);
boolQueryBuilderNested.must(matchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = new NestedQueryBuilder("attrs",boolQueryBuilderNested, ScoreMode.None);
boolQueryBuilder.filter(nestedQueryBuilder);
}
}
// 三级分类
if (null != category3Id && category3Id > 0) {
TermQueryBuilder termQueryBuilder = new TermQueryBuilder("category3Id", category3Id);
boolQueryBuilder.filter(termQueryBuilder);
}
searchSourceBuilder.query(boolQueryBuilder);
// 商标聚合
TermsAggregationBuilder termsTmAggregationBuilder = AggregationBuilders.terms("tmIdAgg").field("tmId")
.subAggregation(AggregationBuilders.terms("tmNameAgg").field("tmName"))
.subAggregation(AggregationBuilders.terms("tmLog
没有合适的资源?快使用搜索试试~ 我知道了~
电商项目-gmail-parent-0621.zip
共1126个文件
png:300个
css:244个
java:189个
需积分: 0 0 下载量 132 浏览量
2023-11-04
21:36:28
上传
评论
收藏 10.44MB ZIP 举报
温馨提示
电商项目-gmail-parent-0621
资源推荐
资源详情
资源评论
收起资源包目录
电商项目-gmail-parent-0621.zip (1126个子文件)
$PRODUCT_WORKSPACE_FILE$ 489B
index.html.back 20KB
tracker.conf 201B
all.css 318KB
easyui.css 67KB
easyui.css 67KB
easyui.css 67KB
easyui.css 66KB
easyui.css 64KB
easyui.css 63KB
widget-jquery.autocomplete.css 16KB
angular.css 10KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
pages-JD-index.css 9KB
pages-item.css 8KB
widget-cartPanelView.css 8KB
pages-seckillOrder.css 7KB
tabs.css 7KB
tabs.css 7KB
pages-mycomment.css 7KB
mobile.css 7KB
pages-seckill-item.css 6KB
color.css 6KB
datagrid.css 6KB
datagrid.css 6KB
datagrid.css 6KB
panel.css 6KB
panel.css 6KB
panel.css 6KB
datagrid.css 6KB
panel.css 5KB
datagrid.css 5KB
datagrid.css 5KB
panel.css 5KB
panel.css 5KB
pages-list.css 5KB
pages-home.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
pages-shop.css 4KB
pages-myOrder.css 4KB
pages-getOrderInfo.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
window.css 4KB
window.css 4KB
pages-cart.css 4KB
linkbutton.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
pages-seckill-index.css 3KB
pages-weixinpay.css 3KB
pages-success-cart.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
pages-login-manage.css 3KB
pages-pay.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
icon.css 2KB
pages-login.css 2KB
menu.css 2KB
menu.css 2KB
accordion.css 2KB
menu.css 2KB
accordion.css 2KB
accordion.css 2KB
menu.css 2KB
menu.css 2KB
accordion.css 2KB
menu.css 2KB
accordion.css 2KB
accordion.css 2KB
pages-shoplogin.css 2KB
共 1126 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
武昌库里写JAVA
- 粉丝: 3257
- 资源: 1968
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的异常姿势识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 隐藏文件展示工具,用来展示被病毒隐藏的文件
- 基于Matlab的图像分割系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功