From c4786844ef75025cd27cc3833a0f7cd86ad80781 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 24 十一月 2025 12:01:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/user_action' into user_action
---
framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java | 63 +++++++++++++++++++++++++++++--
1 files changed, 59 insertions(+), 4 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
index 1cc5c9d..d2dc77c 100644
--- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
@@ -6,12 +6,16 @@
import cn.lili.base.Result;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
+import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.lmk.domain.query.VideoGoodsEsQuery;
+import cn.lili.modules.promotion.entity.dos.Coupon;
+import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum;
+import cn.lili.modules.promotion.service.CouponService;
import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.entity.dos.EsGoodsRelatedInfo;
import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO;
@@ -20,6 +24,7 @@
import cn.lili.modules.search.service.EsGoodsSearchService;
import cn.lili.modules.search.utils.SqlFilter;
import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.lucene.search.join.ScoreMode;
@@ -88,6 +93,9 @@
@Autowired
private Cache<Object> cache;
+ @Autowired
+ private CouponService couponService;
+
@Override
public SearchPage<EsGoodsIndex> searchGoods(EsGoodsSearchDTO searchDTO, PageVO pageVo) {
@@ -98,17 +106,56 @@
}
NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo);
if (Objects.nonNull(searchDTO.getCanFilter()) && searchDTO.getCanFilter()) {
+ // 浣跨敤sn瀛楁鎺掑簭骞跺湪鎶樺彔鏃堕�夋嫨sn鏈�灏忕殑璁板綍
searchQueryBuilder.withCollapseField("goodsId.keyword");
+ searchQueryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.ASC));
}
NativeSearchQuery searchQuery = searchQueryBuilder.build();
searchQuery.setTrackTotalHits(true);
log.info("searchGoods DSL:{}", searchQuery.getQuery().toString());
+ log.info("searchGoods sort:{}", searchQuery.getElasticsearchSorts().toString());
SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class);
return SearchHitSupport.searchPageFor(search, searchQuery.getPageable());
}
@Override
public Page<EsGoodsIndex> searchGoodsByPage(EsGoodsSearchDTO searchDTO, PageVO pageVo) {
+ if (PromotionTypeEnum.COUPON.name().equals(searchDTO.getPromotionType())) {
+ Coupon coupon = couponService.getById(searchDTO.getPromotionsId());
+ if (coupon != null) {
+ if (PromotionsScopeTypeEnum.ALL.name().equals(coupon.getScopeType())) {
+ searchDTO.setPromotionType(null);
+ searchDTO.setPromotionsId(null);
+ } else if (PromotionsScopeTypeEnum.PORTION_GOODS.name().equals(coupon.getScopeType())) {
+ String promotionsId = coupon.getScopeId();
+ if (cn.lili.common.utils.StringUtils.isNotBlank(promotionsId)) {
+ List<String> skuIds = new ArrayList<>(Arrays.asList(promotionsId.split(",")));
+ Page<EsGoodsIndex> resultPage = new Page<>();
+ List<EsGoodsIndex> esGoodsBySkuIds = getEsGoodsBySkuIds(skuIds, pageVo);
+ System.err.println(JSON.toJSONString(esGoodsBySkuIds));
+ resultPage.setRecords(esGoodsBySkuIds);
+ resultPage.setPages(1);
+ resultPage.setCurrent(1);
+ resultPage.setSize(1);
+ resultPage.setTotal(esGoodsBySkuIds.size());
+ return resultPage;
+ }
+ } else if (PromotionsScopeTypeEnum.PORTION_SHOP_CATEGORY.name().equals(coupon.getScopeType())) {
+ searchDTO.setPromotionType(null);
+ searchDTO.setCategoryId(searchDTO.getPromotionsId());
+ searchDTO.setPromotionsId(null);
+ } else if (PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name().equals(coupon.getScopeType())) {
+ String promotionsId = searchDTO.getPromotionsId();
+ if (cn.lili.common.utils.StringUtils.isNotBlank(promotionsId)) {
+ searchDTO.setPromotionType(null);
+ searchDTO.setCategoryId(coupon.getScopeId());
+ searchDTO.setPromotionsId(null);
+ }
+ }
+
+ }
+
+ }
// 鍒ゆ柇鍟嗗搧绱㈠紩鏄惁瀛樺湪
if (!restTemplate.indexOps(EsGoodsIndex.class).exists()) {
return null;
@@ -454,8 +501,16 @@
FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()];
filterFunctionBuilders.toArray(builders);
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(QueryBuilders.matchAllQuery(), builders)
- .scoreMode(FunctionScoreQuery.ScoreMode.SUM)
- .setMinScore(2);
+ .scoreMode(FunctionScoreQuery.ScoreMode.SUM);
+ functionScoreQueryBuilder.setMinScore(0);
+// if (CharSequenceUtil.isNotEmpty(searchDTO.getPromotionsId()) && CharSequenceUtil.isNotEmpty(searchDTO.getPromotionType())) {
+// functionScoreQueryBuilder.setMinScore(0);
+// }else if (cn.lili.common.utils.StringUtils.isNotBlank(searchDTO.getCategoryId())){
+// functionScoreQueryBuilder.setMinScore(0);
+// }
+// else {
+// functionScoreQueryBuilder.setMinScore(2);
+// }
//鑱氬悎鎼滅储鍒欏皢缁撴灉鏀惧叆杩囨护鏉′欢
filterBuilder.must(functionScoreQueryBuilder);
} else {
@@ -468,7 +523,7 @@
if (pageVo != null && CharSequenceUtil.isNotEmpty(pageVo.getOrder()) && CharSequenceUtil.isNotEmpty(pageVo.getSort())) {
- nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort(pageVo.getSort()).order(SortOrder.valueOf(pageVo.getOrder().toUpperCase())));
+ nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort(pageVo.getSort()).order(SortOrder.valueOf(pageVo.getOrder().toUpperCase())).missing("_last"));
} else {
nativeSearchQueryBuilder.withSort(SortBuilders.scoreSort().order(SortOrder.DESC));
}
@@ -664,7 +719,7 @@
filterFunctionBuilders.toArray(builders);
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(goodsNameMatchQuery, builders)
.scoreMode(FunctionScoreQuery.ScoreMode.SUM)
- .setMinScore(2);
+ .setMinScore(0);
//鑱氬悎鎼滅储鍒欏皢缁撴灉鏀惧叆杩囨护鏉′欢
filterBuilder.must(functionScoreQueryBuilder);
filterBuilder.should(QueryBuilders.boolQuery().should(QueryBuilders.matchPhraseQuery("goodsName", keyword).boost(10)));
--
Gitblit v1.8.0