Browse Source

feat:新增每日用户阅读数据统计

Roc 3 years ago
parent
commit
0fb595b79f
4 changed files with 261 additions and 0 deletions
  1. 1 0
      models/db.go
  2. 102 0
      models/user_view_statistics.go
  3. 4 0
      services/task.go
  4. 154 0
      services/user_view_statistics.go

+ 1 - 0
models/db.go

@@ -82,5 +82,6 @@ func init() {
 		new(data_manage.EdbDataYs),
 		new(Edbdata),
 		new(data_manage.EdbInfoCalculateMapping),
+		new(UserViewStatistics),
 	)
 }

+ 102 - 0
models/user_view_statistics.go

@@ -0,0 +1,102 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+// UserViewStatistics 用户报告报告阅读数量统计表
+type UserViewStatistics struct {
+	Id          int       `orm:"column(id)" description:"自增Id"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"手机号"`
+	RealName    string    `description:"联系人名称"`
+	CompanyName string    `description:"客户名称"`
+	ViewNum     int       `description:"阅读总数"`
+	Date        time.Time `description:"阅读日期"`
+	CreateTime  time.Time `description:"添加时间"`
+}
+
+// AddMultiUserViewStatistics 添加用户报告报告阅读数量统计记录
+func AddMultiUserViewStatistics(list []*UserViewStatistics) (err error) {
+	if len(list) <= 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(list), list)
+	return
+}
+
+// GetUserViewStatisticsCount 获取某天的用户报告报告阅读数量统计记录数量
+func GetUserViewStatisticsCount(dayStr string) (count int, err error) {
+	o := orm.NewOrm()
+	//产品权限
+	sql := `SELECT count(1) count FROM user_view_statistics WHERE date = ?`
+
+	err = o.Raw(sql, dayStr).QueryRow(&count)
+	return
+}
+
+// UserViewMobileTotalSlice 根据用户手机号字符串获取用户的浏览数
+type UserViewMobileTotalSlice struct {
+	Mobile      string `description:"用户手机号"`
+	CompanyName string `description:"客户名称"`
+	RealName    string `description:"用户名称"`
+	Total       int    `description:"总阅读数"`
+}
+
+// UserViewEmailTotalSlice 根据用户邮箱字符串获取用户的浏览数
+type UserViewEmailTotalSlice struct {
+	Email       string `description:"用户邮箱"`
+	CompanyName string `description:"客户名称"`
+	RealName    string `description:"用户名称"`
+	Total       int    `description:"总阅读数"`
+}
+
+func GetCountUserViewHistoryByMobiles(date string) (items []*UserViewMobileTotalSlice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT count(1) total,mobile,company_name,real_name FROM user_view_history WHERE created_time >= ? and created_time <= ? and mobile != "" group by mobile`
+	_, err = o.Raw(sql, date+" 00:00:00", date+" 23:59:59").QueryRows(&items)
+	return
+}
+
+func GetCountUserViewHistoryByEmails(date string) (items []*UserViewEmailTotalSlice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT count(1) total,email,company_name,real_name FROM user_view_history WHERE created_time >= ? and created_time <= ? and email != ""  group by email`
+	_, err = o.Raw(sql, date+" 00:00:00", date+" 23:59:59").QueryRows(&items)
+	return
+	//return items2,err
+}
+
+func GetReportViewMaxTimeByMobiles(date string) (items []*UserViewMobileTotalSlice, err error) {
+	o := orm.NewOrm()
+	o.Using("rddp")
+	rddpSql := `SELECT mobile,company_name,real_name,COUNT(1) AS total FROM report_view_record WHERE create_time >= ? and create_time <= ? and mobile != ""  group by mobile`
+	_, err = o.Raw(rddpSql, date+" 00:00:00", date+" 23:59:59").QueryRows(&items)
+	return
+}
+
+func GetReportViewMaxTimeByEmails(date string) (items []*UserViewEmailTotalSlice, err error) {
+	o := orm.NewOrm()
+	o.Using("rddp")
+	rddpSql := `SELECT mobile,company_name,real_name,COUNT(1) AS total FROM report_view_record WHERE create_time >= ? and create_time <= ? and email != "" group by email`
+	_, err = o.Raw(rddpSql, date+" 00:00:00", date+" 23:59:59").QueryRows(&items)
+	return
+}
+
+// GetAdvisoryCountUserViewHistoryByMobiles 每日资讯
+func GetAdvisoryCountUserViewHistoryByMobiles(date string) (items []*UserViewMobileTotalSlice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT count(1) total,mobile,company_name,real_name FROM advisory_user_chart_article_record WHERE create_time >= ? and create_time <= ? and mobile != ""  group by mobile`
+	_, err = o.Raw(sql, date+" 00:00:00", date+" 23:59:59").QueryRows(&items)
+	return
+}
+
+// GetAdvisoryCountUserViewHistoryByEmails 每日资讯
+func GetAdvisoryCountUserViewHistoryByEmails(date string) (items []*UserViewEmailTotalSlice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT count(1) total,email,company_name,real_name as created_time FROM advisory_user_chart_article_record WHERE create_time >= ? and create_time <= ? and email != "" group by email`
+	_, err = o.Raw(sql, date+" 00:00:00", date+" 23:59:59").QueryRows(&items)
+	return
+	//return items2,err
+}

+ 4 - 0
services/task.go

@@ -66,6 +66,10 @@ func Task() {
 	//每次服务启动都需要执行一次的
 	_ = AddEdbTask(nil)
 
+	//每日用户阅读数据统计
+	statisticsUserView := task.NewTask("statisticsUserView", "0 5 0 * * *", StatisticsUserView)
+	task.AddTask("每日用户阅读数据统计", statisticsUserView)
+
 	fmt.Println("task end")
 }
 

+ 154 - 0
services/user_view_statistics.go

@@ -0,0 +1,154 @@
+package services
+
+import (
+	"context"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+// StatisticsUserView 汇总统计表
+func StatisticsUserView(cont context.Context) (err error) {
+	dateTime := time.Now().AddDate(0, 0, 0)
+	dateStr := dateTime.Format(utils.FormatDate)
+	count, err := models.GetUserViewStatisticsCount(dateStr)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		return
+	}
+
+	{
+		mobileViewMap := make(map[string]*models.UserViewMobileTotalSlice)
+
+		list, tmpErr := models.GetCountUserViewHistoryByMobiles(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			mobileViewMap[v.Mobile] = v
+		}
+
+		list, tmpErr = models.GetReportViewMaxTimeByMobiles(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			if userViewStatistics, ok := mobileViewMap[v.Mobile]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				mobileViewMap[v.Mobile] = v
+			}
+		}
+
+		list, tmpErr = models.GetAdvisoryCountUserViewHistoryByMobiles(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			if userViewStatistics, ok := mobileViewMap[v.Mobile]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				mobileViewMap[v.Mobile] = v
+			}
+		}
+
+		if len(mobileViewMap) > 0 {
+			tmpList := make([]*models.UserViewStatistics, 0)
+			for mobile, userViewStatistics := range mobileViewMap {
+				item := &models.UserViewStatistics{
+					Mobile:      mobile,
+					RealName:    userViewStatistics.RealName,
+					CompanyName: userViewStatistics.CompanyName,
+					ViewNum:     userViewStatistics.Total,
+					Date:        dateTime,
+					CreateTime:  time.Now(),
+				}
+				//小于200条的时候,不插入数据库
+				if len(tmpList) < 200 {
+					tmpList = append(tmpList, item)
+					continue
+				}
+				//大于200条的时候,才去插入数据库
+				_ = models.AddMultiUserViewStatistics(tmpList)
+				tmpList = make([]*models.UserViewStatistics, 0)
+			}
+			//最后出来后,如果还有数据未插入,那么再去批量插入数据库
+			if len(tmpList) > 0 {
+				_ = models.AddMultiUserViewStatistics(tmpList)
+			}
+		}
+	}
+
+	//邮箱
+	{
+		emailViewMap := make(map[string]*models.UserViewEmailTotalSlice)
+
+		list, tmpErr := models.GetCountUserViewHistoryByEmails(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			emailViewMap[v.Email] = v
+		}
+
+		list, tmpErr = models.GetReportViewMaxTimeByEmails(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			if userViewStatistics, ok := emailViewMap[v.Email]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				emailViewMap[v.Email] = v
+			}
+		}
+
+		list, tmpErr = models.GetAdvisoryCountUserViewHistoryByEmails(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			if userViewStatistics, ok := emailViewMap[v.Email]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				emailViewMap[v.Email] = v
+			}
+		}
+
+		if len(emailViewMap) > 0 {
+			tmpList := make([]*models.UserViewStatistics, 0)
+			for email, userViewStatistics := range emailViewMap {
+				item := &models.UserViewStatistics{
+					Email:       email,
+					RealName:    userViewStatistics.RealName,
+					CompanyName: userViewStatistics.CompanyName,
+					ViewNum:     userViewStatistics.Total,
+					Date:        dateTime,
+					CreateTime:  time.Now(),
+				}
+				//小于200条的时候,不插入数据库
+				if len(tmpList) < 200 {
+					tmpList = append(tmpList, item)
+					continue
+				}
+				//大于200条的时候,才去插入数据库
+				_ = models.AddMultiUserViewStatistics(tmpList)
+				tmpList = make([]*models.UserViewStatistics, 0)
+			}
+			//最后出来后,如果还有数据未插入,那么再去批量插入数据库
+			if len(tmpList) > 0 {
+				_ = models.AddMultiUserViewStatistics(tmpList)
+			}
+		}
+	}
+
+	return
+}