erms2.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package erms2
  2. import (
  3. "fmt"
  4. "mtp2_if/db"
  5. "mtp2_if/global/app"
  6. "mtp2_if/global/e"
  7. "mtp2_if/logger"
  8. "net/http"
  9. "time"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // QueryInnerTradeDetailReq 查询内部成交单信息请求参数
  13. type QueryInnerTradeDetailReq struct {
  14. AccountID int `form:"accountid" binding:"required"`
  15. }
  16. // QueryInnerTradeDetailRsp 内部成交单信息
  17. type QueryInnerTradeDetailRsp struct {
  18. Tradeid int64 `json:"tradeid" xorm:"'TRADEID'" binding:"required"` // 成交单号(108+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  19. Buyorsell int64 `json:"buyorsell" xorm:"'BUYORSELL'" binding:"required"` // 方向 - 0:买 1:卖
  20. Orderid int64 `json:"orderid" xorm:"'ORDERID'"` // 委托单号
  21. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
  22. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 账号ID
  23. Goodsid int64 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
  24. Marketid int64 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
  25. Tradetime time.Time `json:"tradetime" xorm:"'TRADETIME'"` // 成交时间
  26. Tradeprice float64 `json:"tradeprice" xorm:"'TRADEPRICE'"` // 成交价格
  27. Tradeqty int64 `json:"tradeqty" xorm:"'TRADEQTY'"` // 成交数量
  28. Tradeamount float64 `json:"tradeamount" xorm:"'TRADEAMOUNT'"` // 成交金额(账户)
  29. Closepl float64 `json:"closepl" xorm:"'CLOSEPL'"` // 平仓盈亏(账户)
  30. Opencharge float64 `json:"opencharge" xorm:"'OPENCHARGE'"` // 建仓手续费(账户)
  31. Closecharge float64 `json:"closecharge" xorm:"'CLOSECHARGE'"` // 平仓手续费(账户)
  32. Tradetype int64 `json:"tradetype" xorm:"'TRADETYPE'"` // 成交类别 - 1:正常委托成交 2:风控斩仓成交 3:修正持仓成交 4:管理端斩仓成交
  33. Channelbuildtype int64 `json:"channelbuildtype" xorm:"'CHANNELBUILDTYPE'"` // 委托单据类型 0:无 1:建仓 2:平仓
  34. Closetype int64 `json:"closetype" xorm:"'CLOSETYPE'"` // 平仓方式 - 0:无 1:平今 2:平昨
  35. Hedgeflag int64 `json:"hedgeflag" xorm:"'HEDGEFLAG'"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
  36. Openqty int64 `json:"openqty" xorm:"'OPENQTY'"` // 开仓数量(先建后平操作 需要记录)
  37. Closeqty int64 `json:"closeqty" xorm:"'CLOSEQTY'"` // 平仓数量(先建后平操作 需要记录)
  38. Status int64 `json:"status" xorm:"'STATUS'"` // 处理状态 - 1:待处理 2:已处理 3:处理失败
  39. Isreckoned int64 `json:"isreckoned" xorm:"'ISRECKONED'"` // 是否结算 - 0:未结算 1:已结算
  40. Openfeealgorithm int64 `json:"openfeealgorithm" xorm:"'OPENFEEALGORITHM'"` // 建仓手续费收取方式 1:比率 2:固定
  41. Openchargevalue float64 `json:"openchargevalue" xorm:"'OPENCHARGEVALUE'"` // 建仓手续费设置值
  42. Closefeealgorithm int64 `json:"closefeealgorithm" xorm:"'CLOSEFEEALGORITHM'"` // 平仓手续费收取方式 1:比率 2:固定
  43. Closechargevalue float64 `json:"closechargevalue" xorm:"'CLOSECHARGEVALUE'"` // 平仓手续费设置值
  44. Accountcurrencyid int64 `json:"accountcurrencyid" xorm:"'ACCOUNTCURRENCYID'"` // 账户币种ID
  45. Goodscurrencyid int64 `json:"goodscurrencyid" xorm:"'GOODSCURRENCYID'"` // 商品币种ID
  46. Curexchangerate float64 `json:"curexchangerate" xorm:"'CUREXCHANGERATE'"` // 当前汇率
  47. Opencharge2 float64 `json:"opencharge2" xorm:"'OPENCHARGE2'"` // 建仓手续费(商品)
  48. Closecharge2 float64 `json:"closecharge2" xorm:"'CLOSECHARGE2'"` // 平仓手续费(商品)
  49. Closepl2 float64 `json:"closepl2" xorm:"'CLOSEPL2'"` // 平仓盈亏(商品)
  50. Closepl3 float64 `json:"closepl3" xorm:"'CLOSEPL3'"` // 平仓盈亏(账户)(逐笔)
  51. Closepl4 float64 `json:"closepl4" xorm:"'CLOSEPL4'"` // 平仓盈亏(商品)(逐笔)
  52. Extenalopenfeealgorithm int64 `json:"extenalopenfeealgorithm" xorm:"'EXTENALOPENFEEALGORITHM'"` // 建仓手续费收取方式(外部配置) 1:比率 2:固定
  53. Extenalopenchargevalue float64 `json:"extenalopenchargevalue" xorm:"'EXTENALOPENCHARGEVALUE'"` // 建仓手续费设置值
  54. Extenalclosefeealgorithm int64 `json:"extenalclosefeealgorithm" xorm:"'EXTENALCLOSEFEEALGORITHM'"` // 平仓手续费收取方式 1:比率 2:固定
  55. Extenalclosechargevalue float64 `json:"extenalclosechargevalue" xorm:"'EXTENALCLOSECHARGEVALUE'"` // 平仓手续费设置值
  56. Extenalopencharge float64 `json:"extenalopencharge" xorm:"'EXTENALOPENCHARGE'"` // 建仓手续费(商品)(外部)
  57. Extenalclosecharge float64 `json:"extenalclosecharge" xorm:"'EXTENALCLOSECHARGE'"` // 平仓手续费(商品)(外部)
  58. Parentaccountid int64 `json:"parentaccountid" xorm:"'PARENTACCOUNTID'"` // 所属母账户
  59. Relatedouttradeid int64 `json:"relatedouttradeid" xorm:"'RELATEDOUTTRADEID'"` // 关联外部成交单ID
  60. Asapplyid int64 `json:"asapplyid" xorm:"'ASAPPLYID'" binding:"required"` // 策略申请ID
  61. Detailtype int64 `json:"detailtype" xorm:"'DETAILTYPE'"` // 明细类型 - 1:套利对冲 2:期货换月 3:期货仓位调整
  62. Spotcontractid int64 `json:"spotcontractid" xorm:"'SPOTCONTRACTID'"` // 现货合同ID [1:套利对冲 为合同ID,2:期货换月\3:期货仓位调整时为0]
  63. ASContractno string `json:"ascontractno" xorm:"'ASCONTRACTNO'"` // 策略编号
  64. Spotcontractno string `json:"spotcontractno" xorm:"'SPOTCONTRACTNO'"` // 现货合同编号
  65. }
  66. // QueryInnerTradeDetail 查询内部成交单信息
  67. // @Summary 查询内部成交单信息
  68. // @Produce json
  69. // @Security ApiKeyAuth
  70. // @Param accountid query int true "资金账户"
  71. // @Success 200 {object} QueryInnerTradeDetailRsp
  72. // @Failure 500 {object} app.Response
  73. // @Router /Erms2/QueryInnerTradeDetail [get]
  74. // @Tags 风险管理
  75. func QueryInnerTradeDetail(c *gin.Context) {
  76. appG := app.Gin{C: c}
  77. // 获取请求参数
  78. var req QueryInnerTradeDetailReq
  79. if err := appG.C.ShouldBindQuery(&req); err != nil {
  80. logger.GetLogger().Errorf("QueryInnerTradeDetail failed: %s", err.Error())
  81. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  82. return
  83. }
  84. // 查询数据
  85. engine := db.GetEngine()
  86. datas := make([]QueryInnerTradeDetailRsp, 0)
  87. sql := fmt.Sprintf(`select
  88. t.Tradeid,
  89. t.Buyorsell,
  90. t.Orderid,
  91. t.Tradedate,
  92. t.Accountid,
  93. t.Goodsid,
  94. t.Marketid,
  95. t.Tradetime,
  96. t.Tradeprice,
  97. t.Tradeqty,
  98. t.Tradeamount,
  99. t.Closepl,
  100. t.Opencharge,
  101. t.Closecharge,
  102. t.Tradetype,
  103. t.Channelbuildtype,
  104. t.Closetype,
  105. t.Hedgeflag,
  106. t.Openqty,
  107. t.Closeqty,
  108. t.Status,
  109. t.Isreckoned,
  110. t.Openfeealgorithm,
  111. t.Openchargevalue,
  112. t.Closefeealgorithm,
  113. t.Closechargevalue,
  114. t.Accountcurrencyid,
  115. t.Goodscurrencyid,
  116. t.Curexchangerate,
  117. t.Opencharge2,
  118. t.Closecharge2,
  119. t.Closepl2,
  120. t.Closepl3,
  121. t.Closepl4,
  122. t.Extenalopenfeealgorithm,
  123. t.Extenalopenchargevalue,
  124. t.Extenalclosefeealgorithm,
  125. t.Extenalclosechargevalue,
  126. t.Extenalopencharge,
  127. t.Extenalclosecharge,
  128. t.Parentaccountid,
  129. t.Relatedouttradeid,
  130. ast.Asapplyid,
  131. ast.Detailtype,
  132. ast.Spotcontractid,
  133. asd.ContractNo ASContractno,
  134. sc.contractno Spotcontractno
  135. from Hedge_InnerTradeDetail t
  136. left join ERMS2_ASTradeDetails ast on t.relatedouttradeid = OutTradeID
  137. left join ERMS2_ArbitrageStrategy asd on ast.asapplyid = asd.asapplyid
  138. left join ERMS2_SpotContract sc on ast.spotcontractid = sc.spotcontractid
  139. where t.Accountid = %d`, req.AccountID)
  140. if err := engine.SQL(sql).Find(&datas); err != nil {
  141. // 查询失败
  142. logger.GetLogger().Errorf("QueryInnerTradeDetail failed: %s", err.Error())
  143. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  144. return
  145. }
  146. // 查询成功
  147. logger.GetLogger().Infof("QueryInnerTradeDetail successed: %v", datas)
  148. appG.Response(http.StatusOK, e.SUCCESS, datas)
  149. }