| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- package models
- import (
- "encoding/json"
- "errors"
- "fmt"
- "reflect"
- "strings"
- "github.com/beego/beego/v2/client/orm"
- )
- type HomeData struct {
- Id int `orm:"column(home_data_id);auto" json:"-"`
- UserId string `orm:"column(user_id)" json:"user_id"`
- AiceExStatus int `orm:"column(aice_ex_status)" json:"aice_ex_status"`
- AiceMenuStatus int `orm:"column(aice_menu_status)" json:"aice_menu_status"`
- AnygptUserid string `orm:"column(anygpt_userid)" json:"anygpt_userid"`
- BindStatus int `orm:"column(bind_status)" json:"bind_status"`
- BtcAddr string `orm:"column(btc_addr)" json:"btc_addr"`
- CoalesceCreditBalance string `orm:"column(coalesce_credit_balance)" json:"coalesce_credit_balance"`
- CoalesceCreditUsdt string `orm:"column(coalesce_credit_usdt)" json:"coalesce_credit_usdt"`
- EthAddr string `orm:"column(eth_addr)" json:"eth_addr"`
- ImsaStatus int `orm:"column(imsa_status)" json:"imsa_status"`
- LegaTransferFee string `orm:"column(lega_transfer_fee)" json:"lega_transfer_fee"`
- LegacyCreditBalance string `orm:"column(legacy_credit_balance)" json:"legacy_credit_balance"`
- LegacyTokenBalance string `orm:"column(legacy_token_balance)" json:"legacy_token_balance"`
- LegacyTokenUsdt string `orm:"column(legacy_token_usdt)" json:"legacy_token_usdt"`
- LockAice string `orm:"column(lock_aice)" json:"lock_aice"`
- LockAiceValue string `orm:"column(lock_aice_value)" json:"lock_aice_value"`
- ProfitLevel int `orm:"column(profit_level)" json:"profit_level"`
- ReceiveAddressStatus int `orm:"column(receive_address_status)" json:"receive_address_status"`
- SolAddr string `orm:"column(sol_addr)" json:"sol_addr"`
- TransPassword int `orm:"column(trans_password)" json:"trans_password"`
- // 关键修改:类型必须为 string 以适配 ORM 注册
- TransferStatus string `orm:"column(transfer_status);type(text);null" json:"transfer_status"`
- TrcAddrBase58 string `orm:"column(trc_addr_base58)" json:"trc_addr_base58"`
- UsdBalance string `orm:"column(usd_balance)" json:"usd_balance"`
- UsdtAddress string `orm:"column(usdt_address)" json:"usdt_address"`
- UsdtWithdrawLimit string `orm:"column(usdt_withdraw_limit)" json:"usdt_withdraw_limit"`
- UsdtWithdrawStatus int `orm:"column(usdt_withdraw_status)" json:"usdt_withdraw_status"`
- WithdrawLimit string `orm:"column(withdraw_limit)" json:"withdraw_limit"`
- XaicePrice string `orm:"column(xaice_price)" json:"xaice_price"`
- XaiceReleaseBalance string `orm:"column(xaice_release_balance)" json:"xaice_release_balance"`
- XaiceReleaseBalanceValue string `orm:"column(xaice_release_balance_value)" json:"xaice_release_balance_value"`
- XaiceReleaseStatus int `orm:"column(xaice_release_status)" json:"xaice_release_status"`
- XaiceStatus int `orm:"column(xaice_status)" json:"xaice_status"`
- XaiceUsdtAddress string `orm:"column(xaice_usdt_address)" json:"xaice_usdt_address"`
- XaiceUsdtWithdrawStatus int `orm:"column(xaice_usdt_withdraw_status)" json:"xaice_usdt_withdraw_status"`
- YuleMenuStatus int `orm:"column(yule_menu_status)" json:"yule_menu_status"`
- InvestStatus int `orm:"column(invest_status)" json:"invest_status"`
- ReleaseAice string `orm:"column(release_aice)" json:"release_aice"`
- ReleaseAiceValue string `orm:"column(release_aice_value)" json:"release_aice_value"`
- }
- func (t *HomeData) TableName() string {
- return "home_data"
- }
- func init() {
- orm.RegisterModel(new(HomeData))
- }
- // UnmarshalJSON 核心修复:在这里处理 interface{} 转换
- // 这样在外部使用 json.Unmarshal 时,即使 API 返回对象,也会被转成字符串存入结构体
- func (t *HomeData) UnmarshalJSON(data []byte) error {
- type Alias HomeData
- aux := &struct {
- // 临时用接口接收这个动态字段
- TransferStatus interface{} `json:"transfer_status"`
- *Alias
- }{
- Alias: (*Alias)(t),
- }
- if err := json.Unmarshal(data, &aux); err != nil {
- return err
- }
- // 在这里进行 Type Switch,因为 aux.TransferStatus 是接口类型
- switch v := aux.TransferStatus.(type) {
- case map[string]interface{}, []interface{}:
- b, _ := json.Marshal(v)
- t.TransferStatus = string(b)
- case string:
- t.TransferStatus = v
- case float64:
- t.TransferStatus = fmt.Sprintf("%.0f", v)
- default:
- t.TransferStatus = ""
- }
- return nil
- }
- // AddHomeData 插入新记录
- func AddHomeData(m *HomeData) (id int64, err error) {
- o := orm.NewOrm()
- // 因为已经在 UnmarshalJSON 处理好了,这里直接插入即可
- id, err = o.Insert(m)
- return
- }
- // GetAllHomeData 列表查询
- func GetAllHomeData(query map[string]string, fields []string, sortby []string, order []string,
- offset int64, limit int64) (ml []interface{}, err error) {
- o := orm.NewOrm()
- qs := o.QueryTable(new(HomeData))
- for k, v := range query {
- k = strings.Replace(k, ".", "__", -1)
- if strings.HasSuffix(k, "isnull") {
- qs = qs.Filter(k, (v == "true" || v == "1"))
- } else {
- qs = qs.Filter(k, v)
- }
- }
- var sortFields []string
- if len(sortby) != 0 {
- buildSort := func(field, ord string) (string, error) {
- switch strings.ToLower(ord) {
- case "desc":
- return "-" + field, nil
- case "asc":
- return field, nil
- default:
- return "", errors.New("Invalid order")
- }
- }
- if len(sortby) == len(order) {
- for i, v := range sortby {
- s, _ := buildSort(v, order[i])
- sortFields = append(sortFields, s)
- }
- } else if len(order) == 1 {
- for _, v := range sortby {
- s, _ := buildSort(v, order[0])
- sortFields = append(sortFields, s)
- }
- }
- }
- var l []HomeData
- if len(sortFields) > 0 {
- qs = qs.OrderBy(sortFields...)
- }
- if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
- if len(fields) == 0 {
- for _, v := range l {
- ml = append(ml, v)
- }
- } else {
- for _, v := range l {
- m := make(map[string]interface{})
- val := reflect.ValueOf(v)
- for _, fname := range fields {
- f := val.FieldByName(fname)
- if f.IsValid() {
- m[fname] = f.Interface()
- }
- }
- ml = append(ml, m)
- }
- }
- return ml, nil
- }
- return nil, err
- }
- // UpdateHomeDataById 更新记录
- func UpdateHomeDataById(m *HomeData) (err error) {
- o := orm.NewOrm()
- _, err = o.Update(m)
- return
- }
- // DeleteHomeData 删除记录
- func DeleteHomeData(id int) (err error) {
- o := orm.NewOrm()
- _, err = o.Delete(&HomeData{Id: id})
- return
- }
|