123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package userAnalysis
- import (
- "context"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/gconv"
- "strings"
- "time"
- "workTasks/common"
- )
- func (ua *UserAnalysis) GetMgoUserRes(ctx context.Context) ([]*AnalysisRes, error) {
- ua.mgoUserRange(ctx)
- ua.mgoEntUserRange(ctx)
- return []*AnalysisRes{
- {Name: "已绑定手机号用户", Code: "binPhone", Data: ua.BinPhone},
- {Name: "已绑定邮箱用户", Code: "bindMail", Data: ua.BindMail},
- {Name: "超级订阅用户", Code: "vip", Data: ua.Vip},
- {Name: "超级订阅15天到期", Code: "vipExpire_15", Data: ua.Vip15},
- {Name: "超级订阅30天到期", Code: "vipExpire_30", Data: ua.Vip30},
- {Name: "大会员用户", Code: "member", Data: ua.Member},
- {Name: "曾购大会员用户", Code: "memberExpired", Data: ua.MemberExpire}},
- nil
- }
- func (ua *UserAnalysis) mgoUserRange(ctx context.Context) {
- sess := common.MG.DB().GetMgoConn()
- defer common.MG.DB().DestoryMongoConn(sess)
- //个人身份
- 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()
- var (
- index int64
- now = time.Now()
- )
- for m := make(map[string]interface{}); it.Next(&m); {
- index++
- if index%10e4 == 0 {
- g.Log().Infof(context.TODO(), "MgoUserRange %d", index)
- }
- var (
- base_user_id = BaseUserId(gconv.Int64(m["base_user_id"]))
- s_phone = gconv.String(m["s_phone"])
- s_m_phone = gconv.String(m["s_m_phone"])
- s_email = gconv.String(m["s_email"])
- //registedate = time.Unix(gconv.Int64(m["l_registedate"]), 0)
- )
- //绑定手机号用户
- if len(s_phone) == 11 || len(s_m_phone) == 11 {
- ua.BinPhone[base_user_id] = true
- }
- //绑定邮箱用户
- if s_email != "" && strings.Contains(s_email, "@") {
- ua.BindMail[base_user_id] = true
- }
- //超级订阅用户处理
- if vip_status := gconv.Int(m["i_vip_status"]); vip_status > 0 {
- ua.Vip[base_user_id] = true
- if timeStamp := gconv.Int64(m["l_vip_endtime"]); timeStamp > 0 {
- var vip_endtime = time.Unix(timeStamp, 0)
- if vip_endtime.AddDate(0, 0, -15).Before(now) {
- ua.Vip15[base_user_id] = true
- }
- if vip_endtime.AddDate(0, 0, -30).Before(now) {
- ua.Vip30[base_user_id] = true
- }
- }
- }
- //大会员处理
- if member_status := gconv.Int(m["i_member_status"]); member_status > 0 {
- ua.Member[base_user_id] = true
- } else if member_status != 0 {
- ua.MemberExpire[base_user_id] = true
- }
- }
- g.Log().Infof(ctx, "MgoUserRange 加载%d挑数据完成", index)
- }
- func (ua *UserAnalysis) mgoEntUserRange(ctx context.Context) {
- if len(ua.UserMapping) == 0 {
- return
- }
- sess := common.MG.DB().GetMgoConn()
- defer common.MG.DB().DestoryMongoConn(sess)
- var (
- Vip, Vip15, Vip30 = map[int64]bool{}, map[int64]bool{}, map[int64]bool{}
- Member, MemberExpire = map[int64]bool{}, map[int64]bool{}
- )
- //企业身份
- 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()
- var (
- index int64
- now = time.Now()
- )
- for m := make(map[string]interface{}); it.Next(&m); {
- index++
- if index%10e4 == 0 {
- g.Log().Infof(context.TODO(), "MgoUserRange %d", index)
- }
- var (
- entUserId = gconv.Int64(m["i_userid"])
- )
- //超级订阅用户处理
- if vip_status := gconv.Int(m["i_vip_status"]); vip_status > 0 {
- Vip[entUserId] = true
- if timeStamp := gconv.Int64(m["l_vip_endtime"]); timeStamp > 0 {
- var vip_endtime = time.Unix(timeStamp, 0)
- if vip_endtime.AddDate(0, 0, -15).Before(now) {
- Vip15[entUserId] = true
- }
- if vip_endtime.AddDate(0, 0, -30).Before(now) {
- Vip30[entUserId] = true
- }
- }
- }
- //大会员处理
- if member_status := gconv.Int(m["i_member_status"]); member_status > 0 {
- Member[entUserId] = true
- } else if member_status != 0 {
- MemberExpire[entUserId] = true
- }
- }
- g.Log().Infof(ctx, "MgoUserRange 加载%d挑数据完成", index)
- //根据entUserId获取
- baseUserIdMapping := func() map[int64]BaseUserId {
- var (
- all = map[int64]bool{}
- rData = map[int64]BaseUserId{}
- )
- for i, _ := range Member {
- all[i] = true
- }
- for i, _ := range Vip {
- all[i] = true
- }
- doQuery := func(entUserId []int64) map[int64]BaseUserId {
- return nil
- }
- var query []int64
- for i, _ := range all {
- query = append(query, i)
- if i >= 500 {
- for m, n := range doQuery(query) {
- rData[m] = n
- }
- query = []int64{}
- }
- }
- if len(query) > 0 {
- for m, n := range doQuery(query) {
- rData[m] = n
- }
- }
- return rData
- }()
- //Vip, Vip15, Vip30
- for entId, _ := range Vip {
- if baseUserId, ok := baseUserIdMapping[entId]; ok {
- ua.Vip[baseUserId] = true
- }
- }
- for entId, _ := range Vip15 {
- if baseUserId, ok := baseUserIdMapping[entId]; ok {
- ua.Vip15[baseUserId] = true
- }
- }
- for entId, _ := range Vip30 {
- if baseUserId, ok := baseUserIdMapping[entId]; ok {
- ua.Vip30[baseUserId] = true
- }
- }
- for entId, _ := range Member {
- if baseUserId, ok := baseUserIdMapping[entId]; ok {
- ua.Member[baseUserId] = true
- }
- }
- for entId, _ := range MemberExpire {
- if baseUserId, ok := baseUserIdMapping[entId]; ok {
- ua.MemberExpire[baseUserId] = true
- }
- }
- }
|