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

134 lines
4.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package wxuser
import (
"common/mytime"
"common/resultStatus"
"goutil/logUtilPlus"
"time"
)
// 记录登录数据
func RecordLoginIn(uid int64, severId int32) {
nowTime := time.Now().Unix()
userRecord := &RecordLoginOfWxUser{}
userRecord.IsFirstLogin = 1
if userLastRecord, _ := GetUserRecord(uid); userLastRecord != nil {
if userLastRecord.RecordDate == mytime.ZeroTime(nowTime, 0) {
userRecord.IsFirstLogin = 0
}
}
userRecord.LoginInTime = nowTime
userRecord.Uid = uid
userRecord.RecordDate = mytime.ZeroTime(nowTime, 0)
userRecord.SeverId = severId
AddUserRecord(userRecord)
AddUserRecordCache(userRecord)
//检测该服是否是新服
if !CheckSeverID(severId) {
//若是新服添加服务器id到服务器列表方便统计的时候知道有多少个服
newUserSeverList := &WxUserSeverList{}
newUserSeverList.SeverId = severId
AddUserSeverList(newUserSeverList)
}
}
// 统计登出数据
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()
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)
}
}()
return resultStatus.Success
}
// 记录看广告数据
func RecordWatchAD(uid int64) resultStatus.ResultStatus {
todayZeroTime := mytime.ZeroTime(time.Now().Unix(), 0)
userADRecord := &RecordWatchADOfWxUser{}
var userSeverInfoRecord *WxUserSeverInfo
if userSeverInfoRecord, _ = GetUserSeverInfoByUid(uid); userSeverInfoRecord == nil {
return resultStatus.PlayerNotExist
}
severId := userSeverInfoRecord.SeverId
if userLastADRecord, _ := GetUserADRecord(uid); userLastADRecord != nil {
if userLastADRecord.RecordDate == mytime.ZeroTime(todayZeroTime, 0) {
//数据按天记录,如果为同一天,就在原来的数据上加
userLastADRecord.WatchADNum++
SaveUserADRecord(userLastADRecord)
return resultStatus.Success
}
}
userADRecord.RecordDate = todayZeroTime
userADRecord.WatchADNum += 1
userADRecord.Uid = uid
userADRecord.SeverId = severId
AddUserADRecord(userADRecord)
AddUserADRecordCache(userADRecord)
return resultStatus.Success
}
// 根据openid和severid来创建uid
func CreatUid(openId string, severId int32) int64 {
if uid, _ := GetUserUid(openId, severId); uid != 0 {
return uid
}
userSeverInfo := &WxUserSeverInfo{}
userSeverInfo.OpenId = openId
userSeverInfo.SeverId = severId
ID, _ := AddUserSeverInfo(userSeverInfo)
//uid=数据库索引+1亿先取索引再相加避免重复
Uid := ID + 100000000
AddUserSeverInfoCache(openId, severId, Uid)
AddUserUidCache(userSeverInfo)
go func() {
userSeverInfo.Uid = Uid
SaveUserSeverInfo(userSeverInfo)
}()
return Uid
}
// 切服时记录数据
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
}