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

324 lines
8.2 KiB
Go
Raw 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/connection"
"goutil/logUtilPlus"
"sync"
)
var (
// 用户缓存对象
userInfoMap = make(map[string]*WxUserInfo)
rwmu sync.RWMutex
userRecordMap = make(map[int64]*RecordLoginOfWxUser)
rwmu2 sync.RWMutex
userADRecordMap = make(map[int64]*RecordWatchADOfWxUser)
rwmu3 sync.RWMutex
userSeverInfoMap = make(map[string]map[int32]int64)
rwmu4 sync.RWMutex
userUidMap = make(map[int64]*WxUserSeverInfo)
rwmu5 sync.RWMutex
)
func GetUserByOpenId(openId string) (*WxUserInfo, error) {
var userInfo *WxUserInfo
func() *WxUserInfo {
rwmu.RLock()
defer rwmu.RUnlock()
ok := true
if userInfo, ok = userInfoMap[openId]; ok {
return userInfo
}
return nil
}()
if userInfo != nil {
return userInfo, nil
}
result := connection.GetUserDB().Where("openId = ?", openId).First(&userInfo)
if result.Error != nil {
return nil, result.Error
}
return userInfo, nil
}
// AddUser 添加用户
// AddUser 添加新的用户到数据库中。
// 参数 User: 包含用户信息的对象。
func AddUser(user *WxUserInfo) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Create(&user) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("添加用户失败 错误信息:", result.Error.Error())
}
}
func AddUserCache(user *WxUserInfo) {
rwmu.Lock()
defer rwmu.Unlock()
userInfoMap[user.OpenId] = user
}
// 登录登出相关
// 添加用户登录登出表到缓存
func AddUserRecordCache(userrecord *RecordLoginOfWxUser) {
rwmu2.Lock()
defer rwmu2.Unlock()
userRecordMap[userrecord.Uid] = userrecord
}
// 获取最新一条登录记录
func GetUserRecord(uid int64) (*RecordLoginOfWxUser, error) {
var userRecord *RecordLoginOfWxUser
func() *RecordLoginOfWxUser {
rwmu2.RLock()
defer rwmu2.RUnlock()
ok := true
if userRecord, ok = userRecordMap[uid]; ok {
return userRecord
}
return nil
}()
if userRecord != nil {
return userRecord, nil
}
result := connection.GetUserDB().Where("uid = ?", uid).Last(&userRecord)
if result.Error != nil {
return nil, result.Error
}
//添加缓存
func() {
rwmu2.Lock()
defer rwmu2.Unlock()
userRecordMap[userRecord.Uid] = userRecord
}()
return userRecord, nil
}
// 添加用户登录登出记录
func AddUserRecord(userrecord *RecordLoginOfWxUser) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Create(&userrecord) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("添加用户记录失败 错误信息:", result.Error.Error())
}
return userrecord.ID, nil
}
// 保存添加用户登录登出记录
func SaveUserRecord(userrecord *RecordLoginOfWxUser) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Save(&userrecord) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("保存用户记录失败 错误信息:", result.Error.Error())
}
return userrecord.ID, nil
}
// 看广告相关
// 添加用户看广告记录到缓存
func AddUserADRecordCache(userADrecord *RecordWatchADOfWxUser) {
rwmu3.Lock()
defer rwmu3.Unlock()
userADRecordMap[userADrecord.Uid] = userADrecord
}
// 获取最新一条看广告记录
func GetUserADRecord(uid int64) (*RecordWatchADOfWxUser, error) {
var userADRecord *RecordWatchADOfWxUser
func() *RecordWatchADOfWxUser {
rwmu3.RLock()
defer rwmu3.RUnlock()
ok := true
if userADRecord, ok = userADRecordMap[uid]; ok {
return userADRecord
}
return nil
}()
if userADRecord != nil {
return userADRecord, nil
}
result := connection.GetUserDB().Where("uid = ?", uid).Last(&userADRecord)
if result.Error != nil {
return nil, result.Error
}
//添加缓存
func() {
rwmu3.Lock()
defer rwmu3.Unlock()
userADRecordMap[userADRecord.Uid] = userADRecord
}()
return userADRecord, nil
}
// 添加用户看广告记录到数据库
func AddUserADRecord(userADrecord *RecordWatchADOfWxUser) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Create(&userADrecord) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("添加用户看广告记录失败 错误信息:", result.Error.Error())
}
return userADrecord.ID, nil
}
// 保存用户看广告记录到数据库
func SaveUserADRecord(userADrecord *RecordWatchADOfWxUser) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Save(&userADrecord) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("保存用户看广告记录失败 错误信息:", result.Error.Error())
}
return userADrecord.ID, nil
}
// 区服相关
// 添加用户的区服信息到缓存 以openid为key的map
func AddUserSeverInfoCache(openid string, severid int32, uid int64) {
rwmu4.Lock()
defer rwmu4.Unlock()
newMap := make(map[int32]int64)
newMap[severid] = uid
if _, ok := userSeverInfoMap[openid]; !ok {
userSeverInfoMap[openid] = newMap
return
}
if _, ok := userSeverInfoMap[openid][severid]; !ok {
userSeverInfoMap[openid][severid] = uid
}
}
// 添加用户的区服信息到缓存 以uid为key
func AddUserUidCache(wxUserSeverInfo *WxUserSeverInfo) {
rwmu5.Lock()
defer rwmu5.Unlock()
userUidMap[wxUserSeverInfo.Uid] = wxUserSeverInfo
}
// 通过uid来获取用户的区服信息
func GetUserSeverInfoByUid(uid int64) (*WxUserSeverInfo, error) {
var userSeverInfoRecord *WxUserSeverInfo
func() *WxUserSeverInfo {
rwmu5.RLock()
defer rwmu5.RUnlock()
ok := true
if userSeverInfoRecord, ok = userUidMap[uid]; ok {
return userSeverInfoRecord
}
return nil
}()
if userSeverInfoRecord == nil {
result := connection.GetUserDB().Where("uid = ?", uid).First(&userSeverInfoRecord)
if result.Error != nil {
return nil, result.Error
}
}
func() {
rwmu5.Lock()
defer rwmu5.Unlock()
userUidMap[uid] = userSeverInfoRecord
}()
return userSeverInfoRecord, nil
}
// 通过openid和severid来获取uid
func GetUserUid(openId string, severId int32) (int64, error) {
var uid int64
func() int64 {
rwmu4.RLock()
defer rwmu4.RUnlock()
ok := true
if _, ok = userSeverInfoMap[openId]; !ok {
return 0
}
if uid, ok = userSeverInfoMap[openId][severId]; ok {
return uid
}
return 0
}()
if uid == 0 {
var userSeverInfoRecord *WxUserSeverInfo
result := connection.GetUserDB().Where("openId = ? AND severId = ?", openId, severId).First(&userSeverInfoRecord)
if result.Error != nil {
return 0, result.Error
}
if userSeverInfoRecord.Uid == 0 {
userSeverInfoRecord.Uid = userSeverInfoRecord.ID + 100000000
SaveUserSeverInfo(userSeverInfoRecord)
}
return userSeverInfoRecord.Uid, nil
}
return uid, nil
}
// 添加用户区服信息到数据库
func AddUserSeverInfo(userSeverInfo *WxUserSeverInfo) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Create(&userSeverInfo) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("添加用户区服记录失败 错误信息:", result.Error.Error())
}
return userSeverInfo.ID, nil
}
// 保存用户区服信息到数据库
func SaveUserSeverInfo(userSeverInfo *WxUserSeverInfo) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Save(&userSeverInfo) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("保存用户区服记录失败 错误信息:", result.Error.Error())
}
return userSeverInfo.ID, nil
}
// 查询severid是否存在即是否为新服
func CheckSeverID(severid int32) bool {
var userSeverList *WxUserSeverList
result := connection.GetUserDB().Where("severId = ?", severid).First(&userSeverList)
if result.Error != nil {
return false
}
return true
}
// 添加新的severid到服务器列表
func AddUserSeverList(userSeverList *WxUserSeverList) (int64, error) {
//处理一些验证
// 写入到数据库
result := connection.GetUserDB().Create(&userSeverList) // 通过数据的指针来创建
if result.Error != nil {
logUtilPlus.ErrorLog("添加用户区服列表失败 错误信息:", result.Error.Error())
}
return userSeverList.ID, nil
}