github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/userdata.go (about) 1 package internal 2 3 import ( 4 "conf" 5 "fmt" 6 "msg" 7 "net/url" 8 "strings" 9 "time" 10 11 "gopkg.in/mgo.v2/bson" 12 13 "github.com/name5566/leaf/log" 14 "github.com/name5566/leaf/util" 15 ) 16 17 type UserData struct { 18 UserID int `bson:"_id"` 19 AccountID int 20 Nickname string 21 Headimgurl string 22 Sex int // 1 男性,2 女性 23 UnionID string 24 CircleID int // 圈圈ID 25 Serial string 26 Model string 27 LoginIP string 28 Token string 29 ExpireAt int64 // token 过期时间 30 Role int // 1 玩家、2 代理、3 管理员、4 超管 31 Username string 32 Password string 33 Chips int64 // 筹码 34 Wins int // 胜场 35 FreeChangedAt int64 // 免费重置时间 36 SubsidizedAt int64 // 补助时间 37 CreatedAt int64 38 UpdatedAt int64 39 ParentId int64 40 CardCode string //取牌码 41 Taken bool //是否领取 42 CollectDeadLine int64 //取牌码的过期时间 43 PlayTimes int //当天对局次数 44 Level int //用户等级(初,中,高,完成10个任务自动升级) 45 Online bool //玩家是否在线 46 Channel int //渠道号。0:圈圈 1:搜狗 2:IOS 47 48 SubsidyDeadLine int64 //救济过期时间 49 SubsidyTimes int //救济次数 50 51 SignTimes int 52 DailySign bool 53 DailySignDeadLine int64 54 } 55 56 const defaultAvatar = "https://www.shenzhouxing.com/czddz/dl/img/logo.jpg" 57 58 func (data *UserData) initValue(channel int) error { 59 userID, err := mongoDBNextSeq("users") 60 if err != nil { 61 return fmt.Errorf("get next users id error: %v", err) 62 } 63 data.UserID = userID 64 data.Role = rolePlayer 65 // data.AccountID = common.GetID(4) + strconv.Itoa(data.UserID) 66 data.AccountID = getAccountID() 67 data.CreatedAt = time.Now().Unix() 68 data.Channel = channel 69 return nil 70 } 71 72 func saveUserData(userdata *UserData) { 73 data := util.DeepClone(userdata) 74 skeleton.Go(func() { 75 db := mongoDB.Ref() 76 defer mongoDB.UnRef(db) 77 id := data.(*UserData).UserID 78 _, err := db.DB(DB).C("users").UpsertId(id, data) 79 if err != nil { 80 log.Error("save user %v data error: %v", id, err) 81 } 82 }, nil) 83 } 84 85 func updateUserData(id int, update interface{}) { 86 skeleton.Go(func() { 87 db := mongoDB.Ref() 88 defer mongoDB.UnRef(db) 89 _, err := db.DB(DB).C("users").UpsertId(id, update) 90 if err != nil { 91 log.Error("update user %v data error: %v", id, err) 92 } 93 }, nil) 94 } 95 96 func (data *UserData) updateWeChatInfo(info *msg.C2S_WeChatLogin) { 97 if data.UnionID == "" { 98 //表示新用户 99 data.UnionID = info.UnionID 100 switch data.UnionID { 101 case "o8c-nt6tO8aIBNPoxvXOQTVJUxY0": 102 data.Role = roleRoot 103 // data.Chips = 99999999 104 default: 105 data.Role = rolePlayer 106 data.Chips = int64(conf.Server.FirstLogin) 107 } 108 } 109 if info.Nickname != "" { 110 data.Nickname = info.Nickname 111 } 112 113 surl, err := url.Parse(info.Headimgurl) 114 if err == nil { 115 if surl.Scheme == "" { 116 if data.Headimgurl == "" { 117 data.Headimgurl = defaultAvatar 118 } 119 } else { 120 if strings.HasSuffix(info.Headimgurl, "/0") { 121 data.Headimgurl = info.Headimgurl[:len(info.Headimgurl)-1] + "132" 122 } else { 123 data.Headimgurl = info.Headimgurl 124 } 125 } 126 } else { 127 if data.Headimgurl == "" { 128 data.Headimgurl = defaultAvatar 129 } 130 } 131 if info.Sex == 1 { 132 data.Sex = info.Sex 133 } else { 134 data.Sex = 2 135 } 136 data.Serial = info.Serial 137 data.Model = info.Model 138 139 data.UpdatedAt = time.Now().Unix() 140 } 141 func (data *UserData) readByAccountID(accountid int64) error { 142 db := mongoDB.Ref() 143 defer mongoDB.UnRef(db) 144 return db.DB(DB).C("users").Find(bson.M{"accountid": accountid}).One(data) 145 }