package controller import ( "fmt" "ktogame/models" "ktogame/util" "strings" "time" "github.com/astaxie/beego/logs" "github.com/shopspring/decimal" ) func (uc *UserController) Reinput() { user := uc.GetString("addr") var ui models.UserInfo ok, err := uc.engine.Id(user).Get(&ui) if err != nil { ErrResponse(uc.Controller, err) return } if !ok { ErrResponse(uc.Controller, "user not exist!") return } ///update availableReinput by left in db ///update totalReinput if ui.AvailableReinput < ModBase { ErrResponse(uc.Controller, "no available reinput balance") return } num := uint64(ui.AvailableReinput) / uint64(ModBase) reinputValue := float64(num * ModBase) logs.Info("check Reinput user:%v,num:%v available:%v,reinputValue=======%v", user, num, ui.AvailableReinput, reinputValue) ///update Recommendation Rewards ///update direct recommend rewards rewards := reinputValue * 10 / 100 if ui.Direct != "" { err := UpdateAvailableRewards(rewards, ui.Direct, false, false) if err != nil { logs.Error("check err=======", err) ErrResponse(uc.Controller, err) return } } ///update indirect recommend rewards if ui.Indirect != "" { err := UpdateAvailableRewards(rewards, ui.Indirect, false, false) if err != nil { logs.Error("check err=======", err) ErrResponse(uc.Controller, err) return } } err = UpdateRewardsPool(uc.engine, reinputValue) if err != nil { logs.Error("check err=======", err) ErrResponse(uc.Controller, err) return } err = UpdateSuperiorsPerformance(uc.engine, ui.Superiors, reinputValue) if err != nil { logs.Error("check err=======", err) ErrResponse(uc.Controller, err) return } ui.AvailableReinput -= reinputValue ui.TotalReinputed += reinputValue if ui.TotalReinputed >= CommunityLimit { ui.State = CommunityUsers } _, err = uc.engine.ID(user).Cols("available_reinput,total_reinputed,state").Update(&ui) if err != nil { logs.Error("check err=======", err) ErrResponse(uc.Controller, err) return } TxObjectResponse(uc.Controller, "ok") return } func (uc *UserController) GetClaimSignature() { addr := uc.GetString("addr") s := uc.GetString("sign") user := util.GetPri(s, addr[len(addr)-16:]) if strings.ToLower(user) != strings.ToLower(addr) { ErrResponse(uc.Controller, "无效地址") return } var ua models.UserInfo uc.engine.Id(user).Get(&ua) if ua.AvailableClaim == 0 { ErrResponse(uc.Controller, "暂无收益领取") return } // format := time.Now().AddDate(0, 0, 1).Format("2006-01-02") // te, _ := time.ParseInLocation("2006-01-02", format, time.Local) i_time := time.Now().Unix() + 3600*2 pow := decimal.NewFromFloat(float64(10)).Pow(decimal.NewFromFloat(float64(18))) amount := decimal.NewFromFloat(ua.AvailableClaim).Mul(pow).BigInt().String() out1 := util.Sign(amount, strings.ToLower(user[2:]), fmt.Sprint(i_time)) sign := out1 + "-" + amount + "-" + fmt.Sprint(i_time) code := util.EnPriCode(sign, addr[len(addr)-16:]) TxObjectResponse(uc.Controller, code) return } func (uc *UserController) SetClaimHash() { addr := uc.GetString("addr") hash := uc.GetString("hash") sign := uc.GetString("sign") var ua models.UserInfo ok, err := uc.engine.Id(addr).Get(&ua) if err != nil { ErrResponse(uc.Controller, err) return } if !ok { ErrResponse(uc.Controller, "user not exist!") return } if ua.AvailableClaim == 0 { ErrResponse(uc.Controller, "暂无收益领取") return } amount := ua.AvailableClaim ua.TotalClaimed += amount ua.AvailableClaim = 0 _, err = uc.engine.ID(addr).Cols("available_claim,total_claimed").Update(&ua) if err != nil { ErrResponse(uc.Controller, err) return } logs.Info("check SetClaimHash---------:", addr, hash, ua.AvailableClaim, ua.TotalClaimed, amount) claimTx := models.ClaimedTxs{Addr: addr, Amount: amount, Hash: hash, Signature: sign, State: 0, Droped: 0, CreateTime: util.NowTimeString()} _, err = uc.engine.Insert(&claimTx) if err != nil { ErrResponse(uc.Controller, err) return } TxObjectResponse(uc.Controller, "ok") return } func (uc *UserController) GetUserInfo() { user := uc.GetString("addr") var us models.UserInfo uc.engine.Id(user).Get(&us) TxObjectResponse(uc.Controller, us) return } func (uc *UserController) GetTeamList() { user := uc.GetString("addr") s, err := uc.GetInt("size") if err != nil { TxObjectResponse(uc.Controller, err) return } l, err := uc.GetInt("limit") if err != nil { TxObjectResponse(uc.Controller, err) return } var us models.UserInfo var teamList []models.UserInfo ok, err := uc.engine.Id(user).Get(&us) if err != nil { TxObjectResponse(uc.Controller, err) return } if !ok { TxObjectResponse(uc.Controller, us) return } c, err := uc.engine.Where("superiors like ?", "%,"+fmt.Sprint(us.Id)+"%").FindAndCount(&teamList) if err != nil { TxObjectResponse(uc.Controller, err) return } var addrList []string for _, u := range teamList { addrList = append(addrList, u.Addr) } res := models.Page{Limit: l, Size: s, Total: c, DataList: addrList} TxObjectResponse(uc.Controller, res) return } func (uc *UserController) GetPerformance() { user := uc.GetString("addr") var per models.Performance uc.engine.Id(user).Get(&per) TxObjectResponse(uc.Controller, per) return } func (uc *UserController) TotalUsers() { var us models.UserInfo c, err := uc.engine.Count(&us) if err != nil { ErrResponse(uc.Controller, err) return } us.Id = c TxObjectResponse(uc.Controller, us) return }