|
@@ -9,18 +9,6 @@ import (
|
|
|
"workTasks/common"
|
|
|
)
|
|
|
|
|
|
-// 绑定手机号用户 bindPhone 已绑定手机号用户
|
|
|
-// 绑定邮箱用户 bindMail 已绑定邮箱用户
|
|
|
-// 超级订阅用户 vip 超级订阅vip用户
|
|
|
-// 超级订阅用户15 vip_15 第15天后到期的超级订阅用户
|
|
|
-// 超级订阅用户30 vip_30 第30天后到期的超级订阅用户
|
|
|
-// 大会员用户 member 生效中的大会员、大会员子账号用户
|
|
|
-// 大会员用户过期 member_expire 购买过大会员或子账号用户,当前已过期
|
|
|
-// 有付款用户 hasPay 无支付订单用户
|
|
|
-// 加购未购超级订阅 unBuyVip30 30天下单未支付超级订阅
|
|
|
-// 加购未购大会员 unBuyMember30 30天下单未支付大会员
|
|
|
-// 注册时间7天前 newUser7 7天前注册的用户
|
|
|
-// 注册时间30天前 newUser30 30天前注册的用户
|
|
|
type UserAnalysis struct {
|
|
|
UserMapping map[string]BaseUserId
|
|
|
|
|
@@ -32,21 +20,6 @@ type UserAnalysis struct {
|
|
|
}
|
|
|
type BaseUserId int64
|
|
|
|
|
|
-// TiDBOrderRangeFunc 订单循环
|
|
|
-func TiDBOrderRangeFunc() {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-// MgoUserRangeFunc 用户表循环
|
|
|
-func MgoUserRangeFunc() {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-// CkLogRangeFunc 日志归集表循环
|
|
|
-func CkLogRangeFunc() {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
func (ua *UserAnalysis) MgoUserRange(ctx context.Context) {
|
|
|
sess := common.MG.DB().GetMgoConn()
|
|
|
defer common.MG.DB().DestoryMongoConn(sess)
|
|
@@ -108,7 +81,7 @@ func (ua *UserAnalysis) MgoEntUserRange(ctx context.Context) {
|
|
|
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").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
|
|
@@ -143,33 +116,129 @@ func (ua *UserAnalysis) MgoEntUserRange(ctx context.Context) {
|
|
|
}
|
|
|
}
|
|
|
g.Log().Infof(ctx, "MgoUserRange 加载%d挑数据完成", index)
|
|
|
- //企业身份查询转换
|
|
|
- getBaseUserIdMap := func() map[int64]BaseUserId {
|
|
|
+ //根据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
|
|
|
+ }
|
|
|
|
|
|
- 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
|
|
|
}()
|
|
|
- g.Dump(getBaseUserIdMap)
|
|
|
+ //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
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
func (ua *UserAnalysis) TiDBOrderRange(ctx context.Context) {
|
|
|
- order, err := g.DB().Query(ctx, "SELECT user_id,order_status,product_type,create_time FROM dataexport_order")
|
|
|
+ order, err := g.DB().Query(ctx, "SELECT user_id,order_status,product_type,create_time,order_money FROM dataexport_order")
|
|
|
if err != nil {
|
|
|
g.Log().Errorf(ctx, "读取订单异常")
|
|
|
}
|
|
|
+ var (
|
|
|
+ now = time.Now()
|
|
|
+ vip, member = map[BaseUserId]int{}, map[BaseUserId]int{}
|
|
|
+ )
|
|
|
for index, m := range order.List() {
|
|
|
if index%10e4 == 0 {
|
|
|
g.Log().Infof(context.TODO(), "TiDBOrderRange %d/%d", index, order.Size())
|
|
|
}
|
|
|
var (
|
|
|
- userId = gconv.String(m["user_id"])
|
|
|
- //product = gconv.String(m["product_type"])
|
|
|
+ userId = gconv.String(m["user_id"])
|
|
|
+ baseUserId BaseUserId
|
|
|
+ product = gconv.String(m["product_type"])
|
|
|
orderStatus = gconv.Int(m["order_status"])
|
|
|
)
|
|
|
- if orderStatus != 0 {
|
|
|
- if uid, ok := ua.UserMapping[userId]; ok {
|
|
|
- ua.hasPay[uid] = true
|
|
|
+ baseUserId, ok := ua.UserMapping[userId]
|
|
|
+ if !ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if orderStatus == 1 {
|
|
|
+ ua.hasPay[baseUserId] = true
|
|
|
+ }
|
|
|
+ if orderStatus == -1 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ //统计超级订阅、大会员当月加购未购
|
|
|
+ if product == "VIP订阅" || product == "大会员" {
|
|
|
+ var order_money = gconv.Int(m["order_money"])
|
|
|
+ t, err := time.ParseInLocation(time.DateTime, gconv.String(m["create_time"]), time.Local)
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if now.Month() == t.Month() && now.Year() == t.Year() {
|
|
|
+ if product == "VIP订阅" {
|
|
|
+ if orderStatus <= 0 && order_money == 0 {
|
|
|
+ vip[baseUserId] += 0
|
|
|
+ } else {
|
|
|
+ vip[baseUserId] += 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if product == "大会员" {
|
|
|
+ if orderStatus <= 0 && order_money == 0 {
|
|
|
+ member[baseUserId] += 0
|
|
|
+ } else {
|
|
|
+ member[baseUserId] += 1
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- //t := time.ParseInLocation(time.DateTime, gconv.String(m["create_time"]))
|
|
|
+ }
|
|
|
+ for id, i := range vip {
|
|
|
+ if i == 0 {
|
|
|
+ ua.UnBuyVip30[id] = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for id, i := range member {
|
|
|
+ if i == 0 {
|
|
|
+ ua.UnBuyMember30[id] = true
|
|
|
+ }
|
|
|
}
|
|
|
}
|