package logic import ( "HttpServer/jsonconf" "HttpServer/redishandler" "common/logger" "common/redis" "encoding/json" "fmt" "mysql" "net/http" "time" ) func HandlerGetStampTime(w http.ResponseWriter, data string) { SetHeader(w) var resp GetStampTimeResp resp.ErrNum = 0 resp.RetMsg = "success" for { resp.RetData.Stamp = int(time.Now().Unix()) break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerUpdatedata(w http.ResponseWriter, data string) { SetHeader(w) var resp UpdatedataResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata UpdatedataReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerUpdatedata data failed:%v,for:%v", err, data) resp.RetMsg = "json解析失败" resp.ErrNum = ERROR_UNMASH_JSONFAILED break } uinfo, err := GetUserInfo(rdata.Openid) if err != nil { logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) resp.RetMsg = "服务器读取数据失败" resp.ErrNum = ERROR_SERVER_FAILED break } uinfo.PlayerData = rdata.PlayerData err = SaveUserInfo(uinfo) if err != nil { logger.Error("HandlerUpdatedata failed err=%v", err) } break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerUserlogin(w http.ResponseWriter, data string) { SetHeader(w) var resp UserloginResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata UserloginReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) resp.RetMsg = "json解析失败" resp.ErrNum = ERROR_UNMASH_JSONFAILED break } //先判断是否存在 isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, rdata.Openid) if err != nil { logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) resp.RetMsg = "json解析失败" resp.ErrNum = ERROR_UNMASH_JSONFAILED break } if !isexist { //不存在 新号 err, Openid, LastGetTime, LeftCnt, MaxLevel, Property, TotalFetchCnt, SignRound, SingDay, IsSign, TodaySec, PassLvGold, PlayerData, RegTime, isfind := mysql.GetFromBackUp(rdata.Openid) if err != nil { logger.Error("mysql failed err=%v", err) } if isfind { var tmp UserData tmp.Openid = Openid tmp.LastGetTime = LastGetTime tmp.LeftCnt = LeftCnt tmp.MaxLevel = MaxLevel tmp.Property = Property tmp.TotalFetchCnt = TotalFetchCnt tmp.SignRound = SignRound tmp.SingDay = SingDay tmp.IsSign = IsSign tmp.TodaySec = TodaySec tmp.PassLvGold = PassLvGold tmp.PlayerData = PlayerData tmp.RegTime = RegTime err = SaveUserInfoByMysql(tmp) if err != nil { logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) resp.RetMsg = "服务器读取数据失败" resp.ErrNum = ERROR_SERVER_FAILED break } resp.RetData.IsNew = 1 resp.RetData.PlayerData = tmp.PlayerData resp.RetData.Id = rdata.Openid resp.RetData.RegisterTime = tmp.RegTime resp.RetData.Curday = tmp.SingDay resp.RetData.Curround = tmp.SignRound resp.RetData.Issigntaday = tmp.IsSign } else { tmp := new(UserData) err = tmp.InitUserInfo(rdata.Openid) if err != nil { logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) resp.RetMsg = "服务器读取数据失败" resp.ErrNum = ERROR_SERVER_FAILED break } resp.RetData.IsNew = 1 resp.RetData.PlayerData = tmp.PlayerData resp.RetData.Id = rdata.Openid resp.RetData.RegisterTime = tmp.RegTime resp.RetData.Curday = tmp.SingDay resp.RetData.Curround = tmp.SignRound resp.RetData.Issigntaday = tmp.IsSign } break } uinfo, err := GetUserInfo(rdata.Openid) if err != nil { logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) resp.RetMsg = "服务器读取数据失败" resp.ErrNum = ERROR_SERVER_FAILED break } resp.RetData.RegisterTime = uinfo.RegTime resp.RetData.IsNew = 0 resp.RetData.Id = rdata.Openid resp.RetData.PlayerData = uinfo.PlayerData resp.RetData.Curday = uinfo.SingDay resp.RetData.Curround = uinfo.SignRound resp.RetData.Issigntaday = uinfo.IsSign break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerGetopenid(w http.ResponseWriter, data string) { SetHeader(w) var resp GetopenidResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata GetopenidReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) resp.RetMsg = "json解析失败" resp.ErrNum = ERROR_UNMASH_JSONFAILED break } openid, err := GetOpenid(rdata.Code) if err != nil { logger.Info(" HandlerGetopenid AddCoinToTouTiao failed:%v,for:%v", err, data) resp.RetMsg = "调用头条接口失败" resp.ErrNum = ERROR_TOUTIAOAPI_FAILED break } resp.RetData.Openid = openid break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerDosign(w http.ResponseWriter, data string) { SetHeader(w) var resp DosignResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata DosignReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerDosign 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(" HandlerDosign getdata failed:%v,for:%v", err, data) resp.RetMsg = "服务器读取数据失败" resp.ErrNum = ERROR_SERVER_FAILED break } if uinfo.IsSign == 1 { logger.Info(" HandlerDosign issign failed:%v,for:%v", err, data) resp.RetMsg = "当天已签到" resp.ErrNum = ERROR_ALREADY_SIGNED break } uinfo.IsSign = 1 uinfo.SingDay++ if uinfo.SingDay > 7 { uinfo.SingDay = 1 uinfo.SignRound++ } logger.Info("HandlerDosign fin uinfo=%v", uinfo) SaveUserInfo(uinfo) //加金币 cfg := jsonconf.GetSignConfig(uinfo.SingDay) if cfg == nil { logger.Info(" HandlerDosign issign failed:%v,for:%v", err, data) resp.RetMsg = "读取配置错误" resp.ErrNum = ERROR_READCFG_FAILED break } //加金币 _, sumgold, err := AddCoinToTouTiao(rdata.Openid, 1, cfg.Reward, "签到奖励", "other") if err != nil { logger.Info(" HandlerAddgold AddCoinToTouTiao failed:%v,for:%v", err, data) resp.RetMsg = "调用头条接口失败" resp.ErrNum = ERROR_TOUTIAOAPI_FAILED break } resp.RetData.Issigntaday = uinfo.IsSign resp.RetData.Curround = uinfo.SignRound resp.RetData.Curday = uinfo.SingDay resp.RetData.Taoalgoldnum = sumgold break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerQuersigndata(w http.ResponseWriter, data string) { SetHeader(w) var resp QuersigndataResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata QuersigndataReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerQuersigndata 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(" HandlerQuersigndata getdata failed:%v,for:%v", err, data) resp.RetMsg = "服务器读取数据失败" resp.ErrNum = ERROR_SERVER_FAILED break } resp.RetData.Curday = uinfo.SingDay resp.RetData.Curround = uinfo.SignRound resp.RetData.Issigntaday = uinfo.IsSign break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerAddgold(w http.ResponseWriter, data string) { SetHeader(w) var resp AddgoldResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata AddgoldReq //过关金币值改为10 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 } //rdata.Gold_num = 5 * 2 if rdata.Gold_Type != 100 { rdata.Gold_num = 5 } 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 && rdata.Gold_Type != 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, 1, 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 resp.RetData.Rewardgold = rdata.Gold_num //保存 err = SaveUserInfo(uinfo) if err != nil { logger.Error("HandlerFetchproterybox err=%v", err) } break } //回包 logger.Info("HandlerAddgold resp=%v", resp) 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 } //currkey := "leftcnt_" + DateNowStr() //newleftcnt := GetConcurrency(currkey, rdata.Openid) //if newleftcnt < 1 { // logger.Info(" HandlerFetchproterybox GetConcurrency LeftCnt failed:%v,for:%v", err, data) // resp.RetMsg = "当天领取已达上限" // resp.ErrNum = ERROR_FETCHLIMIT // break //} //判断当前剩余次数 if uinfo.LeftCnt == 0 { logger.Info(" HandlerFetchproterybox LeftCnt failed:%v,for:%v", err, data) resp.RetMsg = "当天领取已达上限" resp.ErrNum = ERROR_FETCHLIMIT break } uinfo.CalcProperty() //判断物资是否足够 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 } if cfg.Reward > 0 { cfg.Reward = int(cfg.Reward / 2) } //加金币 addgold, sumgold, err := AddCoinToTouTiao(rdata.Openid, 1, 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 //resp.RetData.Leftcnt = Decrcurrency(currkey, rdata.Openid) resp.RetData.Curpoerty = uinfo.Property //保存 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, 1) if err != nil { logger.Error("HandlerGetcurproperty err=%v", err) } resp.RetData.Curgold = newgold break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerGetGrowthRightFun(w http.ResponseWriter, data string) { SetHeader(w) var resp GetGrowthRightResp resp.ErrNum = 0 resp.RetMsg = "success" var rdata GetGrowthRightReq 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 } ret, err := GetGrowthRight(rdata.Openid, "2329", rdata.Device_id, TOUTIAOAPPID, "e4e4c67e678accbb2a898daa146d24495fdccb69") if err != nil { logger.Info("json decode HandlerGetcurproperty data failed:%v,for:%v", err, data) resp.RetMsg = "服务器错误" resp.ErrNum = ERROR_SERVER_FAILED break } if ret.StatusCode != 0 { resp.RetMsg = ret.Message resp.ErrNum = ret.StatusCode break } resp.RetData = ret.Data break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) }