package controller import ( "errors" "fmt" "ktogame/models" "ktogame/util" "strings" "time" "github.com/astaxie/beego/logs" "github.com/shopspring/decimal" ) func (uc *UserController) Reinput() { sesion := uc.engine.NewSession() var Error error defer func() { if Error != nil { sesion.Rollback() ErrResponse(uc.Controller, Error) } else { sesion.Commit() } }() user := uc.GetString("addr") var ui models.UserInfo ok, Error := uc.engine.Id(user).Get(&ui) if Error != nil { return } if !ok { Error = errors.New("user not exist") return } ///update availableReinput by left in db ///update totalReinput if ui.AvailableReinput < ModBase { Error = errors.New("no available reinput balance") return } num := uint64(ui.AvailableReinput) / uint64(ModBase) reinputValue := float64(num * ModBase) //test //reinputValue := ui.AvailableReinput //test end logs.Info("check Reinput user:%v,num:%v available:%v,reinputValue=======%v", user, ui.AvailableReinput, reinputValue) ///update Recommendation Rewards ///update direct recommend rewards rewards := reinputValue * 10 / 100 if ui.Direct != "" { Error = UpdateAvailableRewards(sesion, rewards, ui.Direct, false, false) if Error != nil { return } } ///update indirect recommend rewards if ui.Indirect != "" { Error = UpdateAvailableRewards(sesion, rewards, ui.Indirect, false, false) if Error != nil { return } } Error = UpdateRewardsPool(sesion, reinputValue) if Error != nil { return } Error = UpdateSuperiorsPerformance(sesion, ui.Superiors, reinputValue) if Error != nil { return } ui.AvailableReinput -= reinputValue ui.TotalReinputed += reinputValue if ui.TotalReinputed >= CommunityLimit { ui.State = CommunityUsers } _, Error = uc.engine.ID(user).Cols("available_reinput,total_reinputed,state").Update(&ui) if Error != nil { 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 } 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") sesion := uc.engine.NewSession() var Error error defer func() { if Error != nil { sesion.Rollback() ErrResponse(uc.Controller, Error) return } sesion.Commit() }() var ua models.UserInfo ok, Error := uc.engine.Id(addr).Get(&ua) if Error != nil { return } if !ok { Error = errors.New("user not exist") return } if ua.AvailableClaim == 0 { Error = errors.New("user no available rewards to claim") return } amount := ua.AvailableClaim ua.TotalClaimed += amount ua.AvailableClaim = 0 _, Error = sesion.ID(addr).Cols("available_claim,total_claimed").Update(&ua) if Error != nil { 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()} _, Error = sesion.Insert(&claimTx) if Error != nil { 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 - 1 TxObjectResponse(uc.Controller, us) return }