@@ -0,0 +1,91 @@
|
||||
package adser
|
||||
|
||||
import (
|
||||
"91porn-server/app/appg"
|
||||
"91porn-server/common/constant"
|
||||
"91porn-server/common/version"
|
||||
"91porn-server/models/s/useradverstatmod"
|
||||
"91porn-server/models/v/usermod"
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
func CanRecord(user *usermod.User) bool {
|
||||
if user.SysType == constant.SysTypeAndroid &&
|
||||
//user.OriVer != "" &&
|
||||
user.AdGroup.InABC() {
|
||||
return VersionCompare(user.OriVer, constant.AdGroupClientVersion)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func VersionCompare(v1, v2 string) bool {
|
||||
ver1, err := version.New(v1)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
ver2, err := version.New(v2)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return ver1.GTE(ver2)
|
||||
}
|
||||
|
||||
func UpsertAdStat(ctx context.Context, user *usermod.User, now time.Time, incAppClick, incAdClick int64, payAmount int64) error {
|
||||
if !CanRecord(user) && appg.Conf.Base.Env != "test" {
|
||||
return errors.New("user not eligible for ad stat recording")
|
||||
}
|
||||
local, _ := time.LoadLocation("Asia/Shanghai")
|
||||
|
||||
// 把 day 归一化到当天 0 点,保证和索引一致
|
||||
now = now.In(local)
|
||||
day := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, local)
|
||||
|
||||
filter := bson.M{
|
||||
"userId": user.UID,
|
||||
"date": day,
|
||||
}
|
||||
|
||||
inc := bson.M{}
|
||||
if incAppClick != 0 {
|
||||
inc["appClick"] = incAppClick
|
||||
}
|
||||
if incAdClick != 0 {
|
||||
inc["adClick"] = incAdClick
|
||||
}
|
||||
deltaTotal := incAppClick + incAdClick
|
||||
if deltaTotal != 0 {
|
||||
inc["totalClick"] = deltaTotal
|
||||
}
|
||||
if payAmount != 0 {
|
||||
inc["payCount"] = 1
|
||||
inc["payTotal"] = payAmount
|
||||
}
|
||||
createdAt := user.CreatedAt.In(local)
|
||||
regDay := time.Date(createdAt.Year(), createdAt.Month(), createdAt.Day(), 0, 0, 0, 0, createdAt.Location())
|
||||
|
||||
update := bson.M{
|
||||
// 只在插入时写入的字段
|
||||
"$setOnInsert": bson.M{
|
||||
"userId": user.UID,
|
||||
"date": day,
|
||||
"createdAt": now,
|
||||
"districtCode": user.DistrictCode,
|
||||
"sysType": user.SysType,
|
||||
"adGroup": user.AdGroup,
|
||||
"regDay": regDay,
|
||||
"version": user.OriVer,
|
||||
},
|
||||
// 每次更新都要改的字段
|
||||
"$set": bson.M{
|
||||
"updatedAt": now,
|
||||
},
|
||||
}
|
||||
if len(inc) > 0 {
|
||||
update["$inc"] = inc
|
||||
}
|
||||
return useradverstatmod.UpsertOne(filter, update)
|
||||
}
|
||||
Reference in New Issue
Block a user