home_data.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package models
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "reflect"
  7. "strings"
  8. "github.com/beego/beego/v2/client/orm"
  9. )
  10. type HomeData struct {
  11. Id int `orm:"column(home_data_id);auto" json:"-"`
  12. UserId string `orm:"column(user_id)" json:"user_id"`
  13. AiceExStatus int `orm:"column(aice_ex_status)" json:"aice_ex_status"`
  14. AiceMenuStatus int `orm:"column(aice_menu_status)" json:"aice_menu_status"`
  15. AnygptUserid string `orm:"column(anygpt_userid)" json:"anygpt_userid"`
  16. BindStatus int `orm:"column(bind_status)" json:"bind_status"`
  17. BtcAddr string `orm:"column(btc_addr)" json:"btc_addr"`
  18. CoalesceCreditBalance string `orm:"column(coalesce_credit_balance)" json:"coalesce_credit_balance"`
  19. CoalesceCreditUsdt string `orm:"column(coalesce_credit_usdt)" json:"coalesce_credit_usdt"`
  20. EthAddr string `orm:"column(eth_addr)" json:"eth_addr"`
  21. ImsaStatus int `orm:"column(imsa_status)" json:"imsa_status"`
  22. LegaTransferFee string `orm:"column(lega_transfer_fee)" json:"lega_transfer_fee"`
  23. LegacyCreditBalance string `orm:"column(legacy_credit_balance)" json:"legacy_credit_balance"`
  24. LegacyTokenBalance string `orm:"column(legacy_token_balance)" json:"legacy_token_balance"`
  25. LegacyTokenUsdt string `orm:"column(legacy_token_usdt)" json:"legacy_token_usdt"`
  26. LockAice string `orm:"column(lock_aice)" json:"lock_aice"`
  27. LockAiceValue string `orm:"column(lock_aice_value)" json:"lock_aice_value"`
  28. ProfitLevel int `orm:"column(profit_level)" json:"profit_level"`
  29. ReceiveAddressStatus int `orm:"column(receive_address_status)" json:"receive_address_status"`
  30. SolAddr string `orm:"column(sol_addr)" json:"sol_addr"`
  31. TransPassword int `orm:"column(trans_password)" json:"trans_password"`
  32. // 关键修改:类型必须为 string 以适配 ORM 注册
  33. TransferStatus string `orm:"column(transfer_status);type(text);null" json:"transfer_status"`
  34. TrcAddrBase58 string `orm:"column(trc_addr_base58)" json:"trc_addr_base58"`
  35. UsdBalance string `orm:"column(usd_balance)" json:"usd_balance"`
  36. UsdtAddress string `orm:"column(usdt_address)" json:"usdt_address"`
  37. UsdtWithdrawLimit string `orm:"column(usdt_withdraw_limit)" json:"usdt_withdraw_limit"`
  38. UsdtWithdrawStatus int `orm:"column(usdt_withdraw_status)" json:"usdt_withdraw_status"`
  39. WithdrawLimit string `orm:"column(withdraw_limit)" json:"withdraw_limit"`
  40. XaicePrice string `orm:"column(xaice_price)" json:"xaice_price"`
  41. XaiceReleaseBalance string `orm:"column(xaice_release_balance)" json:"xaice_release_balance"`
  42. XaiceReleaseBalanceValue string `orm:"column(xaice_release_balance_value)" json:"xaice_release_balance_value"`
  43. XaiceReleaseStatus int `orm:"column(xaice_release_status)" json:"xaice_release_status"`
  44. XaiceStatus int `orm:"column(xaice_status)" json:"xaice_status"`
  45. XaiceUsdtAddress string `orm:"column(xaice_usdt_address)" json:"xaice_usdt_address"`
  46. XaiceUsdtWithdrawStatus int `orm:"column(xaice_usdt_withdraw_status)" json:"xaice_usdt_withdraw_status"`
  47. YuleMenuStatus int `orm:"column(yule_menu_status)" json:"yule_menu_status"`
  48. InvestStatus int `orm:"column(invest_status)" json:"invest_status"`
  49. ReleaseAice string `orm:"column(release_aice)" json:"release_aice"`
  50. ReleaseAiceValue string `orm:"column(release_aice_value)" json:"release_aice_value"`
  51. }
  52. func (t *HomeData) TableName() string {
  53. return "home_data"
  54. }
  55. func init() {
  56. orm.RegisterModel(new(HomeData))
  57. }
  58. // UnmarshalJSON 核心修复:在这里处理 interface{} 转换
  59. // 这样在外部使用 json.Unmarshal 时,即使 API 返回对象,也会被转成字符串存入结构体
  60. func (t *HomeData) UnmarshalJSON(data []byte) error {
  61. type Alias HomeData
  62. aux := &struct {
  63. // 临时用接口接收这个动态字段
  64. TransferStatus interface{} `json:"transfer_status"`
  65. *Alias
  66. }{
  67. Alias: (*Alias)(t),
  68. }
  69. if err := json.Unmarshal(data, &aux); err != nil {
  70. return err
  71. }
  72. // 在这里进行 Type Switch,因为 aux.TransferStatus 是接口类型
  73. switch v := aux.TransferStatus.(type) {
  74. case map[string]interface{}, []interface{}:
  75. b, _ := json.Marshal(v)
  76. t.TransferStatus = string(b)
  77. case string:
  78. t.TransferStatus = v
  79. case float64:
  80. t.TransferStatus = fmt.Sprintf("%.0f", v)
  81. default:
  82. t.TransferStatus = ""
  83. }
  84. return nil
  85. }
  86. // AddHomeData 插入新记录
  87. func AddHomeData(m *HomeData) (id int64, err error) {
  88. o := orm.NewOrm()
  89. // 因为已经在 UnmarshalJSON 处理好了,这里直接插入即可
  90. id, err = o.Insert(m)
  91. return
  92. }
  93. // GetAllHomeData 列表查询
  94. func GetAllHomeData(query map[string]string, fields []string, sortby []string, order []string,
  95. offset int64, limit int64) (ml []interface{}, err error) {
  96. o := orm.NewOrm()
  97. qs := o.QueryTable(new(HomeData))
  98. for k, v := range query {
  99. k = strings.Replace(k, ".", "__", -1)
  100. if strings.HasSuffix(k, "isnull") {
  101. qs = qs.Filter(k, (v == "true" || v == "1"))
  102. } else {
  103. qs = qs.Filter(k, v)
  104. }
  105. }
  106. var sortFields []string
  107. if len(sortby) != 0 {
  108. buildSort := func(field, ord string) (string, error) {
  109. switch strings.ToLower(ord) {
  110. case "desc":
  111. return "-" + field, nil
  112. case "asc":
  113. return field, nil
  114. default:
  115. return "", errors.New("Invalid order")
  116. }
  117. }
  118. if len(sortby) == len(order) {
  119. for i, v := range sortby {
  120. s, _ := buildSort(v, order[i])
  121. sortFields = append(sortFields, s)
  122. }
  123. } else if len(order) == 1 {
  124. for _, v := range sortby {
  125. s, _ := buildSort(v, order[0])
  126. sortFields = append(sortFields, s)
  127. }
  128. }
  129. }
  130. var l []HomeData
  131. if len(sortFields) > 0 {
  132. qs = qs.OrderBy(sortFields...)
  133. }
  134. if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
  135. if len(fields) == 0 {
  136. for _, v := range l {
  137. ml = append(ml, v)
  138. }
  139. } else {
  140. for _, v := range l {
  141. m := make(map[string]interface{})
  142. val := reflect.ValueOf(v)
  143. for _, fname := range fields {
  144. f := val.FieldByName(fname)
  145. if f.IsValid() {
  146. m[fname] = f.Interface()
  147. }
  148. }
  149. ml = append(ml, m)
  150. }
  151. }
  152. return ml, nil
  153. }
  154. return nil, err
  155. }
  156. // UpdateHomeDataById 更新记录
  157. func UpdateHomeDataById(m *HomeData) (err error) {
  158. o := orm.NewOrm()
  159. _, err = o.Update(m)
  160. return
  161. }
  162. // DeleteHomeData 删除记录
  163. func DeleteHomeData(id int) (err error) {
  164. o := orm.NewOrm()
  165. _, err = o.Delete(&HomeData{Id: id})
  166. return
  167. }