Przeglądaj źródła

用户搜索关键词来源区分

xingzai 2 lat temu
rodzic
commit
95511957fa

+ 10 - 0
controllers/activity.go

@@ -360,6 +360,16 @@ func (this *ActivityCoAntroller) ActivityList() {
 		keyWordItem.PageType = "ActivitSearch"
 		keyWordItem.CreateTime = time.Now()
 		go models.AddUserSearchKeyWord(keyWordItem)
+
+		cacheKey := fmt.Sprint("Search_uid:", user.UserId, "_KeyWord:", keyWord, "_Source:", 6)
+		isExist := utils.Rc.IsExist(cacheKey)
+		if !isExist {
+			setNX := utils.Rc.SetNX(cacheKey, keyWord, time.Minute*1)
+			if !setNX {
+				go utils.SendAlarmMsg("记录用户搜索活动关键词失败,设置Redis Key 过期时间失败:key"+cacheKey, 3)
+			}
+			go services.AddUserSearchLog(user, keyWord, 6)
+		}
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.GetCygxActivityListRep)

+ 4 - 0
controllers/report.go

@@ -2280,6 +2280,7 @@ func (this *ReportController) SearchReport() {
 		keyWordItem.PageType = "ReortSearch"
 		keyWordItem.CreateTime = time.Now()
 		go models.AddUserSearchKeyWord(keyWordItem)
+		go services.AddUserSearchLog(user, keyWord, 5)
 	}
 	if len(listYx) == 0 {
 		listYx = make([]*models.ArticleCollectionResp, 0)
@@ -2405,7 +2406,10 @@ func (this *ReportController) SearchResource() {
 		keyWordItem.PageType = "ReortSearch"
 		keyWordItem.CreateTime = time.Now()
 		go models.AddUserSearchKeyWord(keyWordItem)
+
+		go services.AddUserSearchLog(user, keyWord, 4)
 	}
+
 	resp := new(models.SearchResourceResp)
 	if len(listYx) == 0 {
 		listYx = make([]*models.IndustrialManagementHotResp, 0)

+ 25 - 79
controllers/search.go

@@ -6,7 +6,6 @@ import (
 	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"strings"
-	"time"
 )
 
 type SearchController struct {
@@ -107,26 +106,9 @@ func (this *SearchController) SearchList() {
 	if len(result) == 0 {
 		result = make([]*models.SearchItem, 0)
 	}
-	detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
-	if errKey != nil && errKey.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
-		return
-	}
-	//同一个用户一分钟之内搜索的词不重复记录
-	if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
-		//fmt.Println("一分钟之内没有搜索")
-		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
-		go models.AddSearchKeyWord(keyWordItem)
-	}
+	//记录用户搜索关键词
+	go services.AddSearchKeyWord(user, keyWord, 1)
+
 	for k, v := range result {
 		//如果是研选系列的任意取五张图片的中的一张
 		if v.CategoryId == "0" {
@@ -202,26 +184,8 @@ func (this *SearchController) SearchReport() {
 	if len(result) == 0 {
 		result = make([]*models.SearchItem, 0)
 	}
-	detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
-	if errKey != nil && errKey.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
-		return
-	}
-	//同一个用户一分钟之内搜索的词不重复记录
-	if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
-		//fmt.Println("一分钟之内没有搜索")
-		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
-		go models.AddSearchKeyWord(keyWordItem)
-	}
+	//记录用户搜索关键词
+	go services.AddSearchKeyWord(user, keyWord, 1)
 	resp := new(models.SearchResp)
 	page := paging.GetPaging(currentIndex, pageSize, int(total))
 	resp.Paging = page
@@ -312,24 +276,14 @@ func (this *BaseSearchController) SearchListPublic() {
 			return
 		}
 		user := wxUser
-		detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
-		if errKey != nil && errKey.Error() != utils.ErrNoRow() {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
-			return
-		}
-		//同一个用户一分钟之内搜索的词不重复记录
-		if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
-			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.RealName = user.RealName
-			go models.AddSearchKeyWord(keyWordItem)
-		}
+		userItem := new(models.WxUserItem)
+		userItem.UserId = user.UserId
+		userItem.Mobile = user.Mobile
+		userItem.Email = user.Email
+		userItem.CompanyId = user.CompanyId
+		userItem.RealName = user.RealName
+		//记录用户搜索关键词
+		go services.AddSearchKeyWord(userItem, keyWord, 1)
 	}
 
 	for k, _ := range result {
@@ -353,7 +307,7 @@ func (this *BaseSearchController) SearchListPublic() {
 // @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
 // @Param   KeyWord   query   string  true       "搜索关键词"
 // @Param   OrderColumn   query   int  true       "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
-// @Param   ListType   query   int  true       "列表类型,1最新,2 纪要 ,3图表 默认1"
+// @Param   ListType   query   int  true       "列表类型,1最新/全部,2 纪要 ,3图表 默认1"
 // @Success 200 {object} models.SearchItem
 // @router /artAndChart/list [get]
 func (this *SearchController) ListHomeArtAndChart() {
@@ -498,26 +452,18 @@ func (this *SearchController) ListHomeArtAndChart() {
 			result[k].Source = 1
 		}
 	}
-	detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
-	if errKey != nil && errKey.Error() != utils.ErrNoRow() {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
-		return
-	}
-	//同一个用户一分钟之内搜索的词不重复记录
-	if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
-		//fmt.Println("一分钟之内没有搜索")
-		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
-		go models.AddSearchKeyWord(keyWordItem)
+	// 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)
+
 	if chartTotal > int(total) {
 		total = int64(chartTotal)
 	}

+ 1 - 0
models/db.go

@@ -111,6 +111,7 @@ func init() {
 		new(CygxCompanyInteractionNum),
 		new(CygxChartAll),
 		new(CygxSessionMobile),
+		new(CygxSearchKeyWordLog),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 1 - 1
models/search_key_word.go

@@ -47,7 +47,7 @@ func GetCygxSearchKeyWordList(condition string) (items []*CygxSearchKeyWord, err
 	return
 }
 
-//修改用户收藏文章的相关信息
+//修改用户搜索的相关信息
 func UpdateCygxSearchKeyWord(wxUser *WxUserItem) (err error) {
 	o := orm.NewOrm()
 	var sql string

+ 40 - 0
models/search_key_word_log.go

@@ -0,0 +1,40 @@
+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
+}
+
+//修改用户搜索的相关信息
+func UpdateCygxSearchKeyWordLog(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
+}

+ 63 - 0
services/keyword.go

@@ -0,0 +1,63 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/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
+}