userSeeAds.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package service
  2. import (
  3. "designs/global"
  4. "designs/model"
  5. "fmt"
  6. "time"
  7. )
  8. type adsSummary struct {
  9. Count int `json:"count" gorm:"column:count"`
  10. Pf string `json:"pf" gorm:"column:pf"`
  11. Gid string `json:"gid" gorm:"column:gid"`
  12. SumType1 int `json:"sumType1" gorm:"column:sumType1"`
  13. SumType2 int `json:"sumType2" gorm:"column:sumType2"`
  14. SumType0 int `json:"sumType0" gorm:"column:sumType0"`
  15. }
  16. // 汇总每日的广告数据
  17. func SeeAdsSummary(lastDay string) {
  18. //计算出上一日的广告数据汇总
  19. var adsSummarys []adsSummary
  20. err := global.App.DB.Table("user_see_ads").
  21. Where("date", lastDay).
  22. Group("user_see_ads.gid,user_see_ads.pf").
  23. Select("count(*) as count", "user_see_ads.pf", "user_see_ads.gid",
  24. "SUM(adsState = 1) AS sumType1",
  25. "SUM(adsState = 2) AS sumType2",
  26. "SUM(adsState = 0) AS sumType0").
  27. Scan(&adsSummarys).Error
  28. if err != nil {
  29. global.App.Log.Error("查询广告汇总数据报错:", err)
  30. return
  31. }
  32. var adsSummaryToday []struct {
  33. TodayCount int `json:"todayCount" gorm:"column:todayCount"`
  34. Pf string `json:"pf" gorm:"column:pf"`
  35. Gid string `json:"gid" gorm:"column:gid"`
  36. TodaySumType1 int `json:"todaySumType1" gorm:"column:todaySumType1"`
  37. TodaySumType2 int `json:"todaySumType2" gorm:"column:todaySumType2"`
  38. TodaySumType0 int `json:"todaySumType0" gorm:"column:todaySumType0"`
  39. }
  40. query := global.App.DB.Table("user").WhereRaw("DATE_FORMAT(createdAt, '%Y%m%d') = ?", lastDay).Select("id").SubQuery()
  41. err = global.App.DB.Table("user_see_ads").
  42. Where("date", lastDay).
  43. Group("user_see_ads.gid,user_see_ads.pf").
  44. LeftJoin("user", "user.pf = user_see_ads.pf and user.gid = user_see_ads.gid and user.userId = user_see_ads.userId").
  45. WhereRaw("user.id in (?)", query).
  46. Select("count(*) as todayCount", "user_see_ads.pf", "user_see_ads.gid",
  47. "SUM(adsState = 1) AS todaySumType1",
  48. "SUM(adsState = 2) AS todaySumType2",
  49. "SUM(adsState = 0) AS todaySumType0").
  50. Scan(&adsSummaryToday).Error
  51. if err != nil {
  52. global.App.Log.Error("查询当日注册广告汇总数据报错:", err)
  53. return
  54. }
  55. var SummaryUserSeeAds []model.SummaryUserSeeAds
  56. now := model.XTime{
  57. Time: time.Now(),
  58. }
  59. for _, summary := range adsSummarys {
  60. ds := model.SummaryUserSeeAds{
  61. Date: lastDay,
  62. Count: summary.Count,
  63. Pf: summary.Pf,
  64. Gid: summary.Gid,
  65. SumType1: summary.SumType1,
  66. SumType2: summary.SumType2,
  67. SumType0: summary.SumType0,
  68. CreatedAt: now,
  69. }
  70. for _, SummaryToday := range adsSummaryToday {
  71. if SummaryToday.Pf == ds.Pf && SummaryToday.Gid == ds.Gid {
  72. ds.TodaySumType1 = SummaryToday.TodaySumType1
  73. ds.TodaySumType2 = SummaryToday.TodaySumType2
  74. ds.TodaySumType0 = SummaryToday.TodaySumType0
  75. ds.TodayCount = SummaryToday.TodayCount
  76. break
  77. }
  78. }
  79. SummaryUserSeeAds = append(SummaryUserSeeAds, ds)
  80. }
  81. //将汇总数据存入数据库中
  82. err = global.App.DB.Table("summary_user_see_ads").CreateInBatches(&SummaryUserSeeAds, 100).Error
  83. if err != nil {
  84. global.App.Log.Error("存入统计数据失败", err.Error())
  85. fmt.Println(err.Error())
  86. return
  87. }
  88. }
  89. func GetTodayAdsSummary(gid string, pf []string) (count, todayCount int64, err error) {
  90. today := time.Now().Format("20060102")
  91. err = global.App.DB.Table("user_see_ads").
  92. Where("date", today).
  93. Where("gid", gid).WhereIn("pf", pf).
  94. Count(&count).Error
  95. if err != nil {
  96. return 0, 0, err
  97. }
  98. query := global.App.DB.Table("user").Where("gid", gid).WhereIn("pf", pf).WhereRaw("DATE_FORMAT(createdAt, '%Y%m%d') = ?", today).Select("id").SubQuery()
  99. err = global.App.DB.Table("user_see_ads").
  100. Where("date", today).
  101. LeftJoin("user", "user.pf = user_see_ads.pf and user.gid = user_see_ads.gid and user.userId = user_see_ads.userId").
  102. WhereRaw("user.id in (?)", query).Count(&todayCount).Error
  103. if err != nil {
  104. return 0, 0, err
  105. }
  106. return count, todayCount, nil
  107. }