浏览代码

搜索历史记录

chao 3 年之前
父节点
当前提交
109d51145a

+ 46 - 0
src/main/java/com/caimei365/commodity/controller/SearchProductApi.java

@@ -1,17 +1,21 @@
 package com.caimei365.commodity.controller;
 
 import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.po.SearchHistoryPo;
 import com.caimei365.commodity.service.SearchProductService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * 搜索商品(阿里云搜索)
  *
@@ -132,4 +136,46 @@ public class SearchProductApi {
         return searchProductService.querySupplierProduct(id, keyword, identity, pageNum, pageSize, sortField, sortType);
     }
 
+    /**
+     * 根据用户ID查找历史记录
+     */
+    @ApiOperation("查找搜索历史记录(旧:/product/searchHistory)")
+    @ApiImplicitParam(required = true, name = "userId", value = "用户Id")
+    @GetMapping("/history")
+    public ResponseJson<List<SearchHistoryPo>> getSearchHistory(Integer userId) {
+        if (null == userId) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return searchProductService.getSearchHistory(userId);
+    }
+
+    /**
+     * 保存搜索历史记录
+     */
+    @ApiOperation("保存搜索历史记录(旧:/product/history/add)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, name = "userId", value = "用户Id"),
+            @ApiImplicitParam(required = true, name = "keyword", value = "搜索关键字")
+    })
+    @GetMapping("/history/add")
+    public ResponseJson<Void> addProductSearchHistory(Integer userId, String keyword) {
+        if (null == userId || StringUtils.isEmpty(keyword)) {
+            return ResponseJson.error("用户Id或关键字不能为空!", null);
+        }
+        return searchProductService.addSearchHistory(userId, keyword);
+    }
+
+    /**
+     * 根据用户ID删除历史记录
+     */
+    @ApiOperation("删除搜索历史记录(旧:/product/searchHistory/delete )")
+    @ApiImplicitParam(required = true, name = "userId", value = "用户Id")
+    @GetMapping("/history/delete")
+    public ResponseJson<Void> deleteSearchHistory(Integer userId) {
+        if (null == userId) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return searchProductService.deleteSearchHistory(userId);
+    }
+
 }

+ 30 - 1
src/main/java/com/caimei365/commodity/mapper/SearchMapper.java

@@ -1,5 +1,6 @@
 package com.caimei365.commodity.mapper;
 
+import com.caimei365.commodity.model.po.SearchHistoryPo;
 import com.caimei365.commodity.model.search.*;
 import com.caimei365.commodity.model.search.ArticleListVo;
 import com.caimei365.commodity.model.search.EquipmentListVo;
@@ -174,5 +175,33 @@ public interface SearchMapper {
      * @return list
      */
     List<ArticleListVo> queryArticle(@Param("keyword") String keyword, @Param("articleId") Integer articleId, @Param("typeId") Integer typeId, @Param("labelText") String labelText);
-
+    /**
+     * 根据用户ID查找历史记录
+     */
+    List<SearchHistoryPo> getHistoryList(Integer userId);
+    /**
+     * 根据关键字获取历史记录Id
+     * @param keyword 关键词
+     */
+    Integer getHistoryIdByWord(String keyword);
+    /**
+     * 更新历史记录
+     */
+    void updateSearchHistoryById(SearchHistoryPo historyRecord);
+    /**
+     * 新增取历史记录
+     */
+    void insertSearchHistory(SearchHistoryPo historyRecord);
+    /**
+     * 历史记录数量
+     */
+    int getHistoryCount(Integer userId);
+    /**
+     * 删除大于10条的历史记录
+     */
+    void deleteSearchHistory(Integer userId);
+    /**
+     * 删除用户所有历史记录
+     */
+    void deleteAllSearchHistory(Integer userId);
 }

+ 34 - 0
src/main/java/com/caimei365/commodity/model/po/SearchHistoryPo.java

@@ -0,0 +1,34 @@
+package com.caimei365.commodity.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/20
+ */
+@Data
+public class SearchHistoryPo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Integer id;
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+    /**
+     * 搜索关键词
+     */
+    private String searchWord;
+    /**
+     * 搜索时间
+     */
+    private Date searchDate;
+    /**
+     * 删除标记 0 否,其余是
+     */
+    private Integer delFlag;
+}

+ 20 - 0
src/main/java/com/caimei365/commodity/service/SearchProductService.java

@@ -1,6 +1,9 @@
 package com.caimei365.commodity.service;
 
 import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.po.SearchHistoryPo;
+
+import java.util.List;
 
 /**
  * Description
@@ -62,4 +65,21 @@ public interface SearchProductService {
      * @return JsonStr(list)
      */
     ResponseJson<String> querySupplierProduct(Integer id, String keyword, Integer identity, int pageNum, int pageSize, String sortField, Integer sortType);
+
+    /**
+     * 根据用户ID查找历史记录
+     * @param userId 用户Id
+     */
+    ResponseJson<List<SearchHistoryPo>> getSearchHistory(Integer userId);
+    /**
+     * 保存搜索历史记录
+     * @param userId  用户Id
+     * @param keyword 搜索关键字
+     */
+    ResponseJson<Void> addSearchHistory(Integer userId, String keyword);
+    /**
+     * 根据用户ID删除历史记录
+     * @param userId 用户Id
+     */
+    ResponseJson<Void> deleteSearchHistory(Integer userId);
 }

+ 56 - 5
src/main/java/com/caimei365/commodity/service/impl/SearchProductServiceImpl.java

@@ -9,6 +9,7 @@ import com.aliyun.opensearch.sdk.generated.search.SearchParams;
 import com.caimei365.commodity.components.SearchOpenService;
 import com.caimei365.commodity.mapper.SearchMapper;
 import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.po.SearchHistoryPo;
 import com.caimei365.commodity.model.vo.PaginationVo;
 import com.caimei365.commodity.model.search.ProductListVo;
 import com.caimei365.commodity.service.SearchProductService;
@@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -220,11 +222,6 @@ public class SearchProductServiceImpl implements SearchProductService {
         }
     }
 
-
-
-
-
-
     /**
      * 查询商品(阿里云搜索)
      *
@@ -316,4 +313,58 @@ public class SearchProductServiceImpl implements SearchProductService {
         }
         return result;
     }
+
+    /**
+     * 根据用户ID查找历史记录
+     *
+     * @param userId 用户Id
+     */
+    @Override
+    public ResponseJson<List<SearchHistoryPo>> getSearchHistory(Integer userId) {
+        List<SearchHistoryPo> historyList = searchMapper.getHistoryList(userId);
+        return ResponseJson.success(historyList);
+    }
+
+    /**
+     * 保存搜索历史记录
+     *
+     * @param userId  用户Id
+     * @param keyword 搜索关键字
+     */
+    @Override
+    public ResponseJson<Void> addSearchHistory(Integer userId, String keyword) {
+        //保存并删除大于10条的历史记录
+        SearchHistoryPo historyRecord = new SearchHistoryPo();
+        historyRecord.setUserId(userId);
+        historyRecord.setSearchDate(new Date());
+        historyRecord.setSearchWord(keyword);
+        historyRecord.setDelFlag(0);
+        Integer recordId = searchMapper.getHistoryIdByWord(keyword);
+        if (null != recordId && recordId > 0) {
+            //更新
+            historyRecord.setId(recordId);
+            searchMapper.updateSearchHistoryById(historyRecord);
+        } else {
+            // 新增
+            searchMapper.insertSearchHistory(historyRecord);
+        }
+        int count = searchMapper.getHistoryCount(userId);
+        if (count>10){
+            // 删除大于10条的历史记录
+            searchMapper.deleteSearchHistory(userId);
+        }
+        return ResponseJson.success(null);
+    }
+
+    /**
+     * 根据用户ID删除历史记录
+     *
+     * @param userId 用户Id
+     */
+    @Override
+    public ResponseJson<Void> deleteSearchHistory(Integer userId) {
+        // 删除用户所有历史记录
+        searchMapper.deleteAllSearchHistory(userId);
+        return ResponseJson.success(null);
+    }
 }

+ 71 - 0
src/main/resources/mapper/SearchMapper.xml

@@ -415,4 +415,75 @@
             </otherwise>
         </choose>
     </select>
+    <select id="getHistoryList" resultType="com.caimei365.commodity.model.po.SearchHistoryPo">
+        select id, userId, searchWord, searchDate, delFlag
+        from user_search_history
+        where userId = #{userId}
+        order by id desc
+    </select>
+    <select id="getHistoryIdByWord" resultType="java.lang.Integer">
+        select id from user_search_history where searchWord = #{keyword} limit 1
+    </select>
+    <select id="getHistoryCount" resultType="java.lang.Integer">
+        select COUNT(*) from user_search_history
+        where userId = #{userId} AND delFlag = 0
+    </select>
+    <update id="updateSearchHistoryById">
+        update user_search_history
+        <set>
+            <if test="userId != null">
+                userId = #{userId},
+            </if>
+            <if test="searchWord != null">
+                searchWord = #{searchWord},
+            </if>
+            <if test="searchDate != null">
+                searchDate = #{searchDate},
+            </if>
+            <if test="delFlag != null">
+                delFlag = #{delFlag},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+    <insert id="insertSearchHistory">
+        INSERT INTO user_search_history
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">
+                userId,
+            </if>
+            <if test="searchWord != null">
+                searchWord,
+            </if>
+            <if test="searchDate != null">
+                searchDate,
+            </if>
+            <if test="delFlag != null">
+                delFlag,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null">
+                #{userId},
+            </if>
+            <if test="searchWord != null">
+                #{searchWord},
+            </if>
+            <if test="searchDate != null">
+                #{searchDate},
+            </if>
+            <if test="delFlag != null">
+                #{delFlag},
+            </if>
+        </trim>
+    </insert>
+    <delete id="deleteSearchHistory">
+        DELETE FROM user_search_history
+        WHERE userId=#{userId} AND id NOT IN (
+            SELECT temp.id FROM ( SELECT id FROM user_search_history WHERE userId=#{userId} ORDER BY searchDate DESC LIMIT 10 ) AS temp
+        )
+    </delete>
+    <delete id="deleteAllSearchHistory">
+        DELETE FROM user_search_history WHERE userId=#{userId}
+    </delete>
 </mapper>