浏览代码

新增客户存量数据统计

longyu 3 年之前
父节点
当前提交
d3644fb7ea
共有 5 个文件被更改,包括 503 次插入2 次删除
  1. 80 0
      models/company_view_statistics.go
  2. 1 1
      models/db.go
  3. 30 0
      models/user_view_statistics.go
  4. 4 0
      services/task.go
  5. 388 1
      services/user_view_statistics.go

+ 80 - 0
models/company_view_statistics.go

@@ -0,0 +1,80 @@
+package models
+
+import (
+	"github.com/rdlucklib/rdluck_tools/orm"
+	"time"
+)
+
+// CompanyViewStatistics 客户报告报告阅读数量统计表
+type CompanyViewStatistics struct {
+	Id         int       `orm:"column(id)" description:"自增Id"`
+	CompanyId  int       `description:"客户id"`
+	ViewNum    int       `description:"阅读总数"`
+	Date       time.Time `description:"阅读日期"`
+	CreateTime time.Time `description:"添加时间"`
+}
+
+// AddMultiCompanyViewStatistics 添加客户报告报告阅读数量统计记录
+func AddMultiCompanyViewStatistics(list []*CompanyViewStatistics) (err error) {
+	if len(list) <= 0 {
+		return
+	}
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(list), list)
+	return
+}
+
+// AddCompanyViewStatistics 添加客户报告报告阅读数量统计记录
+func AddCompanyViewStatistics(item *CompanyViewStatistics) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// Update 更新客户报告报告阅读数量统计表
+func (companyViewStatistics *CompanyViewStatistics) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(companyViewStatistics, cols...)
+	return
+}
+
+// GetCompanyViewStatisticsCount 获取某天的客户报告报告阅读数量统计记录数量
+func GetCompanyViewStatisticsCount(dayStr string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT count(1) count FROM company_view_statistics WHERE date = ?`
+	err = o.Raw(sql, dayStr).QueryRow(&count)
+	return
+}
+
+// GetCompanyViewStatisticsByCompanyId 根据客户id、日期获取数据
+func GetCompanyViewStatisticsByCompanyId(companyId int, date string) (item *CompanyViewStatistics, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * from  company_view_statistics  WHERE company_id=? and date = ?`
+	err = o.Raw(sql, companyId, date).QueryRow(&item)
+	return
+}
+
+// CompanyViewTotalSlice 根据用户手机号字符串获取客户的浏览数
+type CompanyViewTotalSlice struct {
+	CompanyId int    `description:"用户手机号"`
+	Total     int    `description:"总阅读数"`
+	Date      string `description:"统计的日期"`
+}
+
+// GetCompanyViewMobileTotalList 根据用户手机号字符串获取客户的浏览数
+func GetCompanyViewMobileTotalList(date string) (items []*CompanyViewTotalSlice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT sum(a.view_num) total,a.date,b.company_id FROM user_view_statistics a join wx_user b on a.mobile=b.mobile 
+WHERE a.mobile != "" and a.date = ? group by company_id`
+	_, err = o.Raw(sql, date).QueryRows(&items)
+	return
+}
+
+// GetCompanyViewEmailTotalList 根据用户邮箱字符串获取客户的浏览数
+func GetCompanyViewEmailTotalList(date string) (items []*CompanyViewTotalSlice, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT sum(a.view_num) total,a.date,b.company_id FROM user_view_statistics a join wx_user b on a.email=b.email 
+WHERE a.email != "" and a.date = ? group by company_id`
+	_, err = o.Raw(sql, date).QueryRows(&items)
+	return
+}

+ 1 - 1
models/db.go

@@ -96,7 +96,7 @@ func init() {
 		new(data_manage.EdbDataLt),               //路透指标数据表
 		new(CompanyProductUpdateLog),             //客户产品状态变更表
 		new(roadshow.RsReportRecord),             //路演记录
-		//new(company.CompanyReportRecord),                //客户记录
 		new(CompanyReportRecord),
+		new(CompanyViewStatistics),
 	)
 }

+ 30 - 0
models/user_view_statistics.go

@@ -18,6 +18,13 @@ type UserViewStatistics struct {
 	CreateTime   time.Time `description:"添加时间"`
 }
 
+// AddUserViewStatistics 添加用户报告报告阅读数量统计记录
+func AddUserViewStatistics(item *UserViewStatistics) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
 // AddMultiUserViewStatistics 添加用户报告报告阅读数量统计记录
 func AddMultiUserViewStatistics(list []*UserViewStatistics) (err error) {
 	if len(list) <= 0 {
@@ -28,6 +35,29 @@ func AddMultiUserViewStatistics(list []*UserViewStatistics) (err error) {
 	return
 }
 
+// Update 更新用户报告报告阅读数量统计表
+func (userViewStatistics *UserViewStatistics) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(userViewStatistics, cols...)
+	return
+}
+
+// GetUserViewStatisticsByMobile 根据手机号、日期获取数据
+func GetUserViewStatisticsByMobile(mobile, date string) (item *UserViewStatistics, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * from  user_view_statistics  WHERE mobile=? and date = ?`
+	err = o.Raw(sql, mobile, date).QueryRow(&item)
+	return
+}
+
+// GetUserViewStatisticsByMobile 根据邮箱、日期获取数据
+func GetUserViewStatisticsByEmail(email, date string) (item *UserViewStatistics, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * from  user_view_statistics  WHERE email=? and date = ?`
+	err = o.Raw(sql, email, date).QueryRow(item)
+	return
+}
+
 // UpdateLastViewTimeByMobile 根据手机号修改最近阅读时间
 func UpdateLastViewTimeByMobile(mobile, date string, lastViewTime time.Time) (err error) {
 	o := orm.NewOrm()

+ 4 - 0
services/task.go

@@ -98,6 +98,10 @@ func Task() {
 	//CRM 6.3 客户列表路演次数统计
 	roadShowTotal := task.NewTask("roadShowTotal", "0 */30 * * * *", roadshow.RoadShow)
 	task.AddTask("roadShowTotal", roadShowTotal)
+
+	//每半个小时用户阅读数据统计
+	statisticsUserView1Hour := task.NewTask("statisticsUserView1Hour", "0 */30 * * * *", StatisticsUserView1Hour)
+	task.AddTask("每半个小时用户阅读数据统计", statisticsUserView1Hour)
 	task.StartTask()
 
 	fmt.Println("task end")

+ 388 - 1
services/user_view_statistics.go

@@ -2,13 +2,14 @@ package services
 
 import (
 	"context"
+	"fmt"
 	"hongze/hongze_task/models"
 	"hongze/hongze_task/utils"
 	"time"
 )
 
 // StatisticsUserView 汇总统计表
-func StatisticsUserView(cont context.Context) (err error) {
+func StatisticsUserViewBak(cont context.Context) (err error) {
 	dateTime := time.Now().AddDate(0, 0, -1)
 	dateStr := dateTime.Format(utils.FormatDate)
 	count, err := models.GetUserViewStatisticsCount(dateStr)
@@ -150,5 +151,391 @@ func StatisticsUserView(cont context.Context) (err error) {
 		}
 	}
 
+	StatisticsCompanyView(dateTime)
+	return
+}
+
+// StatisticsCompanyView 客户统计
+func StatisticsCompanyViewBak(dateTime time.Time) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+		}
+	}()
+	dateStr := dateTime.Format(utils.FormatDate)
+	//fmt.Println(dateStr)
+	count, err := models.GetCompanyViewStatisticsCount(dateStr)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		return
+	}
+
+	companyViewMap := make(map[int]*models.CompanyViewTotalSlice)
+	{
+		list, tmpErr := models.GetCompanyViewMobileTotalList(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			companyViewMap[v.CompanyId] = v
+		}
+	}
+	//fmt.Println(companyViewMap)
+	//邮箱
+	{
+		list, tmpErr := models.GetCompanyViewEmailTotalList(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+
+			if userViewStatistics, ok := companyViewMap[v.CompanyId]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				companyViewMap[v.CompanyId] = v
+			}
+		}
+	}
+
+	if len(companyViewMap) > 0 {
+		tmpList := make([]*models.CompanyViewStatistics, 0)
+		for _, companyView := range companyViewMap {
+			item := &models.CompanyViewStatistics{
+				CompanyId:  companyView.CompanyId,
+				ViewNum:    companyView.Total,
+				Date:       dateTime,
+				CreateTime: time.Now(),
+			}
+			tmpList = append(tmpList, item)
+		}
+		//最后出来后,如果还有数据未插入,那么再去批量插入数据库
+		if len(tmpList) > 0 {
+			err = models.AddMultiCompanyViewStatistics(tmpList)
+		}
+	}
+
+	fmt.Println(dateStr, "end")
+	return
+}
+
+// StatisticsUserView 汇总统计表(每天统一汇总一次)
+func StatisticsUserView(cont context.Context) (err error) {
+	dateTime := time.Now().AddDate(0, 0, -1)
+	statisticsUserView1Hour(dateTime)
+	return
+}
+
+// StatisticsCompanyView 客户统计
+func StatisticsCompanyView(dateTime time.Time) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+		}
+	}()
+	dateStr := dateTime.Format(utils.FormatDate)
+	//fmt.Println(dateStr)
+	count, err := models.GetCompanyViewStatisticsCount(dateStr)
+	if err != nil {
+		return
+	}
+	if count > 0 {
+		return
+	}
+
+	companyViewMap := make(map[int]*models.CompanyViewTotalSlice)
+	{
+		list, tmpErr := models.GetCompanyViewMobileTotalList(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			companyViewMap[v.CompanyId] = v
+		}
+	}
+	//fmt.Println(companyViewMap)
+	//邮箱
+
+	{
+		list, tmpErr := models.GetCompanyViewEmailTotalList(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+
+			if userViewStatistics, ok := companyViewMap[v.CompanyId]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				companyViewMap[v.CompanyId] = v
+			}
+		}
+	}
+
+	if len(companyViewMap) > 0 {
+		for _, companyView := range companyViewMap {
+			tmpCompanyViewStatistics, tmpErr := models.GetCompanyViewStatisticsByCompanyId(companyView.CompanyId, dateStr)
+			if tmpErr != nil {
+				if tmpErr.Error() == utils.ErrNoRow() {
+					item := &models.CompanyViewStatistics{
+						CompanyId:  companyView.CompanyId,
+						ViewNum:    companyView.Total,
+						Date:       dateTime,
+						CreateTime: time.Now(),
+					}
+					models.AddCompanyViewStatistics(item)
+				}
+			} else {
+				tmpCompanyViewStatistics.ViewNum = companyView.Total
+				tmpCompanyViewStatistics.Update([]string{"ViewNum"})
+			}
+		}
+	}
+
+	fmt.Println(dateStr, "end")
 	return
 }
+
+// StatisticsUserView1Hour 每个小时汇总统计表
+func StatisticsUserView1Hour(cont context.Context) (err error) {
+	//dateTime := time.Now().AddDate(0, 0, -1)
+	dateTime := time.Now()
+	statisticsUserView1Hour(dateTime)
+
+	StatisticsCompanyView1Hour(dateTime)
+	return
+}
+
+// statisticsUserView1Hour
+func statisticsUserView1Hour(dateTime time.Time) (err error) {
+	//dateTime := time.Now().AddDate(0, 0, -1)
+	dateStr := dateTime.Format(utils.FormatDate)
+
+	{
+		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
+				if v.ViewTime.After(userViewStatistics.ViewTime) {
+					userViewStatistics.ViewTime = v.ViewTime
+				}
+			} 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
+				if v.ViewTime.After(userViewStatistics.ViewTime) {
+					userViewStatistics.ViewTime = v.ViewTime
+				}
+			} else {
+				mobileViewMap[v.Mobile] = v
+			}
+		}
+
+		if len(mobileViewMap) > 0 {
+			for mobile, userViewStatistics := range mobileViewMap {
+				tmpUserViewStatistics, tmpErr := models.GetUserViewStatisticsByMobile(mobile, dateStr)
+				if tmpErr != nil {
+					if tmpErr.Error() == utils.ErrNoRow() {
+						item := &models.UserViewStatistics{
+							Mobile:       mobile,
+							RealName:     userViewStatistics.RealName,
+							CompanyName:  userViewStatistics.CompanyName,
+							ViewNum:      userViewStatistics.Total,
+							LastViewTime: userViewStatistics.ViewTime,
+							Date:         dateTime,
+							CreateTime:   time.Now(),
+						}
+						models.AddUserViewStatistics(item)
+					}
+
+				} else {
+					tmpUserViewStatistics.ViewNum = userViewStatistics.Total
+					tmpUserViewStatistics.LastViewTime = userViewStatistics.ViewTime
+					tmpUserViewStatistics.Update([]string{"ViewNum", "LastViewTime"})
+				}
+			}
+		}
+	}
+
+	//邮箱
+	{
+		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
+				if v.ViewTime.After(userViewStatistics.ViewTime) {
+					userViewStatistics.ViewTime = v.ViewTime
+				}
+			} 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
+				if v.ViewTime.After(userViewStatistics.ViewTime) {
+					userViewStatistics.ViewTime = v.ViewTime
+				}
+			} else {
+				emailViewMap[v.Email] = v
+			}
+		}
+
+		if len(emailViewMap) > 0 {
+			for email, userViewStatistics := range emailViewMap {
+				tmpUserViewStatistics, tmpErr := models.GetUserViewStatisticsByEmail(email, dateStr)
+				if tmpErr != nil {
+					if tmpErr.Error() == utils.ErrNoRow() {
+						item := &models.UserViewStatistics{
+							Email:        email,
+							RealName:     userViewStatistics.RealName,
+							CompanyName:  userViewStatistics.CompanyName,
+							ViewNum:      userViewStatistics.Total,
+							LastViewTime: userViewStatistics.ViewTime,
+							Date:         dateTime,
+							CreateTime:   time.Now(),
+						}
+						models.AddUserViewStatistics(item)
+					}
+				} else {
+					tmpUserViewStatistics.ViewNum = userViewStatistics.Total
+					tmpUserViewStatistics.LastViewTime = userViewStatistics.ViewTime
+					tmpUserViewStatistics.Update([]string{"ViewNum", "LastViewTime"})
+				}
+			}
+		}
+	}
+
+	StatisticsCompanyView1Hour(dateTime)
+	return
+}
+
+// StatisticsCompanyView1Hour 每个小时客户统计
+func StatisticsCompanyView1Hour(dateTime time.Time) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+		}
+	}()
+	dateStr := dateTime.Format(utils.FormatDate)
+	//fmt.Println(dateStr)
+
+	companyViewMap := make(map[int]*models.CompanyViewTotalSlice)
+	{
+		list, tmpErr := models.GetCompanyViewMobileTotalList(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			companyViewMap[v.CompanyId] = v
+		}
+	}
+	//fmt.Println(companyViewMap)
+
+	//邮箱
+	{
+		list, tmpErr := models.GetCompanyViewEmailTotalList(dateStr)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+
+			if userViewStatistics, ok := companyViewMap[v.CompanyId]; ok {
+				userViewStatistics.Total += v.Total
+			} else {
+				companyViewMap[v.CompanyId] = v
+			}
+		}
+	}
+
+	if len(companyViewMap) > 0 {
+		for _, companyView := range companyViewMap {
+			tmpCompanyViewStatistics, tmpErr := models.GetCompanyViewStatisticsByCompanyId(companyView.CompanyId, dateStr)
+			if tmpErr != nil {
+				if tmpErr.Error() == utils.ErrNoRow() {
+					item := &models.CompanyViewStatistics{
+						CompanyId:  companyView.CompanyId,
+						ViewNum:    companyView.Total,
+						Date:       dateTime,
+						CreateTime: time.Now(),
+					}
+					models.AddCompanyViewStatistics(item)
+				}
+			} else {
+				tmpCompanyViewStatistics.ViewNum = companyView.Total
+				tmpCompanyViewStatistics.Update([]string{"ViewNum"})
+			}
+		}
+	}
+
+	fmt.Println(dateStr, "end")
+	return
+}
+
+//func Fix() {
+//	StatisticsUserView1Hour(nil)
+//
+//	//dateTime, _ := time.ParseInLocation(utils.FormatDate, "2021-03-04", time.Local)
+//	//lastDateTime, _ := time.ParseInLocation(utils.FormatDate, "2022-04-08", time.Local)
+//	//i := 0
+//	//for {
+//	//	tmpDateTime := dateTime.AddDate(0, 0, i)
+//	//	if tmpDateTime.After(lastDateTime) { //晚于昨天,那么就结束循环
+//	//		break
+//	//	}
+//	//	StatisticsCompanyView(tmpDateTime)
+//	//	i++
+//	//}
+//
+//}