|
|
@@ -8,10 +8,13 @@ package models
|
|
|
|
|
|
import (
|
|
|
"encoding/hex"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"mtp2_if/db"
|
|
|
"mtp2_if/logger"
|
|
|
"mtp2_if/utils"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
// Hedgeoutmainconfig 外部母账号对冲配置表
|
|
|
@@ -55,13 +58,8 @@ func (r *Hedgeoutmainconfig) GetOutAccountStatus(loginID int) ([]Hedgeoutmaincon
|
|
|
}
|
|
|
ids := make([]int, 0)
|
|
|
for _, v := range taAccounts {
|
|
|
- if v.Ismain == 1 {
|
|
|
- // 母账户
|
|
|
- ids = append(ids, int(v.Accountid))
|
|
|
- } else {
|
|
|
- // 子账户
|
|
|
- ids = append(ids, int(v.Parentaccountid))
|
|
|
- }
|
|
|
+ // 母账户的Parentaccountid就是自己
|
|
|
+ ids = append(ids, int(v.Parentaccountid))
|
|
|
}
|
|
|
if err := db.GetEngine().Table("HEDGE_OUTMAINCONFIG T").
|
|
|
Select("T.*, F.FCNAME").
|
|
|
@@ -73,6 +71,84 @@ func (r *Hedgeoutmainconfig) GetOutAccountStatus(loginID int) ([]Hedgeoutmaincon
|
|
|
return datas, nil
|
|
|
}
|
|
|
|
|
|
+// Hedgemarketopenlog 通道交易市场待开市日志表 - 市场的所有母账户与下单接口平台同步数据成功,市场才为待开市成功;
|
|
|
+// 清空上一交易日数据
|
|
|
+type Hedgemarketopenlog struct {
|
|
|
+ Tradedate string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
|
|
|
+ Accountid int64 `json:"accountid" xorm:"ACCOUNTID" binding:"required"` // 资金账号[外部母账户]
|
|
|
+ Marketid int64 `json:"marketid" xorm:"MARKETID"` // 市场ID
|
|
|
+ Status int32 `json:"status" xorm:"STATUS"` // 状态 - 1:待开市 2:开市 4:手工休市 5:闭市 10:日终处理开始 11:日终处理成功 12:日终处理失败
|
|
|
+ Updatetime time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
|
|
|
+ Handlestatus int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态 - 1:登陆Mhp成功 2:登陆Mhp失败 3:登出Mhp
|
|
|
+
|
|
|
+ Fcname string `json:"fcname" xorm:"-"` // 期货公司名称
|
|
|
+}
|
|
|
+
|
|
|
+// TableName is HEDGE_MARKETOPENLOG
|
|
|
+func (Hedgemarketopenlog) TableName() string {
|
|
|
+ return "HEDGE_MARKETOPENLOG"
|
|
|
+}
|
|
|
+
|
|
|
+// GetOutAccountStatus 获取目标登录账号当前对冲账号在线状态
|
|
|
+func (r *Hedgemarketopenlog) GetOutAccountStatus(loginID int) ([]Hedgemarketopenlog, error) {
|
|
|
+ datas := make([]Hedgemarketopenlog, 0)
|
|
|
+
|
|
|
+ // 获取登录账号相关的所有资金账户
|
|
|
+ taAccounts, err := GetTaAccountsByLoginID(loginID, 0)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if len(taAccounts) == 0 {
|
|
|
+ return nil, errors.New("无对应资金账户")
|
|
|
+ }
|
|
|
+ ids := make([]int, 0)
|
|
|
+ ids_s := ""
|
|
|
+ for _, v := range taAccounts {
|
|
|
+ // 母账户的Parentaccountid就是自己
|
|
|
+ ids = append(ids, int(v.Parentaccountid))
|
|
|
+ ids_s += "," + strconv.Itoa(int(v.Parentaccountid))
|
|
|
+ }
|
|
|
+ ids_s = ids_s[1:]
|
|
|
+
|
|
|
+ // 获取通道交易市场(目前只获取tradeMode = 15的第一个市场)
|
|
|
+ marketRuns, err := GetMarketRunsByTradeMode(15)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if len(marketRuns) == 0 {
|
|
|
+ return nil, errors.New("无对应市场运行状态")
|
|
|
+ }
|
|
|
+ marketID := marketRuns[0].Marketid
|
|
|
+ tradeDate := marketRuns[0].Tradedate
|
|
|
+
|
|
|
+ if err := db.GetEngine().Table("TAACCOUNT T").Select("T.ACCOUNTID, H.TRADEDATE, H.MARKETID, H.STATUS, H.UPDATETIME, H.HANDLESTATUS").
|
|
|
+ Join("LEFT", "HEDGE_MARKETOPENLOG H", fmt.Sprintf(`H.ACCOUNTID = T.ACCOUNTID
|
|
|
+ and H.ACCOUNTID in (%s)
|
|
|
+ and H.MARKETID = %d
|
|
|
+ and H.TRADEDATE = '%s'`, ids_s, marketID, tradeDate)).
|
|
|
+ In("T.ACCOUNTID", ids).
|
|
|
+ Find(&datas); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for i := range datas {
|
|
|
+ hedgemarketopenlog := &datas[i]
|
|
|
+
|
|
|
+ // 获取期货公司名称
|
|
|
+ fcnames := make([]string, 0)
|
|
|
+ if err := db.GetEngine().Table("ERMCP_FUTURESCOMPANY F").Select("F.FCNAME").
|
|
|
+ Join("INNER", "HEDGE_OUTMAINCONFIG H", "H.FCID = F.FCID").
|
|
|
+ Where("H.ACCOUNTID = ?", hedgemarketopenlog.Accountid).
|
|
|
+ And("H.MARKETID = ?", marketID).Find(&fcnames); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if len(fcnames) > 0 {
|
|
|
+ hedgemarketopenlog.Fcname = fcnames[0]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return datas, nil
|
|
|
+}
|
|
|
+
|
|
|
// ErmcpUserModel 客户资料结构
|
|
|
type ErmcpUserModel struct {
|
|
|
USERID int `json:"userid" xorm:"'USERID'"` // 用户ID
|