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 ) 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 } // 区服相关 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 } func GetUserSeverInfo() (*WxUserSeverInfo, error) { var userSeverInfoRecord *WxUserSeverInfo result := connection.GetUserDB().Last(&userSeverInfoRecord) if result.Error != nil { return nil, result.Error } return userSeverInfoRecord, nil } func GetUserSeverInfoByIds(openId string, severId int32) (*WxUserSeverInfo, error) { var userSeverInfoRecord *WxUserSeverInfo result := connection.GetUserDB().Where("openId = ? AND severId = ?", openId, severId).First(&userSeverInfoRecord) if result.Error != nil { return nil, result.Error } return userSeverInfoRecord, nil }