controller.go 5.2 KB

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