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