Ver Fonte

关键词库

zhijiezhao há 2 anos atrás
pai
commit
377b6b5608

+ 5 - 1
pom.xml

@@ -66,7 +66,11 @@
             <artifactId>lombok</artifactId>
             <optional>true</optional>
         </dependency>
-
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.5</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>

+ 88 - 0
src/main/java/com/caimei365/manager/controller/caimei/keyword/KeyWordApi.java

@@ -0,0 +1,88 @@
+package com.caimei365.manager.controller.caimei.keyword;
+
+import com.caimei365.manager.entity.PaginationVo;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.KeyWord;
+import com.caimei365.manager.service.caimei.KeyWordService;
+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 javax.annotation.Resource;
+
+
+/**
+ * @author zzj
+ * 用户关键词/标签库
+ */
+@RestController
+@RequestMapping("/keyword")
+public class KeyWordApi {
+
+    @Resource
+    private KeyWordService keyWordService;
+
+    /**
+     * 关键词列表
+     * keyword 关键词
+     * searchTimeCode 近一年 近半年 近一个月 近一周 昨天  默认一年
+     * beginTime  自定义时间查询起始时间
+     * endTime    自定义时间查询终止时间
+     * labelStatus  标签库状态 0未添加 1已添加 传1即是标签列表
+     * fromSearch 标签库数据来源(1:手动添加;2:用户关键词统计;3:导入)
+     */
+    @GetMapping("/keyword/list")
+    public ResponseJson<PaginationVo<KeyWord>> getKeyWordList(String keyword, String beginTime, String endTime,
+                                                              Integer labelStatus, Integer searchTimeCode,
+                                                              Integer fromSearch,
+                                                              @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                              @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
+        return keyWordService.getKeyWordList(keyword, searchTimeCode, fromSearch,beginTime, endTime, labelStatus, pageNum, pageSize);
+    }
+
+    /**
+     * 加入标签库
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/join/label")
+    public ResponseJson joinLabel(String id) {
+        return keyWordService.joinLabel(id);
+    }
+
+    /**
+     * 关键词推荐列表
+     *
+     * @return
+     */
+    @GetMapping("/recommend/list")
+    public ResponseJson<PaginationVo<KeyWord>> getRecommendList(String keyword, String beginTime, String endTime,
+                                                                @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
+        return keyWordService.getRecommendList(keyword, beginTime, endTime, pageNum, pageSize);
+    }
+
+    /**
+     * 关键词推荐列表忽略
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/ignore/label")
+    public ResponseJson ignoreLabel(String id) {
+        return keyWordService.ignoreLabel(id);
+    }
+
+    /**
+     * 手动加入标签库
+     *
+     * @param keyword
+     * @return
+     */
+    @GetMapping("/insert/label")
+    public ResponseJson insertLabel(String keyword) {
+        return keyWordService.insertLabel(keyword);
+    }
+}

+ 22 - 0
src/main/java/com/caimei365/manager/dao/KeyWordDao.java

@@ -0,0 +1,22 @@
+package com.caimei365.manager.dao;
+
+import com.caimei365.manager.entity.caimei.KeyWord;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author zzj
+ */
+@Mapper
+public interface KeyWordDao {
+    List<KeyWord> findList(String keyword, Integer fromSearch, String beginTime, String endTime, Integer labelStatus);
+
+    void updateLabelStatus(String id);
+
+    List<KeyWord> findRecommendList(String keyword, String beginTime, String endTime);
+
+    void updateRecommendFlag(String s);
+
+    void insertLabel(String keyword);
+}

+ 43 - 0
src/main/java/com/caimei365/manager/entity/caimei/KeyWord.java

@@ -0,0 +1,43 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zzj
+ */
+@Data
+public class KeyWord implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    private String keyword;
+    /**
+     * 标签库数据来源(1:手动添加;2:用户关键词统计;3:导入)
+     */
+    private Integer fromSearch;
+    /**
+     * 0:未加入关键词库;1:已加入关键词库
+     */
+    private Integer labelStatus;
+    /**
+     * 关键词出现次数
+     */
+    private Integer frequency;
+
+    /**
+     * 关键词推荐时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date recommendTime;
+
+    /**
+     * 最近一次搜索时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date searchTime;
+}

+ 81 - 0
src/main/java/com/caimei365/manager/entity/caimei/enums/KeyWordEnum.java

@@ -0,0 +1,81 @@
+package com.caimei365.manager.entity.caimei.enums;
+
+import javafx.beans.binding.When;
+import lombok.AllArgsConstructor;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author zzj
+ */
+@AllArgsConstructor
+public enum KeyWordEnum {
+
+    /**
+     * searchTimeCode 近一年 近半年 近一个月 近一周 昨天
+     */
+    LastYear(1, "近一年"),
+    HalfLastYear(2, "近半年"),
+    LastMonth(3, "近一个月"),
+    LastWeek(4, "近一周"),
+    Yesterday(5, "昨天");
+
+    private Integer searchTimeCode;
+    private String description;
+
+    public Integer getSearchTimeCode() {
+        return searchTimeCode;
+    }
+
+    public void setSearchTimeCode(Integer searchTimeCode) {
+        this.searchTimeCode = searchTimeCode;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    /**
+     * 返回当前时间的查询范围起始/终止时间
+     *
+     * @return
+     */
+    public static Map<String, String> getTimeVal(Integer key) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Map<String, String> timeVal = new HashMap<>();
+        Date now = new Date();
+        Calendar instance = Calendar.getInstance();
+        instance.setTime(now);
+        switch (key) {
+            case 1:
+                instance.add(Calendar.YEAR, -1);
+                break;
+            case 2:
+                instance.add(Calendar.MONTH, -6);
+                break;
+            case 3:
+                instance.add(Calendar.MONTH, -1);
+                break;
+            case 4:
+                instance.add(Calendar.WEEK_OF_MONTH, -1);
+                break;
+            case 5:
+                instance.add(Calendar.DAY_OF_MONTH, -1);
+                break;
+            default:
+                throw new IllegalStateException("Unexpected value: " + key);
+        }
+
+        timeVal.put("beginTime", format.format(instance.getTime()));
+        timeVal.put("endTime", format.format(now));
+        return timeVal;
+    }
+}

+ 22 - 0
src/main/java/com/caimei365/manager/service/caimei/KeyWordService.java

@@ -0,0 +1,22 @@
+package com.caimei365.manager.service.caimei;
+
+import com.caimei365.manager.entity.PaginationVo;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.KeyWord;
+
+import java.util.List;
+
+/**
+ * @author zzj
+ */
+public interface KeyWordService {
+    ResponseJson<PaginationVo<KeyWord>> getKeyWordList(String keyWord, Integer searchTimeCode, Integer fromSearch, String beginTime, String endTime, Integer labelStatus, int pageNum, int pageSize);
+
+    ResponseJson joinLabel(String id);
+
+    ResponseJson<PaginationVo<KeyWord>> getRecommendList(String keyword, String beginTime, String endTime, Integer pageNum, Integer pageSize);
+
+    ResponseJson ignoreLabel(String id);
+
+    ResponseJson insertLabel(String keyword);
+}

+ 86 - 0
src/main/java/com/caimei365/manager/service/caimei/impl/KeyWordServiceImpl.java

@@ -0,0 +1,86 @@
+package com.caimei365.manager.service.caimei.impl;
+
+import cn.hutool.core.lang.Assert;
+import com.caimei365.manager.dao.KeyWordDao;
+import com.caimei365.manager.entity.PaginationVo;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.KeyWord;
+import com.caimei365.manager.entity.caimei.enums.KeyWordEnum;
+import com.caimei365.manager.service.caimei.KeyWordService;
+import com.github.pagehelper.PageHelper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.buf.StringUtils;
+import org.springframework.stereotype.Service;
+
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zzj
+ */
+@Slf4j
+@Service
+public class KeyWordServiceImpl implements KeyWordService {
+
+
+    @Resource
+    private KeyWordDao keyWordDao;
+
+    @Override
+    public ResponseJson<PaginationVo<KeyWord>> getKeyWordList(String keyword, Integer searchTimeCode, Integer fromSearch, String beginTime, String endTime, Integer labelStatus, int pageNum, int pageSize) {
+        if (null != searchTimeCode && searchTimeCode > 0) {
+            Map<String, String> timeVal = KeyWordEnum.getTimeVal(searchTimeCode);
+            beginTime = timeVal.get("beginTime");
+            endTime = timeVal.get("endTime");
+        }
+        PageHelper.startPage(pageNum, pageSize);
+        List<KeyWord> keyWords = keyWordDao.findList(keyword, fromSearch, beginTime, endTime, labelStatus);
+        PaginationVo<KeyWord> pageData = new PaginationVo<>(keyWords);
+        return ResponseJson.success(pageData);
+    }
+
+    @Override
+    public ResponseJson joinLabel(String id) {
+        Assert.notBlank(id);
+        if (id.contains(",")) {
+            String[] split = id.split(",");
+            for (String s : split) {
+                keyWordDao.updateLabelStatus(s);
+            }
+        } else {
+            keyWordDao.updateLabelStatus(id);
+        }
+        return ResponseJson.success();
+    }
+
+    @Override
+    public ResponseJson<PaginationVo<KeyWord>> getRecommendList(String keyword, String beginTime, String endTime, Integer pageNum, Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<KeyWord> keyWords = keyWordDao.findRecommendList(keyword, beginTime, endTime);
+        PaginationVo<KeyWord> pageData = new PaginationVo<>(keyWords);
+        return ResponseJson.success(pageData);
+    }
+
+    @Override
+    public ResponseJson ignoreLabel(String id) {
+        Assert.notBlank(id);
+        if (id.contains(",")) {
+            String[] split = id.split(",");
+            for (String s : split) {
+                keyWordDao.updateRecommendFlag(s);
+            }
+        } else {
+            keyWordDao.updateRecommendFlag(id);
+        }
+        return ResponseJson.success();
+    }
+
+    @Override
+    public ResponseJson insertLabel(String keyword) {
+        keyWordDao.insertLabel(keyword);
+        return ResponseJson.success();
+    }
+
+}

+ 7 - 11
src/main/resources/config/dev/application-dev.yml

@@ -2,12 +2,12 @@ spring:
   #数据源连接--start
   datasource:
     #本地连接数据库
-    url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
-    username: developer
-    password: 05bZ/OxTB:X+yd%1
-#    url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+#    url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
 #    username: developer
-#    password: J5p3tgOVazNl4ydf
+#    password: 05bZ/OxTB:X+yd%1
+    url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+    username: developer
+    password: J5p3tgOVazNl4ydf
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 5
@@ -20,12 +20,9 @@ spring:
       connection-test-query: SELECT 1
   #数据源连接--end
   redis:
-    host: 192.168.2.100
+    host: 47.119.112.46
     port: 6379
-    #password: 123456
-#    host: 47.119.112.46
-#    port: 6379
-#    password: 6#xsI%b4o@5c3RoE
+    password: 6#xsI%b4o@5c3RoE
     #Redis数据库索引(默认为0)
     database: 0
     jedis:
@@ -44,7 +41,6 @@ spring:
 logging:
   level:
     root: info
-    com.caimei365.manager.dao: debug
 
 # 服务域名
 caimei:

+ 56 - 0
src/main/resources/mapper/KeyWordDao.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.manager.dao.KeyWordDao">
+    <insert id="insertLabel">
+        insert into cm_user_search_frequency(fromSearch, keyword, frequency)
+        values (1, #{keyword}, 0)
+    </insert>
+
+    <update id="updateLabelStatus">
+        update cm_user_search_frequency
+        set trueStatus = 1
+        where id = #{id}
+    </update>
+
+    <update id="updateRecommendFlag">
+        update cm_user_search_frequency
+        set recommendFlag = 1,
+            fromSearch    = 2
+        where id = #{id}
+    </update>
+
+    <select id="findList" resultType="com.caimei365.manager.entity.caimei.KeyWord">
+        SELECT keywordId as id, COUNT(keyWord) AS frequency, cusf.keyword as keyword,
+        cusf.searchTime as searchTime,cusf.trueStatus as labelStatus,cusf.fromSearch as fromSearch
+        FROM cm_label_source cls
+        LEFT JOIN cm_user_search_frequency cusf ON cls.keywordid = cusf.id
+        WHERE cusf.delStatus = 1
+        <if test="beginTime !=null and beginTime !=''">
+            AND saveTime BETWEEN #{beginTime} AND #{endTime}
+        </if>
+        <if test="keyword !=null and keyword !=''">
+            AND keyword LIKE CONCAT('%',#{keyword},'%')
+        </if>
+        <if test="labelStatus !=null">
+            AND trueStatus = #{labelStatus}
+        </if>
+        <if test="fromSearch != null">
+            AND fromSearch = #{fromSearch}
+        </if>
+        GROUP BY keywordId
+    </select>
+
+    <select id="findRecommendList" resultType="com.caimei365.manager.entity.caimei.KeyWord">
+        SELECT keyWord, recommendTime, id
+        FROM cm_user_search_frequency
+        where trueStatus = 0
+        and delStatus = 1
+        and recommendFlag = 0
+        <if test="beginTime !=null and beginTime !=''">
+            AND recommendTime BETWEEN #{beginTime} AND #{endTime}
+        </if>
+        <if test="keyWord !=null and keyWord !=''">
+            AND keyword LIKE CONCAT('%',#{keyword},'%')
+        </if>
+    </select>
+</mapper>