controller.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package controller
  2. import (
  3. "fmt"
  4. "ktogame/models"
  5. "ktogame/util"
  6. "strings"
  7. "time"
  8. "github.com/shopspring/decimal"
  9. )
  10. func (uc *UserController) Reinput(user string) {
  11. var ui models.UserInfo
  12. ok, err := uc.engine.Id(user).Get(&ui)
  13. if err != nil {
  14. ErrResponse(uc.Controller, err)
  15. return
  16. }
  17. if !ok {
  18. ErrResponse(uc.Controller, "db get failed!")
  19. return
  20. }
  21. if ui.AvailableReinput < ModBase*Decimals {
  22. ErrResponse(uc.Controller, "no available reinput balance")
  23. return
  24. }
  25. ///update availableReinput by left in db
  26. ///update totalReinput
  27. left := uint64(ui.AvailableReinput) % (ModBase * Decimals)
  28. reinputValue := ui.AvailableReinput - float64(left)
  29. ui.AvailableReinput = float64(left)
  30. ui.TotalReinputed += reinputValue
  31. if ui.TotalReinputed >= CommunityLimit*Decimals {
  32. ui.State = CommunityUsers
  33. }
  34. _, err = uc.engine.ID(user).Cols("available_reinput").Update(&ui)
  35. if err != nil {
  36. ErrResponse(uc.Controller, err)
  37. return
  38. }
  39. _, err = uc.engine.ID(user).Cols("total_reinput").Update(&ui)
  40. if err != nil {
  41. ErrResponse(uc.Controller, err)
  42. return
  43. }
  44. ///update Recommendation Rewards
  45. ///update direct recommend rewards
  46. rewards := reinputValue * 10 / 100
  47. if ui.Direct != "" {
  48. err := UpdateAvailableRewards(uc.engine, rewards, ui.Direct, false, false)
  49. if err != nil {
  50. ErrResponse(uc.Controller, err)
  51. return
  52. }
  53. }
  54. ///update indirect recommend rewards
  55. if ui.Indirect != "" {
  56. err := UpdateAvailableRewards(uc.engine, rewards, ui.Indirect, false, false)
  57. if err != nil {
  58. ErrResponse(uc.Controller, err)
  59. return
  60. }
  61. }
  62. err = UpdateRewardsPool(uc.engine, reinputValue)
  63. if err != nil {
  64. ErrResponse(uc.Controller, err)
  65. return
  66. }
  67. err = UpdateSuperiorsPerformance(uc.engine, ui.Superiors, reinputValue)
  68. if err != nil {
  69. ErrResponse(uc.Controller, err)
  70. return
  71. }
  72. TxObjectResponse(uc.Controller, "success")
  73. }
  74. func (uc *UserController) GetSignature() {
  75. addr := uc.GetString("addr")
  76. s := uc.GetString("token")
  77. user := util.GetPri(s, addr[len(addr)-16:])
  78. if strings.ToLower(user) != strings.ToLower(addr) {
  79. ErrResponse(uc.Controller, "无效地址")
  80. return
  81. }
  82. var ua models.UserInfo
  83. uc.engine.Id(user).Get(&ua)
  84. if ua.AvailableClaim == 0 {
  85. ErrResponse(uc.Controller, "暂无收益领取")
  86. return
  87. }
  88. format := time.Now().AddDate(0, 0, 1).Format("2006-01-02")
  89. te, _ := time.ParseInLocation("2006-01-02", format, time.Local)
  90. pow := decimal.NewFromFloat(float64(10)).Pow(decimal.NewFromFloat(float64(18)))
  91. amount := decimal.NewFromFloat(ua.AvailableClaim).Mul(pow).BigInt().String()
  92. out1 := util.Sign(amount, strings.ToLower(user[2:]), fmt.Sprint(te.Unix()))
  93. sign := out1 + "-" + amount + "-" + fmt.Sprint(te.Unix())
  94. code := util.EnPriCode(sign, addr[len(addr)-16:])
  95. TxObjectResponse(uc.Controller, code)
  96. }
  97. func (uc *UserController) GetUserInfo(amount uint64) {}
  98. func (uc *UserController) GetTeamList(user string) {}