Browse Source

新加mq异步关键词功能

JiangChongBo 2 years ago
parent
commit
eebdf4e530

+ 10 - 0
src/main/java/com/caimei365/tools/listener/IpSaveListener.java

@@ -1,6 +1,8 @@
 package com.caimei365.tools.listener;
 
 import com.caimei365.tools.model.po.IpSavePo;
+import com.caimei365.tools.model.po.SearchFrequencyVo;
+import com.caimei365.tools.service.ProductService;
 import com.caimei365.tools.service.impl.IpSaveService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -9,6 +11,7 @@ import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -29,6 +32,8 @@ public class IpSaveListener implements RocketMQListener<String> {
 
     @Autowired
     private IpSaveService ipSaveService;
+    @Resource
+    private ProductService productService;
 
     @Override
     public void onMessage(String message) {
@@ -40,6 +45,8 @@ public class IpSaveListener implements RocketMQListener<String> {
         String param = params[2];
         String saveName = params[3];
         IpSavePo ipSavePo = new IpSavePo();
+        SearchFrequencyVo searchFrequencyVo=new SearchFrequencyVo();
+        searchFrequencyVo.setPath(path);
         if (StringUtils.isNotBlank(param)) {
             ipSavePo.setParams(param);
             if (param.contains("userId") || param.contains("keyword")) {
@@ -66,6 +73,7 @@ public class IpSaveListener implements RocketMQListener<String> {
                                     va = java.net.URLDecoder.decode(va, "UTF-8");
                                 }
                                 ipSavePo.setKeyWord(va);
+                                searchFrequencyVo.setKeyword(va);
                             } catch (UnsupportedEncodingException e) {
                                 e.printStackTrace();
                             }
@@ -87,6 +95,8 @@ public class IpSaveListener implements RocketMQListener<String> {
         String nowDate = format.format(new Date());
         Long aLong = Long.valueOf(nowDate);
         ipSavePo.setSaveTime(aLong);
+        searchFrequencyVo.setFromSearch(1);
         ipSaveService.save(ipSavePo);
+        productService.conKeyword(searchFrequencyVo.getFromSearch(),searchFrequencyVo.getPath(),searchFrequencyVo.getKeyword());
     }
 }

+ 8 - 0
src/main/java/com/caimei365/tools/mapper/BaseMapper.java

@@ -3,6 +3,7 @@ package com.caimei365.tools.mapper;
 import com.caimei365.tools.model.bo.CouponDateBo;
 import com.caimei365.tools.model.bo.HeheCouponBo;
 import com.caimei365.tools.model.po.LogisticsInfoPo;
+import com.caimei365.tools.model.po.SearchFrequencyVo;
 import com.caimei365.tools.model.po.SuperVipPo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -83,4 +84,11 @@ public interface BaseMapper {
      * @param viewTime 访问日期(天)
      */
     void insertProductViews(Integer productId, Integer views, Date viewTime);
+
+
+    List<SearchFrequencyVo>  getInfoBykeyword(String keyword, Integer fromSearch);
+
+    void saveInfo(SearchFrequencyVo searchFrequencyVo);
+
+    void upFrequencyById(Integer id,Integer frequency);
 }

+ 34 - 0
src/main/java/com/caimei365/tools/model/po/SearchFrequencyVo.java

@@ -0,0 +1,34 @@
+package com.caimei365.tools.model.po;
+
+import lombok.Data;
+
+import java.sql.Date;
+
+@Data
+public class SearchFrequencyVo {
+       private Integer  id ;
+    /**
+     * 数据来源(1:首页;2:信息中心)
+     */
+    private Integer fromSearch   ;
+    /**
+     * 接口路径
+     */
+    private String  path;
+    /**
+     * 关键词
+     */
+    private String  keyword ;
+    /**
+     * 关键词出现次数
+     */
+    private Integer  frequency ;
+    /**
+     * 搜索时间
+     */
+    private Date searchTime ;
+    /**
+     * 0:未加入关键词库;1:已加入关键词库
+     */
+    private Integer trueStatus;
+}

+ 4 - 1
src/main/java/com/caimei365/tools/service/ProductService.java

@@ -1,5 +1,7 @@
 package com.caimei365.tools.service;
 
+import org.springframework.stereotype.Service;
+
 /**
  * Description
  *
@@ -7,4 +9,5 @@ package com.caimei365.tools.service;
  * @date : 2021/10/26
  */
 public interface ProductService {
-}
+     void conKeyword(Integer fromType,String path,String keyword);
+    }

+ 36 - 0
src/main/java/com/caimei365/tools/service/impl/ProductServiceImpl.java

@@ -1,9 +1,14 @@
 package com.caimei365.tools.service.impl;
 
 import com.caimei365.tools.mapper.BaseMapper;
+import com.caimei365.tools.model.po.SearchFrequencyVo;
 import com.caimei365.tools.service.ProductService;
+import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
 
 /**
  * Description
@@ -11,7 +16,38 @@ import javax.annotation.Resource;
  * @author : Charles
  * @date : 2021/10/26
  */
+@Service
 public class ProductServiceImpl implements ProductService {
     @Resource
     private BaseMapper baseMapper;
+
+    /**
+     * 统计关键词及次数
+     * @param fromType
+     * @param path
+     * @param keyword
+     * @return
+     */
+    @Override
+    public void conKeyword(Integer fromType,String path,String keyword){
+        Date date=new Date();
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        sf.format(date);
+        //根据关键词和来源查询数据库是否存在(存在来源也相同时增加次数,存在但来源不同时和不存在则新增)
+        List<SearchFrequencyVo> searchFrequencyVoList = baseMapper.getInfoBykeyword(keyword,fromType);
+        if(null!= searchFrequencyVoList && searchFrequencyVoList.size()>0){
+            //存在 统计次数
+            Integer frequency= searchFrequencyVoList.get(0).getFrequency()+1;
+            baseMapper.upFrequencyById(searchFrequencyVoList.get(0).getId(),frequency);
+        }else{
+            //不存在 新增
+            SearchFrequencyVo sea=new SearchFrequencyVo();
+            sea.setKeyword(keyword);
+            sea.setFrequency(1);
+            sea.setPath(path);
+            sea.setFromSearch(fromType);
+            sea.setSearchTime(new java.sql.Date(date.getTime()));
+            baseMapper.saveInfo(sea);
+        }
+    }
 }

+ 21 - 0
src/main/resources/mapper/BaseMapper.xml

@@ -103,4 +103,25 @@
         SELECT id FROM cm_short_link WHERE shortLink = #{shortLink}
     </select>
 
+    <select id="getInfoBykeyword" resultType="com.caimei365.tools.model.po.SearchFrequencyVo">
+        select
+            id,
+            fromSearch,
+            path,
+            keyword,
+            frequency,
+            searchTime,
+            trueStatus
+        from cm_user_search_frequency
+        where keyword=#{keyword}
+          and   fromSearch=#{fromSearch}
+    </select>
+    <update id="upFrequencyById">
+        update cm_user_search_frequency set frequency=#{frequency} where id=#{id}
+    </update>
+    <insert id="saveInfo" parameterType="com.caimei365.tools.model.po.SearchFrequencyVo">
+        insert into cm_user_search_frequency(fromSearch,path,keyword,frequency,searchTime)
+        values (#{fromSearch},#{path},#{keyword},#{frequency},#{searchTime})
+
+    </insert>
 </mapper>