function.go 2.92 KB
package logic

import (
	"HttpServer/redishandler"
	"common/redis"
	"encoding/json"
	"net/http"
	"strconv"
	"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,strconv.Itoa(data.Userid),string(savestr))

	return err
}

func GetUserInfo(uuid int) (*UserData,error) {

	data,err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY,strconv.Itoa(uuid))
	if err != nil {
		return nil,err
	}
	var tmp UserData
	err = json.Unmarshal([]byte(data),&tmp)
	if err != nil {
		return nil,err
	}

	return &tmp,nil
}

func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) error{

	var initdata UserData
	initdata.Lv = 1
	initdata.Exp = 0
	initdata.Userid = uuid
	initdata.ContinueLoginDay = 1
	initdata.GetFromGuanCnt = 0
	initdata.GuanGold = 0
	initdata.LastLoginTime = int(time.Now().Unix())
	initdata.RealGold = 0
	initdata.WatchAddsTime =WATCH_ADD_DAY_LIMIT

	resp.Data.Guangold = initdata.GuanGold
	resp.Data.Leftads = initdata.WatchAddsTime
	resp.Data.Walletgold = initdata.RealGold

	err := SaveUserInfo(&initdata)

	return err
}

//计算当日可提取次数
func (u *UserData) CalcTotalCnt() int {
	return 0
}

func (u *UserData) HandlePassDay() {
	isdiffday := false
	nowtime := time.Now()
	lasttime := time.Unix(int64(u.LastLoginTime), 0)
	nowdaynum := time.Now().Day()
	lastdaynum := time.Unix(int64(u.LastLoginTime), 0).Day()
	nowtimestamp := time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location())
	lasttimestamp := time.Date(lasttime.Year(), lasttime.Month(), lasttime.Day(), 0, 0, 0, 0, lasttime.Location())


	if nowdaynum == lastdaynum {
		//同一天
		if int64(u.LastLoginTime) - time.Now().Unix() > 86400 {
			//已经过了很多天了
			//u.LastLoginTime = int(time.Now().Unix())
			u.ContinueLoginDay = 1
			isdiffday = true
		}else {
			//t同一天 不做处理
		}
	}else {
		//不是同一天了
		isdiffday = true
		if nowtimestamp.Unix() > lasttimestamp.Unix() + 86399 {
			//超过一天了
			u.ContinueLoginDay = 1
		}else {
			u.ContinueLoginDay ++
		}
	}

	if isdiffday {
		//跨天了
		u.WatchAddsTime = WATCH_ADD_DAY_LIMIT
		//todo 重置任务相关的数据
		u.GetFromGuanCnt = 0
	}

	u.LastLoginTime = int(nowtime.Unix())

	SaveUserInfo(u)
}

func GetUserData(uuid int, resp *UserLoginResp) error{
	data,err := GetUserInfo(uuid)
	if err != nil || data == nil{
		resp.Code = ERROR_SRV_ERROR
		resp.Message = "ERROR_SRV_ERROR"
		return err
	}

	//此处要处理一下跨天逻辑
	data.HandlePassDay()

	resp.Data.Walletgold = data.RealGold
	resp.Data.Leftads = data.WatchAddsTime
	resp.Data.Guangold = data.GuanGold

	return nil
}