controller.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package controller
  2. import (
  3. "fmt"
  4. "ktogame/models"
  5. "ktogame/util"
  6. "math/big"
  7. "strings"
  8. )
  9. func (uc *UserController) Reinput(user string) {
  10. var ui models.UserInfo
  11. ok, err := uc.engine.Id(user).Get(&ui)
  12. if err != nil {
  13. ErrResponse(uc.Controller, err)
  14. return
  15. }
  16. if !ok {
  17. ErrResponse(uc.Controller, "db get failed!")
  18. return
  19. }
  20. if ui.AvailableReinput < ModBase {
  21. ErrResponse(uc.Controller, "no available reinput balance")
  22. return
  23. }
  24. ///update availableReinput by left in db
  25. ///update totalReinput
  26. left := uint64(ui.AvailableReinput) % ModBase
  27. reinputValue := ui.AvailableReinput - float64(left)
  28. ui.AvailableReinput = float64(left)
  29. ui.TotalReinputed += reinputValue
  30. if ui.TotalReinputed >= CommunityLimit {
  31. ui.State = CommunityUsers
  32. }
  33. _, err = uc.engine.ID(user).Cols("available_reinput").Update(&ui)
  34. if err != nil {
  35. ErrResponse(uc.Controller, err)
  36. return
  37. }
  38. _, err = uc.engine.ID(user).Cols("total_reinput").Update(&ui)
  39. if err != nil {
  40. ErrResponse(uc.Controller, err)
  41. return
  42. }
  43. ///update Recommendation Rewards
  44. ///update direct recommend rewards
  45. rewards := reinputValue * 10 / 100
  46. if ui.Direct != "" {
  47. err := UpdateAvailableRewards(rewards, ui.Direct, false, false)
  48. if err != nil {
  49. ErrResponse(uc.Controller, err)
  50. return
  51. }
  52. }
  53. ///update indirect recommend rewards
  54. if ui.Indirect != "" {
  55. err := UpdateAvailableRewards(rewards, ui.Indirect, false, false)
  56. if err != nil {
  57. ErrResponse(uc.Controller, err)
  58. return
  59. }
  60. }
  61. err = UpdateRewardsPool(uc.engine, reinputValue)
  62. if err != nil {
  63. ErrResponse(uc.Controller, err)
  64. return
  65. }
  66. err = UpdateSuperiorsPerformance(uc.engine, ui.Superiors, reinputValue)
  67. if err != nil {
  68. ErrResponse(uc.Controller, err)
  69. return
  70. }
  71. TxObjectResponse(uc.Controller, "success")
  72. }
  73. func (uc *UserController) GetClaimSignature() {
  74. addr := uc.GetString("addr")
  75. tk := uc.GetString("token")
  76. tm := uc.GetString("time")
  77. user := util.GetPri(tk, 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. amount := big.NewInt(0).SetUint64(uint64(ua.AvailableClaim)).String()
  93. out1 := util.Sign(amount, strings.ToLower(user[2:]), tm)
  94. sign := out1 + "-" + amount + "-" + tm
  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, "-1")
  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. }
  137. func (uc *UserController) GetUserInfo() {
  138. user := uc.GetString("address")
  139. var us models.UserInfo
  140. ok, err := uc.engine.ID(user).Get(&us)
  141. if err != nil {
  142. TxObjectResponse(uc.Controller, err)
  143. return
  144. }
  145. if !ok {
  146. TxObjectResponse(uc.Controller, us)
  147. return
  148. }
  149. TxObjectResponse(uc.Controller, us)
  150. }
  151. func (uc *UserController) GetTeamList() {
  152. user := uc.GetString("address")
  153. s, err := uc.GetInt("size")
  154. if err != nil {
  155. TxObjectResponse(uc.Controller, err)
  156. return
  157. }
  158. l, err := uc.GetInt("limit")
  159. if err != nil {
  160. TxObjectResponse(uc.Controller, err)
  161. return
  162. }
  163. var us models.UserInfo
  164. var teamList []models.UserInfo
  165. ok, err := uc.engine.ID(user).Get(&us)
  166. if err != nil {
  167. TxObjectResponse(uc.Controller, err)
  168. return
  169. }
  170. if !ok {
  171. TxObjectResponse(uc.Controller, us)
  172. return
  173. }
  174. c, err := uc.engine.Where("superiors like ?", "%,"+fmt.Sprint(us.Id)).FindAndCount(&teamList)
  175. if err != nil {
  176. TxObjectResponse(uc.Controller, err)
  177. return
  178. }
  179. var addrList []string
  180. for _, u := range teamList {
  181. addrList = append(addrList, u.Addr)
  182. }
  183. res := models.Page{Limit: l, Size: s, Total: c, DataList: addrList}
  184. TxObjectResponse(uc.Controller, res)
  185. }
  186. func (uc *UserController) GetPerformance() {
  187. user := uc.GetString("address")
  188. var per models.Performance
  189. ok, err := uc.engine.Id(user).Get(&per)
  190. if err != nil {
  191. TxObjectResponse(uc.Controller, err)
  192. return
  193. }
  194. if !ok {
  195. TxObjectResponse(uc.Controller, per)
  196. return
  197. }
  198. TxObjectResponse(uc.Controller, per)
  199. }
  200. func (uc *UserController) TotalUsers() {
  201. var us models.UserInfo
  202. ok, err := uc.engine.Desc("id").Get(&us)
  203. if err != nil {
  204. TxObjectResponse(uc.Controller, err)
  205. return
  206. }
  207. if !ok {
  208. TxObjectResponse(uc.Controller, us)
  209. return
  210. }
  211. TxObjectResponse(uc.Controller, us)
  212. }