浏览代码

合并查研观向与策略平台的阅读记录到一张表

xingzai 2 年之前
父节点
当前提交
18d6d23e36
共有 4 个文件被更改,包括 141 次插入6 次删除
  1. 96 3
      models/article_history_record_newpv.go
  2. 32 2
      models/celue_article_history_record.go
  3. 1 0
      models/db.go
  4. 12 1
      services/article.go

+ 96 - 3
models/article_history_record_newpv.go

@@ -1,7 +1,9 @@
 package models
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
 	"strconv"
 	"time"
 )
@@ -21,10 +23,49 @@ type CygxArticleHistoryRecordNewpv struct {
 	Source      string `description:"来源,MOBILE:手机端,PC:电脑端"`
 }
 
-//添加收藏信息
+//添加阅读记录信息
 func AddCygxArticleViewRecordNewpv(item *CygxArticleHistoryRecordNewpv) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
 	lastId, err = o.Insert(item)
+
+	//写入记录到总的统计表
+	record := new(CygxArticleHistoryRecordAll)
+	record.UserId = item.UserId
+	record.ArticleId = item.ArticleId
+	record.CreateTime = time.Now().Format(utils.FormatDateTime)
+	record.ModifyTime = item.ModifyTime
+	record.Mobile = item.Mobile
+	record.Email = item.Email
+	record.CompanyId = item.CompanyId
+	record.CompanyName = item.CompanyName
+	record.StopTime = item.StopTime
+	record.OutType = item.OutType
+	record.Source = item.Source
+	record.Platfor = 1
+	lastId, err = o.Insert(record)
+
+	// 软删除当天策略平台的文章阅读记录
+	if item.Mobile != "" {
+		sql := `UPDATE cygx_article_history_record_all 
+			SET is_del = 1 
+			WHERE
+			article_id = ? 
+			AND mobile = ?
+			AND platfor = 2
+			AND create_time >= date(NOW()) `
+		_, err = o.Raw(sql, record.ArticleId, record.Mobile).Exec()
+	}
 	return
 }
 
@@ -38,7 +79,18 @@ func GetNewArticleHistoryRecordNewpv(uid, articleId int, modifytime string) (ite
 
 //把十分钟之内的阅读记录进行累加
 func UpdateCygxArticleViewRecordNewpv(itemRep *CygxArticleHistoryRecordNewpv, stopTime int) (err error) {
-	o := orm.NewOrm()
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		fmt.Println(err)
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
 	sql := `UPDATE cygx_article_history_record_newpv 
 			SET modify_time = NOW(), stop_time = stop_time + ` + strconv.Itoa(stopTime) + `
 			WHERE
@@ -48,6 +100,16 @@ func UpdateCygxArticleViewRecordNewpv(itemRep *CygxArticleHistoryRecordNewpv, st
 			AND timestampdiff(MINUTE,modify_time,NOW()) < 10`
 	_, err = o.Raw(sql, itemRep.ArticleId, itemRep.UserId).Exec()
 
+	// 修改总表的停留时间
+	sql = `UPDATE cygx_article_history_record_all 
+			SET modify_time = NOW(), stop_time = stop_time + ` + strconv.Itoa(stopTime) + `
+			WHERE
+			article_id = ? 
+			AND user_id = ?
+			AND out_type = 2
+			AND timestampdiff(MINUTE,modify_time,NOW()) < 10`
+	_, err = o.Raw(sql, itemRep.ArticleId, itemRep.UserId).Exec()
+
 	return
 }
 
@@ -65,3 +127,34 @@ func UpdateCygxArticleViewRecordNewpvList(itemRep *CygxArticleHistoryRecordNewpv
 
 	return
 }
+
+type CygxArticleHistoryRecordAll struct {
+	Id             int `orm:"column(id);pk"`
+	ArticleId      int
+	UserId         int
+	CreateTime     string
+	ModifyTime     time.Time
+	Mobile         string    `description:"手机号"`
+	Email          string    `description:"邮箱"`
+	CompanyId      int       `description:"公司id"`
+	CompanyName    string    `description:"公司名称"`
+	StopTime       int       `description:"停留时间"`
+	OutType        int       `description:"退出方式,1正常退出,2强制关闭"`
+	Source         string    `description:"来源,MOBILE:手机端,PC:电脑端"`
+	RealName       string    `description:"用户实际名称"`
+	CreateDateApi  time.Time `description:"同步创建时间"`
+	CelueHistoryId int       `description:"策略平台记录的ID"`
+	Platfor        int       `description:"PV阅读记录来源,1:查研观向,2:策略平台"`
+	IsDel          int       `description:"是否删除"`
+}
+
+//获取当天总表的阅读记录
+func GetArticleHistoryRecordAllList() (items []*CygxArticleHistoryRecordNewpv, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_article_history_record_all WHERE create_time >= date(NOW()) 
+			AND mobile <> '' 
+			AND platfor = 1
+			GROUP BYmobile,article_id `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 32 - 2
models/celue_article_history_record.go

@@ -1,7 +1,9 @@
 package models
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"strconv"
 	"time"
 )
 
@@ -48,8 +50,36 @@ type CygxCelueArticleHistoryRecord struct {
 }
 
 //新增
-func AddCeLueArticle(item *CygxCelueArticleHistoryRecord) (lastId int64, err error) {
-	o := orm.NewOrm()
+func AddCeLueArticle(item *CygxCelueArticleHistoryRecord, mapMobileArticleId map[string]int) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
 	lastId, err = o.Insert(item)
+
+	//写入记录到总的统计表
+	record := new(CygxArticleHistoryRecordAll)
+	articleId, _ := strconv.Atoi(item.ArticleId)
+	record.ArticleId = articleId
+	record.CelueHistoryId = item.CelueHistoryId
+	record.CreateTime = item.CreateTime
+	record.ModifyTime = time.Now()
+	record.CreateDateApi = time.Now()
+	record.Mobile = item.Mobile
+	record.CompanyName = item.CompanyName
+	record.RealName = item.RealName
+	record.Platfor = 2
+	record.Source = "CELUE"
+	if mapMobileArticleId[fmt.Sprint(item.Mobile, "_", item.ArticleId)] == articleId {
+		record.IsDel = 1
+	}
+	lastId, err = o.Insert(record)
 	return
 }

+ 1 - 0
models/db.go

@@ -103,6 +103,7 @@ func init() {
 		new(CygxChartCollect),
 		new(CygxChartTop),
 		new(CygxCelueArticleHistoryRecord),
+		new(CygxArticleHistoryRecordAll),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 12 - 1
services/article.go

@@ -916,6 +916,17 @@ func GetCeLueArticlePv(cont context.Context) (err error) {
 		fmt.Println(err)
 		return err
 	}
+	mapMobileArticleId := make(map[string]int)
+
+	listPv, err := models.GetArticleHistoryList()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		fmt.Println("获取当天阅读记录失败", err)
+	}
+	if len(listPv) > 0 {
+		for _, v := range listPv {
+			mapMobileArticleId[fmt.Sprint(v.Mobile, v.ArticleId)] = v.ArticleId
+		}
+	}
 
 	for _, v := range chartResult.Data {
 		//fmt.Println(v.ArticleId)
@@ -936,7 +947,7 @@ func GetCeLueArticlePv(cont context.Context) (err error) {
 			return err
 		}
 		if count == 0 {
-			_, err := models.AddCeLueArticle(item)
+			_, err := models.AddCeLueArticle(item, mapMobileArticleId)
 			if err != nil {
 				fmt.Println(err)
 				return err