activeUsers.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package activeUsers
  2. import (
  3. "fmt"
  4. "leadGeneration/entity/power"
  5. "leadGeneration/public"
  6. "log"
  7. "time"
  8. )
  9. /*
  10. ⚠️注意
  11. user_countbyhour 表只有一个月的数据
  12. */
  13. // 超前项目
  14. type aheadActiveFreeUser struct {
  15. }
  16. func NewAheadActiveFreeUser() *aheadActiveFreeUser {
  17. return &aheadActiveFreeUser{}
  18. }
  19. // 定制化分析报告
  20. type customerActiveFreeUser struct {
  21. }
  22. func NewCustomerActiveFreeUser() *customerActiveFreeUser {
  23. return &customerActiveFreeUser{}
  24. }
  25. // GetWeekActiveFreeUsers 获取周活无权限用户
  26. func (a *aheadActiveFreeUser) GetWeekActiveFreeUsers() (rData []string) {
  27. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers start\n")
  28. now := time.Now()
  29. _, end_m, end_d := now.Date()
  30. _, start_m, start_d := now.AddDate(0, 0, -7).Date()
  31. var sql string
  32. var param []interface{}
  33. if start_m != end_m {
  34. //跨月
  35. sql = "SELECT DISTINCT(user_mongoid) FROM user_countbyhour WHERE day >= ? OR day < ?"
  36. param = []interface{}{end_d, start_d}
  37. } else {
  38. //非跨月
  39. sql = "SELECT DISTINCT(user_mongoid) FROM user_countbyhour WHERE day >= ? AND day < ?"
  40. param = []interface{}{start_d, end_d}
  41. }
  42. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers search sql:%s value:%v start\n", sql, param)
  43. res := public.UserAnalyseDb.SelectBySql(sql, param...)
  44. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers search end\n")
  45. if res == nil || len(*res) == 0 {
  46. return
  47. }
  48. rData = make([]string, 0, len(*res))
  49. for _, v := range *res {
  50. if userId, _ := v["user_mongoid"].(string); userId != "" {
  51. if !power.HasAheadPower(userId) {
  52. rData = append(rData, userId)
  53. }
  54. }
  55. }
  56. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers start Finished Total %d\n", len(rData))
  57. return rData
  58. }
  59. // GetMonthActiveFreeUsers 获取月活无权限用户
  60. func (a *aheadActiveFreeUser) GetMonthActiveFreeUsers() (rData []string) {
  61. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers start\n")
  62. var sql string
  63. sql = "SELECT DISTINCT(user_mongoid) FROM user_countbyhour "
  64. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers search sql:%s value:%v start\n", sql)
  65. res := public.UserAnalyseDb.SelectBySql(sql)
  66. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers search end\n")
  67. if res == nil || len(*res) == 0 {
  68. return
  69. }
  70. rData = make([]string, 0, len(*res))
  71. for _, v := range *res {
  72. if userId, _ := v["user_mongoid"].(string); userId != "" {
  73. if !power.HasAheadPower(userId) {
  74. rData = append(rData, userId)
  75. }
  76. }
  77. }
  78. log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers start Finished Total %d\n", len(rData))
  79. return rData
  80. }
  81. // GetMonthActiveFreeUsers 获取月活用户
  82. // 有订阅或有搜索词的周活用户+最近7天注册的新用户无条件生
  83. func (c *customerActiveFreeUser) GetMonthActiveFreeUsers() (rData []string) {
  84. log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetMonthActiveFreeUsers start\n")
  85. //表数据为近一个月,所以直接查询全部
  86. res := public.UserAnalyseDb.SelectBySql("SELECT user_mongoid,sum(search) AS total FROM user_countbyhour group by user_mongoid")
  87. if res == nil || len(*res) == 0 {
  88. return
  89. }
  90. rData = make([]string, 0, len(*res))
  91. for _, v := range *res {
  92. userId, _ := v["user_mongoid"].(string)
  93. if userId == "" {
  94. continue
  95. }
  96. //非会员
  97. if hasPower := power.HasPower(userId); hasPower {
  98. continue
  99. }
  100. //无搜索记录、无关键词
  101. if searchTotal, _ := v["total"].(int); searchTotal == 0 {
  102. //无订阅词
  103. if !power.HasSubscribe(userId) {
  104. continue
  105. }
  106. }
  107. rData = append(rData, userId)
  108. }
  109. log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetMonthActiveFreeUsers start Finished Total %d\n", len(rData))
  110. return rData
  111. }
  112. // GetWeekActiveFreeUsers 获取周活用户
  113. func (c *customerActiveFreeUser) GetWeekActiveFreeUsers() (rData []string) {
  114. log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetWeekActiveFreeUsers start\n")
  115. now := time.Now()
  116. _, end_m, end_d := now.Date()
  117. _, start_m, start_d := now.AddDate(0, 0, -7).Date()
  118. var sql string
  119. var param []interface{}
  120. if start_m != end_m {
  121. //跨月
  122. sql = " WHERE day >= ? OR day < ? "
  123. param = []interface{}{end_d, start_d}
  124. } else {
  125. //非跨月
  126. sql = " WHERE day >= ? AND day < ? "
  127. param = []interface{}{start_d, end_d}
  128. }
  129. query := fmt.Sprintf("SELECT user_mongoid,sum(search) AS total FROM user_countbyhour %s group by user_mongoid", sql)
  130. res := public.UserAnalyseDb.SelectBySql(query, param...)
  131. if res == nil || len(*res) == 0 {
  132. return
  133. }
  134. rData = make([]string, 0, len(*res))
  135. for _, v := range *res {
  136. userId, _ := v["user_mongoid"].(string)
  137. if userId == "" {
  138. continue
  139. }
  140. //非会员
  141. if hasPower := power.HasPower(userId); hasPower {
  142. continue
  143. }
  144. //无搜索记录、无关键词
  145. if searchTotal, _ := v["total"].(int); searchTotal == 0 {
  146. //无订阅词
  147. if !power.HasSubscribe(userId) {
  148. continue
  149. }
  150. }
  151. rData = append(rData, userId)
  152. }
  153. log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetWeekActiveFreeUsers start Finished Total %d\n", len(rData))
  154. return rData
  155. }