goProject/trunk/center/usercenter/internal/wxuser/userrecord.go

134 lines
4.2 KiB
Go
Raw Permalink Normal View History

2025-01-23 16:12:49 +08:00
package wxuser
import (
2025-02-08 16:30:07 +08:00
"common/mytime"
2025-01-23 16:12:49 +08:00
"common/resultStatus"
"goutil/logUtilPlus"
"time"
)
2025-02-08 16:30:07 +08:00
// 记录登录数据
func RecordLoginIn(uid int64, severId int32) {
2025-01-23 16:12:49 +08:00
nowTime := time.Now().Unix()
userRecord := &RecordLoginOfWxUser{}
2025-02-08 16:30:07 +08:00
userRecord.IsFirstLogin = 1
if userLastRecord, _ := GetUserRecord(uid); userLastRecord != nil {
if userLastRecord.RecordDate == mytime.ZeroTime(nowTime, 0) {
userRecord.IsFirstLogin = 0
}
}
2025-01-23 16:12:49 +08:00
userRecord.LoginInTime = nowTime
2025-02-08 16:30:07 +08:00
userRecord.Uid = uid
userRecord.RecordDate = mytime.ZeroTime(nowTime, 0)
userRecord.SeverId = severId
2025-01-23 16:12:49 +08:00
AddUserRecord(userRecord)
AddUserRecordCache(userRecord)
2025-02-08 16:30:07 +08:00
//检测该服是否是新服
if !CheckSeverID(severId) {
//若是新服添加服务器id到服务器列表方便统计的时候知道有多少个服
newUserSeverList := &WxUserSeverList{}
newUserSeverList.SeverId = severId
AddUserSeverList(newUserSeverList)
}
2025-01-23 16:12:49 +08:00
}
2025-02-08 16:30:07 +08:00
// 统计登出数据
2025-01-23 16:12:49 +08:00
func RecordLoginOut(uid int64) resultStatus.ResultStatus {
var userRecord *RecordLoginOfWxUser
if userRecord, _ = GetUserRecord(uid); userRecord == nil {
return resultStatus.PlayerNotExist
}
if userRecord.LoginOutTime != 0 {
logUtilPlus.ErrorLog("PlayerIsLoginOut,uid=%d", uid)
return resultStatus.PlayerIsLoginOut
}
go func() {
nowTime := time.Now().Unix()
2025-02-08 16:30:07 +08:00
if userRecord.RecordDate == mytime.ZeroTime(nowTime, 0) {
userRecord.LoginOutTime = nowTime
playTime := nowTime - userRecord.LoginInTime
userRecord.PlayTimes += playTime
SaveUserRecord(userRecord)
} else {
//如果跨天,要拆分成两条数据记录
zeroTime := mytime.ZeroTime(nowTime, 0)
userRecord.LoginOutTime = zeroTime
playTime := zeroTime - userRecord.LoginInTime
userRecord.PlayTimes += playTime
SaveUserRecord(userRecord)
newUserRecord := &RecordLoginOfWxUser{}
newUserRecord.LoginInTime = zeroTime
newUserRecord.LoginOutTime = nowTime
playTime = nowTime - userRecord.LoginInTime
newUserRecord.PlayTimes += playTime
newUserRecord.RecordDate = mytime.ZeroTime(nowTime, 0)
newUserRecord.Uid = uid
newUserRecord.SeverId = userRecord.SeverId
newUserRecord.IsFirstLogin = 1
AddUserRecord(newUserRecord)
}
2025-01-23 16:12:49 +08:00
}()
return resultStatus.Success
}
2025-02-08 16:30:07 +08:00
// 记录看广告数据
2025-01-23 16:12:49 +08:00
func RecordWatchAD(uid int64) resultStatus.ResultStatus {
2025-02-08 16:30:07 +08:00
todayZeroTime := mytime.ZeroTime(time.Now().Unix(), 0)
2025-01-23 16:12:49 +08:00
userADRecord := &RecordWatchADOfWxUser{}
2025-02-08 16:30:07 +08:00
var userSeverInfoRecord *WxUserSeverInfo
if userSeverInfoRecord, _ = GetUserSeverInfoByUid(uid); userSeverInfoRecord == nil {
return resultStatus.PlayerNotExist
}
severId := userSeverInfoRecord.SeverId
2025-01-23 16:12:49 +08:00
if userLastADRecord, _ := GetUserADRecord(uid); userLastADRecord != nil {
2025-02-08 16:30:07 +08:00
if userLastADRecord.RecordDate == mytime.ZeroTime(todayZeroTime, 0) {
//数据按天记录,如果为同一天,就在原来的数据上加
2025-01-23 16:12:49 +08:00
userLastADRecord.WatchADNum++
SaveUserADRecord(userLastADRecord)
return resultStatus.Success
}
}
2025-02-08 16:30:07 +08:00
userADRecord.RecordDate = todayZeroTime
2025-01-23 16:12:49 +08:00
userADRecord.WatchADNum += 1
2025-02-08 16:30:07 +08:00
userADRecord.Uid = uid
userADRecord.SeverId = severId
2025-01-23 16:12:49 +08:00
AddUserADRecord(userADRecord)
AddUserADRecordCache(userADRecord)
return resultStatus.Success
}
2025-02-08 16:30:07 +08:00
// 根据openid和severid来创建uid
2025-01-23 16:12:49 +08:00
func CreatUid(openId string, severId int32) int64 {
2025-02-08 16:30:07 +08:00
if uid, _ := GetUserUid(openId, severId); uid != 0 {
return uid
2025-01-23 16:12:49 +08:00
}
userSeverInfo := &WxUserSeverInfo{}
userSeverInfo.OpenId = openId
userSeverInfo.SeverId = severId
2025-02-08 16:30:07 +08:00
ID, _ := AddUserSeverInfo(userSeverInfo)
//uid=数据库索引+1亿先取索引再相加避免重复
Uid := ID + 100000000
AddUserSeverInfoCache(openId, severId, Uid)
AddUserUidCache(userSeverInfo)
go func() {
userSeverInfo.Uid = Uid
SaveUserSeverInfo(userSeverInfo)
}()
return Uid
2025-01-23 16:12:49 +08:00
}
2025-02-08 16:30:07 +08:00
// 切服时记录数据
func SwitchSever(uid int64, oldseverId, newseverId int32) (int64, resultStatus.ResultStatus) {
var userSeverInfoRecord *WxUserSeverInfo
if userSeverInfoRecord, _ = GetUserSeverInfoByUid(uid); userSeverInfoRecord == nil {
return 0, resultStatus.PlayerNotExist
}
if userSeverInfoRecord.SeverId != oldseverId {
return 0, resultStatus.PlayerNotMatchSever
}
RecordLoginOut(uid)
uidOfNewSever := CreatUid(userSeverInfoRecord.OpenId, newseverId)
go RecordLoginIn(uidOfNewSever, newseverId)
return uidOfNewSever, resultStatus.Success
2025-01-23 16:12:49 +08:00
}