|
|
@@ -1,6 +1,7 @@
|
|
|
package models
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"mtp2_if/db"
|
|
|
"time"
|
|
|
)
|
|
|
@@ -425,6 +426,125 @@ func GetHedgeInnerOrderDetails(accountID int) ([]QueryHedgeOrderDetailRsp, error
|
|
|
return rsp, nil
|
|
|
}
|
|
|
|
|
|
+// GetHisHedgeInnerOrderDetails 获取指定资金账号的通道交易历史内部委托单信息
|
|
|
+func GetHisHedgeInnerOrderDetails(accountID int, startDate, endDate string) ([]QueryHedgeOrderDetailRsp, error) {
|
|
|
+ type orderDetail struct {
|
|
|
+ Orderid int64 `json:"orderid" xorm:"'ORDERID'" binding:"required"` // 委托单号(107+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
|
|
|
+ Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
|
|
|
+ Channelbuildtype int32 `json:"channelbuildtype" xorm:"'CHANNELBUILDTYPE'"` // 开平标志 - 0:无 1:建仓 2:平仓
|
|
|
+ Closetype int32 `json:"closetype" xorm:"'CLOSETYPE'"` // 平仓方式 - 0:无 1:平今 2:平昨
|
|
|
+ Hedgeflag int32 `json:"hedgeflag" xorm:"'HEDGEFLAG'"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
|
|
|
+ Marketid int32 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
|
|
|
+ Goodsid int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
|
|
|
+ Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 账户ID
|
|
|
+ Buyorsell int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 买卖 - 0:买 1:卖
|
|
|
+ Pricemode int32 `json:"pricemode" xorm:"'PRICEMODE'"` // 取价方式 - 1:市价 2: 限价
|
|
|
+ Orderprice float64 `json:"orderprice" xorm:"'ORDERPRICE'"` // 委托价格(账户)
|
|
|
+ Openorderqty int64 `json:"openorderqty" xorm:"'OPENORDERQTY'"` // 委托数量
|
|
|
+ Opentradeqty int64 `json:"opentradeqty" xorm:"'OPENTRADEQTY'"` // 成交数量
|
|
|
+ Opencancelqty int64 `json:"opencancelqty" xorm:"'OPENCANCELQTY'"` // 撤单数量
|
|
|
+ Openfailqty int64 `json:"openfailqty" xorm:"'OPENFAILQTY'"` // 失败数量
|
|
|
+ Opensuccessqty int64 `json:"opensuccessqty" xorm:"'OPENSUCCESSQTY'"` // 建仓委托成功数量
|
|
|
+ Closeorderqty int64 `json:"closeorderqty" xorm:"'CLOSEORDERQTY'"` // 委托数量
|
|
|
+ Closetradeqty int64 `json:"closetradeqty" xorm:"'CLOSETRADEQTY'"` // 成交数量
|
|
|
+ Closecancelqty int64 `json:"closecancelqty" xorm:"'CLOSECANCELQTY'"` // 撤单数量
|
|
|
+ Closefailqty int64 `json:"closefailqty" xorm:"'CLOSEFAILQTY'"` // 失败数量
|
|
|
+ Closesuccessqty int64 `json:"closesuccessqty" xorm:"'CLOSESUCCESSQTY'"` // 委托成功数量
|
|
|
+ Openfreezemargin float64 `json:"openfreezemargin" xorm:"'OPENFREEZEMARGIN'"` // 冻结保证金(冻结交易金额)
|
|
|
+ Openunfreezemargin float64 `json:"openunfreezemargin" xorm:"'OPENUNFREEZEMARGIN'"` // 解冻保证金
|
|
|
+ Openfreezecharge float64 `json:"openfreezecharge" xorm:"'OPENFREEZECHARGE'"` // 建仓冻结手续费(账户)
|
|
|
+ Openunfreezecharge float64 `json:"openunfreezecharge" xorm:"'OPENUNFREEZECHARGE'"` // 建仓解冻手续费(账户)
|
|
|
+ Validtype int32 `json:"validtype" xorm:"'VALIDTYPE'"` // 有效类型 - 1当日有效
|
|
|
+ Validtime time.Time `json:"validtime" xorm:"'VALIDTIME'"` // 有效期限
|
|
|
+ Channeloperatetype int32 `json:"channeloperatetype" xorm:"'CHANNELOPERATETYPE'"` // 操作类型 - 1:正常委托 2:斩仓委托 3:强平委托
|
|
|
+ Ordertime time.Time `json:"ordertime" xorm:"'ORDERTIME'"` // 委托时间
|
|
|
+ Channelordersrc int32 `json:"channelordersrc" xorm:"'CHANNELORDERSRC'"` // 委托来源 - 1:客户端 2:风控服务 3:管理端 4:下单接口平台 5:交易服务 6:跟单服务 7:监控终端
|
|
|
+ Channelinnerorderstatus int32 `json:"channelinnerorderstatus" xorm:"'CHANNELINNERORDERSTATUS'"` // 委托状态 - 1:委托请求 2:冻结成功 3:委托失败 4:委托部成部失败 5:委托成功 6:全部撤销 7:部成部撤 8:部成部撤部失败 9:全部成交
|
|
|
+ Operatorid int64 `json:"operatorid" xorm:"'OPERATORID'"` // 登录账号(LoginID)
|
|
|
+ Updatetime time.Time `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
|
|
|
+ Clientordertime time.Time `json:"clientordertime" xorm:"'CLIENTORDERTIME'"` // 客户端委托时间
|
|
|
+ Clientticket string `json:"clientticket" xorm:"'CLIENTTICKET'"` // 客户端流水号
|
|
|
+ UUID string `json:"uuid" xorm:"'UUID'"` // 发起端唯一id
|
|
|
+ Clienttype int32 `json:"clienttype" xorm:"'CLIENTTYPE'"` // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江) 10;监控终端
|
|
|
+ Retcode int32 `json:"retcode" xorm:"'RETCODE'"` // 错误代码
|
|
|
+ Marginalgorithm int32 `json:"marginalgorithm" xorm:"'MARGINALGORITHM'"` // 保证金收取方式 1:比率 2:固定
|
|
|
+ Marginvalue float64 `json:"marginvalue" xorm:"'MARGINVALUE'"` // 即市保证金设置值
|
|
|
+ Openfeealgorithm int32 `json:"openfeealgorithm" xorm:"'OPENFEEALGORITHM'"` // 建仓手续费收取方式 1:比率 2:固定
|
|
|
+ Openchargevalue float64 `json:"openchargevalue" xorm:"'OPENCHARGEVALUE'"` // 建仓手续费设置值
|
|
|
+ Closefeealgorithm int32 `json:"closefeealgorithm" xorm:"'CLOSEFEEALGORITHM'"` // 平仓手续费收取方式 1:比率 2:固定
|
|
|
+ Closechargevalue float64 `json:"closechargevalue" xorm:"'CLOSECHARGEVALUE'"` // 平仓手续费设置值
|
|
|
+ Accountcurrencyid int32 `json:"accountcurrencyid" xorm:"'ACCOUNTCURRENCYID'"` // 账户币种ID
|
|
|
+ Goodscurrencyid int32 `json:"goodscurrencyid" xorm:"'GOODSCURRENCYID'"` // 商品币种ID
|
|
|
+ Margincurrencyid int32 `json:"margincurrencyid" xorm:"'MARGINCURRENCYID'"` // 保证金币种ID 比率时等于账户币种
|
|
|
+ Marginrate float64 `json:"marginrate" xorm:"'MARGINRATE'"` // 保证金汇率-比率时等于1
|
|
|
+ Curexchangerate float64 `json:"curexchangerate" xorm:"'CUREXCHANGERATE'"` // 当前汇率
|
|
|
+ Goodsorderprice float64 `json:"goodsorderprice" xorm:"'GOODSORDERPRICE'"` // 委托价格(商品)
|
|
|
+ Openfreezemargin2 float64 `json:"openfreezemargin2" xorm:"'OPENFREEZEMARGIN2'"` // 建仓冻结保证金(保证金/商品)
|
|
|
+ Openfreezecharge2 float64 `json:"openfreezecharge2" xorm:"'OPENFREEZECHARGE2'"` // 建仓冻结手续费(商品)
|
|
|
+ Openunfreezemargin2 float64 `json:"openunfreezemargin2" xorm:"'OPENUNFREEZEMARGIN2'"` // 建仓解冻保证金(保证金/商品)
|
|
|
+ Openunfreezecharge2 float64 `json:"openunfreezecharge2" xorm:"'OPENUNFREEZECHARGE2'"` // 建仓解冻手续费(商品)
|
|
|
+ Parentaccountid int64 `json:"parentaccountid" xorm:"'PARENTACCOUNTID'"` // 所属母账户
|
|
|
+ Sessionid int64 `json:"sessionid" xorm:"'SESSIONID'"` // 会话ID
|
|
|
+
|
|
|
+ Orderidstr string `xorm:"ORDERIDSTR"`
|
|
|
+ Goodscode string `xorm:"GOODSCODE"`
|
|
|
+ Goodsname string `xorm:"GOODSNAME"`
|
|
|
+ Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
|
|
|
+ }
|
|
|
+
|
|
|
+ hedgeInnerOrderDetails := make([]orderDetail, 0)
|
|
|
+ session := db.GetEngine().Table("HIS_HEDGE_INNERORDERDETAIL T").
|
|
|
+ Select("to_char(T.ORDERID) ORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME").
|
|
|
+ Join("LEFT", "GOODS G", "G.GOODSID = T.GOODSID").
|
|
|
+ Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
|
|
|
+ Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
|
|
|
+ Where("T.ISVALIDDATA = 1 and T.ACCOUNTID = ?", accountID).Desc("T.ORDERTIME")
|
|
|
+ if len(startDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
|
|
|
+ }
|
|
|
+ if len(endDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
|
|
|
+ }
|
|
|
+ if err := session.Find(&hedgeInnerOrderDetails); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ rsp := make([]QueryHedgeOrderDetailRsp, 0)
|
|
|
+ for _, v := range hedgeInnerOrderDetails {
|
|
|
+ // 内部委托单分建平
|
|
|
+ orderQty := v.Openorderqty
|
|
|
+ tradeQty := v.Opentradeqty
|
|
|
+ if v.Channelbuildtype == 2 {
|
|
|
+ orderQty = v.Closeorderqty
|
|
|
+ tradeQty = v.Closetradeqty
|
|
|
+ }
|
|
|
+
|
|
|
+ rsp = append(rsp, QueryHedgeOrderDetailRsp{
|
|
|
+ Orderid: v.Orderidstr,
|
|
|
+ Tradedate: v.Tradedate,
|
|
|
+ Channelbuildtype: v.Channelbuildtype,
|
|
|
+ Closetype: v.Closetype,
|
|
|
+ Marketid: v.Marketid,
|
|
|
+ Goodsid: v.Goodsid,
|
|
|
+ Accountid: v.Accountid,
|
|
|
+ Buyorsell: v.Buyorsell,
|
|
|
+ Pricemode: v.Pricemode,
|
|
|
+ Orderprice: v.Orderprice,
|
|
|
+ Orderqty: orderQty,
|
|
|
+ Tradeqty: tradeQty,
|
|
|
+ Openfreezemargin: v.Openfreezemargin,
|
|
|
+ Channeloperatetype: v.Channeloperatetype,
|
|
|
+ Ordertime: v.Ordertime,
|
|
|
+ Channelinnerorderstatus: v.Channelinnerorderstatus,
|
|
|
+ Curexchangerate: v.Curexchangerate,
|
|
|
+ Goodscode: v.Goodscode,
|
|
|
+ Goodsname: v.Goodsname,
|
|
|
+ Exchangefullname: v.Exchangefullname,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return rsp, nil
|
|
|
+}
|
|
|
+
|
|
|
// GetHedgeOutOrderDetails 获取指定资金账号的通道交易外部委托单信息
|
|
|
func GetHedgeOutOrderDetails(accountID int) ([]QueryHedgeOrderDetailRsp, error) {
|
|
|
type orderDetail struct {
|
|
|
@@ -529,6 +649,116 @@ func GetHedgeOutOrderDetails(accountID int) ([]QueryHedgeOrderDetailRsp, error)
|
|
|
return rsp, nil
|
|
|
}
|
|
|
|
|
|
+// GetHisHedgeOutOrderDetails 获取指定资金账号的通道交易历史外部委托单信息
|
|
|
+func GetHisHedgeOutOrderDetails(accountID int, startDate, endDate string) ([]QueryHedgeOrderDetailRsp, error) {
|
|
|
+ type orderDetail struct {
|
|
|
+ Outorderid int64 `json:"outorderid" xorm:"'OUTORDERID'" binding:"required"` // 外部委托单ID(113+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
|
|
|
+ Hedgeaccountcode string `json:"hedgeaccountcode" xorm:"'HEDGEACCOUNTCODE'" binding:"required"` // 对冲账号
|
|
|
+ Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
|
|
|
+ Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账号[外部母账户]
|
|
|
+ Relatedorderid int64 `json:"relatedorderid" xorm:"'RELATEDORDERID'"` // 关联内部委托单号
|
|
|
+ Marketid int32 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
|
|
|
+ Hedgegoodsid int64 `json:"hedgegoodsid" xorm:"'HEDGEGOODSID'"` // 对冲合约ID
|
|
|
+ Orderpricetype int32 `json:"orderpricetype" xorm:"'ORDERPRICETYPE'"` // 报单价格条件 - 1:市价 2: 限价
|
|
|
+ Buyorsell int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 买卖方向 - 0:买 1:卖
|
|
|
+ Channelbuildtype int32 `json:"channelbuildtype" xorm:"'CHANNELBUILDTYPE'"` // 开平标志- 0:无 1:建仓 2:平仓
|
|
|
+ Closetype int32 `json:"closetype" xorm:"'CLOSETYPE'"` // 平仓方式 - 0:无 1:平今 2:平昨
|
|
|
+ Orderprice float64 `json:"orderprice" xorm:"'ORDERPRICE'"` // 委托价格
|
|
|
+ Orderqty int64 `json:"orderqty" xorm:"'ORDERQTY'"` // 委托数量
|
|
|
+ Tradeqty int64 `json:"tradeqty" xorm:"'TRADEQTY'"` // 成交数量
|
|
|
+ Cancelqty int64 `json:"cancelqty" xorm:"'CANCELQTY'"` // 撤销数量
|
|
|
+ Validtype int32 `json:"validtype" xorm:"'VALIDTYPE'"` // 有效期类型 - 1::当日有效
|
|
|
+ Hedgeflag int32 `json:"hedgeflag" xorm:"'HEDGEFLAG'"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
|
|
|
+ Channeloutorderstatus int32 `json:"channeloutorderstatus" xorm:"'CHANNELOUTORDERSTATUS'"` // 外部单据状态 - 1 - 接收报文 2 - 发送报文成功 3 - 委托成功 4 - 委托失败 5 - 全部成交 6 - 部成部撤 7 - 全部撤单
|
|
|
+ Ordertime time.Time `json:"ordertime" xorm:"'ORDERTIME'"` // 委托时间
|
|
|
+ Updatetime time.Time `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
|
|
|
+ Mhpinnerorderid int64 `json:"mhpinnerorderid" xorm:"'MHPINNERORDERID'"` // 接口平台委托单ID
|
|
|
+ Mhprspcode int64 `json:"mhprspcode" xorm:"'MHPRSPCODE'"` // 渠道返回码
|
|
|
+ Mhprsptext string `json:"mhprsptext" xorm:"'MHPRSPTEXT'"` // 渠道返回信息
|
|
|
+ Optiontype int32 `json:"optiontype" xorm:"'OPTIONTYPE'"` // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
|
|
|
+ Premium float64 `json:"premium" xorm:"'PREMIUM'"` // 权利金
|
|
|
+ Realoutorderid int64 `json:"realoutorderid" xorm:"'REALOUTORDERID'"` // 实际外部平台委托单ID
|
|
|
+ Relatedcreateorderid int64 `json:"relatedcreateorderid" xorm:"'RELATEDCREATEORDERID'"` // 关联外部建仓委托单ID[平仓委托]
|
|
|
+ Channeloperatetype int32 `json:"channeloperatetype" xorm:"'CHANNELOPERATETYPE'"` // 操作类型 - 1:正常委托 2:斩仓委托 3:强平委托
|
|
|
+ Channelordersrc int32 `json:"channelordersrc" xorm:"'CHANNELORDERSRC'"` // 委托来源 - 1:客户端 2:风控服务 3:管理端 4:下单接口平台 5:交易服务 6:跟单服务 7:监控终端
|
|
|
+ Operatorid int64 `json:"operatorid" xorm:"'OPERATORID'"` // 登录账号(LoginID)
|
|
|
+ Clientordertime time.Time `json:"clientordertime" xorm:"'CLIENTORDERTIME'"` // 客户端委托时间
|
|
|
+ Clientticket string `json:"clientticket" xorm:"'CLIENTTICKET'"` // 客户端流水号
|
|
|
+ UUID string `json:"uuid" xorm:"'UUID'"` // 发起端唯一id
|
|
|
+ Clienttype int32 `json:"clienttype" xorm:"'CLIENTTYPE'"` // 客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江) 10;监控终端
|
|
|
+ Sessionid int64 `json:"sessionid" xorm:"'SESSIONID'"` // 会话ID
|
|
|
+
|
|
|
+ Orderidstr string `xorm:"ORDERIDSTR"`
|
|
|
+ Goodscode string `xorm:"GOODSCODE"`
|
|
|
+ Goodsname string `xorm:"GOODSNAME"`
|
|
|
+ Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
|
|
|
+ }
|
|
|
+
|
|
|
+ hedgeOutOrderDetails := make([]orderDetail, 0)
|
|
|
+ session := db.GetEngine().Table("HIS_HEDGE_OUTORDERDETAIL T").
|
|
|
+ Select("to_char(T.OUTORDERID) ORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME").
|
|
|
+ Join("LEFT", "GOODS G", "G.GOODSID = T.HEDGEGOODSID").
|
|
|
+ Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
|
|
|
+ Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
|
|
|
+ Where("T.ISVALIDDATA = 1 and T.ACCOUNTID = ?", accountID).Desc("T.OUTORDERID")
|
|
|
+ if len(startDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
|
|
|
+ }
|
|
|
+ if len(endDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
|
|
|
+ }
|
|
|
+ if err := session.Find(&hedgeOutOrderDetails); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ rsp := make([]QueryHedgeOrderDetailRsp, 0)
|
|
|
+ for _, v := range hedgeOutOrderDetails {
|
|
|
+ // 外部单据状态 -> 委托状态
|
|
|
+ // 外部单据状态 - 1 - 接收报文 2 - 发送报文成功 3 - 委托成功 4 - 委托失败 5 - 全部成交 6 - 部成部撤 7 - 全部撤单
|
|
|
+ // 委托状态 - 1:委托请求 2:冻结成功 3:委托失败 4:委托部成部失败 5:委托成功 6:全部撤销 7:部成部撤 8:部成部撤部失败 9:全部成交
|
|
|
+ status := v.Channeloutorderstatus
|
|
|
+ if v.Channeloutorderstatus == 1 {
|
|
|
+ status = 1
|
|
|
+ } else if v.Channeloutorderstatus == 2 {
|
|
|
+ status = 1
|
|
|
+ } else if v.Channeloutorderstatus == 3 {
|
|
|
+ status = 5
|
|
|
+ } else if v.Channeloutorderstatus == 4 {
|
|
|
+ status = 3
|
|
|
+ } else if v.Channeloutorderstatus == 5 {
|
|
|
+ status = 9
|
|
|
+ } else if v.Channeloutorderstatus == 6 {
|
|
|
+ status = 7
|
|
|
+ } else if v.Channeloutorderstatus == 7 {
|
|
|
+ status = 6
|
|
|
+ }
|
|
|
+
|
|
|
+ rsp = append(rsp, QueryHedgeOrderDetailRsp{
|
|
|
+ Orderid: v.Orderidstr,
|
|
|
+ Tradedate: v.Tradedate,
|
|
|
+ Channelbuildtype: v.Channelbuildtype,
|
|
|
+ Closetype: v.Closetype,
|
|
|
+ Marketid: v.Marketid,
|
|
|
+ Goodsid: int32(v.Hedgegoodsid),
|
|
|
+ Accountid: v.Accountid,
|
|
|
+ Buyorsell: v.Buyorsell,
|
|
|
+ Pricemode: v.Orderpricetype,
|
|
|
+ Orderprice: v.Orderprice,
|
|
|
+ Orderqty: v.Orderqty,
|
|
|
+ Tradeqty: v.Tradeqty,
|
|
|
+ Openfreezemargin: 0,
|
|
|
+ Channeloperatetype: v.Channeloperatetype,
|
|
|
+ Ordertime: v.Ordertime,
|
|
|
+ Channelinnerorderstatus: status,
|
|
|
+ Curexchangerate: 1,
|
|
|
+ Goodscode: v.Goodscode,
|
|
|
+ Goodsname: v.Goodsname,
|
|
|
+ Exchangefullname: v.Exchangefullname,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return rsp, nil
|
|
|
+}
|
|
|
+
|
|
|
// QueryHedgeTradeDetailRsp 获取企业风管成交单返回模型
|
|
|
type QueryHedgeTradeDetailRsp struct {
|
|
|
Tradeid string `json:"tradeid"` // 成交单号(108+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
|
|
|
@@ -658,6 +888,113 @@ func GetHedgeInnerTradeDetails(accountID, goodsID, buyOrSell int) ([]QueryHedgeT
|
|
|
return rsp, nil
|
|
|
}
|
|
|
|
|
|
+// GetHisHedgeInnerTradeDetails 获取通道交易历史内部成交单信息
|
|
|
+func GetHisHedgeInnerTradeDetails(accountID, goodsID, buyOrSell int, startDate, endDate string) ([]QueryHedgeTradeDetailRsp, error) {
|
|
|
+ type tradeDetail struct {
|
|
|
+ Tradeid string `json:"tradeid" xorm:"'TRADEIDSTR'"` // 成交单号(108+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
|
|
|
+ Buyorsell int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 方向 - 0:买 1:卖
|
|
|
+ Orderid string `json:"orderid" xorm:"'ORDERIDSTR'"` // 委托单号
|
|
|
+ Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
|
|
|
+ Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 账号ID
|
|
|
+ Goodsid int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
|
|
|
+ Marketid int32 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
|
|
|
+ Tradetime time.Time `json:"tradetime" xorm:"'TRADETIME'"` // 成交时间
|
|
|
+ Tradeprice float64 `json:"tradeprice" xorm:"'TRADEPRICE'"` // 成交价格
|
|
|
+ Tradeqty int64 `json:"tradeqty" xorm:"'TRADEQTY'"` // 成交数量
|
|
|
+ Tradeamount float64 `json:"tradeamount" xorm:"'TRADEAMOUNT'"` // 成交金额(账户)
|
|
|
+ Closepl float64 `json:"closepl" xorm:"'CLOSEPL'"` // 平仓盈亏(账户)
|
|
|
+ Opencharge float64 `json:"opencharge" xorm:"'OPENCHARGE'"` // 建仓手续费(账户)
|
|
|
+ Closecharge float64 `json:"closecharge" xorm:"'CLOSECHARGE'"` // 平仓手续费(账户)
|
|
|
+ Tradetype int32 `json:"tradetype" xorm:"'TRADETYPE'"` // 成交类别 - 1:正常委托成交 2:风控斩仓成交 3:修正持仓成交 4:管理端斩仓成交
|
|
|
+ Channelbuildtype int32 `json:"channelbuildtype" xorm:"'CHANNELBUILDTYPE'"` // 委托单据类型 0:无 1:建仓 2:平仓
|
|
|
+ Closetype int32 `json:"closetype" xorm:"'CLOSETYPE'"` // 平仓方式 - 0:无 1:平今 2:平昨
|
|
|
+ Hedgeflag int32 `json:"hedgeflag" xorm:"'HEDGEFLAG'"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
|
|
|
+ Openqty int64 `json:"openqty" xorm:"'OPENQTY'"` // 开仓数量(先建后平操作 需要记录)
|
|
|
+ Closeqty int64 `json:"closeqty" xorm:"'CLOSEQTY'"` // 平仓数量(先建后平操作 需要记录)
|
|
|
+ Status int32 `json:"status" xorm:"'STATUS'"` // 处理状态 - 1:待处理 2:已处理 3:处理失败
|
|
|
+ Isreckoned int32 `json:"isreckoned" xorm:"'ISRECKONED'"` // 是否结算 - 0:未结算 1:已结算
|
|
|
+ Openfeealgorithm int32 `json:"openfeealgorithm" xorm:"'OPENFEEALGORITHM'"` // 建仓手续费收取方式 1:比率 2:固定
|
|
|
+ Openchargevalue float64 `json:"openchargevalue" xorm:"'OPENCHARGEVALUE'"` // 建仓手续费设置值
|
|
|
+ Closefeealgorithm int32 `json:"closefeealgorithm" xorm:"'CLOSEFEEALGORITHM'"` // 平仓手续费收取方式 1:比率 2:固定
|
|
|
+ Closechargevalue float64 `json:"closechargevalue" xorm:"'CLOSECHARGEVALUE'"` // 平仓手续费设置值
|
|
|
+ Accountcurrencyid int32 `json:"accountcurrencyid" xorm:"'ACCOUNTCURRENCYID'"` // 账户币种ID
|
|
|
+ Goodscurrencyid int32 `json:"goodscurrencyid" xorm:"'GOODSCURRENCYID'"` // 商品币种ID
|
|
|
+ Curexchangerate float64 `json:"curexchangerate" xorm:"'CUREXCHANGERATE'"` // 当前汇率
|
|
|
+ Opencharge2 float64 `json:"opencharge2" xorm:"'OPENCHARGE2'"` // 建仓手续费(商品)
|
|
|
+ Closecharge2 float64 `json:"closecharge2" xorm:"'CLOSECHARGE2'"` // 平仓手续费(商品)
|
|
|
+ Closepl2 float64 `json:"closepl2" xorm:"'CLOSEPL2'"` // 平仓盈亏(商品)
|
|
|
+ Closepl3 float64 `json:"closepl3" xorm:"'CLOSEPL3'"` // 平仓盈亏(账户)(逐笔)
|
|
|
+ Closepl4 float64 `json:"closepl4" xorm:"'CLOSEPL4'"` // 平仓盈亏(商品)(逐笔)
|
|
|
+ Extenalopenfeealgorithm int32 `json:"extenalopenfeealgorithm" xorm:"'EXTENALOPENFEEALGORITHM'"` // 建仓手续费收取方式(外部配置) 1:比率 2:固定
|
|
|
+ Extenalopenchargevalue float64 `json:"extenalopenchargevalue" xorm:"'EXTENALOPENCHARGEVALUE'"` // 建仓手续费设置值
|
|
|
+ Extenalclosefeealgorithm int32 `json:"extenalclosefeealgorithm" xorm:"'EXTENALCLOSEFEEALGORITHM'"` // 平仓手续费收取方式 1:比率 2:固定
|
|
|
+ Extenalclosechargevalue float64 `json:"extenalclosechargevalue" xorm:"'EXTENALCLOSECHARGEVALUE'"` // 平仓手续费设置值
|
|
|
+ Extenalopencharge float64 `json:"extenalopencharge" xorm:"'EXTENALOPENCHARGE'"` // 建仓手续费(商品)(外部)
|
|
|
+ Extenalclosecharge float64 `json:"extenalclosecharge" xorm:"'EXTENALCLOSECHARGE'"` // 平仓手续费(商品)(外部)
|
|
|
+ Parentaccountid int64 `json:"parentaccountid" xorm:"'PARENTACCOUNTID'"` // 所属母账户
|
|
|
+ Relatedouttradeid int64 `json:"relatedouttradeid" xorm:"'RELATEDOUTTRADEID'"` // 关联外部成交单ID
|
|
|
+
|
|
|
+ Orderidstr string `xorm:"ORDERIDSTR"`
|
|
|
+ Goodscode string `xorm:"GOODSCODE"`
|
|
|
+ Goodsname string `xorm:"GOODSNAME"`
|
|
|
+ Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
|
|
|
+ }
|
|
|
+
|
|
|
+ tradeDetails := make([]tradeDetail, 0)
|
|
|
+ session := db.GetEngine().Table("HIS_HEDGE_INNERTRADEDETAIL T").
|
|
|
+ Select("to_char(T.TRADEID) TRADEIDSTR, to_char(T.ORDERID) ORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME").
|
|
|
+ Join("LEFT", "GOODS G", "G.GOODSID = T.GOODSID").
|
|
|
+ Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
|
|
|
+ Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
|
|
|
+ Where("T.ISVALIDDATA = 1 and T.ACCOUNTID = ?", accountID)
|
|
|
+ if goodsID != 0 {
|
|
|
+ session = session.And("T.GOODSID = ?", goodsID)
|
|
|
+ }
|
|
|
+ if buyOrSell != 0 {
|
|
|
+ session = session.And("T.BUYORSELL = ?", buyOrSell)
|
|
|
+ }
|
|
|
+ if len(startDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
|
|
|
+ }
|
|
|
+ if len(endDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
|
|
|
+ }
|
|
|
+ if err := session.Desc("T.TRADEID").
|
|
|
+ Find(&tradeDetails); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ rsp := make([]QueryHedgeTradeDetailRsp, 0)
|
|
|
+ for _, v := range tradeDetails {
|
|
|
+ rsp = append(rsp, QueryHedgeTradeDetailRsp{
|
|
|
+ Tradeid: v.Tradeid,
|
|
|
+ Buyorsell: v.Buyorsell,
|
|
|
+ Orderid: v.Orderid,
|
|
|
+ Tradedate: v.Tradedate,
|
|
|
+ Accountid: v.Accountid,
|
|
|
+ Goodsid: v.Goodsid,
|
|
|
+ Marketid: v.Marketid,
|
|
|
+ Tradetime: v.Tradetime,
|
|
|
+ Tradeprice: v.Tradeprice,
|
|
|
+ Tradeqty: v.Tradeqty,
|
|
|
+ Tradeamount: v.Tradeamount,
|
|
|
+ Opencharge: v.Opencharge,
|
|
|
+ Closecharge: v.Closecharge,
|
|
|
+ Tradetype: v.Tradetype,
|
|
|
+ Channelbuildtype: v.Channelbuildtype,
|
|
|
+ Closetype: v.Closetype,
|
|
|
+ Curexchangerate: v.Curexchangerate,
|
|
|
+ Opencharge2: v.Opencharge2,
|
|
|
+ Closecharge2: v.Closecharge2,
|
|
|
+ Goodscode: v.Goodscode,
|
|
|
+ Goodsname: v.Goodsname,
|
|
|
+ Exchangefullname: v.Exchangefullname,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return rsp, nil
|
|
|
+}
|
|
|
+
|
|
|
// GetHedgeOutTradeDetails 获取通道交易外部成交单信息
|
|
|
func GetHedgeOutTradeDetails(accountID, goodsID, buyOrSell int) ([]QueryHedgeTradeDetailRsp, error) {
|
|
|
type tradeDetail struct {
|
|
|
@@ -739,3 +1076,91 @@ func GetHedgeOutTradeDetails(accountID, goodsID, buyOrSell int) ([]QueryHedgeTra
|
|
|
|
|
|
return rsp, nil
|
|
|
}
|
|
|
+
|
|
|
+// GetHisHedgeOutTradeDetails 获取通道交易外部历史成交单信息
|
|
|
+func GetHisHedgeOutTradeDetails(accountID, goodsID, buyOrSell int, startDate, endDate string) ([]QueryHedgeTradeDetailRsp, error) {
|
|
|
+ type tradeDetail struct {
|
|
|
+ Outtradeid string `json:"outtradeid" xorm:"'OUTTRADEIDSTR'" binding:"required"` // 外部成交单ID(114+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
|
|
|
+ Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
|
|
|
+ Relatedoutorderid string `json:"relatedoutorderid" xorm:"'RELATEDOUTORDERIDSTR'"` // 关联外部委托单ID
|
|
|
+ Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账号[外部母账户]
|
|
|
+ Hedgeaccountcode string `json:"hedgeaccountcode" xorm:"'HEDGEACCOUNTCODE'"` // 对冲账号
|
|
|
+ Marketid int32 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
|
|
|
+ Hedgegoodsid int64 `json:"hedgegoodsid" xorm:"'HEDGEGOODSID'"` // 对冲合约ID
|
|
|
+ Buyorsell int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 买卖方向 - 0:买 1:卖
|
|
|
+ Channelbuildtype int32 `json:"channelbuildtype" xorm:"'CHANNELBUILDTYPE'"` // 开平标志- 0:无 1:建仓 2:平仓
|
|
|
+ Closetype int32 `json:"closetype" xorm:"'CLOSETYPE'"` // 平仓方式 - 0:无 1:平今 2:平昨
|
|
|
+ Hedgeflag int32 `json:"hedgeflag" xorm:"'HEDGEFLAG'"` // 投机套保标志 - 0:无 1:投机 2:套保 3:套利
|
|
|
+ Tradeprice float64 `json:"tradeprice" xorm:"'TRADEPRICE'"` // 成交价格
|
|
|
+ Tradeqty int64 `json:"tradeqty" xorm:"'TRADEQTY'"` // 成交数量
|
|
|
+ Tradetime time.Time `json:"tradetime" xorm:"'TRADETIME'"` // 成交时间
|
|
|
+ Relatedmhpinnerorderid int64 `json:"relatedmhpinnerorderid" xorm:"'RELATEDMHPINNERORDERID'"` // 接口平台委托单ID
|
|
|
+ Mhpinnertradeid int64 `json:"mhpinnertradeid" xorm:"'MHPINNERTRADEID'"` // 接口平台成交单ID
|
|
|
+ Hasinnerorder int32 `json:"hasinnerorder" xorm:"'HASINNERORDER'"` // 是否有内部单关联 - 0:无 1:有
|
|
|
+ Isvalid int32 `json:"isvalid" xorm:"'ISVALID'"` // 是否有效 - 0:无效 1:有效
|
|
|
+ Optiontype int32 `json:"optiontype" xorm:"'OPTIONTYPE'"` // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
|
|
|
+ Premium float64 `json:"premium" xorm:"'PREMIUM'"` // 权利金
|
|
|
+ Tradetype int32 `json:"tradetype" xorm:"'TRADETYPE'"` // 成交类别 - 1:正常委托成交3:修正持仓成交
|
|
|
+
|
|
|
+ Orderidstr string `xorm:"ORDERIDSTR"`
|
|
|
+ Goodscode string `xorm:"GOODSCODE"`
|
|
|
+ Goodsname string `xorm:"GOODSNAME"`
|
|
|
+ Exchangefullname string `xorm:"'EXCHANGEFULLNAME'"`
|
|
|
+
|
|
|
+ Tradeamount float64 `xorm:"TRADEAMOUNT"` // 成交金额
|
|
|
+ }
|
|
|
+
|
|
|
+ tradeDetails := make([]tradeDetail, 0)
|
|
|
+ session := db.GetEngine().Table("HIS_HEDGE_OUTTRADEDETAIL T").
|
|
|
+ Select("to_char(T.OUTTRADEID) OUTTRADEIDSTR, to_char(T.RELATEDOUTORDERID) RELATEDOUTORDERIDSTR, G.GOODSCODE, G.GOODSNAME, T.*, EX.EXCHANGEFULLNAME, (T.TRADEPRICE * T.TRADEQTY * G.AGREEUNIT) TRADEAMOUNT").
|
|
|
+ Join("LEFT", "GOODS G", "G.GOODSID = T.HEDGEGOODSID").
|
|
|
+ Join("LEFT", "GOODSGROUP GG", "GG.GOODSGROUPID = G.GOODSGROUPID").
|
|
|
+ Join("LEFT", "EXTERNALEXCHANGE EX", "GG.EXEXCHANGEID = EX.AUTOID").
|
|
|
+ Where("T.ACCOUNTID = ?", accountID)
|
|
|
+ if goodsID != 0 {
|
|
|
+ session = session.And("T.HEDGEGOODSID = ?", goodsID)
|
|
|
+ }
|
|
|
+ if buyOrSell != 0 {
|
|
|
+ session = session.And("T.BUYORSELL = ?", buyOrSell)
|
|
|
+ }
|
|
|
+ if len(startDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') >= to_date('%s','yyyy-MM-dd')", startDate))
|
|
|
+ }
|
|
|
+ if len(endDate) > 0 {
|
|
|
+ session = session.And(fmt.Sprintf("to_date(T.HISTRADEDATE,'yyyyMMdd') <= to_date('%s','yyyy-MM-dd')", endDate))
|
|
|
+ }
|
|
|
+ if err := session.Desc("T.OUTTRADEID").
|
|
|
+ Find(&tradeDetails); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ rsp := make([]QueryHedgeTradeDetailRsp, 0)
|
|
|
+ for _, v := range tradeDetails {
|
|
|
+ rsp = append(rsp, QueryHedgeTradeDetailRsp{
|
|
|
+ Tradeid: v.Outtradeid,
|
|
|
+ Buyorsell: v.Buyorsell,
|
|
|
+ Orderid: v.Relatedoutorderid,
|
|
|
+ Tradedate: v.Tradedate,
|
|
|
+ Accountid: v.Accountid,
|
|
|
+ Goodsid: int32(v.Hedgegoodsid),
|
|
|
+ Marketid: v.Marketid,
|
|
|
+ Tradetime: v.Tradetime,
|
|
|
+ Tradeprice: v.Tradeprice,
|
|
|
+ Tradeqty: v.Tradeqty,
|
|
|
+ Tradeamount: v.Tradeamount,
|
|
|
+ Opencharge: 0,
|
|
|
+ Closecharge: 0,
|
|
|
+ Tradetype: v.Tradetype,
|
|
|
+ Channelbuildtype: v.Channelbuildtype,
|
|
|
+ Closetype: v.Closetype,
|
|
|
+ Curexchangerate: 1,
|
|
|
+ Opencharge2: 0,
|
|
|
+ Closecharge2: 0,
|
|
|
+ Goodscode: v.Goodscode,
|
|
|
+ Goodsname: v.Goodsname,
|
|
|
+ Exchangefullname: v.Exchangefullname,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return rsp, nil
|
|
|
+}
|