package models import ( "mtp2_if/db" "mtp2_if/utils" "time" ) type DigitalWalletAddress struct { ID int64 `json:"id" xorm:"ID"` // 地址ID USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID CHANNEL_CODE string `json:"channel_code" xorm:"CHANNEL_CODE" form:"channel_code"` // 渠道代码 ADDR_TYPE int32 `json:"addr_type" xorm:"ADDR_TYPE" form:"addr_type"` // 地址类型:1-充值;2-提现 CHAIN_ID string `json:"chain_id" xorm:"CHAIN_ID" form:"chain_id"` // 链代码(如BTC,ETH) ADDRESS string `json:"address" xorm:"ADDRESS"` // 区块链地址 MEMO string `json:"memo" xorm:"MEMO"` // 地址备注(某些链需要) STATUS int32 `json:"status" xorm:"STATUS"` // 状态:0-禁用;1-启用 CREATE_TIME *time.Time `json:"create_time" xorm:"CREATE_TIME"` // 创建时间 TAG string `json:"tag" xorm:"TAG"` // 标签 } func (r *DigitalWalletAddress) calc() { } func (r *DigitalWalletAddress) buildSql() string { var sqlId utils.SQLVal = ` SELECT t.ID , t.USERID , t.CHANNEL_CODE, t.ADDR_TYPE , t.CHAIN_ID , t.ADDRESS , t.MEMO , t.STATUS , t.CREATE_TIME , t.TAG FROM WALLET_ADDRESS t WHERE t.USERID = %v ` sqlId.FormatParam(r.USERID) sqlId.AndEx("t.CHANNEL_CODE", r.CHANNEL_CODE, r.CHANNEL_CODE != "") sqlId.AndEx("t.ADDR_TYPE", r.ADDR_TYPE, r.ADDR_TYPE != 0) sqlId.AndEx("t.CHAIN_ID", r.CHAIN_ID, r.CHAIN_ID != "") return sqlId.String() } // GetDataEx 从数据库中查询数据 func (r *DigitalWalletAddress) GetDataEx() (interface{}, error) { sData := make([]DigitalWalletAddress, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].calc() } return sData, err } type WalletChainRsp struct { Walletchains Tokens []Wallettokens `json:"tokens"` // 链支持的代币列表 } func GetWalletChains(channelCode string) ([]WalletChainRsp, error) { rsp := make([]WalletChainRsp, 0) datas := make([]Walletchains, 0) err := db.GetEngine().Where("CHANNEL_CODE = ?", channelCode).Find(&datas) if err != nil { return nil, err } for i := range datas { tokens := make([]Wallettokens, 0) err = db.GetEngine().Where("CHANNEL_CODE = ? AND CHAIN_ID = ?", channelCode, datas[i].CHAIN_ID).Find(&tokens) if err != nil { return nil, err } rsp = append(rsp, WalletChainRsp{ Walletchains: datas[i], Tokens: tokens, }) } return rsp, nil } // WalletChaintokens 数字钱包代币信息表 type WalletChaintokens struct { ID int32 `json:"id" xorm:"ID"` // SEQ_WALLET_TOKENS CHANNEL_CODE string `json:"channel_code" xorm:"CHANNEL_CODE"` // 渠道ID CHAIN_ID string `json:"chain_id" xorm:"CHAIN_ID"` // 所属链ID TOKEN_ID string `json:"token_id" xorm:"TOKEN_ID"` // 代币ID ASSET_ID string `json:"asset_id" xorm:"ASSET_ID"` // 资产 ID,关联交易所账户中持有资产的唯一标识符 SYMBOL string `json:"symbol" xorm:"SYMBOL"` // 代币符号 NAME string `json:"name" xorm:"NAME"` // 代币全名 TOKEN_DECIMAL int32 `json:"token_decimal" xorm:"TOKEN_DECIMAL"` // 小数位 ICON_URL string `json:"icon_url" xorm:"ICON_URL"` // 代币图标URL FEE_TOKEN_ID string `json:"fee_token_id" xorm:"FEE_TOKEN_ID"` // 手续费代币ID CAN_DEPOSIT int32 `json:"can_deposit" xorm:"CAN_DEPOSIT"` // 是否可以充值 CAN_WITHDRAW int32 `json:"can_withdraw" xorm:"CAN_WITHDRAW"` // 是否可以提现 DUST_THRESHOLD string `json:"dust_threshold" xorm:"DUST_THRESHOLD"` // 最低提现金额 DEPOSIT_THRESHOLD string `json:"deposit_threshold" xorm:"DEPOSIT_THRESHOLD"` // 最低充值金额 ASSET_MODEL_TYPE string `json:"asset_model_type" xorm:"ASSET_MODEL_TYPE"` // 模型类型 ENABLED int32 `json:"enabled" xorm:"ENABLED"` // 是否可用,0-不可用;1-可用 REQUIRE_MEMO int32 `json:"require_memo" xorm:"REQUIRE_MEMO"` // 该链条是否需要备注 } func GetWalletTokens(currency string) ([]WalletChaintokens, error) { rsp := make([]WalletChaintokens, 0) err := db.GetEngine(). Table("WALLET_TOKENS T"). Select("T.*, C.REQUIRE_MEMO").Join("LEFT", "WALLET_CHAINS C", "T.CHANNEL_CODE = C.CHANNEL_CODE AND T.CHAIN_ID = C.CHAIN_ID"). Where("T.SYMBOL = ?", currency).Find(&rsp) return rsp, err }