123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- 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
- }
|