package logic import ( "HttpServer/jsonconf" "HttpServer/redishandler" "common/logger" "common/redis" "encoding/json" "net/http" "time" ) func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域 w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") } func SaveUserInfo(data *UserData) error { savestr, err := json.Marshal(data) if err != nil { return err } err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, data.Openid, string(savestr)) return err } func GetUserInfo(openid string) (*UserData, error) { //先判断用户是否存在 不存在创建新的用户 isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, openid) if err != nil { logger.Error("redis failed err=%v", err) return nil, err } tmp := new(UserData) if !isexist { //不存在 //属于新登录的玩家数据 err = tmp.InitUserInfo(openid) } else { //已经登陆过了 需要获取玩家数据 data, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, openid) if err != nil { return nil, err } err = json.Unmarshal([]byte(data), tmp) if err != nil { return nil, err } } return tmp, nil } func (u *UserData) InitUserInfo(openid string) error { nowtime := time.Now() u.Openid = openid u.SignRound = 1 u.IsSign = 0 u.LastGetTime = 0 u.LeftCnt = DAILY_FETCH_CNT u.MaxLevel = 1 u.Property = 0 u.SingDay = 0 u.TodaySec = int(time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location()).Unix()) u.TotalFetchCnt = 0 //用于计算当前领取次数 err := SaveUserInfo(u) if err != nil { logger.Error("InitUserInfo err=%v", err) } return err } //计算当前领取宝箱需要的数值 func (u *UserData) CalcCurLe() int64 { cfg := jsonconf.GetGoldChestConfig(u.TotalFetchCnt + 1) if cfg == nil { logger.Error("CalcCurLe failed u=%v", u) return 0 } return cfg.Score } //计算速率 func (u *UserData) CalcSpeed() int64 { cfg := jsonconf.GetGoldGunsConfig(u.MaxLevel) if cfg == nil { logger.Error("CalcSpeed failed u=%v", u) return 0 } return cfg.Speed } //计算物资 func (u *UserData) CalcProperty() { nowtime := int(time.Now().Unix()) if nowtime < u.LastGetTime { logger.Error("CalcProperty err n=%v,l=%v", nowtime, u.LastGetTime) } else if nowtime >= u.LastGetTime+60*3 { //超过三次请求了 不再计算离线收益 } else { //计算一下离线收益 mult := nowtime - u.LastGetTime speed := u.CalcSpeed() u.Property += int64(mult) * speed } u.LastGetTime = nowtime //判断跨天 if nowtime < u.TodaySec { logger.Error("CalcProperty err2") nowtt := time.Now() u.TodaySec = int(time.Date(nowtt.Year(), nowtt.Month(), nowtt.Day(), 0, 0, 0, 0, nowtt.Location()).Unix()) } else { if nowtime > u.TodaySec+86400 { //跨天了 nowtt := time.Now() u.TodaySec = int(time.Date(nowtt.Year(), nowtt.Month(), nowtt.Day(), 0, 0, 0, 0, nowtt.Location()).Unix()) u.LeftCnt = DAILY_FETCH_CNT u.IsSign = 0 if u.SingDay == 7 { u.SingDay = 0 u.SignRound++ } } } //保存 err := SaveUserInfo(u) if err != nil { logger.Error("CalcProperty err=%v", err) } }