user_view_statistics.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package services
  2. import (
  3. "context"
  4. "hongze/hongze_task/models"
  5. "hongze/hongze_task/utils"
  6. "time"
  7. )
  8. // StatisticsUserView 汇总统计表
  9. func StatisticsUserView(cont context.Context) (err error) {
  10. dateTime := time.Now().AddDate(0, 0, 0)
  11. dateStr := dateTime.Format(utils.FormatDate)
  12. count, err := models.GetUserViewStatisticsCount(dateStr)
  13. if err != nil {
  14. return
  15. }
  16. if count > 0 {
  17. return
  18. }
  19. {
  20. mobileViewMap := make(map[string]*models.UserViewMobileTotalSlice)
  21. list, tmpErr := models.GetCountUserViewHistoryByMobiles(dateStr)
  22. if tmpErr != nil {
  23. err = tmpErr
  24. return
  25. }
  26. for _, v := range list {
  27. mobileViewMap[v.Mobile] = v
  28. }
  29. list, tmpErr = models.GetReportViewMaxTimeByMobiles(dateStr)
  30. if tmpErr != nil {
  31. err = tmpErr
  32. return
  33. }
  34. for _, v := range list {
  35. if userViewStatistics, ok := mobileViewMap[v.Mobile]; ok {
  36. userViewStatistics.Total += v.Total
  37. } else {
  38. mobileViewMap[v.Mobile] = v
  39. }
  40. }
  41. list, tmpErr = models.GetAdvisoryCountUserViewHistoryByMobiles(dateStr)
  42. if tmpErr != nil {
  43. err = tmpErr
  44. return
  45. }
  46. for _, v := range list {
  47. if userViewStatistics, ok := mobileViewMap[v.Mobile]; ok {
  48. userViewStatistics.Total += v.Total
  49. } else {
  50. mobileViewMap[v.Mobile] = v
  51. }
  52. }
  53. if len(mobileViewMap) > 0 {
  54. tmpList := make([]*models.UserViewStatistics, 0)
  55. for mobile, userViewStatistics := range mobileViewMap {
  56. item := &models.UserViewStatistics{
  57. Mobile: mobile,
  58. RealName: userViewStatistics.RealName,
  59. CompanyName: userViewStatistics.CompanyName,
  60. ViewNum: userViewStatistics.Total,
  61. Date: dateTime,
  62. CreateTime: time.Now(),
  63. }
  64. //小于200条的时候,不插入数据库
  65. if len(tmpList) < 200 {
  66. tmpList = append(tmpList, item)
  67. continue
  68. }
  69. //大于200条的时候,才去插入数据库
  70. _ = models.AddMultiUserViewStatistics(tmpList)
  71. tmpList = make([]*models.UserViewStatistics, 0)
  72. }
  73. //最后出来后,如果还有数据未插入,那么再去批量插入数据库
  74. if len(tmpList) > 0 {
  75. _ = models.AddMultiUserViewStatistics(tmpList)
  76. }
  77. }
  78. }
  79. //邮箱
  80. {
  81. emailViewMap := make(map[string]*models.UserViewEmailTotalSlice)
  82. list, tmpErr := models.GetCountUserViewHistoryByEmails(dateStr)
  83. if tmpErr != nil {
  84. err = tmpErr
  85. return
  86. }
  87. for _, v := range list {
  88. emailViewMap[v.Email] = v
  89. }
  90. list, tmpErr = models.GetReportViewMaxTimeByEmails(dateStr)
  91. if tmpErr != nil {
  92. err = tmpErr
  93. return
  94. }
  95. for _, v := range list {
  96. if userViewStatistics, ok := emailViewMap[v.Email]; ok {
  97. userViewStatistics.Total += v.Total
  98. } else {
  99. emailViewMap[v.Email] = v
  100. }
  101. }
  102. list, tmpErr = models.GetAdvisoryCountUserViewHistoryByEmails(dateStr)
  103. if tmpErr != nil {
  104. err = tmpErr
  105. return
  106. }
  107. for _, v := range list {
  108. if userViewStatistics, ok := emailViewMap[v.Email]; ok {
  109. userViewStatistics.Total += v.Total
  110. } else {
  111. emailViewMap[v.Email] = v
  112. }
  113. }
  114. if len(emailViewMap) > 0 {
  115. tmpList := make([]*models.UserViewStatistics, 0)
  116. for email, userViewStatistics := range emailViewMap {
  117. item := &models.UserViewStatistics{
  118. Email: email,
  119. RealName: userViewStatistics.RealName,
  120. CompanyName: userViewStatistics.CompanyName,
  121. ViewNum: userViewStatistics.Total,
  122. Date: dateTime,
  123. CreateTime: time.Now(),
  124. }
  125. //小于200条的时候,不插入数据库
  126. if len(tmpList) < 200 {
  127. tmpList = append(tmpList, item)
  128. continue
  129. }
  130. //大于200条的时候,才去插入数据库
  131. _ = models.AddMultiUserViewStatistics(tmpList)
  132. tmpList = make([]*models.UserViewStatistics, 0)
  133. }
  134. //最后出来后,如果还有数据未插入,那么再去批量插入数据库
  135. if len(tmpList) > 0 {
  136. _ = models.AddMultiUserViewStatistics(tmpList)
  137. }
  138. }
  139. }
  140. return
  141. }