function.go 5.73 KB
package logic

import (
	"HttpServer/jsonconf"
	"HttpServer/redishandler"
	"common/logger"
	"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

	for _,val := range jsonconf.GetJsonConf().WithDrawConfig {
		var tmp WithDrawDesc
		tmp.Cid = val.Id
		tmp.Cnum = val.Money
		if val.Isnew == 1 {
			tmp.Isnew = 1
		}else {
			tmp.Isnew = 2
		}
		tmp.Limitlv = val.Level
		if val.Id == 1 {
			tmp.Preisfind = 1
		}else {
			tmp.Preisfind = 0
		}
		initdata.WithDraw.Cashdata = append(initdata.WithDraw.Cashdata,tmp)
	}

	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 {
	maxtime := 0
	usertime := 0
	for _,val := range jsonconf.GetJsonConf().MoneyBoxTimeConfig {
		if maxtime < val.Times {
			maxtime = val.Times
		}
		if val.Login == u.ContinueLoginDay {
			usertime = val.Times
		}
	}

	if usertime == 0 {
		usertime = maxtime
	}
	return usertime
}

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.Task.GetGuanGold = 0
		u.Task.GetRedbagCnt = 0
		u.Task.OnlineMin = 0
		u.Task.PassLevel = 0
		u.Task.UseItemCnt = 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()

	//此处处理一下从sdk拉取钱包金币数量
	//todo

	SaveUserInfo(data)

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

	return nil
}

//获取提现记录
func GetWithDrawList(uuid int) (*WithDrawList,error) {
	var list *WithDrawList
	list = new(WithDrawList)
	liststr,err := redishandler.GetRedisClient().HGet(redis.USER_WITHDRAW_RECORDLIST,strconv.Itoa(uuid))
	if err != nil {
		return nil,err
	}
	err = json.Unmarshal([]byte(liststr),list)
	if err != nil {
		return nil,err
	}
	return list,nil
}

func (uinfo *UserData)GetWithDrawData(money float32) (int,*WithDrawDesc){
	//处理提现状态
	for k,val := range uinfo.WithDraw.Cashdata {
		if val.Cnum == money{
			return k,&val
		}
	}
	return -1,nil
}

//添加提现记录
func AddWithDrawList(uuid int,data *WithDrawRecord) error {
	exist,err := redishandler.GetRedisClient().HExists(redis.USER_WITHDRAW_RECORDLIST,strconv.Itoa(uuid))
	if err != nil {
		return err
	}
	if !exist {
		//添加新的记录
		var tmp WithDrawList
		tmp.Withdata = append(tmp.Withdata,*data)

		savestr,err := json.Marshal(&tmp)
		if err != nil {
			return err
		}
		err =  redishandler.GetRedisClient().HSet(redis.USER_WITHDRAW_RECORDLIST,strconv.Itoa(uuid),string(savestr))
		return err
	}

	/*liststr,err := redishandler.GetRedisClient().HGet(redis.USER_WITHDRAW_RECORDLIST,strconv.Itoa(uuid))
	if err != nil {
		return err
	}

	var list WithDrawList
	err = json.Unmarshal([]byte(liststr),&list)
	if err != nil {
		return err
	}*/

	list,err := GetWithDrawList(uuid)
	if err != nil || list == nil{
		logger.Error("AddWithDrawList err=%v",err)
		return err
	}
	list.Withdata = append(list.Withdata,*data)
	savestr,err := json.Marshal(list)
	if err != nil {
		return err
	}
	err =  redishandler.GetRedisClient().HSet(redis.USER_WITHDRAW_RECORDLIST,strconv.Itoa(uuid),string(savestr))
	return err



}

func AddCoinToSdk(uuid int,goldnum int,gameid string,channel string,atype int) (int,error) {
	//暂时先不对接 接口调通遗憾对接后台
	return 0,nil
}

func GetCashFromSDK(uuid int,goldnum int,gameid ,channel,openid,nickname,headurl string) (int,error) {
	//先不接
	return 0,nil
}