controller.go 5.5 KB

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