From 2b46184d29b5f45080a1cfefb33c2cf18dbd1437 Mon Sep 17 00:00:00 2001 From: JIAN Date: Tue, 27 Aug 2024 13:17:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(foundations):=E6=96=B0=E5=A2=9E=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E6=A3=80=E7=B4=A2=E4=B8=8A=E6=9E=B6=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/consumer/ServeController.java | 11 ++++ .../foundations/service/IServeService.java | 6 +++ .../service/impl/ServeServiceImpl.java | 53 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java index 41e4add..3a3fb59 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java @@ -3,6 +3,7 @@ package com.jzo2o.foundations.controller.consumer; import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO; import com.jzo2o.foundations.model.dto.response.ServeAggregationTypeSimpleResDTO; import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO; +import com.jzo2o.foundations.model.dto.response.ServeSimpleResDTO; import com.jzo2o.foundations.service.IServeService; import com.jzo2o.foundations.service.IServeTypeService; import io.swagger.annotations.Api; @@ -51,6 +52,16 @@ public class ServeController { return serveService.getServeById(serveId); } + /** + * 服务查询 + */ + @GetMapping("/search") + public List findServeList(@RequestParam() String cityCode, + @RequestParam(required = false) Long serveTypeId, + @RequestParam(required = false) String keyword) { + return serveService.findServeList(cityCode, serveTypeId, keyword); + } + @Resource private IServeService serveService; @Resource diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java index 11ba0a3..2fc795d 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java @@ -8,6 +8,7 @@ import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO; import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO; import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO; import com.jzo2o.foundations.model.dto.response.ServeResDTO; +import com.jzo2o.foundations.model.dto.response.ServeSimpleResDTO; import java.math.BigDecimal; import java.util.List; @@ -80,4 +81,9 @@ public interface IServeService extends IService { * 获取指定id的服务 */ ServeAggregationSimpleResDTO getServeById(Long serveId); + + /** + * 查询指定区域的服务 + */ + List findServeList(String cityCode, Long serveTypeId, String keyword); } \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java index 419d41e..340b5cc 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java @@ -1,5 +1,8 @@ package com.jzo2o.foundations.service.impl; +import co.elastic.clients.elasticsearch._types.SortOrder; +import co.elastic.clients.elasticsearch.core.SearchRequest; +import co.elastic.clients.elasticsearch.core.SearchResponse; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers; import com.jzo2o.common.expcetions.CommonException; @@ -8,6 +11,8 @@ import com.jzo2o.common.model.PageResult; import com.jzo2o.common.utils.BeanUtils; import com.jzo2o.common.utils.CollUtils; import com.jzo2o.common.utils.ObjectUtils; +import com.jzo2o.es.core.ElasticSearchTemplate; +import com.jzo2o.es.utils.SearchResponseUtils; import com.jzo2o.foundations.constants.RedisConstants; import com.jzo2o.foundations.enums.FoundationStatusEnum; import com.jzo2o.foundations.enums.HotStatusEnum; @@ -37,6 +42,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * 区域服务实现类 @@ -329,6 +335,51 @@ public class ServeServiceImpl extends ServiceImpl implements .build(); } + @Override + public List findServeList(String cityCode, Long serveTypeId, String keyword) { + // 构建ES搜索请求 + SearchRequest searchRequest = new SearchRequest.Builder() + .index("serve_aggregation") + .query(query -> query + .bool(bool -> { + bool = bool.must(must -> must.term(term -> term + .field("city_code") + .value(cityCode))); + + if (!ObjectUtils.isEmpty(serveTypeId)) { + bool = bool.must(must -> must.term(term -> term + .field("serve_type_id") + .value(serveTypeId))); + } + + if (!ObjectUtils.isEmpty(keyword)) { + bool = bool.must(must -> must.multiMatch(multi -> multi + .query(keyword) + .fields("serve_item_name", "serve_item_name"))); + } + + return bool; + })) + .sort(sort -> sort + .field(field -> field + .field("serve_item_sort_num") + .order(SortOrder.Asc))) + .build(); + + // 发送搜索请求获取结果 + SearchResponse response = elasticSearchTemplate + .opsForDoc() + .search(searchRequest, ServeAggregation.class); + + if (SearchResponseUtils.isNotSuccess(response)) { + return Collections.emptyList(); + } else { + return response.hits().hits().stream() + .map(hit -> BeanUtils.toBean(hit.source(), ServeSimpleResDTO.class)) + .collect(Collectors.toList()); + } + } + @Resource private IRegionService regionService; @Resource @@ -339,4 +390,6 @@ public class ServeServiceImpl extends ServiceImpl implements private IServeItemService serveItemService; @Resource private ServeSyncMapper serveSyncMapper; + @Resource + private ElasticSearchTemplate elasticSearchTemplate; } \ No newline at end of file