logic.go 6.51 KB
package logic

import (

	"common/beegomap"
	"common/logger"

	"encoding/json"
	"fmt"
	"net/http"

	"time"
)

var (
	m_userInfo *beegomap.BeeMap //make(map[int32]*UserData
)

func init() {
	m_userInfo = beegomap.NewBeeMap()
}



func InitTourist(req *UserLoginReq,resp *UserLoginResp) {
	//首先生成user_base_data
	var basedata UserBaseData
	basedata.User_id = GetNewUUid()
	basedata.User_avatar_url = ""
	basedata.User_city = "天堂"
	basedata.User_gender = 1
	basedata.User_nickname = "游客" + string(basedata.User_id)
	basedata.User_openid = ""
	basedata.User_token = req.Token
	resp.Result.Data.Dasedata = basedata
	//保存base data
	basic, _ := json.Marshal(&basedata)
	SaveUserBasic(basedata.User_id,string(basic))

	SetTouristUid(req.Token,basedata.User_id)
	//然后生成user_ext_data
	var extdata UserExtData
	extdata.User_id = basedata.User_id
	extdata.Lv = 1
	extdata.Bean = 0
	extdata.Coin = 0
	extdata.Exp = 0
	extdata.Hot = 0
	extdata.Invite_uid = req.User_invite_uid
	extdata.LoveExp = 0
	extdata.Reg_time = int(time.Now().Unix())
	extdata.ShopNum = 0
	extdata.User_channel = req.Channel_id
	extdata.User_is_black = 0
	extdata.User_reg_time = int(time.Now().Unix())
	extdata.User_scene = req.Scene
	resp.Result.Data.Extdata = extdata
	//保存
	udata :=new(UserData)
	udata.Scene = extdata.User_scene
	udata.Hot = extdata.Hot
	udata.Exp = extdata.Exp
	udata.Coin = extdata.Coin
	udata.Bean = extdata.Bean
	udata.Lv = extdata.Lv
	udata.Channel = extdata.User_channel
	udata.InviteUid = extdata.Invite_uid
	udata.Isblack = extdata.User_is_black
	udata.Loevexp = extdata.LoveExp
	udata.Regtime = extdata.Reg_time
	udata.Shopnum = extdata.ShopNum
	udata.Userid = extdata.User_id
	udata.UserInviteId = extdata.User_invite_uid
	udata.Userregtime = extdata.User_reg_time

	SaveUserExt(udata)

}

//处理游客登录
func HandleTouristLogin(w http.ResponseWriter, req *UserLoginReq,resp *UserLoginResp) {

	logger.Info("HandleTouristLogin req=%v,resp=%v",req,resp)
	for {
		//首先判断是否存在这个游客账号
		uuid,err := GetTouristUid(req.Token)
		if err != nil {
			//新账号 初始化
			InitTourist(req,resp)
		}else {
			//读取数据
			basic,err := GetUserBasic(uuid)
			if err != nil {
				logger.Error("HandleTouristLogin getbasic failed=%v", err)
				resp.Result.Code = ERROR_GETUSERBASICFAILED
				break
			}
			resp.Result.Data.Dasedata = *basic

			ext,err := GetUserExt(uuid)
			if err != nil {
				logger.Error("HandleTouristLogin getext failed=%v", err)
				resp.Result.Code = ERROR_GETUSEREXTFAILED
				break
			}
			resp.Result.Data.Extdata = *ext

			m_userInfo.Set(uint32(ext.User_id),ext)
		}

		resp.Result.Code = ERROR_OK
		break
	}
	//回包
	respstr, _ := json.Marshal(&resp)
	fmt.Fprint(w, string(respstr))
}

func HandleUserLogin(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp UserLoginResp
	resp.Status = "true"
	resp.Result.Code = ERROR_OK
	var rdata UserLoginReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Error("HandleUserLogin json unmarshal failed=%v", err)
			resp.Result.Code = ERROR_JSONUNMASHFAILED
			break
		}

		if rdata.Logintype ==LOGIN_TYPE_TOURIST {
			//游客登录
			HandleTouristLogin(w,&rdata,&resp)
			break
		}

		if rdata.Logintype == LOGIN_TYPE_ACCOUNT {
			//账号密码登录

			break
		}

		if rdata.Logintype == LOGIN_TYPE_WECHAT {
			//微信登录

			break
		}


	}

	//回包
	//respstr, _ := json.Marshal(&resp)
	//fmt.Fprint(w, string(respstr))
}

func HandleSaveUserData(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp SaveUserDataResp
	resp.Status = "true"
	resp.Result.Code = ERROR_OK
	var rdata SaveUserDataReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Error("HandleSaveUserData json unmarshal failed=%v", err)
			resp.Result.Code = ERROR_JSONUNMASHFAILED
			break
		}

		uuid,err := GetTouristUid(rdata.Token)
		if err != nil || uuid==0{
			logger.Error("HandleSaveUserData json unmarshal failed=%v", err)
			resp.Result.Code = ERROR_GETUSERIDFAILED
			break
		}

		vv := m_userInfo.Get(uint32(uuid))
		if vv == nil {
			logger.Error("HandleSaveUserData  failed=%v", err)
			resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED
			break
		}

		uinfo := vv.(*UserData)
		uinfo.Coin = rdata.Coin
		uinfo.Loevexp = rdata.Loveexp
		uinfo.Hot = rdata.Hot
		uinfo.Bean = rdata.Bean
		uinfo.Shopnum = rdata.Shopnum
		SaveUserExt(uinfo)

		basic,err := GetUserBasic(uuid)
		if err != nil {
			logger.Error("HandleTouristLogin getbasic failed=%v", err)
			resp.Result.Code = ERROR_GETUSERBASICFAILED
			break
		}
		resp.Result.Data.Dasedata = *basic

		ext,err := GetUserExt(uuid)
		if err != nil {
			logger.Error("HandleTouristLogin getext failed=%v", err)
			resp.Result.Code = ERROR_GETUSEREXTFAILED
			break
		}
		resp.Result.Data.Extdata = *ext

		resp.Result.Code = ERROR_OK
		break
	}

	//回包
	respstr, _ := json.Marshal(&resp)
	fmt.Fprint(w, string(respstr))
}

func HandlesaveData(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp SaveDataResp
	resp.Status = "true"
	resp.Result.Code = ERROR_OK
	var rdata SaveDataReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Error("HandlesaveData json unmarshal failed=%v", err)
			resp.Result.Code = ERROR_JSONUNMASHFAILED
			break
		}

		uuid,err := GetTouristUid(rdata.Token)
		if err != nil || uuid==0{
			logger.Error("HandlesaveData GetTouristUid failed=%v", err)
			resp.Result.Code = ERROR_GETUSERIDFAILED
			break
		}


		err = SaveUserBaseData(uuid,rdata.Value)

		if err != nil {
			logger.Error("HandlesaveData save failed=%v", err)
			resp.Result.Code = ERROR_SRVDB_FAILED
			break
		}

		resp.Result.Code = ERROR_OK
		break
	}

	//回包
	respstr, _ := json.Marshal(&resp)
	fmt.Fprint(w, string(respstr))
}

func HandlegetData(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp SaveDataResp
	resp.Status = "true"
	resp.Result.Code = ERROR_OK
	var rdata SaveDataReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Error("HandlegetData json unmarshal failed=%v", err)
			resp.Result.Code = ERROR_JSONUNMASHFAILED
			break
		}

		uuid,err := GetTouristUid(rdata.Token)
		if err != nil || uuid==0{
			logger.Error("HandlegetData GetTouristUid failed=%v", err)
			resp.Result.Code = ERROR_GETUSERIDFAILED
			break
		}


		ubase,err := GetUserBaseData(uuid)

		if err != nil {
			logger.Error("HandlegetData get failed=%v", err)
			resp.Result.Code = ERROR_SRVDB_FAILED
			break
		}

		resp.Result.Data = ubase
		resp.Result.Code = ERROR_OK
		break
	}

	//回包
	respstr, _ := json.Marshal(&resp)
	fmt.Fprint(w, string(respstr))
}