controller.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package controller
  2. import (
  3. "fmt"
  4. "ktogame/models"
  5. "ktogame/util"
  6. "strings"
  7. "time"
  8. "github.com/astaxie/beego/logs"
  9. "github.com/shopspring/decimal"
  10. )
  11. func (uc *UserController) Reinput() {
  12. user := uc.GetString("addr")
  13. var ui models.UserInfo
  14. ok, err := uc.engine.Id(user).Get(&ui)
  15. if err != nil {
  16. ErrResponse(uc.Controller, err)
  17. return
  18. }
  19. if !ok {
  20. ErrResponse(uc.Controller, "user not exist!")
  21. return
  22. }
  23. ///update availableReinput by left in db
  24. ///update totalReinput
  25. if ui.AvailableReinput < ModBase {
  26. ErrResponse(uc.Controller, "no available reinput balance")
  27. return
  28. }
  29. num := uint64(ui.AvailableReinput) / uint64(ModBase)
  30. reinputValue := float64(num * ModBase)
  31. logs.Info("check Reinput user:%v,num:%v available:%v,reinputValue=======%v", user, num, ui.AvailableReinput, reinputValue)
  32. ///update Recommendation Rewards
  33. ///update direct recommend rewards
  34. rewards := reinputValue * 10 / 100
  35. if ui.Direct != "" {
  36. err := UpdateAvailableRewards(rewards, ui.Direct, false, false)
  37. if err != nil {
  38. logs.Error("check err=======", err)
  39. ErrResponse(uc.Controller, err)
  40. return
  41. }
  42. }
  43. ///update indirect recommend rewards
  44. if ui.Indirect != "" {
  45. err := UpdateAvailableRewards(rewards, ui.Indirect, false, false)
  46. if err != nil {
  47. logs.Error("check err=======", err)
  48. ErrResponse(uc.Controller, err)
  49. return
  50. }
  51. }
  52. err = UpdateRewardsPool(uc.engine, reinputValue)
  53. if err != nil {
  54. logs.Error("check err=======", err)
  55. ErrResponse(uc.Controller, err)
  56. return
  57. }
  58. err = UpdateSuperiorsPerformance(uc.engine, ui.Superiors, reinputValue)
  59. if err != nil {
  60. logs.Error("check err=======", err)
  61. ErrResponse(uc.Controller, err)
  62. return
  63. }
  64. ui.AvailableReinput -= reinputValue
  65. ui.TotalReinputed += reinputValue
  66. if ui.TotalReinputed >= CommunityLimit {
  67. ui.State = CommunityUsers
  68. }
  69. _, err = uc.engine.ID(user).Cols("available_reinput,total_reinputed,state").Update(&ui)
  70. if err != nil {
  71. logs.Error("check err=======", err)
  72. ErrResponse(uc.Controller, err)
  73. return
  74. }
  75. TxObjectResponse(uc.Controller, "ok")
  76. return
  77. }
  78. func (uc *UserController) GetClaimSignature() {
  79. addr := uc.GetString("addr")
  80. s := uc.GetString("sign")
  81. user := util.GetPri(s, addr[len(addr)-16:])
  82. if strings.ToLower(user) != strings.ToLower(addr) {
  83. ErrResponse(uc.Controller, "无效地址")
  84. return
  85. }
  86. var ua models.UserInfo
  87. uc.engine.Id(user).Get(&ua)
  88. if ua.AvailableClaim == 0 {
  89. ErrResponse(uc.Controller, "暂无收益领取")
  90. return
  91. }
  92. // format := time.Now().AddDate(0, 0, 1).Format("2006-01-02")
  93. // te, _ := time.ParseInLocation("2006-01-02", format, time.Local)
  94. i_time := time.Now().Unix() + 3600*2
  95. pow := decimal.NewFromFloat(float64(10)).Pow(decimal.NewFromFloat(float64(18)))
  96. amount := decimal.NewFromFloat(ua.AvailableClaim).Mul(pow).BigInt().String()
  97. out1 := util.Sign(amount, strings.ToLower(user[2:]), fmt.Sprint(i_time))
  98. sign := out1 + "-" + amount + "-" + fmt.Sprint(i_time)
  99. code := util.EnPriCode(sign, addr[len(addr)-16:])
  100. TxObjectResponse(uc.Controller, code)
  101. return
  102. }
  103. func (uc *UserController) SetClaimHash() {
  104. addr := uc.GetString("addr")
  105. hash := uc.GetString("hash")
  106. sign := uc.GetString("sign")
  107. var ua models.UserInfo
  108. ok, err := uc.engine.Id(addr).Get(&ua)
  109. if err != nil {
  110. ErrResponse(uc.Controller, err)
  111. return
  112. }
  113. if !ok {
  114. ErrResponse(uc.Controller, "user not exist!")
  115. return
  116. }
  117. if ua.AvailableClaim == 0 {
  118. ErrResponse(uc.Controller, "暂无收益领取")
  119. return
  120. }
  121. amount := ua.AvailableClaim
  122. ua.TotalClaimed += amount
  123. ua.AvailableClaim = 0
  124. _, err = uc.engine.ID(addr).Cols("available_claim,total_claimed").Update(&ua)
  125. if err != nil {
  126. ErrResponse(uc.Controller, err)
  127. return
  128. }
  129. logs.Info("check SetClaimHash---------:", addr, hash, ua.AvailableClaim, ua.TotalClaimed, amount)
  130. claimTx := models.ClaimedTxs{Addr: addr, Amount: amount, Hash: hash,
  131. Signature: sign, State: 0, Droped: 0, CreateTime: util.NowTimeString()}
  132. _, err = uc.engine.Insert(&claimTx)
  133. if err != nil {
  134. ErrResponse(uc.Controller, err)
  135. return
  136. }
  137. TxObjectResponse(uc.Controller, "ok")
  138. return
  139. }
  140. func (uc *UserController) GetUserInfo() {
  141. user := uc.GetString("addr")
  142. var us models.UserInfo
  143. uc.engine.Id(user).Get(&us)
  144. TxObjectResponse(uc.Controller, us)
  145. return
  146. }
  147. func (uc *UserController) GetTeamList() {
  148. user := uc.GetString("addr")
  149. s, err := uc.GetInt("size")
  150. if err != nil {
  151. TxObjectResponse(uc.Controller, err)
  152. return
  153. }
  154. l, err := uc.GetInt("limit")
  155. if err != nil {
  156. TxObjectResponse(uc.Controller, err)
  157. return
  158. }
  159. var us models.UserInfo
  160. var teamList []models.UserInfo
  161. ok, err := uc.engine.Id(user).Get(&us)
  162. if err != nil {
  163. TxObjectResponse(uc.Controller, err)
  164. return
  165. }
  166. if !ok {
  167. TxObjectResponse(uc.Controller, us)
  168. return
  169. }
  170. c, err := uc.engine.Where("superiors like ?", "%,"+fmt.Sprint(us.Id)+"%").FindAndCount(&teamList)
  171. if err != nil {
  172. TxObjectResponse(uc.Controller, err)
  173. return
  174. }
  175. var addrList []string
  176. for _, u := range teamList {
  177. addrList = append(addrList, u.Addr)
  178. }
  179. res := models.Page{Limit: l, Size: s, Total: c, DataList: addrList}
  180. TxObjectResponse(uc.Controller, res)
  181. return
  182. }
  183. func (uc *UserController) GetPerformance() {
  184. user := uc.GetString("addr")
  185. var per models.Performance
  186. uc.engine.Id(user).Get(&per)
  187. TxObjectResponse(uc.Controller, per)
  188. return
  189. }
  190. func (uc *UserController) TotalUsers() {
  191. var us models.UserInfo
  192. c, err := uc.engine.Count(&us)
  193. if err != nil {
  194. ErrResponse(uc.Controller, err)
  195. return
  196. }
  197. us.Id = c
  198. TxObjectResponse(uc.Controller, us)
  199. return
  200. }