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 } } }