taaccountdigital.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  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. PageEx `xorm:"extends"` // 页码信息
  113. }
  114. func (r *Taaccountdigitalchangeapply) calc() {
  115. }
  116. func (r *Taaccountdigitalchangeapply) buildSql() string {
  117. var sqlId utils.SQLVal = `
  118. select t.* from taaccountdigitalchangeapply t
  119. where t.digitalaccountid = %v
  120. `
  121. sqlId.AndEx("to_char(t.applytime, 'yyyyMMdd')", r.APPLYDATE, strings.TrimSpace(r.APPLYDATE) != "")
  122. if len(strings.TrimSpace(r.TRANSFERTYPES)) > 0 {
  123. sqlId.Join(fmt.Sprintf(" AND t.digitaltransfertype IN (%v)", strings.TrimSpace(r.TRANSFERTYPES)))
  124. }
  125. sqlId.FormatParam(r.DIGITALACCOUNTID)
  126. sqlId.Join(" ORDER BY t.APPLYTIME DESC")
  127. sqlId.Page(r.Page, r.PageSize)
  128. return sqlId.String()
  129. }
  130. // GetDataByPage 从数据库中查询分页数据
  131. func (r *Taaccountdigitalchangeapply) GetDataByPage() (interface{}, error, int, int, int) {
  132. sData := make([]Taaccountdigitalchangeapply, 0)
  133. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  134. total := 0
  135. for i := range sData {
  136. sData[i].calc()
  137. total = sData[i].Total
  138. }
  139. return sData, err, r.Page, r.PageSize, total
  140. }
  141. // Taaccountdigitallog 数字账户流水表
  142. type Taaccountdigitallog struct {
  143. LOGID string `json:"logid" xorm:"LOGID"` // 流水ID(402+Unix秒时间戳(10位)+xxxxxx)
  144. DIGITALACCOUNTID string `json:"digitalaccountid" xorm:"DIGITALACCOUNTID" form:"digitalaccountid" binding:"required"` // 数字账号ID
  145. USERID uint64 `json:"userid" xorm:"USERID"` // 用户ID
  146. CURRENCYID uint32 `json:"currencyid" xorm:"CURRENCYID"` // 货币ID - 枚举"digitalcurrency"
  147. CHANGEVALUE float64 `json:"changevalue" xorm:"CHANGEVALUE"` // 变更值
  148. BEFOREVALUE float64 `json:"beforevalue" xorm:"BEFOREVALUE"` // 变更前
  149. AFTERVALUE float64 `json:"aftervalue" xorm:"AFTERVALUE"` // 变更后
  150. DIGITALOPERATETYPE uint32 `json:"digitaloperatetype" xorm:"DIGITALOPERATETYPE"` // 操作类型 - 枚举"digitaloperatetype"(1.冻结 2:解冻 3:增加 4:减少 5:最大冻结)
  151. DIGITALBUSINESSCODE uint32 `json:"digitalbusinesscode" xorm:"DIGITALBUSINESSCODE"` // 业务编号 - 枚举"digitalbusinesscode"(1:充值 2:提现 3:转入 4:转出 5:现货交易 6:现货交易手续费 7:提现手续费...)
  152. MONEYTICKET string `json:"-" xorm:"MONEYTICKET"` // 资金流水号:银行端流水号
  153. RELATEORDERID string `json:"-" xorm:"RELATEORDERID"` // 关联单号
  154. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  155. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 创建交易日(yyyyMMdd)
  156. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  157. BUSINESSCODES string `json:"-" xorm:"-" form:"businesscodes"` // 业务类型(多个逗号分隔) - 枚举digitalbusinesscode(1:充值 2:提现 3:转入 4:转出 5:现货交易 6:现货交易手续费 7:提现手续费...)
  158. PageEx `xorm:"extends"` // 页码信息
  159. }
  160. func (r *Taaccountdigitallog) calc() {
  161. }
  162. func (r *Taaccountdigitallog) buildSql() string {
  163. var sqlId utils.SQLVal = `
  164. select t.* from taaccountdigitallog t
  165. where t.digitalaccountid = %v
  166. `
  167. sqlId.AndEx("t.tradedate", r.TRADEDATE, strings.TrimSpace(r.TRADEDATE) != "")
  168. if len(strings.TrimSpace(r.BUSINESSCODES)) > 0 {
  169. sqlId.Join(fmt.Sprintf(" AND t.digitalbusinesscode IN (%v)", strings.TrimSpace(r.BUSINESSCODES)))
  170. }
  171. sqlId.FormatParam(r.DIGITALACCOUNTID)
  172. sqlId.Join(" ORDER BY t.CREATETIME DESC")
  173. sqlId.Page(r.Page, r.PageSize)
  174. return sqlId.String()
  175. }
  176. // GetDataByPage 从数据库中查询分页数据
  177. func (r *Taaccountdigitallog) GetDataByPage() (interface{}, error, int, int, int) {
  178. sData := make([]Taaccountdigitallog, 0)
  179. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  180. total := 0
  181. for i := range sData {
  182. sData[i].calc()
  183. total = sData[i].Total
  184. }
  185. return sData, err, r.Page, r.PageSize, total
  186. }
  187. // DigitaltradeOrderdetail 数字货币交易委托表
  188. type DigitaltradeOrderdetail struct {
  189. ORDERID string `json:"orderid" xorm:"ORDERID"` // 委托单号(600+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  190. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  191. BUILDTYPE uint32 `json:"buildtype" xorm:"BUILDTYPE"` // 委托单据类型 - 1:建仓 2:平仓 3:先平后建
  192. PREORDERID string `json:"preorderid" xorm:"PREORDERID"` // 关联预埋单号(止盈止损单时填写)
  193. CANCELORDERID string `json:"cancelorderid" xorm:"CANCELORDERID"` // 撤单单号(撤单时填写)
  194. MARKETID uint32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  195. GOODSID uint32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  196. BASECURRENCYID uint32 `json:"basecurrencyid" xorm:"BASECURRENCYID"` // 基础货币ID - digitalcurrency枚举
  197. QUOTECURRENCYID uint32 `json:"quotecurrencyid" xorm:"QUOTECURRENCYID"` // 计价货币ID - digitalcurrency枚举
  198. USERID uint64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  199. MEMBERUSERID uint64 `json:"memberuserid" xorm:"MEMBERUSERID"` // 所属会员UserID
  200. BASEACCOUNTID string `json:"baseaccountid" xorm:"BASEACCOUNTID"` // 基础货币账户ID
  201. QUOTEACCOUNTID string `json:"quoteaccountid" xorm:"QUOTEACCOUNTID"` // 计价货币账户ID
  202. BUYORSELL uint32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  203. PRICEMODE uint32 `json:"pricemode" xorm:"PRICEMODE"` // 取价方式- 枚举"Pricemode2" - 1:市价 2: 限价
  204. ORDERMODE uint32 `json:"ordermode" xorm:"ORDERMODE"` // 委托方式 - 1:按数量 2:按成交额(市价时-先不实现)
  205. ORDERPRICE float64 `json:"orderprice" xorm:"ORDERPRICE"` // 委托价格 - 按商品行情小数位
  206. ORDERVOLUME float64 `json:"ordervolume" xorm:"ORDERVOLUME"` // 委托数量 - 按基础货币小数位
  207. FREEZEVOLUME float64 `json:"freezevolume" xorm:"FREEZEVOLUME"` // 冻结数量 - 按基础货币小数位(卖)
  208. UNFREEZEVOLUME float64 `json:"unfreezevolume" xorm:"UNFREEZEVOLUME"` // 解冻数量 - 按基础货币小数位(卖)
  209. TRADEVOLUME float64 `json:"tradevolume" xorm:"TRADEVOLUME"` // 成交数量 - 按基础货币小数位
  210. CANCELVOLUME float64 `json:"cancelvolume" xorm:"CANCELVOLUME"` // 撤单数量 - 按基础货币小数位
  211. ORDERVALUE float64 `json:"ordervalue" xorm:"ORDERVALUE"` // 委托金额 - 按计价货币小数位
  212. FREEZEVALUE float64 `json:"freezevalue" xorm:"FREEZEVALUE"` // 冻结金额 - 按计价货币小数位(买)
  213. UNFREEZEVALUE float64 `json:"unfreezevalue" xorm:"UNFREEZEVALUE"` // 解冻金额 - 按计价货币小数位(买)
  214. FREEZECHARGE float64 `json:"freezecharge" xorm:"FREEZECHARGE"` // 冻结手续费
  215. UNFREEZECHARGE float64 `json:"unfreezecharge" xorm:"UNFREEZECHARGE"` // 解冻手续费
  216. VALIDTYPE uint32 `json:"validtype" xorm:"VALIDTYPE"` // 有效类型 - 枚举"ValidType" - 4一直有效
  217. VALIDTIME time.Time `json:"validtime" xorm:"VALIDTIME"` // 有效期限
  218. OPERATETYPE uint32 `json:"operatetype" xorm:"OPERATETYPE"` // 操作类型 -枚举“orderoperatetype" - 1:正常下单 2:斩仓 3:转单 4:结算撤单 5:系统卖出(适用于先平后建的卖出) 6:行情源报价 7:(结算)到期强平 8:(结算)协议转让 9:系统对冲单 10:(结算)到期无效 11:交割协议转让 12:交割协议平仓 13:交割成交(所有权) 14:管理端强行平仓 15:管理端协议转让 ... 23:融资买入
  219. ORDERTIME time.Time `json:"ordertime" xorm:"ORDERTIME"` // 委托时间
  220. ORDERSRC uint32 `json:"ordersrc" xorm:"ORDERSRC"` // 委托来源 - 1:客户端 2:管理端 3:风控服务 4:交割服务 5:交易服务 6:交易日结 7:商品强平 8:管理端商品退市强平 9:交易接口 10:交割服务商被动(受托竞价) 11:预埋触发
  221. ORDERSTATUS uint32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 委托状态 - 参考枚举''orderstatus'' - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:部成 8:已成 9:部成部撤 10:成交失败 11:委托拒绝 12:经过摘牌(先摘后挂专用) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用) 17:冻结PD成功 18:冻结PD失败 19:冻结能量成功 20:冻结能量失败 21:预约已报价 22:过期未付 23:优惠券处理中 24:仓单生成失败 25:首付扣款失败 26:履约失败 27:撤单解冻贷款失败
  222. OPERATORID uint64 `json:"operatorid" xorm:"OPERATORID"` // 登录账号(LoginID)
  223. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  224. CLIENTORDERTIME time.Time `json:"clientordertime" xorm:"CLIENTORDERTIME"` // 客户端委托时间
  225. CLIENTTICKET string `json:"clientticket" xorm:"CLIENTTICKET"` // 客户端流水号
  226. UUID string `json:"uuid" xorm:"UUID"` // 发起端唯一id
  227. CLIENTTYPE uint32 `json:"clienttype" xorm:"CLIENTTYPE"` // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
  228. RETCODE uint64 `json:"retcode" xorm:"RETCODE"` // 错误代码
  229. TRADEPROPERTY uint32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
  230. ORDERSTATUSES string `json:"-" xorm:"-" form:"orderstatuses"` // 委托状态(多个逗号分隔) 参考枚举orderstatus
  231. DIGITALACCOUNTID string `json:"-" xorm:"-" form:"digitalaccountid"` // 数字账户ID
  232. PageEx `xorm:"extends"` // 页码信息
  233. }
  234. func (r *DigitaltradeOrderdetail) calc() {
  235. }
  236. func (r *DigitaltradeOrderdetail) buildSql() string {
  237. var sqlId utils.SQLVal = `
  238. select t.* from digitaltrade_orderdetail t
  239. where t.userid = %v
  240. `
  241. if len(strings.TrimSpace(r.DIGITALACCOUNTID)) > 0 {
  242. sqlId.Join(fmt.Sprintf(" AND (t.baseaccountid = %v or t.quoteaccountid = %v)", strings.TrimSpace(r.DIGITALACCOUNTID), strings.TrimSpace(r.DIGITALACCOUNTID)))
  243. }
  244. sqlId.AndEx("t.goodsid", r.GOODSID, r.GOODSID > 0)
  245. sqlId.AndEx("t.tradedate", r.TRADEDATE, strings.TrimSpace(r.TRADEDATE) != "")
  246. if len(strings.TrimSpace(r.ORDERSTATUSES)) > 0 {
  247. sqlId.Join(fmt.Sprintf(" AND t.ORDERSTATUS IN (%v)", strings.TrimSpace(r.ORDERSTATUSES)))
  248. }
  249. sqlId.FormatParam(r.USERID)
  250. sqlId.Join(" ORDER BY t.ORDERID DESC")
  251. sqlId.Page(r.Page, r.PageSize)
  252. return sqlId.String()
  253. }
  254. // GetDataByPage 从数据库中查询分页数据
  255. func (r *DigitaltradeOrderdetail) GetDataByPage() (interface{}, error, int, int, int) {
  256. sData := make([]DigitaltradeOrderdetail, 0)
  257. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  258. total := 0
  259. for i := range sData {
  260. sData[i].calc()
  261. total = sData[i].Total
  262. }
  263. return sData, err, r.Page, r.PageSize, total
  264. }
  265. // DigitaltradeTradedetail 数字货币交易成交单表
  266. type DigitaltradeTradedetail struct {
  267. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(601+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  268. BUYORSELL uint32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  269. ORDERID string `json:"orderid" xorm:"ORDERID"` // 委托单号
  270. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  271. MARKETID uint32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  272. GOODSID uint32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  273. BASECURRENCYID uint32 `json:"basecurrencyid" xorm:"BASECURRENCYID"` // 基础货币ID - digitalcurrency枚举
  274. QUOTECURRENCYID uint32 `json:"quotecurrencyid" xorm:"QUOTECURRENCYID"` // 计价货币ID - digitalcurrency枚举
  275. USERID uint64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  276. MEMBERUSERID uint64 `json:"memberuserid" xorm:"MEMBERUSERID"` // 所属会员UserID
  277. BASEACCOUNTID string `json:"baseaccountid" xorm:"BASEACCOUNTID"` // 基础货币账户ID
  278. QUOTEACCOUNTID string `json:"quoteaccountid" xorm:"QUOTEACCOUNTID"` // 计价货币账户ID
  279. MATCHUSERID uint64 `json:"matchuserid" xorm:"MATCHUSERID"` // 对手用户ID
  280. MATCHBASEACCOUNTID string `json:"matchbaseaccountid" xorm:"MATCHBASEACCOUNTID"` // 对手基础货币账户ID
  281. MATCHQUOTEACCOUNTID string `json:"matchquoteaccountid" xorm:"MATCHQUOTEACCOUNTID"` // 对手计价货币账户ID
  282. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格
  283. TRADEVOLUME float64 `json:"tradevolume" xorm:"TRADEVOLUME"` // 成交数量 - 按基础货币小数位
  284. TRADEVALUE float64 `json:"tradevalue" xorm:"TRADEVALUE"` // 成交金额 - 按计价货币小数位
  285. REALTRADEVALUE float64 `json:"realtradevalue" xorm:"REALTRADEVALUE"` // 实际成交金额 - 按计价货币小数位
  286. TRADECHARGE float64 `json:"tradecharge" xorm:"TRADECHARGE"` // 手续费 - 买方按成交金额 卖方按成交数量
  287. TRADETIME time.Time `json:"tradetime" xorm:"TRADETIME"` // 成交时间
  288. TRADETYPE uint32 `json:"tradetype" xorm:"TRADETYPE"` // 成交类别 - 枚举 tradetype(1:正常委托成交 2:定向做市成交(接单))
  289. BUILDTYPE uint32 `json:"buildtype" xorm:"BUILDTYPE"` // 委托单据类型 1:建仓
  290. STATUS uint32 `json:"status" xorm:"STATUS"` // 处理状态 - 1:待处理 2:已处理 3:处理失败
  291. NFEEALGORITHM uint32 `json:"nfeealgorithm" xorm:"NFEEALGORITHM"` // 手续费收取方式 1:比率 2:固定
  292. OPENEXCHAGECHARGEVALUE float64 `json:"openexchagechargevalue" xorm:"OPENEXCHAGECHARGEVALUE"` // 手续费设置值(平台部分)
  293. OPENMEMBERCHARGEVALUE float64 `json:"openmemberchargevalue" xorm:"OPENMEMBERCHARGEVALUE"` // 手续费设置值(会员部分)
  294. TRADEPROPERTY uint32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
  295. DIGITALACCOUNTID string `json:"-" xorm:"-" form:"digitalaccountid"` // 数字账户ID
  296. PageEx `xorm:"extends"` // 页码信息
  297. }
  298. func (r *DigitaltradeTradedetail) calc() {
  299. }
  300. func (r *DigitaltradeTradedetail) buildSql() string {
  301. var sqlId utils.SQLVal = `
  302. select t.* from digitaltrade_tradedetail t
  303. where t.userid = %v
  304. `
  305. if len(strings.TrimSpace(r.DIGITALACCOUNTID)) > 0 {
  306. sqlId.Join(fmt.Sprintf(" AND (t.baseaccountid = %v or t.quoteaccountid = %v)", strings.TrimSpace(r.DIGITALACCOUNTID), strings.TrimSpace(r.DIGITALACCOUNTID)))
  307. }
  308. sqlId.AndEx("t.goodsid", r.GOODSID, r.GOODSID > 0)
  309. sqlId.AndEx("t.tradedate", r.TRADEDATE, strings.TrimSpace(r.TRADEDATE) != "")
  310. sqlId.FormatParam(r.USERID)
  311. sqlId.Join(" ORDER BY t.TRADEID DESC")
  312. sqlId.Page(r.Page, r.PageSize)
  313. return sqlId.String()
  314. }
  315. // GetDataEx 从数据库中查询数据
  316. func (r *DigitaltradeTradedetail) GetDataByPage() (interface{}, error, int, int, int) {
  317. sData := make([]DigitaltradeTradedetail, 0)
  318. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  319. total := 0
  320. for i := range sData {
  321. sData[i].calc()
  322. total = sData[i].Total
  323. }
  324. return sData, err, r.Page, r.PageSize, total
  325. }