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  }