wallet.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package models
  2. import (
  3. "mtp2_if/db"
  4. "mtp2_if/utils"
  5. "time"
  6. )
  7. type DigitalWalletAddress struct {
  8. ID int64 `json:"id" xorm:"ID"` // 地址ID
  9. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  10. CHANNEL_CODE string `json:"channel_code" xorm:"CHANNEL_CODE" form:"channel_code"` // 渠道代码
  11. ADDR_TYPE int32 `json:"addr_type" xorm:"ADDR_TYPE" form:"addr_type"` // 地址类型:1-充值;2-提现
  12. CHAIN_ID string `json:"chain_id" xorm:"CHAIN_ID" form:"chain_id"` // 链代码(如BTC,ETH)
  13. ADDRESS string `json:"address" xorm:"ADDRESS"` // 区块链地址
  14. MEMO string `json:"memo" xorm:"MEMO"` // 地址备注(某些链需要)
  15. STATUS int32 `json:"status" xorm:"STATUS"` // 状态:0-禁用;1-启用
  16. CREATE_TIME *time.Time `json:"create_time" xorm:"CREATE_TIME"` // 创建时间
  17. TAG string `json:"tag" xorm:"TAG"` // 标签
  18. }
  19. func (r *DigitalWalletAddress) calc() {
  20. }
  21. func (r *DigitalWalletAddress) buildSql() string {
  22. var sqlId utils.SQLVal = `
  23. SELECT
  24. t.ID ,
  25. t.USERID ,
  26. t.CHANNEL_CODE,
  27. t.ADDR_TYPE ,
  28. t.CHAIN_ID ,
  29. t.ADDRESS ,
  30. t.MEMO ,
  31. t.STATUS ,
  32. t.CREATE_TIME ,
  33. t.TAG
  34. FROM WALLET_ADDRESS t
  35. WHERE t.USERID = %v
  36. `
  37. sqlId.FormatParam(r.USERID)
  38. sqlId.AndEx("t.CHANNEL_CODE", r.CHANNEL_CODE, r.CHANNEL_CODE != "")
  39. sqlId.AndEx("t.ADDR_TYPE", r.ADDR_TYPE, r.ADDR_TYPE != 0)
  40. sqlId.AndEx("t.CHAIN_ID", r.CHAIN_ID, r.CHAIN_ID != "")
  41. return sqlId.String()
  42. }
  43. // GetDataEx 从数据库中查询数据
  44. func (r *DigitalWalletAddress) GetDataEx() (interface{}, error) {
  45. sData := make([]DigitalWalletAddress, 0)
  46. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  47. for i := range sData {
  48. sData[i].calc()
  49. }
  50. return sData, err
  51. }
  52. type WalletChainRsp struct {
  53. Walletchains
  54. Tokens []Wallettokens `json:"tokens"` // 链支持的代币列表
  55. }
  56. func GetWalletChains(channelCode string) ([]WalletChainRsp, error) {
  57. rsp := make([]WalletChainRsp, 0)
  58. datas := make([]Walletchains, 0)
  59. err := db.GetEngine().Where("CHANNEL_CODE = ?", channelCode).Find(&datas)
  60. if err != nil {
  61. return nil, err
  62. }
  63. for i := range datas {
  64. tokens := make([]Wallettokens, 0)
  65. err = db.GetEngine().Where("CHANNEL_CODE = ? AND CHAIN_ID = ?", channelCode, datas[i].CHAIN_ID).Find(&tokens)
  66. if err != nil {
  67. return nil, err
  68. }
  69. rsp = append(rsp, WalletChainRsp{
  70. Walletchains: datas[i],
  71. Tokens: tokens,
  72. })
  73. }
  74. return rsp, nil
  75. }
  76. // WalletChaintokens 数字钱包代币信息表
  77. type WalletChaintokens struct {
  78. ID int32 `json:"id" xorm:"ID"` // SEQ_WALLET_TOKENS
  79. CHANNEL_CODE string `json:"channel_code" xorm:"CHANNEL_CODE"` // 渠道ID
  80. CHAIN_ID string `json:"chain_id" xorm:"CHAIN_ID"` // 所属链ID
  81. TOKEN_ID string `json:"token_id" xorm:"TOKEN_ID"` // 代币ID
  82. ASSET_ID string `json:"asset_id" xorm:"ASSET_ID"` // 资产 ID,关联交易所账户中持有资产的唯一标识符
  83. SYMBOL string `json:"symbol" xorm:"SYMBOL"` // 代币符号
  84. NAME string `json:"name" xorm:"NAME"` // 代币全名
  85. TOKEN_DECIMAL int32 `json:"token_decimal" xorm:"TOKEN_DECIMAL"` // 小数位
  86. ICON_URL string `json:"icon_url" xorm:"ICON_URL"` // 代币图标URL
  87. FEE_TOKEN_ID string `json:"fee_token_id" xorm:"FEE_TOKEN_ID"` // 手续费代币ID
  88. CAN_DEPOSIT int32 `json:"can_deposit" xorm:"CAN_DEPOSIT"` // 是否可以充值
  89. CAN_WITHDRAW int32 `json:"can_withdraw" xorm:"CAN_WITHDRAW"` // 是否可以提现
  90. DUST_THRESHOLD string `json:"dust_threshold" xorm:"DUST_THRESHOLD"` // 最低提现金额
  91. DEPOSIT_THRESHOLD string `json:"deposit_threshold" xorm:"DEPOSIT_THRESHOLD"` // 最低充值金额
  92. ASSET_MODEL_TYPE string `json:"asset_model_type" xorm:"ASSET_MODEL_TYPE"` // 模型类型
  93. ENABLED int32 `json:"enabled" xorm:"ENABLED"` // 是否可用,0-不可用;1-可用
  94. REQUIRE_MEMO int32 `json:"require_memo" xorm:"REQUIRE_MEMO"` // 该链条是否需要备注
  95. }
  96. func GetWalletTokens(currency string) ([]WalletChaintokens, error) {
  97. rsp := make([]WalletChaintokens, 0)
  98. err := db.GetEngine().
  99. Table("WALLET_TOKENS T").
  100. Select("T.*, C.REQUIRE_MEMO").Join("LEFT", "WALLET_CHAINS C", "T.CHANNEL_CODE = C.CHANNEL_CODE AND T.CHAIN_ID = C.CHAIN_ID").
  101. Where("T.SYMBOL = ?", currency).Find(&rsp)
  102. return rsp, err
  103. }