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. if len(ua.UserMapping) == 0 {
  12. return nil, nil
  13. }
  14. ua.mgoUserRange(ctx)
  15. ua.mgoEntUserRange(ctx)
  16. return []*AnalysisRes{
  17. {Name: "已绑定手机号用户", Code: "binPhone", Data: ua.BinPhone},
  18. {Name: "已绑定邮箱用户", Code: "bindMail", Data: ua.BindMail},
  19. {Name: "超级订阅用户", Code: "vip", Data: ua.Vip},
  20. {Name: "超级订阅15天到期", Code: "vipExpire_15", Data: ua.Vip15},
  21. {Name: "超级订阅30天到期", Code: "vipExpire_30", Data: ua.Vip30},
  22. {Name: "大会员用户", Code: "member", Data: ua.Member},
  23. {Name: "曾购大会员用户", Code: "memberExpired", Data: ua.MemberExpire}},
  24. nil
  25. }
  26. func (ua *UserAnalysis) mgoUserRange(ctx context.Context) {
  27. sess := common.MG.DB().GetMgoConn()
  28. defer common.MG.DB().DestoryMongoConn(sess)
  29. //个人身份
  30. it := sess.DB("qfw").C("user").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()
  31. var (
  32. index int64
  33. now = time.Now()
  34. )
  35. for m := make(map[string]interface{}); it.Next(&m); {
  36. index++
  37. if index%10e4 == 0 {
  38. g.Log().Infof(context.TODO(), "MgoUserRange %d", index)
  39. }
  40. var (
  41. base_user_id = BaseUserId(gconv.Int64(m["base_user_id"]))
  42. s_phone = gconv.String(m["s_phone"])
  43. s_m_phone = gconv.String(m["s_m_phone"])
  44. s_email = gconv.String(m["s_email"])
  45. //registedate = time.Unix(gconv.Int64(m["l_registedate"]), 0)
  46. )
  47. //绑定手机号用户
  48. if len(s_phone) == 11 || len(s_m_phone) == 11 {
  49. ua.BinPhone[base_user_id] = true
  50. }
  51. //绑定邮箱用户
  52. if s_email != "" && strings.Contains(s_email, "@") {
  53. ua.BindMail[base_user_id] = true
  54. }
  55. //超级订阅用户处理
  56. if vip_status := gconv.Int(m["i_vip_status"]); vip_status > 0 {
  57. ua.Vip[base_user_id] = true
  58. if timeStamp := gconv.Int64(m["l_vip_endtime"]); timeStamp > 0 {
  59. var vip_endtime = time.Unix(timeStamp, 0)
  60. if vip_endtime.AddDate(0, 0, -15).Before(now) {
  61. ua.Vip15[base_user_id] = true
  62. }
  63. if vip_endtime.AddDate(0, 0, -30).Before(now) {
  64. ua.Vip30[base_user_id] = true
  65. }
  66. }
  67. }
  68. //大会员处理
  69. if member_status := gconv.Int(m["i_member_status"]); member_status > 0 {
  70. ua.Member[base_user_id] = true
  71. } else if member_status != 0 {
  72. ua.MemberExpire[base_user_id] = true
  73. }
  74. }
  75. g.Log().Infof(ctx, "MgoUserRange 加载%d挑数据完成", index)
  76. }
  77. func (ua *UserAnalysis) mgoEntUserRange(ctx context.Context) {
  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").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. }