logic.go 5.85 KB
package logic

import (
	"HttpServer/jsonconf"
	"common/logger"
	"encoding/json"
	"fmt"
	"net/http"
)

func HandlerAddgold(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp AddgoldResp
	resp.ErrNum = 0
	var rdata AddgoldReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Info("json decode HandlerAddgold data failed:%v,for:%v", err, data)
			resp.RetMsg = "json解析失败"
			resp.ErrNum = ERROR_UNMASH_JSONFAILED
			break
		}

		uinfo, err := GetUserInfo(rdata.Openid)
		if err != nil || uinfo == nil {
			logger.Info(" HandlerAddgold getdata failed:%v,for:%v", err, data)
			resp.RetMsg = "服务器读取数据失败"
			resp.ErrNum = ERROR_SERVER_FAILED
			break
		}

		if uinfo.PassLvGold >= 100 {
			logger.Info(" HandlerAddgold PassLvGold failed:%v,for:%v", err, data)
			resp.RetMsg = "当日合成获得金币已达上限"
			resp.ErrNum = ERROR_GOLD_LIMIT
			break
		}

		addnum, sumnum, err := AddCoinToTouTiao(rdata.Openid, rdata.Device_id, rdata.Gold_num, "闯关送金币", "other")
		if err != nil {
			logger.Info(" HandlerAddgold property failed:%v,for:%v", err, data)
			resp.RetMsg = "调用头条接口失败"
			resp.ErrNum = ERROR_TOUTIAOAPI_FAILED
			break
		}

		uinfo.PassLvGold += addnum
		resp.RetData.Taoalgoldnum = sumnum
		//保存
		err = SaveUserInfo(uinfo)
		if err != nil {
			logger.Error("HandlerFetchproterybox err=%v", err)
		}

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

func HandlerUploadgunlv(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp UploadgunlvResp
	resp.ErrNum = 0
	resp.RetMsg = "success"
	var rdata UploadgunlvReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Info("json decode HandlerUploadgunlv data failed:%v,for:%v", err, data)
			resp.RetMsg = "json解析失败"
			resp.ErrNum = ERROR_UNMASH_JSONFAILED
			break
		}

		uinfo, err := GetUserInfo(rdata.Openid)
		if err != nil || uinfo == nil {
			logger.Info(" HandlerFetchproterybox getdata failed:%v,for:%v", err, data)
			resp.RetMsg = "服务器读取数据失败"
			resp.ErrNum = ERROR_SERVER_FAILED
			break
		}

		if rdata.Maxlevel < uinfo.MaxLevel {
			logger.Info(" HandlerFetchproterybox MaxLevel failed:%v,for:%v", err, data)
			resp.RetMsg = "等级参数不正确"
			resp.ErrNum = ERROR_PARAM_INVALID
			break
		}

		uinfo.MaxLevel = rdata.Maxlevel

		resp.RetData.Speed = uinfo.CalcSpeed()

		//保存
		err = SaveUserInfo(uinfo)
		if err != nil {
			logger.Error("HandlerFetchproterybox err=%v", err)
		}

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

func HandlerFetchproterybox(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp FetchproteryboxResp
	resp.ErrNum = 0
	resp.RetMsg = "success"
	var rdata FetchproteryboxReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Info("json decode HandlerFetchproterybox data failed:%v,for:%v", err, data)
			resp.RetMsg = "json解析失败"
			resp.ErrNum = ERROR_UNMASH_JSONFAILED
			break
		}

		uinfo, err := GetUserInfo(rdata.Openid)
		if err != nil || uinfo == nil {
			logger.Info(" HandlerFetchproterybox getdata failed:%v,for:%v", err, data)
			resp.RetMsg = "服务器读取数据失败"
			resp.ErrNum = ERROR_SERVER_FAILED
			break
		}

		//判断当前剩余次数
		if uinfo.LeftCnt == 0 {
			logger.Info(" HandlerFetchproterybox LeftCnt failed:%v,for:%v", err, data)
			resp.RetMsg = "当天领取已达上限"
			resp.ErrNum = ERROR_FETCHLIMIT
			break
		}

		//判断物资是否足够
		cfg := jsonconf.GetGoldChestConfig(uinfo.TotalFetchCnt + 1)
		if cfg == nil {
			logger.Info(" HandlerFetchproterybox cfg failed:%v,for:%v", err, data)
			resp.RetMsg = "读取配置错误"
			resp.ErrNum = ERROR_READCFG_FAILED
			break
		}
		if uinfo.Property < cfg.Score {
			logger.Info(" HandlerFetchproterybox property failed:%v,for:%v", err, data)
			resp.RetMsg = "当前物资不足"
			resp.ErrNum = ERROR_PROPERTY_NOTENOUGH
			break
		}

		//加金币
		addgold, sumgold, err := AddCoinToTouTiao(rdata.Openid, rdata.Device_id, cfg.Reward, "每日领取宝箱奖励", "other")
		if err != nil {
			logger.Info(" HandlerFetchproterybox property failed:%v,for:%v", err, data)
			resp.RetMsg = "调用头条接口失败"
			resp.ErrNum = ERROR_TOUTIAOAPI_FAILED
			break
		}

		uinfo.TotalFetchCnt++
		uinfo.Property -= cfg.Score
		uinfo.LeftCnt--

		resp.RetData.Goldnum = addgold
		resp.RetData.Sumgold = sumgold
		resp.RetData.Curlevle = uinfo.CalcCurLe()
		resp.RetData.Leftcnt = uinfo.LeftCnt

		//保存
		err = SaveUserInfo(uinfo)
		if err != nil {
			logger.Error("HandlerFetchproterybox err=%v", err)
		}

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

func HandlerGetcurproperty(w http.ResponseWriter, data string) {
	SetHeader(w)
	var resp GetcurpropertyResp
	resp.ErrNum = 0
	resp.RetMsg = "success"
	var rdata GetcurpropertyReq
	err := json.Unmarshal([]byte(data), &rdata)
	for {
		if err != nil {
			logger.Info("json decode HandlerGetcurproperty data failed:%v,for:%v", err, data)
			resp.RetMsg = "json解析失败"
			resp.ErrNum = ERROR_UNMASH_JSONFAILED
			break
		}

		uinfo, err := GetUserInfo(rdata.Openid)
		if err != nil || uinfo == nil {
			logger.Info(" HandlerGetcurproperty getdata failed:%v,for:%v", err, data)
			resp.RetMsg = "服务器读取数据失败"
			resp.ErrNum = ERROR_SERVER_FAILED
			break
		}

		//需要处理一下物资计算
		uinfo.CalcProperty()

		//返回
		resp.RetData.Leftcnt = uinfo.LeftCnt
		resp.RetData.Curlevle = uinfo.CalcCurLe()
		resp.RetData.Protery = uinfo.Property
		resp.RetData.Speed = uinfo.CalcSpeed()
		newgold, err := GetCoinFromToutiao(rdata.Openid, rdata.Device_id)
		if err != nil {
			logger.Error("HandlerGetcurproperty err=%v", err)
		}
		resp.RetData.Curgold = newgold

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