2025-01-23 16:12:49 +08:00
|
|
|
|
package wxuser
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"common/connection"
|
|
|
|
|
|
"goutil/logUtilPlus"
|
|
|
|
|
|
"sync"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
|
// 用户缓存对象
|
2025-02-08 16:30:07 +08:00
|
|
|
|
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
|
2025-01-23 16:12:49 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 登录登出相关
|
2025-02-08 16:30:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加用户登录登出表到缓存
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func AddUserRecordCache(userrecord *RecordLoginOfWxUser) {
|
|
|
|
|
|
rwmu2.Lock()
|
|
|
|
|
|
defer rwmu2.Unlock()
|
|
|
|
|
|
userRecordMap[userrecord.Uid] = userrecord
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 获取最新一条登录记录
|
2025-01-23 16:12:49 +08:00
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 添加用户登录登出记录
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func AddUserRecord(userrecord *RecordLoginOfWxUser) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Create(&userrecord) // 通过数据的指针来创建
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
|
logUtilPlus.ErrorLog("添加用户记录失败 错误信息:", result.Error.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
return userrecord.ID, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 保存添加用户登录登出记录
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func SaveUserRecord(userrecord *RecordLoginOfWxUser) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Save(&userrecord) // 通过数据的指针来创建
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
|
logUtilPlus.ErrorLog("保存用户记录失败 错误信息:", result.Error.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
return userrecord.ID, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 看广告相关
|
2025-02-08 16:30:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加用户看广告记录到缓存
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func AddUserADRecordCache(userADrecord *RecordWatchADOfWxUser) {
|
|
|
|
|
|
rwmu3.Lock()
|
|
|
|
|
|
defer rwmu3.Unlock()
|
|
|
|
|
|
userADRecordMap[userADrecord.Uid] = userADrecord
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 获取最新一条看广告记录
|
2025-01-23 16:12:49 +08:00
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 添加用户看广告记录到数据库
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func AddUserADRecord(userADrecord *RecordWatchADOfWxUser) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Create(&userADrecord) // 通过数据的指针来创建
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
|
logUtilPlus.ErrorLog("添加用户看广告记录失败 错误信息:", result.Error.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
return userADrecord.ID, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 保存用户看广告记录到数据库
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func SaveUserADRecord(userADrecord *RecordWatchADOfWxUser) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Save(&userADrecord) // 通过数据的指针来创建
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
|
logUtilPlus.ErrorLog("保存用户看广告记录失败 错误信息:", result.Error.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
return userADrecord.ID, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 区服相关
|
2025-02-08 16:30:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加用户的区服信息到缓存 以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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 添加用户区服信息到数据库
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func AddUserSeverInfo(userSeverInfo *WxUserSeverInfo) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Create(&userSeverInfo) // 通过数据的指针来创建
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
|
logUtilPlus.ErrorLog("添加用户区服记录失败 错误信息:", result.Error.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
return userSeverInfo.ID, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 保存用户区服信息到数据库
|
2025-01-23 16:12:49 +08:00
|
|
|
|
func SaveUserSeverInfo(userSeverInfo *WxUserSeverInfo) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Save(&userSeverInfo) // 通过数据的指针来创建
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
|
logUtilPlus.ErrorLog("保存用户区服记录失败 错误信息:", result.Error.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
return userSeverInfo.ID, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 查询severid是否存在,即是否为新服
|
|
|
|
|
|
func CheckSeverID(severid int32) bool {
|
|
|
|
|
|
var userSeverList *WxUserSeverList
|
|
|
|
|
|
result := connection.GetUserDB().Where("severId = ?", severid).First(&userSeverList)
|
2025-01-23 16:12:49 +08:00
|
|
|
|
if result.Error != nil {
|
2025-02-08 16:30:07 +08:00
|
|
|
|
return false
|
2025-01-23 16:12:49 +08:00
|
|
|
|
}
|
2025-02-08 16:30:07 +08:00
|
|
|
|
return true
|
2025-01-23 16:12:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-08 16:30:07 +08:00
|
|
|
|
// 添加新的severid到服务器列表
|
|
|
|
|
|
func AddUserSeverList(userSeverList *WxUserSeverList) (int64, error) {
|
|
|
|
|
|
|
|
|
|
|
|
//处理一些验证
|
|
|
|
|
|
|
|
|
|
|
|
// 写入到数据库
|
|
|
|
|
|
result := connection.GetUserDB().Create(&userSeverList) // 通过数据的指针来创建
|
2025-01-23 16:12:49 +08:00
|
|
|
|
if result.Error != nil {
|
2025-02-08 16:30:07 +08:00
|
|
|
|
logUtilPlus.ErrorLog("添加用户区服列表失败 错误信息:", result.Error.Error())
|
2025-01-23 16:12:49 +08:00
|
|
|
|
}
|
2025-02-08 16:30:07 +08:00
|
|
|
|
return userSeverList.ID, nil
|
2025-01-23 16:12:49 +08:00
|
|
|
|
}
|