Aslee 3 年之前
父節點
當前提交
942c1ff26e

+ 14 - 0
src/main/java/com/caimei365/commodity/controller/SearchQueryApi.java

@@ -1,6 +1,8 @@
 package com.caimei365.commodity.controller;
 
 import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.BaikeProductVo;
+import com.caimei365.commodity.model.vo.PaginationVo;
 import com.caimei365.commodity.service.SearchQueryService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -206,6 +208,18 @@ public class SearchQueryApi {
         return searchQueryService.queryArticleByLabel(id, pageNum, pageSize);
     }
 
+    @ApiOperation("根据关键词搜索采美百科商品")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键字"),
+            @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+            @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("/baike/keyword")
+    public ResponseJson<PaginationVo<BaikeProductVo>> queryBaikeProductByKeyword(String keyword,
+                                                          @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                          @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
+        return searchQueryService.queryBaikeProductByKeyword(keyword, pageNum, pageSize);
+    }
 
 
 }

+ 6 - 2
src/main/java/com/caimei365/commodity/mapper/PageMapper.java

@@ -339,10 +339,14 @@ public interface PageMapper {
      * 查询采美百科分类列表
      */
     List<BaikeTypeVo> getBaikeTypeList(Integer commodityType);
+
     /**
-     * 根据百科分类id查询对应商品
+     * 根据百科分类id和关键词查询对应商品
+     *
+     * @param typeId
+     * @param keyword
      */
-    List<BaikeProductVo> getBaikeTypeProducts(Integer id);
+    List<BaikeProductVo> getBaikeProducts(@Param("typeId") Integer typeId, @Param("keyword") String keyword);
     /**
      * 根据商品id查询问题列表
      */

+ 7 - 0
src/main/java/com/caimei365/commodity/model/vo/BaikeProductVo.java

@@ -1,5 +1,6 @@
 package com.caimei365.commodity.model.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -19,6 +20,11 @@ public class BaikeProductVo implements Serializable {
 
     private Integer productId;
 
+    /**
+     * 商品类型:1产品,2仪器
+     */
+    private Integer commodityType;
+
     /**
      * 产品/仪器图片
      */
@@ -37,6 +43,7 @@ public class BaikeProductVo implements Serializable {
     /**
      * 发布时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     private Date publishTime;
 
     /**

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/BaikeTypeVo.java

@@ -15,7 +15,7 @@ import java.util.List;
 public class BaikeTypeVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private Integer id;
+    private Integer typeId;
     private String name;
     private List<BaikeProductVo> productList;
 

+ 11 - 0
src/main/java/com/caimei365/commodity/service/SearchQueryService.java

@@ -2,6 +2,8 @@ package com.caimei365.commodity.service;
 
 
 import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.BaikeProductVo;
+import com.caimei365.commodity.model.vo.PaginationVo;
 
 import java.util.Map;
 
@@ -101,4 +103,13 @@ public interface SearchQueryService {
      * @return JsonStr(list)
      */
     ResponseJson<String> queryArticleByLabel(Integer id, int pageNum, int pageSize);
+
+    /**
+     * 根据关键词搜索采美百科
+     * @param keyword   关键词
+     * @param pageNum   页码
+     * @param pageSize  每页数量
+     * @return  PaginationVo<BaikeProductVo>
+     */
+    ResponseJson<PaginationVo<BaikeProductVo>> queryBaikeProductByKeyword(String keyword, int pageNum, int pageSize);
 }

+ 2 - 2
src/main/java/com/caimei365/commodity/service/impl/PageServiceImpl.java

@@ -1222,7 +1222,7 @@ public class PageServiceImpl implements PageService {
         List<BaikeTypeVo> baikeTypeList = pageMapper.getBaikeTypeList(commodityType);
         baikeTypeList.forEach(baikeType->{
             // 产品/仪器列表
-            List<BaikeProductVo> productList = pageMapper.getBaikeTypeProducts(baikeType.getId());
+            List<BaikeProductVo> productList = pageMapper.getBaikeProducts(baikeType.getTypeId(), null);
             productList.forEach(product ->{
                 // 问题列表
                 List<String> questionList = pageMapper.getBaikeQuestionList(product.getProductId());
@@ -1237,7 +1237,7 @@ public class PageServiceImpl implements PageService {
     public ResponseJson<PaginationVo<BaikeProductVo>> getBaikeTypeData(Integer typeId, int pageNum, int pageSize) {
         // 产品/仪器列表
         PageHelper.startPage(pageNum, pageSize);
-        List<BaikeProductVo> productList = pageMapper.getBaikeTypeProducts(typeId);
+        List<BaikeProductVo> productList = pageMapper.getBaikeProducts(typeId, null);
         productList.forEach(product -> {
             // 问题列表
             List<String> questionList = pageMapper.getBaikeQuestionList(product.getProductId());

+ 18 - 2
src/main/java/com/caimei365/commodity/service/impl/SearchQueryServiceImpl.java

@@ -9,6 +9,7 @@ import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
 import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
 import com.aliyun.opensearch.sdk.generated.search.*;
 import com.caimei365.commodity.components.SearchOpenService;
+import com.caimei365.commodity.mapper.PageMapper;
 import com.caimei365.commodity.mapper.SearchMapper;
 import com.caimei365.commodity.model.ResponseJson;
 import com.caimei365.commodity.model.search.ArticleListVo;
@@ -31,7 +32,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Description
@@ -49,6 +49,8 @@ public class SearchQueryServiceImpl implements SearchQueryService {
     @Resource
     private SearchMapper searchMapper;
     @Resource
+    private PageMapper pageMapper;
+    @Resource
     private SearchOpenService searchOpenService;
 
     /**
@@ -752,5 +754,19 @@ public class SearchQueryServiceImpl implements SearchQueryService {
         }
     }
 
-
+    @Override
+    public ResponseJson<PaginationVo<BaikeProductVo>> queryBaikeProductByKeyword(String keyword, int pageNum, int pageSize) {
+        if (StringUtils.isEmpty(keyword)) {
+            return ResponseJson.error("参数异常",null);
+        }
+        PageHelper.startPage(pageNum, pageSize);
+        List<BaikeProductVo> baikeProducts = pageMapper.getBaikeProducts(null, keyword);
+        baikeProducts.forEach(product -> {
+            // 问题列表
+            List<String> questionList = pageMapper.getBaikeQuestionList(product.getProductId());
+            product.setQuestionList(questionList);
+        });
+        PaginationVo<BaikeProductVo> pageData = new PaginationVo<>(baikeProducts);
+        return ResponseJson.success(pageData);
+    }
 }

+ 13 - 4
src/main/resources/mapper/PageMapper.xml

@@ -700,18 +700,27 @@
         select id as productId, name, image
         from cm_baike_product
         WHERE topPosition IN (1, 2, 3)
+        and status = 1 and NOW() > publishTime
         order by topPosition
     </select>
     <select id="getBaikeTypeList" resultType="com.caimei365.commodity.model.vo.BaikeTypeVo">
-        select id, name
+        select id as typeId, name
         from cm_baike_type
         where if(#{commodityType} = 1, typeSort = 1, typeSort = 2) and status = 1
         order by -sort desc,addTime desc
     </select>
-    <select id="getBaikeTypeProducts" resultType="com.caimei365.commodity.model.vo.BaikeProductVo">
-        select id as productId, name, discription, publishTime, (basePv + actualPv) as pv
+    <select id="getBaikeProducts" resultType="com.caimei365.commodity.model.vo.BaikeProductVo">
+        select id as productId, commodityType, image, name, discription, publishTime, (basePv + actualPv) as pv
         from cm_baike_product
-        where typeId = #{id}
+        <where>
+            status = 1 and NOW() > publishTime
+            <if test="typeId != null">
+                and typeId = #{typeId}
+            </if>
+            <if test="keyword != null">
+                and name like concat ('%',#{keyword},'%')
+            </if>
+        </where>
     </select>
     <select id="getBaikeQuestionList" resultType="java.lang.String">
         select question from cm_baike_product_question where productId = #{productId}