taaccountdigital.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package models
  2. import (
  3. "fmt"
  4. "mtp2_if/db"
  5. "mtp2_if/utils"
  6. "strings"
  7. "time"
  8. )
  9. // Taaccountdigital 数字账户表
  10. type Taaccountdigital struct {
  11. DIGITALACCOUNTID string `json:"digitalaccountid" xorm:"DIGITALACCOUNTID" form:"digitalaccountid"` // 资金账户ID(userid + currencyid[3位,前面补0])
  12. CURRENCYID uint32 `json:"currencyid" xorm:"CURRENCYID"` // 货币ID - 枚举"digitalcurrency"
  13. USERID uint64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  14. CURRENTBALANCE float64 `json:"currentbalance" xorm:"CURRENTBALANCE"` // 期末余额
  15. USEDMARGIN float64 `json:"usedmargin" xorm:"USEDMARGIN"` // 占用保证金(交易) - 正 - 预留
  16. FREEZEMARGIN float64 `json:"freezemargin" xorm:"FREEZEMARGIN"` // 冻结保证金(交易) - 正
  17. FREEZETRADECHARGE float64 `json:"freezetradecharge" xorm:"FREEZETRADECHARGE"` // 交易手续费冻结 - 正
  18. FREEZETRANSFER float64 `json:"freezetransfer" xorm:"FREEZETRANSFER"` // 转入转出冻结 - 正
  19. FREEZEINOUT float64 `json:"freezeinout" xorm:"FREEZEINOUT"` // 充值提现冻结 - 正
  20. TOTALTRADEADD float64 `json:"totaltradeadd" xorm:"TOTALTRADEADD"` // 累计交易增加 - 正
  21. TOTALTRADEREDUCE float64 `json:"totaltradereduce" xorm:"TOTALTRADEREDUCE"` // 累计交易减少 - 负
  22. TOTALTRADECHARGE float64 `json:"totaltradecharge" xorm:"TOTALTRADECHARGE"` // 累计交易手续费 - 负
  23. TOTALTRANSFERIN float64 `json:"totaltransferin" xorm:"TOTALTRANSFERIN"` // 累计转入(合约与现货账户) - 正
  24. TOTALTRANSFEROUT float64 `json:"totaltransferout" xorm:"TOTALTRANSFEROUT"` // 累计转出(合约与现货账户) - 负
  25. TOTALTRANSFERINCHARGE float64 `json:"totaltransferincharge" xorm:"TOTALTRANSFERINCHARGE"` // 累计转入手续费 - 负 - 预留
  26. TOTALTRANSFEROUTCHARGE float64 `json:"totaltransferoutcharge" xorm:"TOTALTRANSFEROUTCHARGE"` // 累计转出手续费 - 负 - 预留
  27. TOTALIN float64 `json:"totalin" xorm:"TOTALIN"` // 累计充值(现货账户与外部钱包) - 正
  28. TOTALOUT float64 `json:"totalout" xorm:"TOTALOUT"` // 累计提现(现货账户与外部钱包) - 负
  29. TOTALININCHARGE float64 `json:"totalinincharge" xorm:"TOTALININCHARGE"` // 累计充值手续费 - 负
  30. TOTALINOUTCHARGE float64 `json:"totalinoutcharge" xorm:"TOTALINOUTCHARGE"` // 累计提现手续费 - 负
  31. CURRENCYCODE string `json:"currencycode" xorm:"CURRENCYCODE"` // 币种代码
  32. CURRENCYDECIMALPLACE uint32 `json:"currencydecimalplace" xorm:"CURRENCYDECIMALPLACE"` // 币种小数位(param1)
  33. CURRENCYDISPLAYUNIT string `json:"currencydisplayunit" xorm:"CURRENCYDISPLAYUNIT"` // 币种显示单位(param2)
  34. CURRENCYIDS string `json:"-" xorm:"-" form:"currencyids"` // 币种ID(多个逗号分隔)
  35. }
  36. func (r *Taaccountdigital) calc() {
  37. }
  38. func (r *Taaccountdigital) buildSql() string {
  39. var sqlId utils.SQLVal = `
  40. SELECT A.ENUMITEMVALUE CURRENCYCODE, A.PARAM1 CURRENCYDECIMALPLACE, A.PARAM2 CURRENCYDISPLAYUNIT,
  41. TO_CHAR(NVL(TA.DIGITALACCOUNTID, '')) DIGITALACCOUNTID,
  42. CASE
  43. WHEN TA.CURRENCYID IS NULL THEN A.ENUMITEMNAME
  44. ELSE TA.CURRENCYID
  45. END CURRENCYID,
  46. CASE
  47. WHEN TA.USERID IS NULL THEN %v
  48. ELSE TA.USERID
  49. END USERID,
  50. NVL(TA.CURRENTBALANCE, 0) CURRENTBALANCE,
  51. NVL(TA.USEDMARGIN, 0) USEDMARGIN,
  52. NVL(TA.FREEZEMARGIN, 0) FREEZEMARGIN,
  53. NVL(TA.FREEZETRADECHARGE, 0) FREEZETRADECHARGE,
  54. NVL(TA.FREEZETRANSFER, 0) FREEZETRANSFER,
  55. NVL(TA.FREEZEINOUT, 0) FREEZEINOUT,
  56. NVL(TA.TOTALTRADEADD, 0) TOTALTRADEADD,
  57. NVL(TA.TOTALTRADEREDUCE, 0) TOTALTRADEREDUCE,
  58. NVL(TA.TOTALTRADECHARGE, 0) TOTALTRADECHARGE,
  59. NVL(TA.TOTALTRANSFERIN, 0) TOTALTRANSFERIN,
  60. NVL(TA.TOTALTRANSFEROUT, 0) TOTALTRANSFEROUT,
  61. NVL(TA.TOTALTRANSFERINCHARGE, 0) TOTALTRANSFERINCHARGE,
  62. NVL(TA.TOTALTRANSFEROUTCHARGE, 0) TOTALTRANSFEROUTCHARGE,
  63. NVL(TA.TOTALIN, 0) TOTALIN,
  64. NVL(TA.TOTALOUT, 0) TOTALOUT,
  65. NVL(TA.TOTALININCHARGE, 0) TOTALININCHARGE,
  66. NVL(TA.TOTALINOUTCHARGE, 0) TOTALINOUTCHARGE
  67. FROM (SELECT E.* FROM ENUMDICITEM E WHERE E.ENUMDICCODE = 'digitalcurrency') A
  68. LEFT JOIN (SELECT T.* FROM TAACCOUNTDIGITAL T WHERE T.USERID = %v) TA ON A.ENUMITEMNAME = TA.CURRENCYID
  69. where 1=1
  70. `
  71. if len(strings.TrimSpace(r.CURRENCYIDS)) > 0 {
  72. sqlId.Join(fmt.Sprintf(" AND A.ENUMITEMNAME IN (%v)", strings.TrimSpace(r.CURRENCYIDS)))
  73. }
  74. sqlId.AndEx("TA.DIGITALACCOUNTID", strings.TrimSpace(r.DIGITALACCOUNTID), strings.TrimSpace(r.DIGITALACCOUNTID) != "")
  75. sqlId.FormatParam(r.USERID, r.USERID)
  76. sqlId.Join(" ORDER BY NVL(TA.CURRENTBALANCE, 0) DESC, A.ENUMITEMNAME")
  77. return sqlId.String()
  78. }
  79. // GetDataEx 从数据库中查询数据
  80. func (r *Taaccountdigital) GetDataEx() (interface{}, error) {
  81. sData := make([]Taaccountdigital, 0)
  82. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  83. for i := range sData {
  84. sData[i].calc()
  85. }
  86. return sData, err
  87. }
  88. // Taaccountdigitalchangeapply 数字账户变更申请表
  89. type Taaccountdigitalchangeapply struct {
  90. APPLYID string `json:"applyid" xorm:"APPLYID"` // 申请ID(403+Unix秒时间戳(10位)+xxxxxx)
  91. USERID uint64 `json:"userid" xorm:"USERID"` // 用户ID
  92. CURRENCYID uint32 `json:"currencyid" xorm:"CURRENCYID"` // 货币ID - 枚举"digitalcurrency"
  93. DIGITALACCOUNTID string `json:"digitalaccountid" xorm:"DIGITALACCOUNTID" form:"digitalaccountid" binding:"required"` // 数字账号ID
  94. ACCOUNTID uint64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账号ID (转入\转出)
  95. DIGITALTRANSFERTYPE uint32 `json:"digitaltransfertype" xorm:"DIGITALTRANSFERTYPE"` // 划转类型 - 枚举"digitaltransfertype"(1:充值 2:提现 3:转入 4:转出)
  96. APPLYAMOUNT float64 `json:"applyamount" xorm:"APPLYAMOUNT"` // 申请金额
  97. CHARGE float64 `json:"charge" xorm:"CHARGE"` // 手续费
  98. ACTUALAMOUNT float64 `json:"actualamount" xorm:"ACTUALAMOUNT"` // 实际金额(申请金额 - 手续费)
  99. APPLYSTATUS uint32 `json:"applystatus" xorm:"APPLYSTATUS"` // 申请状态 - 枚举"bankapplystatus"(1:待审核 2:审核中 3:审核通过 4:审核拒绝 5:审核失败 6:审核超时 7:已撤销)
  100. HANDLESTATUS uint64 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态 - 枚举"digitalhandlestatus"(1:账户服务处理开始 2:账户服务处理失败 3:账户服务处理成功 4:数字账户服务处理开始 5:数字账户服务处理失败 6:数字账户服务处理成功)
  101. APPLYTIME time.Time `json:"applytime" xorm:"APPLYTIME"` // 申请时间
  102. REVOKESRC uint32 `json:"revokesrc" xorm:"REVOKESRC"` // 撤销来源 - 枚举"operatesrc"(1:管理端 2:客户端)
  103. REVOKERID uint64 `json:"revokerid" xorm:"REVOKERID"` // 撤销人
  104. REVOKETIME time.Time `json:"revoketime" xorm:"REVOKETIME"` // 撤销时间
  105. AUDITORID uint64 `json:"auditorid" xorm:"AUDITORID"` // 审核人
  106. AUDITTIME time.Time `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  107. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  108. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  109. RETCODE string `json:"retcode" xorm:"RETCODE"` // 错误代码
  110. APPLYDATE string `json:"-" xorm:"-" form:"applydate"` // 申请日期(yyyyMMdd)
  111. TRANSFERTYPES string `json:"-" xorm:"-" form:"transfertypes"` // 划转类型(多个逗号分隔) - 枚举"digitaltransfertype"(1:充值 2:提现 3:转入 4:转出)
  112. }
  113. func (r *Taaccountdigitalchangeapply) calc() {
  114. }
  115. func (r *Taaccountdigitalchangeapply) buildSql() string {
  116. var sqlId utils.SQLVal = `
  117. select t.* from taaccountdigitalchangeapply t
  118. where t.digitalaccountid = %v
  119. `
  120. sqlId.AndEx("to_char(t.applytime, 'yyyyMMdd')", r.APPLYDATE, strings.TrimSpace(r.APPLYDATE) != "")
  121. if len(strings.TrimSpace(r.TRANSFERTYPES)) > 0 {
  122. sqlId.Join(fmt.Sprintf(" AND t.digitaltransfertype IN (%v)", strings.TrimSpace(r.TRANSFERTYPES)))
  123. }
  124. sqlId.FormatParam(r.DIGITALACCOUNTID)
  125. sqlId.Join(" ORDER BY t.APPLYTIME DESC")
  126. return sqlId.String()
  127. }
  128. // GetDataEx 从数据库中查询数据
  129. func (r *Taaccountdigitalchangeapply) GetDataEx() (interface{}, error) {
  130. sData := make([]Taaccountdigitalchangeapply, 0)
  131. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  132. for i := range sData {
  133. sData[i].calc()
  134. }
  135. return sData, err
  136. }
  137. // Taaccountdigitallog 数字账户流水表
  138. type Taaccountdigitallog struct {
  139. LOGID string `json:"logid" xorm:"LOGID"` // 流水ID(402+Unix秒时间戳(10位)+xxxxxx)
  140. DIGITALACCOUNTID string `json:"digitalaccountid" xorm:"DIGITALACCOUNTID" form:"digitalaccountid" binding:"required"` // 数字账号ID
  141. USERID uint64 `json:"userid" xorm:"USERID"` // 用户ID
  142. CURRENCYID uint32 `json:"currencyid" xorm:"CURRENCYID"` // 货币ID - 枚举"digitalcurrency"
  143. CHANGEVALUE float64 `json:"changevalue" xorm:"CHANGEVALUE"` // 变更值
  144. BEFOREVALUE float64 `json:"beforevalue" xorm:"BEFOREVALUE"` // 变更前
  145. AFTERVALUE float64 `json:"aftervalue" xorm:"AFTERVALUE"` // 变更后
  146. DIGITALOPERATETYPE uint32 `json:"digitaloperatetype" xorm:"DIGITALOPERATETYPE"` // 操作类型 - 枚举"digitaloperatetype"(1.冻结 2:解冻 3:增加 4:减少 5:最大冻结)
  147. DIGITALBUSINESSCODE uint32 `json:"digitalbusinesscode" xorm:"DIGITALBUSINESSCODE"` // 业务编号 - 枚举"digitalbusinesscode"(1:充值 2:提现 3:转入 4:转出 5:现货交易 6:现货交易手续费 7:提现手续费...)
  148. MONEYTICKET string `json:"-" xorm:"MONEYTICKET"` // 资金流水号:银行端流水号
  149. RELATEORDERID string `json:"-" xorm:"RELATEORDERID"` // 关联单号
  150. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  151. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 创建交易日(yyyyMMdd)
  152. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  153. BUSINESSCODES string `json:"-" xorm:"-" form:"businesscodes"` // 业务类型(多个逗号分隔) - 枚举digitalbusinesscode(1:充值 2:提现 3:转入 4:转出 5:现货交易 6:现货交易手续费 7:提现手续费...)
  154. }
  155. func (r *Taaccountdigitallog) calc() {
  156. }
  157. func (r *Taaccountdigitallog) buildSql() string {
  158. var sqlId utils.SQLVal = `
  159. select t.* from taaccountdigitallog t
  160. where t.digitalaccountid = %v
  161. `
  162. sqlId.AndEx("t.tradedate", r.TRADEDATE, strings.TrimSpace(r.TRADEDATE) != "")
  163. if len(strings.TrimSpace(r.BUSINESSCODES)) > 0 {
  164. sqlId.Join(fmt.Sprintf(" AND t.digitalbusinesscode IN (%v)", strings.TrimSpace(r.BUSINESSCODES)))
  165. }
  166. sqlId.FormatParam(r.DIGITALACCOUNTID)
  167. sqlId.Join(" ORDER BY t.CREATETIME DESC")
  168. return sqlId.String()
  169. }
  170. // GetDataEx 从数据库中查询数据
  171. func (r *Taaccountdigitallog) GetDataEx() (interface{}, error) {
  172. sData := make([]Taaccountdigitallog, 0)
  173. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  174. for i := range sData {
  175. sData[i].calc()
  176. }
  177. return sData, err
  178. }