jobMgoUserRange.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package userAnalysis
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/util/gconv"
  6. "strings"
  7. "time"
  8. "workTasks/common"
  9. )
  10. func (ua *UserAnalysis) GetMgoUserRes(ctx context.Context) ([]*AnalysisRes, error) {
  11. ua.mgoUserRange(ctx)
  12. ua.mgoEntUserRange(ctx)
  13. return []*AnalysisRes{
  14. {Name: "已绑定手机号用户", Code: "binPhone", Data: ua.BinPhone},
  15. {Name: "已绑定邮箱用户", Code: "bindMail", Data: ua.BindMail},
  16. {Name: "超级订阅用户", Code: "vip", Data: ua.Vip},
  17. {Name: "超级订阅15天到期", Code: "vipExpire_15", Data: ua.Vip15},
  18. {Name: "超级订阅30天到期", Code: "vipExpire_30", Data: ua.Vip30},
  19. {Name: "大会员用户", Code: "member", Data: ua.Member},
  20. {Name: "曾购大会员用户", Code: "memberExpired", Data: ua.MemberExpire}},
  21. nil
  22. }
  23. func (ua *UserAnalysis) mgoUserRange(ctx context.Context) {
  24. sess := common.MG.DB().GetMgoConn()
  25. defer common.MG.DB().DestoryMongoConn(sess)
  26. //个人身份
  27. it := sess.DB("qfw").C("user").Find(nil).Select(g.Map{"base_user_id": 1, "s_phone": 1, "s_m_phone": 1, "s_email": 1, "l_registedate": 1, "i_vip_status": 1, "l_vip_endtime": 1, "i_member_status": 1}).Iter()
  28. var (
  29. index int64
  30. now = time.Now()
  31. )
  32. for m := make(map[string]interface{}); it.Next(&m); {
  33. index++
  34. if index%10e4 == 0 {
  35. g.Log().Infof(context.TODO(), "MgoUserRange %d", index)
  36. }
  37. var (
  38. base_user_id = BaseUserId(gconv.Int64(m["base_user_id"]))
  39. s_phone = gconv.String(m["s_phone"])
  40. s_m_phone = gconv.String(m["s_m_phone"])
  41. s_email = gconv.String(m["s_email"])
  42. //registedate = time.Unix(gconv.Int64(m["l_registedate"]), 0)
  43. )
  44. //绑定手机号用户
  45. if len(s_phone) == 11 || len(s_m_phone) == 11 {
  46. ua.BinPhone[base_user_id] = true
  47. }
  48. //绑定邮箱用户
  49. if s_email != "" && strings.Contains(s_email, "@") {
  50. ua.BindMail[base_user_id] = true
  51. }
  52. //超级订阅用户处理
  53. if vip_status := gconv.Int(m["i_vip_status"]); vip_status > 0 {
  54. ua.Vip[base_user_id] = true
  55. if timeStamp := gconv.Int64(m["l_vip_endtime"]); timeStamp > 0 {
  56. var vip_endtime = time.Unix(timeStamp, 0)
  57. if vip_endtime.AddDate(0, 0, -15).Before(now) {
  58. ua.Vip15[base_user_id] = true
  59. }
  60. if vip_endtime.AddDate(0, 0, -30).Before(now) {
  61. ua.Vip30[base_user_id] = true
  62. }
  63. }
  64. }
  65. //大会员处理
  66. if member_status := gconv.Int(m["i_member_status"]); member_status > 0 {
  67. ua.Member[base_user_id] = true
  68. } else if member_status != 0 {
  69. ua.MemberExpire[base_user_id] = true
  70. }
  71. }
  72. g.Log().Infof(ctx, "MgoUserRange 加载%d挑数据完成", index)
  73. }
  74. func (ua *UserAnalysis) mgoEntUserRange(ctx context.Context) {
  75. if len(ua.UserMapping) == 0 {
  76. return
  77. }
  78. sess := common.MG.DB().GetMgoConn()
  79. defer common.MG.DB().DestoryMongoConn(sess)
  80. var (
  81. Vip, Vip15, Vip30 = map[int64]bool{}, map[int64]bool{}, map[int64]bool{}
  82. Member, MemberExpire = map[int64]bool{}, map[int64]bool{}
  83. )
  84. //企业身份
  85. it := sess.DB("qfw").C("ent_user").Find(nil).Select(g.Map{"i_userid": 1, "l_registedate": 1, "i_vip_status": 1, "l_vip_endtime": 1, "i_member_status": 1}).Iter()
  86. var (
  87. index int64
  88. now = time.Now()
  89. )
  90. for m := make(map[string]interface{}); it.Next(&m); {
  91. index++
  92. if index%10e4 == 0 {
  93. g.Log().Infof(context.TODO(), "MgoUserRange %d", index)
  94. }
  95. var (
  96. entUserId = gconv.Int64(m["i_userid"])
  97. )
  98. //超级订阅用户处理
  99. if vip_status := gconv.Int(m["i_vip_status"]); vip_status > 0 {
  100. Vip[entUserId] = true
  101. if timeStamp := gconv.Int64(m["l_vip_endtime"]); timeStamp > 0 {
  102. var vip_endtime = time.Unix(timeStamp, 0)
  103. if vip_endtime.AddDate(0, 0, -15).Before(now) {
  104. Vip15[entUserId] = true
  105. }
  106. if vip_endtime.AddDate(0, 0, -30).Before(now) {
  107. Vip30[entUserId] = true
  108. }
  109. }
  110. }
  111. //大会员处理
  112. if member_status := gconv.Int(m["i_member_status"]); member_status > 0 {
  113. Member[entUserId] = true
  114. } else if member_status != 0 {
  115. MemberExpire[entUserId] = true
  116. }
  117. }
  118. g.Log().Infof(ctx, "MgoUserRange 加载%d挑数据完成", index)
  119. //根据entUserId获取
  120. baseUserIdMapping := func() map[int64]BaseUserId {
  121. var (
  122. all = map[int64]bool{}
  123. rData = map[int64]BaseUserId{}
  124. )
  125. for i, _ := range Member {
  126. all[i] = true
  127. }
  128. for i, _ := range Vip {
  129. all[i] = true
  130. }
  131. doQuery := func(entUserId []int64) map[int64]BaseUserId {
  132. return nil
  133. }
  134. var query []int64
  135. for i, _ := range all {
  136. query = append(query, i)
  137. if i >= 500 {
  138. for m, n := range doQuery(query) {
  139. rData[m] = n
  140. }
  141. query = []int64{}
  142. }
  143. }
  144. if len(query) > 0 {
  145. for m, n := range doQuery(query) {
  146. rData[m] = n
  147. }
  148. }
  149. return rData
  150. }()
  151. //Vip, Vip15, Vip30
  152. for entId, _ := range Vip {
  153. if baseUserId, ok := baseUserIdMapping[entId]; ok {
  154. ua.Vip[baseUserId] = true
  155. }
  156. }
  157. for entId, _ := range Vip15 {
  158. if baseUserId, ok := baseUserIdMapping[entId]; ok {
  159. ua.Vip15[baseUserId] = true
  160. }
  161. }
  162. for entId, _ := range Vip30 {
  163. if baseUserId, ok := baseUserIdMapping[entId]; ok {
  164. ua.Vip30[baseUserId] = true
  165. }
  166. }
  167. for entId, _ := range Member {
  168. if baseUserId, ok := baseUserIdMapping[entId]; ok {
  169. ua.Member[baseUserId] = true
  170. }
  171. }
  172. for entId, _ := range MemberExpire {
  173. if baseUserId, ok := baseUserIdMapping[entId]; ok {
  174. ua.MemberExpire[baseUserId] = true
  175. }
  176. }
  177. }