Răsfoiți Sursa

用户搜索记录关键词展示

xingzai 2 ani în urmă
părinte
comite
792939f141

+ 34 - 11
controllers/search.go

@@ -175,17 +175,21 @@ func (this *MobileSearchController) ListHomeArtAndChart() {
 			result[k].Source = 1
 		}
 	}
-	// ListType   query   int  true       "列表类型,1最新/全部,2 纪要 ,3图表 默认1"
+	//ListType   query   int  true       "列表类型,1最新/全部,2 纪要 ,3图表 默认1"
 	//记录用户搜索关键词
-	//var source int
-	//if listType == 1 {
-	//	source = 3
-	//} else if listType == 2 {
-	//	source = 1
-	//} else {
-	//	source = 2
-	//}
-	//go services.AddSearchKeyWord(user, keyWord, source)
+	var source int
+	if listType == 1 {
+		source = 3
+	} else if listType == 2 {
+		source = 1
+	} else {
+		source = 2
+	}
+
+	//如果是有效用户就记录搜索历史
+	if user.UserId > 0 {
+		go services.AddSearchKeyWord(user, keyWord, source)
+	}
 
 	if chartTotal > int(total) {
 		total = int64(chartTotal)
@@ -206,12 +210,18 @@ func (this *MobileSearchController) ListHomeArtAndChart() {
 // @Description 获取搜索推荐词
 // @Success 200 {object} models.ConfigResp
 // @router /keyWord [get]
-func (this *BaseSearchController) BrowseHistoryList() {
+func (this *MobileSearchController) BrowseHistoryList() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
 	resp := new(models.ConfigResp)
 	hotSearch, err := models.GetHotSearch()
 	if err != nil {
@@ -236,6 +246,19 @@ func (this *BaseSearchController) BrowseHistoryList() {
 		item.KeyWord = v.KeyWord
 		resp.ListHot = append(resp.ListHot, item)
 	}
+	//如果用户存在就展示历史搜索记录
+	if user.UserId > 0 {
+		historySearch, err := models.GetSearchKeyWordByUser(user.UserId)
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+		resp.ListHistory = historySearch
+	}
+	if len(resp.ListHistory) == 0 {
+		resp.ListHistory = make([]*models.KeyWord, 0)
+	}
 	br.Msg = "获取成功!"
 	br.Ret = 200
 	br.Success = true

+ 1 - 0
models/config.go

@@ -34,6 +34,7 @@ func UpdateConfigByCode(configValue, countryCode string) (err error) {
 type ConfigResp struct {
 	ListRecommend []*KeyWord `description:"图表搜索推荐"`
 	ListHot       []*KeyWord `description:"热搜关键词"`
+	ListHistory   []*KeyWord `description:"关键词搜索记录"`
 }
 
 //获取是否展示限免标签

+ 2 - 0
models/db.go

@@ -36,6 +36,8 @@ func init() {
 		new(CygxArticleCollect),
 		new(CygxInterviewApply),
 		new(CygxArticleAsk),
+		new(CygxSearchKeyWord),
+		new(CygxSearchKeyWordLog),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 0 - 21
models/search.go

@@ -3,7 +3,6 @@ package models
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"time"
 )
 
 type SearchItem struct {
@@ -37,23 +36,3 @@ type SearchResp struct {
 	List      []*SearchItem
 	ChartList []*HomeChartListResp `description:"图表列表"`
 }
-
-type CygxSearchKeyWord struct {
-	Id          int `orm:"column(id);" description:"id"`
-	KeyWord     string
-	UserId      int
-	CreateTime  time.Time
-	Mobile      string `description:"手机号"`
-	Email       string `description:"邮箱"`
-	CompanyId   int    `description:"公司id"`
-	CompanyName string `description:"公司名称"`
-	RealName    string `description:"用户实际名称"`
-}
-
-//获取用户搜索词汇频率较高的词
-func GetSearchKeyWordTop() (items []*CygxSearchKeyWord, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT key_word, COUNT(*) AS num FROM cygx_search_key_word GROUP BY key_word ORDER BY num DESC LIMIT 8 `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}

+ 70 - 0
models/search_key_word.go

@@ -0,0 +1,70 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxSearchKeyWord struct {
+	Id          int `orm:"column(id);" description:"id"`
+	KeyWord     string
+	UserId      int
+	CreateTime  time.Time
+	Mobile      string `description:"手机号"`
+	Email       string `description:"邮箱"`
+	CompanyId   int    `description:"公司id"`
+	CompanyName string `description:"公司名称"`
+	RealName    string `description:"用户实际名称"`
+}
+
+//新增搜索
+func AddSearchKeyWord(item *CygxSearchKeyWord) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+//获取用户搜索这个关键词的最新时间
+func GetNewSearchKeyWordByThisUser(uid int, keyWord string) (item *CygxSearchKeyWord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_search_key_word WHERE user_id = ? AND key_word = ? ORDER BY id DESC LIMIT 1 `
+	err = o.Raw(sql, uid, keyWord).QueryRow(&item)
+	return
+}
+
+//获取用户搜索词汇频率较高的词
+func GetSearchKeyWordTop() (items []*CygxSearchKeyWord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT key_word, COUNT(*) AS num FROM cygx_search_key_word GROUP BY key_word ORDER BY num DESC LIMIT 8 `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func GetCygxSearchKeyWordList(condition string) (items []*CygxSearchKeyWord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_search_key_word   WHERE 1 = 1 ` + condition + `  GROUP BY user_id  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//修改用户搜索的相关信息
+func UpdateCygxSearchKeyWord(wxUser *WxUserItem) (err error) {
+	o := orm.NewOrm()
+	var sql string
+	if wxUser.Mobile != "" {
+		sql = `UPDATE cygx_search_key_word SET email=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE mobile=? `
+		_, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
+	} else if wxUser.Email != "" {
+		sql = `UPDATE cygx_search_key_word SET mobile=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE email=? `
+		_, err = o.Raw(sql, wxUser.Mobile, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Email).Exec()
+	}
+	return
+}
+
+//GetSearchKeyWordByUser 获取用户搜索历史记录
+func GetSearchKeyWordByUser(uid int) (items []*KeyWord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT key_word, MAX( id ) AS maxId  FROM	cygx_search_key_word WHERE	user_id = ? GROUP BY	key_word ORDER BY	maxId DESC 	LIMIT 8 `
+	_, err = o.Raw(sql, uid).QueryRows(&items)
+	return
+}

+ 26 - 0
models/search_key_word_log.go

@@ -0,0 +1,26 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxSearchKeyWordLog struct {
+	Id          int       `orm:"column(id);" description:"id"`
+	KeyWord     string    `description:"搜索关键词"`
+	UserId      int       `description:"用户ID"`
+	CreateTime  time.Time `description:"搜索时间"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	Source      int       `description:"来源;1:纪要、2:图表、3:纪要/图表、4:产业资源包、5:报告、6:活动"`
+}
+
+//新增搜索
+func AddSearchKeyWordLog(item *CygxSearchKeyWordLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 8 - 8
routers/commentsRouter.go

@@ -61,28 +61,28 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:BaseSearchController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:BaseSearchController"],
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ChartPermissionController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ChartPermissionController"],
         beego.ControllerComments{
-            Method: "BrowseHistoryList",
-            Router: `/keyWord`,
+            Method: "Detail",
+            Router: `/list`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ChartPermissionController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ChartPermissionController"],
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MobileHomeController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MobileHomeController"],
         beego.ControllerComments{
-            Method: "Detail",
+            Method: "List",
             Router: `/list`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MobileHomeController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MobileHomeController"],
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MobileSearchController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:MobileSearchController"],
         beego.ControllerComments{
-            Method: "List",
-            Router: `/list`,
+            Method: "BrowseHistoryList",
+            Router: `/keyWord`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,

+ 63 - 0
services/keyword.go

@@ -0,0 +1,63 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+	"time"
+)
+
+//AddSearchKeyWord 记录用户搜索关键词
+func AddSearchKeyWord(user *models.WxUserItem, keyWord string, source int) (err error) {
+	cacheKey := fmt.Sprint("Search_uid:", user.UserId, "_KeyWord:", keyWord, "_Source:", source)
+	isExist := utils.Rc.IsExist(cacheKey)
+	if isExist {
+		return err
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(" 记录用户搜索关键词失败"+err.Error(), 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "记录用户搜索关键词失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	keyWordItem := new(models.CygxSearchKeyWord)
+	keyWordItem.UserId = user.UserId
+	keyWordItem.KeyWord = keyWord
+	keyWordItem.CreateTime = time.Now()
+	keyWordItem.Mobile = user.Mobile
+	keyWordItem.Email = user.Email
+	keyWordItem.CompanyId = user.CompanyId
+	keyWordItem.CompanyName = user.CompanyName
+	keyWordItem.RealName = user.RealName
+	_, err = models.AddSearchKeyWord(keyWordItem)
+	go AddUserSearchLog(user, keyWord, source)
+	//一分钟之内的相同搜索词不重复记录
+	setNX := utils.Rc.SetNX(cacheKey, keyWord, time.Minute*1)
+	if !setNX {
+		go utils.SendAlarmMsg("记录用户搜索关键词失败,设置Redis Key 过期时间失败:key"+cacheKey, 3)
+	}
+	return
+}
+
+//AddUserSearchLog 记录用户搜索关键词的日志
+func AddUserSearchLog(user *models.WxUserItem, keyWord string, source int) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(" 记录用户搜索关键词的日志"+err.Error(), 2)
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "修改活动状态至进行中失败 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	item := new(models.CygxSearchKeyWordLog)
+	item.UserId = user.UserId
+	item.KeyWord = keyWord
+	item.CreateTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.RealName = user.RealName
+	item.Source = source
+	_, err = models.AddSearchKeyWordLog(item)
+	return
+}